国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
TCP的連接和終止
TCP是一個面向連接的協(xié)議。在傳輸數(shù)據(jù)前必須要建立連接,在停止傳輸數(shù)據(jù)后要終止連接釋放資源。
一.TCP連接建立
TCP連接是在IP網(wǎng)絡(luò)中兩個進(jìn)程間(應(yīng)用層協(xié)議)的雙向、全雙工的邏輯回路。由節(jié)點的IP地址和端口將連接雙方對應(yīng)起來。
1.TCP連接特點:
通過一個握手進(jìn)程建立起來; 通過一個周期性保持進(jìn)程來保持,保證兩個TCP節(jié)點間處于激活狀態(tài); 通過一個握手進(jìn)程來終止,釋放資源。 TCP連接也被連接中的任意一端重置。
1.TCP連接的建立
為了建立連接TCP連接雙方必須從對方了解下面的信息:
1.對方數(shù)據(jù)發(fā)送的開始序列號; 2.對方在出站管道上發(fā)送數(shù)據(jù)的緩沖區(qū)大小; 3.能被接收的最大段MSS; 4.被支持的TCP選項;
通過3個TCP段的交換來了解這些信息,就是常說的TCP 握手的3個包。一般在客戶端訪問TCP服務(wù)器的時候,在客戶端初始化一個TCP連接,服務(wù)器端打開一個特殊端口等待傳入的請求??蛻舳酥鲃影l(fā)起第一個 SYN置位的包開始協(xié)商TCP連接。服務(wù)器接收后向客戶端回ACK,最后客戶端在向服務(wù)器回復(fù)ACK后連接建立。
下面我們用TCP連接的兩個對等端A和B來詳細(xì)介紹握手過程,其中發(fā)起方是A。
TCP 連接建立進(jìn)程的3個TCP段交換
段一:同步(SYN)段
TCP連接的發(fā)起方A向B發(fā)送第一個TCP同步段(SYN).在TCP頭部的選項中會包含一些選項與對端協(xié)商。
TCP 頭部包含如下字段:
目的端口  TCP連接對端B被動打開的TCP端口數(shù)
源端口  TCP連接發(fā)起方A主動打開的端口,大多數(shù)是一個隨機一個端口。
序列號  SYN的序列號ISN1可以看作是一個32位的計數(shù)器,由發(fā)起方A產(chǎn)生,具有一定的隨機性。Windows 2003和XP根據(jù)派生啟動(startup-derived)、2048位的隨機密鑰和一個基于RC4的隨機數(shù)來計算ISN,從而減少下一TCP連接的 ISN被預(yù)測的可能性。
確認(rèn)號  設(shè)置為0.SYN握手第一個包的ACK字段不重要,此時剛發(fā)起連接沒有數(shù)據(jù)報需要確認(rèn)。但后續(xù)的ACK是重要的。
SYN標(biāo)志  置1.
窗口  設(shè)置為默認(rèn)值,指示本地TCP接收緩沖區(qū)大小的初始值。
MSS TCP選項中的MSS   指示發(fā)起方A接收的最大的TCP段。
選擇性確認(rèn)(SACK) –TCP選項   如果包含這個字段,可以指示發(fā)起方A 的TCP能接收和解釋此選項。
窗口縮放選項   如果包含,指示出發(fā)起方A的TCP能接收和支持此選項。協(xié)商好窗口因子后此連接就固定使用直到斷開連接
一個FTP會話的SYN段 段二:SYN-ACK段
在B收到SYN包后,B將發(fā)SYN-ACK,TCP選項僅包含發(fā)起方A發(fā)送的SYN包中的的選項。
目的端口   設(shè)置為A的源端口
源端口       設(shè)置為B端口
序列號       B產(chǎn)生自己的序列號ISN2。和A發(fā)送的SYN中的ISN沒有關(guān)系,僅產(chǎn)生的方法一樣。
確認(rèn)號      期望收到的對端的下一個字節(jié)ISN1+1.
SYN標(biāo)志  置1.
ACK標(biāo)志  置1,必須有此標(biāo)志,除了SYN中置0外,SYN之后的所有報文(包括SYN-ACK和實際數(shù)據(jù)包都會帶ACK的標(biāo)志)。
窗口  設(shè)置B可以接收的最大窗口值,一般根據(jù)應(yīng)用程序或者操作系統(tǒng)默認(rèn)指定。
MSS TCP選項  設(shè)為B能接收的最大長度的TCP段;
SACK-許可       如果A發(fā)送的SYN包含此選項時才使用此選項,表示B的TCP能接收和解釋SACK選項。
窗口縮放選項   如果SYN包含,此時才會包含。
一個FTP會話的SYN-ACK段 段3:ACK段
在TCP連接的發(fā)起方A收到SYN-ACK后,A再向B發(fā)送ACK。ACK中確認(rèn)被發(fā)起方A使用的最終TCP參數(shù),同時向B確認(rèn)它該使用同樣的參數(shù)。自此TCP連接建立完成。
一個FTP會話的SYN-ACK段
2.同時打開
兩個應(yīng)用程序同時執(zhí)行主動建立TCP的連接的可能性是存在的,此時發(fā)送到SYN建立需要交換4個包,如圖所示:
同時打開報文交換
需要注意的是,即使同時打開仍然只建立一條連接。(但其他的協(xié)議不一定)
3.TCP 連接的結(jié)果
1.每一個TCP對等端知道連接上對方將被發(fā)送的第一個字節(jié)的序列號(發(fā)給對方的確認(rèn)號,A發(fā)給B的確認(rèn)號就是B將發(fā)送的序列號,同樣B也是。) 2.每一個TCP對等端知道連接上能發(fā)送的MSS。選取握手階段SYN和SYN+ACK包中MSS選項中較小的值。以此值開始進(jìn)行PMTU的發(fā)現(xiàn)機制。 3.知道連接對端接收緩沖區(qū)大小,即窗口大小。 4.每個對等端知道對方能否使用SACK,窗口縮放等選項。
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)試圖建立一個TCP連接時,會重傳多少次SYN。每次間隔時間加倍。初始的RTO為3秒,并且默認(rèn)值為2,這樣第一次SYN等待3秒后重傳第一次,在等待6秒后重傳第二次,在等待12秒沒有SYN+ACK就超時了。
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)個連接。
5.TCP半開連接
TCP 半開連接是未完成的連接建立的進(jìn)程的一個TCP連接,收到一個SYN包,并且一個SYN-ACK已經(jīng)發(fā)送,但是最后的ACK沒有收到。前面知道XP默認(rèn)設(shè)置情況下在發(fā)送2個重傳SYN-ACK后等待12秒后放棄連接,并釋放內(nèi)存和連接的內(nèi)部表項,從收到SYN到釋放總共會花費21秒。
SYN-ACK重傳輸?shù)囊粋€半開連接
SYN攻擊
SYN攻擊就是利用這種方法,使用偽裝的IP地址和TCP端口,在短時間內(nèi)制造大量的半開連接來耗盡資源,造成拒絕服務(wù)攻擊。大量的半開連接能做如下事情:
1.使用所有可用的內(nèi)存,
2.使用在TCP傳輸控制模塊(TCB)中所有可能的項,這是一個用來跟蹤TCP連接的內(nèi)部表,一旦半開連接使用完所有的項,就用一個TCP連接復(fù)位來響應(yīng)下一個連接企圖。
3.使用所有可能的半開連接,此后用一個TCP連接復(fù)位響應(yīng)下一個連接企圖。
可以使用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è)定針對半開連接的一個AYN-ACK的重傳數(shù)目,對于大于1的值使用SYN攻擊防護(hù)機制。
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ù)。被啟用時,檢測到SYN攻擊,則半開連接的超時會更快些。
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ā)送過一個重傳。
6.TCP連接的維持
在建立TCP連接后,必須有一些機制維持TCP連接。如果TCP建立連接后不傳輸任何數(shù)據(jù)也沒有應(yīng)用級別的?;顧C制時,那么TCP連接一直存在,數(shù)天,數(shù)月會一直存在。中間的路由器可能重啟,崩潰,TCP連接的雙方無從知道,許多時候一個服務(wù)器希望知道客戶主機是否崩潰并關(guān)機或者崩潰又重新啟動。許多實現(xiàn)提供的保活定時器可以提供這種能力。但這個規(guī)范并不推薦,理由如下:
在出現(xiàn)短暫差錯的情況下,這可能會使一個非常好的連接釋放掉; 它們耗費不必要的帶寬; 在按分組計費的情況下會在互聯(lián)網(wǎng)上花掉更多的錢。
TCP保活定時器(keepalive)
Windows 中TCP通過一個TCP keepalive的周期性交換,能維持一個TCP連接。在keepalive的TCP頭部序列號字段被設(shè)為比當(dāng)前出站數(shù)據(jù)流的序列號小1的值。如果一個 TCP對等端的下一個數(shù)據(jù)的字節(jié)序列號是N,那么keepalive的序列號是N-1.
在接收到keepalive包后,對等端回送一個ACK字段,并將確認(rèn)號置為下一個期望收到的字節(jié)N,這個交換證實了兩個對等端仍然處于TCP連接狀態(tài)中。
Windows 2003 和 XP的TCP/IP在默認(rèn)情況下禁用TCP的keepalive.啟用情況下每2個小時發(fā)送一次keepalive。如果其他上層協(xié)議的?;顧C制時間小于keepalive,tcp的keepalive將不會發(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小時)
Present by default:No
如果連接上沒有沒有數(shù)據(jù),并且啟用keepalive,此鍵值在每一個TCP保持活躍包之間設(shè)置了毫秒數(shù),默認(rèn)是2小時。
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è)置了重傳時間默認(rèn)是1秒。重傳數(shù)目受TcpMaxDataRetransmission鍵值控制,默認(rèn)是5.此時的重傳不會有指數(shù)級的回退行為。
如果都啟用且是默認(rèn),無數(shù)據(jù)傳輸?shù)腡CP連接在keepalive包發(fā)出后2小時6秒收不到ACK就放棄連接。
舉例:
另一端崩潰
keepalive機制在重復(fù)發(fā)送探測包到一定次數(shù)后報錯,由TCP轉(zhuǎn)換為“連接超時”
另一端崩潰而重啟
客戶端telnet到服務(wù)器后,我們拔掉服務(wù)器網(wǎng)線重啟服務(wù)器,服務(wù)器重啟好后我們在telnet客戶端上輸入命令。服務(wù)器重啟后丟失了以前連接的所有信息,此時服務(wù)器收到來著telnet客戶端的命令,不知道此連接的信息,于是TCP就以復(fù)位作為應(yīng)答來結(jié)束TCP連接。
另外一端不可達(dá)
拔掉網(wǎng)線,模擬中間路由器崩潰,keepalive探測的時候會引起ICMP差錯“不可達(dá)--沒有到達(dá)主機的路由”反饋給主機。
二.TCP連接的終止
TCP的連接終止需要4個包交換來完成。在兩個邏輯管道上每個邏輯管道上發(fā)送方發(fā)送FIN置位的終止包,然后收到ACK后關(guān)閉該邏輯管道的連接。
TCP連接終止的4個TCP段交換過程
段1:來自TCP對等端A的FIN-ACK
一個期望終止出站數(shù)據(jù)流的TCP對等端(A)發(fā)送一個不包含任何數(shù)據(jù)的TCP段,他具有如下特點:
序列號,和發(fā)送帶數(shù)據(jù)TCP段一樣設(shè)置為出站數(shù)據(jù)的當(dāng)前序列號,且當(dāng)前序列號是最終序列號FSN1,因為馬上要關(guān)閉了。 確認(rèn)序列號 被設(shè)為TCP對等端A期望對方發(fā)送的下一個字節(jié)。對應(yīng)TCP對等端B當(dāng)前序列號CSN2。 設(shè)置ACK標(biāo)志 設(shè)置FIN標(biāo)志,指示此邏輯管道上沒有其他數(shù)據(jù)需要發(fā)送。
ftp服務(wù)器關(guān)閉FTP會話的Fin-ack段
段2:來自TCP對等端B的ACK
與SYN類似,F(xiàn)IN包也會占用一個字節(jié)的序列空間,并且必須把它當(dāng)作是一個字節(jié)數(shù)據(jù)來確認(rèn)。所以B接收到FIN-ACK后必須發(fā)送一個ACK,具有如下特點:
序列號 設(shè)為出站數(shù)據(jù)的當(dāng)前序列號CSN2 確認(rèn)號字段被設(shè)為比對端A發(fā)送的最終序列號多1的值FSN1+1. 設(shè)置ACK標(biāo)志。
ftp服務(wù)器關(guān)閉FTP會話的Fin-ack段的ACK
一旦FIN-ACK被確認(rèn),發(fā)送初始FIN-ACK端A就不能再發(fā)送數(shù)據(jù)了,這僅終止了一個邏輯管道的連接,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)閉。
特點:
序列號,和發(fā)送帶數(shù)據(jù)TCP段一樣設(shè)置為出站數(shù)據(jù)的當(dāng)前序列號,且當(dāng)前序列號最終序列號FSN2,因為馬上要關(guān)閉了。 確認(rèn)序列號  被設(shè)為TCP對等端A期望對方發(fā)送的下一個字節(jié)。對應(yīng)TCP對等端A當(dāng)前序列號FSN1+1。 設(shè)置ACK標(biāo)志 設(shè)置FIN標(biāo)志,指示此邏輯管道上沒有其他數(shù)據(jù)需要發(fā)送
ftp客戶端關(guān)閉FTP會話的Fin-ack段
段四:來自TCP對等端A的ACK
同樣段三的FIN-ACK包也按占用了一個字節(jié)算,并且必須作為一個字節(jié)的數(shù)據(jù)被確認(rèn)。因此收到FIN-ACK的A必須發(fā)送一個ACK。
具有如下特點:
序列號 設(shè)為出站數(shù)據(jù)的當(dāng)前序列號FSN1+1 確認(rèn)號字段被設(shè)為比對端B發(fā)送的最終序列號多1的值FSN2+1 設(shè)置ACK標(biāo)志。
ftp客戶端關(guān)閉FTP會話的Fin-ack段的ACk
當(dāng)來自A的ACK被B接收后,TCP連接上的B向A發(fā)送數(shù)據(jù)的邏輯管道就會被關(guān)閉,此時經(jīng)過四次握手后,整個TCP連接才會被完整關(guān)閉。
但在有些實現(xiàn)中段二和段段三被合并。其過程就是FIN-ACK/FIN-ACK/ACK,此時中間的FIN-ACK中的ACK是對第一個FIN-ACK的確認(rèn)。
同時關(guān)閉
雙方都執(zhí)行主動關(guān)閉也是可能的,TCP協(xié)議也允許這樣的同時關(guān)閉(simultaneous close)。雙方各發(fā)送一個FIN,兩個FIN經(jīng)過網(wǎng)絡(luò)傳送后分別到達(dá)另一端。收到FIN后,兩端發(fā)送最后的ACK。當(dāng)收到最后的A C K時,關(guān)閉TCP連接.
同時關(guān)閉的報文段交換
TCP連接的復(fù)位(Reset)
TCP連接終止進(jìn)程適用于一個TCP連接的兩個管道在互相同意的情況下正常關(guān)閉。另外一種終止TCP連接的方式是通過TCP連接復(fù)位—一個具有RST(Reset)標(biāo)志的TCP段來完成。
當(dāng)一個不可調(diào)和的入站TCP段的TCP頭中存在參數(shù)問題時,一個TCP連接復(fù)位就會被發(fā)送。例如,不恰當(dāng)?shù)脑碔P地址、目的IP地址或者TCP端口號都能中斷一個建立了的連接。中斷的TCP連接將丟失所有的TCP數(shù)據(jù),包括正在傳送中或者在等待被發(fā)送的緩沖區(qū)中。
TCP也用來拒絕一個TCP連接企圖,以響應(yīng)對SYN段的接收。最常見的是,SYN段中目的端口與運行在SYN段接收者上的應(yīng)用層進(jìn)程相對應(yīng)。當(dāng)達(dá)到被允許的最大值時,連接企圖就會被拒絕。下圖顯示了TCP連接復(fù)位
一個顯示SYN和RST段的TCP連接的復(fù)位
注意:當(dāng)UDP到達(dá)一個與應(yīng)用層進(jìn)程不對應(yīng)的目的端口時,會產(chǎn)生一個ICMP,目的不可達(dá)-端口不可達(dá)的報錯發(fā)送給UDP數(shù)據(jù)發(fā)送方。
抓包截圖顯示了在一臺運行FTP客戶端和一臺非FTP服務(wù)器主機之間的包交換。幀一是一個到FTP控制端口的SYN段,幀二是連接復(fù)位。
在連接復(fù)位段中:
1.設(shè)置了RST和ACK標(biāo)志
2.序列號為0
3.確認(rèn)號比SYN段的序列號多1
4.窗口大小是0.
三 TCP連接狀態(tài)
TCP連接狀態(tài)和說明:
狀態(tài) 說明
CLOSED 不存在TCP連接
LISTEN 一個應(yīng)用層協(xié)議已經(jīng)發(fā)布了一個被動打開,并且有意接收TCP連接企圖
SYN SENT 一個應(yīng)用層協(xié)議已經(jīng)發(fā)布一個主動打開,并且發(fā)送一個SYN段
SYN RCVD 一個SYN段被接收,并且一個SYN-ACK被發(fā)送
ESTABLISHED 建立TCP連接的3此握手完成?,F(xiàn)在數(shù)據(jù)能雙向傳輸
FIN WAIT-1 初始的關(guān)閉連接段的FIN-ACK被發(fā)送
FIN WAIT-2 響應(yīng)初始的FIN-ACK的ACK被接收
CLOSING 一個FIN-ACK被接收但ACK不是針對已發(fā)送的FIN-ACK的。收到的FIN-ACK中的是針對已發(fā)送的FINA-ACK被稱為同時關(guān)閉,這時兩個TCP對等端在相同時刻發(fā)送FIN-ACK。
TIME WAIT FIN- ACK已被發(fā)送并得到兩個對等端的確認(rèn),并且TCP連接終止進(jìn)程完成。一旦到達(dá)TIME WAIT狀態(tài),在連接的TCP端口能被重新使用前,TCP必須等待的時間是最大生存時間(MSL)的兩倍。MSL是在互聯(lián)網(wǎng)中一個TCP段能存在時間的最 大值,推薦是240秒。這個延遲防止一個使用相同端口的連接的TCP段與舊連接的TCP段的副本相混淆
CLOSE WAIT 一個FIN-ACK被接收,并且一個FIN-ACK被發(fā)送
LAST ACK 響應(yīng)FIN-ACK的ACK已被接收
TCP狀態(tài)變遷圖
一個TCP對等端經(jīng)過的連接狀態(tài)依賴于TCP對等端是TCP連接建立的初始化方還是TCP連接終止的初始化方。
TCP連接圖和終止圖
原文: http://ustb-618.spaces.live.com/default.aspx
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
TCP的TIME_WAIT的tcp_recycle和tcp_reuse
從TCP協(xié)議的原理來談?wù)剅st復(fù)位攻擊
TCP協(xié)議中FLAG的含義
Wireshark抓包分析TCP協(xié)議
面試干貨:TCP/IP 協(xié)議的經(jīng)典面試知識點總結(jié)
TCP協(xié)議筆記(一)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服