1. 程式人生 > >tcp_tw_recycle導致NAT網路TCP連線失敗

tcp_tw_recycle導致NAT網路TCP連線失敗

問題描述:

同時使用4個手機一起登陸游戲,會出現有手機登陸不上的問題(4個手機用wifi連在同一個區域網內)

使用同一內網中多個pc同時登陸游戲,都可以正常登陸

我們遊戲登陸流程大概是 客戶端先登陸Login Server,獲取到Game Server的IP和埠,然後伺服器主動斷開連線,客戶端再去連線Game Server

實驗發現,手機上登陸不上的客戶端,反覆登陸,還是登陸不上,這時候使用命令發現有socket處於TIME_WAIT狀態,等到TIME_WAIT狀態結束,再登陸,則可以正常登陸

由於TCP執行主動關閉的一方才會經歷TIME_WAIT狀態,所以很容易想到,由客戶端執行主動關閉,問題果然解決了。

但還是有不解的地方,於是在網上找到了如下參考連線,大概原因是說,由於伺服器設定了 tcp_tw_recycle導致的問題,檢視伺服器 /etc/sysctl.conf 檔案,果然設定了此引數,於是把sysctl.conf檔案清空,再使用手機登陸,但還是有手機登陸不上,然後把tcp_tw_recycle改為0,並執行sysctl -p命令,就正常了,4個手機都能正常登陸。

參考連線:

http://huoding.com/2012/01/19/142

http://chenzhenianqing.cn/articles/1150.html

通過以上文章分析,可能出現問題的原因如下:

一個客戶端連上Login Server,獲取到Game Server的資訊,然後Login Server主動斷開連線,此時Login Server 的 Socket處於TIME_WAIT狀態,由於設定了 tcp_tw_recycle

引數,導致TIME_WAIT狀態的socket被回收,而連線的埠資訊被清除,但IP和時間戳仍被儲存,倒是後來上來的分節如果時間戳小於此ip上之前的時間戳,則此分節會被丟棄。此處分析比較粗略,具體分析可參考上面的連結。

相關推薦

tcp_tw_recycle導致NAT網路TCP連線失敗

問題描述: 同時使用4個手機一起登陸游戲,會出現有手機登陸不上的問題(4個手機用wifi連在同一個區域網內) 使用同一內網中多個pc同時登陸游戲,都可以正常登陸 我們遊戲登陸流程大概是 客戶端先登陸Login Server,獲取到Game Server的IP和埠,

Linux網路 - Tcp連線機制

Linux網路 - tcp三次握手-四次揮手 ### 一、術語解釋 ACK: 一種傳輸類的確認控制字元。接收方成功地接收到資料,那麼會回覆對方一個ACK資料,TCP協議規定,只有ACK=1時有效,也規定連線建立後所有傳送的報文的ACK必須為1。 SYN:  在連線建立時用來同步

Win10自動更新,導致的Sql Server連線失敗

Sql Server使用 :常見的【Sql Server連線失敗】問題 -----------------------------------------------------------------------------------------------------

php連線redis導致系統對外tcp連線埠太多問題

這段時間在做一個專案中,大量運用到了redis,用了很多後臺程序跑任務。 後臺指令碼是個死迴圈,由於連線redis的類有問題,導致每次進行操作都會進行一次connect,產生一個新連線。一段時間後連線redis的tcp埠過多,超出了系統的預設限制。使用netstat命令檢視

Tomcat啟用SSL導致Firefox出現“安全連線失敗”錯誤的解決方法

今天升級了Firefox,發現之前一個可以訪問的網站被攔截,提示“連線10.0.0.5時發生錯誤。在伺服器金鑰交換握手資訊中SSL收到了一個弱臨時Diffie-Hellman金鑰。(錯誤碼:ssl_error_weak_server_ephemeral_dh_key),如下

NAT網路TCP連線建立時可能SYN包被伺服器忽略-tcp_tw_recycle

原帖:http://chenzhenianqing.cn/articles/1150.html 相關資料: http://noops.me/?p=269 http://linuxfun.me/?p=1564 http://www.365dw.cn/396.html

NAT網路部分客戶端無法連線Server的解決方法

客戶端通過NAT連線上網,有的客戶端可以訪問server端,有的不可以,通過訪問固定請求的URL抓包排查和解決問題。 解決方法: # sysctl -a |egrep "timest|recycle" net.ipv4.tcp_timestamps = 1 net.ipv4.tcp_

com.microsoft.sqlserver.jdbc.SQLServerException: 到主機 的 TCP/IP 連線失敗。 java.net.NoRouteToHostException

