您好,登錄后才能下訂單哦!
TCP(Transmission ControlProtocol 傳輸控制協議)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議,由IETF的RFC 793定義。在簡化的計算機網絡OSI模型中,它完成第四層傳輸層所指定的功能,用戶數據報協議(UDP)是同一層內 另一個重要的傳輸協議。在因特網協議族(Internetprotocol suite)中,TCP層是位于IP層之上,應用層之下的中間層。不同主機的應用層之間經常需要可靠的、像管道一樣的連接,但是IP層不提供這樣的流機制,而是提供不可靠的包交換。
TCP頭格式
---Source Port是源端口,16位。
---Destination Port是目的端口,16位。
---Sequence Number是發送數據包中的第一個字節的序列號,32位。
---Acknowledgment Number是確認序列號,32位。
---Data Offset是數據偏移,4位,該字段的值是TCP首部(包括選項)長度除以4。
---標志位: 6位,URG表示UrgentPointer字段有意義:
ACK表示AcknowledgmentNumber字段有意義
PSH表示Push功能,RST表示復位TCP連接
SYN表示SYN報文(在建立TCP連接的時候使用)
FIN表示沒有數據需要發送了(在關閉TCP連接的時候使用)
Window表示接收緩沖區的空閑空間,16位,用來告訴TCP連接對端自己能夠接收的最大數據長度。
---Checksum是校驗和,16位。
---Urgent Pointers是緊急指針,16位,只有URG標志位被設置時該字段才有意義,表示緊急數據相對序列號(Sequence Number字段的值)的偏移。
連接建立
TCP是因特網中的傳輸層協議,使用三次握手協議建立連接。當主動方發出SYN連接請求后,等待對方回答。
SYN+ACK ,并最終對對方的 SYN 執行 ACK 確認。這種建立連接的方法可以防止產生錯誤的連接,TCP使用的流量控制協議是可變大小的滑動窗口協議。
TCP三次握手的過程如下:
客戶端發送SYN(SEQ=x)報文給服務器端,進入SYN_SEND狀態。
服務器端收到SYN報文,回應一個SYN (SEQ=y)ACK(ACK=x+1)報文,進入SYN_RECV狀態。
客戶端收到服務器端的SYN報文,回應一個ACK(ACK=y+1)報文,進入Established狀態。
三次握手完成,TCP客戶端和服務器端成功地建立連接,可以開始傳輸數據了。
連接終止
建立一個連接需要三次握手,而終止一個連接要經過四次握手,這是由TCP的半關閉(half-close)造成的。具體過程如下圖所示。
(1) 某個應用進程首先調用close,稱該端執行“主動關閉”(active close)。該端的TCP于是發送一個FIN分節,表示數據發送完畢。
(2) 接收到這個FIN的對端執行 “被動關閉”(passiveclose),這個FIN由TCP確認。
注意:FIN的接收也作為一個文件結束符(end-of-file)傳遞給接收端應用進程,放在已排隊等候該應用進程接收的任何其他數據之后,因為,FIN的接收意味著接收端應用進程在相應連接上再無額外數據可接收。
(3) 一段時間后,接收到這個文件結束符的應用進程將調用close關閉它的套接字。這導致它的TCP也發送一個FIN。
(4) 接收這個最終FIN的原發送端TCP(即執行主動關閉的那一端)確認這個FIN。
既然每個方向都需要一個FIN和一個ACK,因此通常需要4個分節。
窗口確認
TCP的一項功能就是確保每個數據段都能到達目的地。位于目的主機的TCP服務對接受到的數據進行確認,并向源應用程序發送確認信息。
配置TCP
修改建立TCP連接的超時時間
建立TCP連接需要經過三次握手:主動端先發送SYN報文,被動放回應SYN+ACK報文,然后主動端再回應ACK。
在主動端發送SYN后,如果被動端一直不回應SYN+ACK報文,主動端會不斷的重傳SYN報文直到超過一定的重傳次數或超時時間。
在主動端發送SYN后,被動端回應SYN+ACK報文,但主動端不再回復ACK,被動端也會一直重傳直到超過一定的重傳次數或超時時間。(SYN報文***會出現這種情況)
可以通過以下命令配置SYN報文的超時時間(發送SYN報文到三次握手成功的最大時間),也就是建立TCP連接的超時時間。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。