jasmine214--love

          只有當(dāng)你的內(nèi)心總是充滿快樂、美好的愿望和寧靜時(shí),你才能擁有強(qiáng)壯的體魄和明朗、快樂或者寧靜的面容。
          posts - 731, comments - 60, trackbacks - 0, articles - 0

          TCP的連接和終止

          TCP是一個(gè)面向連接的協(xié)議。在傳輸數(shù)據(jù)前必須要建立連接,在停止傳輸數(shù)據(jù)后要終止連接釋放資源。

          一.TCP連接建立

          TCP連接是在IP網(wǎng)絡(luò)中兩個(gè)進(jìn)程間(應(yīng)用層協(xié)議)的雙向、全雙工的邏輯回路。由節(jié)點(diǎn)的IP地址和端口將連接雙方對應(yīng)起來。
               1.TCP連接特點(diǎn):

          • 通過一個(gè)握手進(jìn)程建立起來;
          • 通過一個(gè)周期性保持進(jìn)程來保持,保證兩個(gè)TCP節(jié)點(diǎn)間處于激活狀態(tài);
          • 通過一個(gè)握手進(jìn)程來終止,釋放資源。
          • TCP連接也被連接中的任意一端重置。

          1.TCP連接的建立

          為了建立連接TCP連接雙方必須從對方了解下面的信息:

          • 1.對方數(shù)據(jù)發(fā)送的開始序列號(hào);
          • 2.對方在出站管道上發(fā)送數(shù)據(jù)的緩沖區(qū)大小;
          • 3.能被接收的最大段MSS;
          • 4.被支持的TCP選項(xiàng);

          通 過3個(gè)TCP段的交換來了解這些信息,就是常說的TCP 握手的3個(gè)包。一般在客戶端訪問TCP服務(wù)器的時(shí)候,在客戶端初始化一個(gè)TCP連接,服務(wù)器端打開一個(gè)特殊端口等待傳入的請求。客戶端主動(dòng)發(fā)起第一個(gè) SYN置位的包開始協(xié)商TCP連接。服務(wù)器接收后向客戶端回ACK,最后客戶端在向服務(wù)器回復(fù)ACK后連接建立。
          下面我們用TCP連接的兩個(gè)對等端A和B來詳細(xì)介紹握手過程,其中發(fā)起方是A。

          image
                             TCP 連接建立進(jìn)程的3個(gè)TCP段交換

          • 段一:同步(SYN)段
            TCP連接的發(fā)起方A向B發(fā)送第一個(gè)TCP同步段(SYN).在TCP頭部的選項(xiàng)中會(huì)包含一些選項(xiàng)與對端協(xié)商。
            TCP 頭部包含如下字段:
            目的端口  TCP連接對端B被動(dòng)打開的TCP端口數(shù)
            源端口  TCP連接發(fā)起方A主動(dòng)打開的端口,大多數(shù)是一個(gè)隨機(jī)一個(gè)端口。
            序列號(hào)  SYN的序列號(hào)ISN1可以看作是一個(gè)32位的計(jì)數(shù)器,由發(fā)起方A產(chǎn)生,具有一定的隨機(jī)性。Windows 2003和XP根據(jù)派生啟動(dòng)(startup-derived)、2048位的隨機(jī)密鑰和一個(gè)基于RC4的隨機(jī)數(shù)來計(jì)算ISN,從而減少下一TCP連接的 ISN被預(yù)測的可能性。
            確認(rèn)號(hào)  設(shè)置為0.SYN握手第一個(gè)包的ACK字段不重要,此時(shí)剛發(fā)起連接沒有數(shù)據(jù)報(bào)需要確認(rèn)。但后續(xù)的ACK是重要的。
            SYN標(biāo)志  置1.
            窗口  設(shè)置為默認(rèn)值,指示本地TCP接收緩沖區(qū)大小的初始值。
            MSS TCP選項(xiàng)中的MSS   指示發(fā)起方A接收的最大的TCP段。
            選擇性確認(rèn)(SACK) –TCP選項(xiàng)   如果包含這個(gè)字段,可以指示發(fā)起方A 的TCP能接收和解釋此選項(xiàng)。
            窗口縮放選項(xiàng)   如果包含,指示出發(fā)起方A的TCP能接收和支持此選項(xiàng)。協(xié)商好窗口因子后此連接就固定使用直到斷開連接 
            image  
                                    一個(gè)FTP會(huì)話的SYN段
          • 段二:SYN-ACK段
            在B收到SYN包后,B將發(fā)SYN-ACK,TCP選項(xiàng)僅包含發(fā)起方A發(fā)送的SYN包中的的選項(xiàng)。
            目的端口   設(shè)置為A的源端口
            源端口       設(shè)置為B端口
            序列號(hào)       B產(chǎn)生自己的序列號(hào)ISN2。和A發(fā)送的SYN中的ISN沒有關(guān)系,僅產(chǎn)生的方法一樣。
            確認(rèn)號(hào)      期望收到的對端的下一個(gè)字節(jié)ISN1+1.
            SYN標(biāo)志  置1.
            ACK標(biāo)志  置1,必須有此標(biāo)志,除了SYN中置0外,SYN之后的所有報(bào)文(包括SYN-ACK和實(shí)際數(shù)據(jù)包都會(huì)帶ACK的標(biāo)志)。
            窗口  設(shè)置B可以接收的最大窗口值,一般根據(jù)應(yīng)用程序或者操作系統(tǒng)默認(rèn)指定。
            MSS TCP選項(xiàng)  設(shè)為B能接收的最大長度的TCP段;
            SACK-許可       如果A發(fā)送的SYN包含此選項(xiàng)時(shí)才使用此選項(xiàng),表示B的TCP能接收和解釋SACK選項(xiàng)。
            窗口縮放選項(xiàng)   如果SYN包含,此時(shí)才會(huì)包含。
            image
                                         一個(gè)FTP會(huì)話的SYN-ACK段
          • 段3:ACK段
            在TCP連接的發(fā)起方A收到SYN-ACK后,A再向B發(fā)送ACK。ACK中確認(rèn)被發(fā)起方A使用的最終TCP參數(shù),同時(shí)向B確認(rèn)它該使用同樣的參數(shù)。自此TCP連接建立完成。
            image
                          一個(gè)FTP會(huì)話的SYN-ACK段

          2.同時(shí)打開

          兩個(gè)應(yīng)用程序同時(shí)執(zhí)行主動(dòng)建立TCP的連接的可能性是存在的,此時(shí)發(fā)送到SYN建立需要交換4個(gè)包,如圖所示:

          image 
                                      同時(shí)打開報(bào)文交換

          需要注意的是,即使同時(shí)打開仍然只建立一條連接。(但其他的協(xié)議不一定)

          3.TCP 連接的結(jié)果

          • 1.每一個(gè)TCP對等端知道連接上對方將被發(fā)送的第一個(gè)字節(jié)的序列號(hào)(發(fā)給對方的確認(rèn)號(hào),A發(fā)給B的確認(rèn)號(hào)就是B將發(fā)送的序列號(hào),同樣B也是。)
          • 2.每一個(gè)TCP對等端知道連接上能發(fā)送的MSS。選取握手階段SYN和SYN+ACK包中MSS選項(xiàng)中較小的值。以此值開始進(jìn)行PMTU的發(fā)現(xiàn)機(jī)制。
          • 3.知道連接對端接收緩沖區(qū)大小,即窗口大小。
          • 4.每個(gè)對等端知道對方能否使用SACK,窗口縮放等選項(xiàng)。

          4.Windows控制TCP建立連接進(jìn)程的注冊表:

          TcpMaxConnectRetransmissions

          Location:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

          Data Type:REG_DWORD

          Valid range:0~255

          Default value:2

          Present by default:No

          設(shè)定當(dāng)試圖建立一個(gè)TCP連接時(shí),會(huì)重傳多少次SYN。每次間隔時(shí)間加倍。初始的RTO為3秒,并且默認(rèn)值為2,這樣第一次SYN等待3秒后重傳第一次,在等待6秒后重傳第二次,在等待12秒沒有SYN+ACK就超時(shí)了。

          image 

          TcpNumConnections

          Location:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

          Data Type:REG_DWORD

          Valid range:0~0xFFFFFF

          Default value:0xFFFFFF

          Present by default:No

          設(shè)定能打開的TCP最大數(shù)。默認(rèn)能打開16777214(0xFFFFFF)個(gè)連接。

          5.TCP半開連接

          TCP 半開連接是未完成的連接建立的進(jìn)程的一個(gè)TCP連接,收到一個(gè)SYN包,并且一個(gè)SYN-ACK已經(jīng)發(fā)送,但是最后的ACK沒有收到。前面知道XP默認(rèn)設(shè) 置情況下在發(fā)送2個(gè)重傳SYN-ACK后等待12秒后放棄連接,并釋放內(nèi)存和連接的內(nèi)部表項(xiàng),從收到SYN到釋放總共會(huì)花費(fèi)21秒。
          image
                            SYN-ACK重傳輸?shù)囊粋€(gè)半開連接

          • SYN攻擊

          SYN攻擊就是利用這種方法,使用偽裝的IP地址和TCP端口,在短時(shí)間內(nèi)制造大量的半開連接來耗盡資源,造成拒絕服務(wù)攻擊。大量的半開連接能做如下事情:

          1.使用所有可用的內(nèi)存,

          2.使用在TCP傳輸控制模塊(TCB)中所有可能的項(xiàng),這是一個(gè)用來跟蹤TCP連接的內(nèi)部表,一旦半開連接使用完所有的項(xiàng),就用一個(gè)TCP連接復(fù)位來響應(yīng)下一個(gè)連接企圖。

          3.使用所有可能的半開連接,此后用一個(gè)TCP連接復(fù)位響應(yīng)下一個(gè)連接企圖。

          可以使用netstat -n -p tcp 查看TCP連接狀態(tài),包括半開連接。如果state出現(xiàn)大量的SYN-RECEIVED就該受到SYN攻擊了。

          Windows xp和2003 在檢測和防護(hù)SYN攻擊方面的注冊表:

          TcpMaxConnectResponseRetransmissions

          Location:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

          Data Type:REG_DWORD

          Valid range:0~255

          Default value:2

          Present by default:No

          設(shè)定針對半開連接的一個(gè)AYN-ACK的重傳數(shù)目,對于大于1的值使用SYN攻擊防護(hù)機(jī)制。

          SynAttackProtect

          Location:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

          Data Type:REG_DWORD

          Valid range:0~1

          Default value:0

          Present by default:No

          設(shè)置為0禁用SYN攻擊防護(hù),1啟用SYN攻擊防護(hù)。被啟用時(shí),檢測到SYN攻擊,則半開連接的超時(shí)會(huì)更快些。

          TcpMaxHalfOpen

          Location:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

          Data Type:REG_DWORD

          Valid range:100~65535

          Default value:100 for windows xp 和Windows 2003 web版及標(biāo)準(zhǔn)版,500 for Windows 2003 企業(yè)版和數(shù)據(jù)中心版

          Present by default:No

          在SYN攻擊防護(hù)起作用前,此鍵值設(shè)定了在SYN-RECEIVED狀態(tài)中的TCP鏈接最大數(shù)。

          TcpMaxHalfOpenRetried

          Location:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

          Data Type:REG_DWORD

          Valid range:80~65535

          Default value:80 for windows xp 和Windows 2003 web版及標(biāo)準(zhǔn)版,400 for Windows 2003 企業(yè)版和數(shù)據(jù)中心版

          Present by default:No

          在SYN-RECEIVED狀態(tài)中設(shè)定TCP連接的最大數(shù)并且在SYN攻擊防護(hù)起作用前至少發(fā)送過一個(gè)重傳。

          6.TCP連接的維持

          在 建立TCP連接后,必須有一些機(jī)制維持TCP連接。如果TCP建立連接后不傳輸任何數(shù)據(jù)也沒有應(yīng)用級別的保活機(jī)制時(shí),那么TCP連接一直存在,數(shù)天,數(shù)月 會(huì)一直存在。中間的路由器可能重啟,崩潰,TCP連接的雙方無從知道,許多時(shí)候一個(gè)服務(wù)器希望知道客戶主機(jī)是否崩潰并關(guān)機(jī)或者崩潰又重新啟動(dòng)。許多實(shí)現(xiàn)提 供的保活定時(shí)器可以提供這種能力。但這個(gè)規(guī)范并不推薦,理由如下:

          • 在出現(xiàn)短暫差錯(cuò)的情況下,這可能會(huì)使一個(gè)非常好的連接釋放掉;
          • 它們耗費(fèi)不必要的帶寬;
          • 在按分組計(jì)費(fèi)的情況下會(huì)在互聯(lián)網(wǎng)上花掉更多的錢。

          TCP保活定時(shí)器(keepalive)

          Windows 中TCP通過一個(gè)TCP keepalive的周期性交換,能維持一個(gè)TCP連接。在keepalive的TCP頭部序列號(hào)字段被設(shè)為比當(dāng)前出站數(shù)據(jù)流的序列號(hào)小1的值。如果一個(gè) TCP對等端的下一個(gè)數(shù)據(jù)的字節(jié)序列號(hào)是N,那么keepalive的序列號(hào)是N-1.

          在接收到keepalive包后,對等端回送一個(gè)ACK字段,并將確認(rèn)號(hào)置為下一個(gè)期望收到的字節(jié)N,這個(gè)交換證實(shí)了兩個(gè)對等端仍然處于TCP連接狀態(tài)中。

          image

          Windows 2003 和 XP的TCP/IP在默認(rèn)情況下禁用TCP的keepalive.啟用情況下每2個(gè)小時(shí)發(fā)送一次keepalive。如果其他上層協(xié)議的保活機(jī)制時(shí)間小于keepalive,tcp的keepalive將不會(huì)發(fā)送。

          相關(guān)注冊表

          KeepAliveTime

          Location:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

          Data Type:REG_DWORD

          Valid range:0~0xFFFFFFFF

          Default value:0x6DDD00 (2小時(shí))

          Present by default:No

          如果連接上沒有沒有數(shù)據(jù),并且啟用keepalive,此鍵值在每一個(gè)TCP保持活躍包之間設(shè)置了毫秒數(shù),默認(rèn)是2小時(shí)。

          KeepAliveInterval

          Location:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

          Data Type:REG_DWORD

          Valid range:0~0xFFFFFFFF

          Default value:0x3E8 (1000毫秒)

          Present by default:No

          在沒有接收到對初始的保持活躍的響應(yīng)時(shí),此鍵值設(shè)置了重傳時(shí)間默認(rèn)是1秒。重傳數(shù)目受TcpMaxDataRetransmission鍵值控制,默認(rèn)是5.此時(shí)的重傳不會(huì)有指數(shù)級的回退行為。

          如果都啟用且是默認(rèn),無數(shù)據(jù)傳輸?shù)腡CP連接在keepalive包發(fā)出后2小時(shí)6秒收不到ACK就放棄連接。

          舉例:

          另一端崩潰

          keepalive機(jī)制在重復(fù)發(fā)送探測包到一定次數(shù)后報(bào)錯(cuò),由TCP轉(zhuǎn)換為“連接超時(shí)”

          另一端崩潰而重啟

          客戶端telnet到服務(wù)器后,我們拔掉服務(wù)器網(wǎng)線重啟服務(wù)器,服務(wù)器重啟好后我們在telnet客戶端上輸入命令。服務(wù)器重啟后丟失了以前連接的所有信息,此時(shí)服務(wù)器收到來著telnet客戶端的命令,不知道此連接的信息,于是TCP就以復(fù)位作為應(yīng)答來結(jié)束TCP連接。

          另外一端不可達(dá)

          拔掉網(wǎng)線,模擬中間路由器崩潰,keepalive探測的時(shí)候會(huì)引起ICMP差錯(cuò)“不可達(dá)--沒有到達(dá)主機(jī)的路由”反饋給主機(jī)。

          二.TCP連接的終止

          TCP的連接終止需要4個(gè)包交換來完成。在兩個(gè)邏輯管道上每個(gè)邏輯管道上發(fā)送方發(fā)送FIN置位的終止包,然后收到ACK后關(guān)閉該邏輯管道的連接。

          image

                        TCP連接終止的4個(gè)TCP段交換過程

          段1:來自TCP對等端A的FIN-ACK

          一個(gè)期望終止出站數(shù)據(jù)流的TCP對等端(A)發(fā)送一個(gè)不包含任何數(shù)據(jù)的TCP段,他具有如下特點(diǎn):

          • 序列號(hào),和發(fā)送帶數(shù)據(jù)TCP段一樣設(shè)置為出站數(shù)據(jù)的當(dāng)前序列號(hào),且當(dāng)前序列號(hào)是最終序列號(hào)FSN1,因?yàn)轳R上要關(guān)閉了。
          • 確認(rèn)序列號(hào) 被設(shè)為TCP對等端A期望對方發(fā)送的下一個(gè)字節(jié)。對應(yīng)TCP對等端B當(dāng)前序列號(hào)CSN2。
          • 設(shè)置ACK標(biāo)志
          • 設(shè)置FIN標(biāo)志,指示此邏輯管道上沒有其他數(shù)據(jù)需要發(fā)送。

          image 
                                ftp服務(wù)器關(guān)閉FTP會(huì)話的Fin-ack段

          段2:來自TCP對等端B的ACK

          與SYN類似,F(xiàn)IN包也會(huì)占用一個(gè)字節(jié)的序列空間,并且必須把它當(dāng)作是一個(gè)字節(jié)數(shù)據(jù)來確認(rèn)。所以B接收到FIN-ACK后必須發(fā)送一個(gè)ACK,具有如下特點(diǎn):

          • 序列號(hào) 設(shè)為出站數(shù)據(jù)的當(dāng)前序列號(hào)CSN2
          • 確認(rèn)號(hào)字段被設(shè)為比對端A發(fā)送的最終序列號(hào)多1的值FSN1+1.
          • 設(shè)置ACK標(biāo)志。

          image
                         ftp服務(wù)器關(guān)閉FTP會(huì)話的Fin-ack段的ACK

          一旦FIN-ACK被確認(rèn),發(fā)送初始FIN-ACK端A就不能再發(fā)送數(shù)據(jù)了,這僅終止了一個(gè)邏輯管道的連接,TCP對等端B發(fā)送數(shù)據(jù)到A的邏輯管道仍然開放,B仍然可以發(fā)數(shù)據(jù)給A。

          段三:來自TCP對等端B的FIN-ACK

          前面對等端A向B發(fā)送數(shù)據(jù)的邏輯管道被關(guān)閉后,如果B向A發(fā)送數(shù)據(jù)的邏輯管道仍然有數(shù)據(jù)發(fā)送,且被對等端A確認(rèn),這就是TCP半關(guān)閉。TCP對等端B向A發(fā)送數(shù)據(jù)的邏輯管道沒有數(shù)據(jù)發(fā)送后,也要B向A發(fā)送FIN-ACK來關(guān)閉。

          特點(diǎn):

          • 序列號(hào),和發(fā)送帶數(shù)據(jù)TCP段一樣設(shè)置為出站數(shù)據(jù)的當(dāng)前序列號(hào),且當(dāng)前序列號(hào)最終序列號(hào)FSN2,因?yàn)轳R上要關(guān)閉了。
          • 確認(rèn)序列號(hào)  被設(shè)為TCP對等端A期望對方發(fā)送的下一個(gè)字節(jié)。對應(yīng)TCP對等端A當(dāng)前序列號(hào)FSN1+1。
          • 設(shè)置ACK標(biāo)志
          • 設(shè)置FIN標(biāo)志,指示此邏輯管道上沒有其他數(shù)據(jù)需要發(fā)送
          image 
                                ftp客戶端關(guān)閉FTP會(huì)話的Fin-ack段

          段四:來自TCP對等端A的ACK

          同樣段三的FIN-ACK包也按占用了一個(gè)字節(jié)算,并且必須作為一個(gè)字節(jié)的數(shù)據(jù)被確認(rèn)。因此收到FIN-ACK的A必須發(fā)送一個(gè)ACK。

          具有如下特點(diǎn):

          • 序列號(hào) 設(shè)為出站數(shù)據(jù)的當(dāng)前序列號(hào)FSN1+1
          • 確認(rèn)號(hào)字段被設(shè)為比對端B發(fā)送的最終序列號(hào)多1的值FSN2+1
          • 設(shè)置ACK標(biāo)志。

          image  
                                ftp客戶端關(guān)閉FTP會(huì)話的Fin-ack段的ACk

          當(dāng)來自A的ACK被B接收后,TCP連接上的B向A發(fā)送數(shù)據(jù)的邏輯管道就會(huì)被關(guān)閉,此時(shí)經(jīng)過四次握手后,整個(gè)TCP連接才會(huì)被完整關(guān)閉。

          但在有些實(shí)現(xiàn)中段二和段段三被合并。其過程就是FIN-ACK/FIN-ACK/ACK,此時(shí)中間的FIN-ACK中的ACK是對第一個(gè)FIN-ACK的確認(rèn)。

          同時(shí)關(guān)閉

          雙方都執(zhí)行主動(dòng)關(guān)閉也是可能的,TCP協(xié)議也允許這樣的同時(shí)關(guān)閉(simultaneous close)。雙方各發(fā)送一個(gè)FIN,兩個(gè)FIN經(jīng)過網(wǎng)絡(luò)傳送后分別到達(dá)另一端。收到FIN后,兩端發(fā)送最后的ACK。當(dāng)收到最后的A C K時(shí),關(guān)閉TCP連接.
          image

                              同時(shí)關(guān)閉的報(bào)文段交換

          TCP連接的復(fù)位(Reset)

          TCP連接終止進(jìn)程適用于一個(gè)TCP連接的兩個(gè)管道在互相同意的情況下正常關(guān)閉。另外一種終止TCP連接的方式是通過TCP連接復(fù)位—一個(gè)具有RST(Reset)標(biāo)志的TCP段來完成。

          當(dāng)一個(gè)不可調(diào)和的入站TCP段的TCP頭中存在參數(shù)問題時(shí),一個(gè)TCP連接復(fù)位就會(huì)被發(fā)送。例如,不恰當(dāng)?shù)脑碔P地址、目的IP地址或者TCP端口號(hào)都能中斷一個(gè)建立了的連接。中斷的TCP連接將丟失所有的TCP數(shù)據(jù),包括正在傳送中或者在等待被發(fā)送的緩沖區(qū)中。

          TCP也用來拒絕一個(gè)TCP連接企圖,以響應(yīng)對SYN段的接收。最常見的是,SYN段中目的端口與運(yùn)行在SYN段接收者上的應(yīng)用層進(jìn)程相對應(yīng)。當(dāng)達(dá)到被允許的最大值時(shí),連接企圖就會(huì)被拒絕。下圖顯示了TCP連接復(fù)位

          image

                              一個(gè)顯示SYN和RST段的TCP連接的復(fù)位

          注意:當(dāng)UDP到達(dá)一個(gè)與應(yīng)用層進(jìn)程不對應(yīng)的目的端口時(shí),會(huì)產(chǎn)生一個(gè)ICMP,目的不可達(dá)-端口不可達(dá)的報(bào)錯(cuò)發(fā)送給UDP數(shù)據(jù)發(fā)送方。

          抓包截圖顯示了在一臺(tái)運(yùn)行FTP客戶端和一臺(tái)非FTP服務(wù)器主機(jī)之間的包交換。幀一是一個(gè)到FTP控制端口的SYN段,幀二是連接復(fù)位。

          image

          image

          在連接復(fù)位段中:

          1.設(shè)置了RST和ACK標(biāo)志

          2.序列號(hào)為0

          3.確認(rèn)號(hào)比SYN段的序列號(hào)多1

          4.窗口大小是0.

          三 TCP連接狀態(tài)

          TCP連接狀態(tài)和說明:

          狀態(tài) 說明
          CLOSED 不存在TCP連接
          LISTEN 一個(gè)應(yīng)用層協(xié)議已經(jīng)發(fā)布了一個(gè)被動(dòng)打開,并且有意接收TCP連接企圖
          SYN SENT 一個(gè)應(yīng)用層協(xié)議已經(jīng)發(fā)布一個(gè)主動(dòng)打開,并且發(fā)送一個(gè)SYN段
          SYN RCVD 一個(gè)SYN段被接收,并且一個(gè)SYN-ACK被發(fā)送
          ESTABLISHED 建立TCP連接的3此握手完成。現(xiàn)在數(shù)據(jù)能雙向傳輸
          FIN WAIT-1 初始的關(guān)閉連接段的FIN-ACK被發(fā)送
          FIN WAIT-2 響應(yīng)初始的FIN-ACK的ACK被接收
          CLOSING 一個(gè)FIN-ACK被接收但ACK不是針對已發(fā)送的FIN-ACK的。收到的FIN-ACK中的是針對已發(fā)送的FINA-ACK被稱為同時(shí)關(guān)閉,這時(shí)兩個(gè)TCP對等端在相同時(shí)刻發(fā)送FIN-ACK。
          TIME WAIT FIN- ACK已被發(fā)送并得到兩個(gè)對等端的確認(rèn),并且TCP連接終止進(jìn)程完成。一旦到達(dá)TIME WAIT狀態(tài),在連接的TCP端口能被重新使用前,TCP必須等待的時(shí)間是最大生存時(shí)間(MSL)的兩倍。MSL是在互聯(lián)網(wǎng)中一個(gè)TCP段能存在時(shí)間的最 大值,推薦是240秒。這個(gè)延遲防止一個(gè)使用相同端口的連接的TCP段與舊連接的TCP段的副本相混淆
          CLOSE WAIT 一個(gè)FIN-ACK被接收,并且一個(gè)FIN-ACK被發(fā)送
          LAST ACK 響應(yīng)FIN-ACK的ACK已被接收

           

          image

                                    TCP狀態(tài)變遷圖

          一個(gè)TCP對等端經(jīng)過的連接狀態(tài)依賴于TCP對等端是TCP連接建立的初始化方還是TCP連接終止的初始化方。

          image

                                     TCP連接圖和終止圖


          原文: http://ustb-618.spaces.live.com/default.aspx

          Feedback

          # re: TCP的連接和終止(TCP/IP詳解)   回復(fù)  更多評論   

          2010-12-15 11:11 by poco
          微軟關(guān)閉Windows Live Spaces,omg,當(dāng)初msn歸他家真是跟錯(cuò)人了。默哀,我的第一個(gè)blog要關(guān)了。
          我搬到POCO空間了 http://my.poco.cn/blog_move/ ,很方便

          # re: TCP的連接和終止(TCP/IP詳解)   回復(fù)  更多評論   

          2010-12-20 10:49 by 幻海藍(lán)夢
          @poco
          謝謝。
          主站蜘蛛池模板: 长宁县| 汉中市| 黎城县| 来安县| 常宁市| 思茅市| 靖州| 铅山县| 浦北县| 会理县| 和顺县| 武城县| 炉霍县| 罗江县| 南雄市| 琼海市| 兴安县| 临高县| 宣城市| 哈尔滨市| 股票| 公安县| 利辛县| 拉孜县| 许昌县| 都兰县| 正安县| 建昌县| 仙桃市| 弥渡县| 南充市| 宽甸| 丽水市| 青川县| 玉屏| 共和县| 邯郸县| 阿荣旗| 麦盖提县| 龙游县| 芦溪县|