為什麼控制檯放在那裡一段時間後會出現 com.microsoft.sqlserver.jdbc.SQLServerException: 到主機 的 TCP/IP 連線失敗。 java.net.NoRouteToHostException: No route to host: connect

使用TCP在同一臺電腦上可以建立連線,在兩臺電腦上卻連線失敗的原因分析

   最近在用unity做聯機遊戲,在網路方面費了不少勁,總是在程式碼沒問題的時候出一些莫名奇妙的BUG,不過後來都決定了。如果感覺程式碼沒問題,八成就是防火牆的問題。 用unity釋出後的遊戲,如果涉及網路,在第一次執行時會出現這個介面——windows 安全警報。

Windows網路程式設計(三):建立TCP連線和收發訊息

先看服務端: // ConsoleApplication3.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #define _WINSOCK_DEPRECATED_NO_WARNINGS //這個宣告要在stdafx.h的後面,但要

360或者金山毒霸可能會導致HP網路印表機驅動安裝失敗“資料無效”的解決辦法

360或者金山毒霸可能會導致HP網路印表機驅動安裝失敗“資料無效”的解決辦法     同事辦公室的印表機是網線介面的那種網路印表機,不是直接連到電腦的那種,他電腦安裝了360和金山毒霸,WIN10下安裝網路印表機死活安裝不上,提示“資料無效”。百度了下找到了解決辦法:https

以太坊p2p網路(五):P2P模組TCP連線網路通訊機制原始碼分析

上節中通過設定靜態節點BootstrapNodes節點來發現更多全網的其他節點,這部分只是發現節點並找出其中可以ping通的節點,但是還沒有進行使用,還沒建立TCP連線進行資料傳輸,協議處理等。 這裡主要分析P2P系統的TCP連線池的建立,以及是怎麼跟其他節點通

ERROR:通過埠 1433 連線到主機 localhost 的 TCP/IP 連線失敗。錯誤:“Connection refused: connect。請驗證連線屬性,並檢查 SQL Server 的例項正在主機上執行,且在此埠接受 TCP/IP 連

ERROR:通過埠1433連線到主機localhost的TCP/IP連線失敗。錯誤:“Connection refused: connect。請驗證連線屬性,並檢查SQL Server的例項正在主機上執行,且在此埠接受TCP/IP連線,還要確保防火牆沒有阻止到此埠的TCP

Android Https網路連線失敗,圖片載入不出

問題手機 三星 安卓版本4.3 有些圖片是https的URL 解決辦法有有兩種: 1,將https替換為http即可 2,將手機系統時間和網路時間同步就好了 如何同步: 手機我們進入我們手機裡面的設定,之後找到時間和日期進入後,先把自動日期和時間上面的勾給去掉

Centos7 NAT網路連線方式以及NetworkManger進行網路連線管理

自結:NetworkManager管理指定配置檔案配置的網路介面,根據介面配置定義網路環境。/etc/sysconfig/network-scripts/ifcfg-ens88 中定義nm_controlled=yes那麼此配置檔案就被networkmanager管理了。 問題產生背景

Virtual Box 設定虛擬機器網路連線方式Host-Only和NAT的混合連線方式

零、目的      NAT方式保證虛擬機器能聯網,Host-Only保證虛擬機器和宿主機能互訪。 一、NAT方式設定      設定完之後,虛擬機器之間可以互相ping通,並且虛擬機器都有了靜態的IP地址。 

SQLServer單使用者模式導致伺服器連線失敗

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">

高效能網路程式設計(一):單臺伺服器併發TCP連線數到底可以有多少

前言 曾幾何時我們還在尋求網路程式設計中C10K問題(有關C10K問題請見文章《The C10K problem(英文線上閱讀、英文PDF版下載、中文譯文)》)的解決方案,但是現在從硬體和作業系統支援來看單臺伺服器支援上萬併發連線已經沒有多少挑戰性了。 我們先假設單臺伺服器最多隻能支援萬級併發連線,其實

sqlserver的TCP/IP 連線失敗解決辦法

1.首先考慮載入驅動的程式碼是否寫錯(以下是sql server2008 R2和eclipse   java開發資料庫連線的方法) //1.載入驅動 Class.forName("com.microsoft.sqlserver.jdbc.SQLServe

使用SecureCRT或Xshell連線虛擬機器超時(NAT網路模式下,主機ping不通虛擬機器)

首先說明一下的我遇到問題: 剛才SecureCRT連線虛擬機器中的centos用著沒問題,結果突然就連線超時,不能用!! 再連,還是連線超時,我虛擬機器配的是NAT模式下的靜態IP,