客户端和服务器在使用TCP连接传输数据的过程中,需要经过三次握手建立连接和四次握手断开连接操作。
具体如下图所示
上图描述了TCP连接从建立到断开的详细过程,以下就其中的具体报文细节展开讨论。
在TCP三次握手建立连接阶段,客户端首先向服务器发送一个SYN=1,Sequence=p的请求包。
如果服务器同意授予客户端该链接,则发送ACK=p+1,SYN=1,Sequence=q的回应包。
最后在客户端收到服务器的回应包以后,也会向服务器发送一个回应包,具体内容为ACK=q+1,SYN=0,Sequence=p+1。
对于TCP的断开则需要四次握手,为什么不是三次握手呢,具体原因为:
当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
断开连接的过程是由客户端首先发起的,首先,客户端会发送FIN=1,Sequence=m的断开连接请求包。
服务器端收到请求以后,会发送一个确认包ACK=m+1,Sequence=n。
此时,客户端到服务器端单方面的连接已经断开了,客户端不会再向服务器端发送数据包。而服务器还是可以向客户端发送数据的,如果服务器端发送s个数据包以后不需要向客户端发送数据了,此时可以向客户端发送断开连接请求。FIN=1,Sequence=m+s,ACK=m+1。
客户端收到服务器的断开请求以后,会发送一个确认包。Sequence=m+1,ACK=m+s+1;
注意,客户端发送最后一次ACK包以后,还会等待2MSL(最大报文段生存时间),因为在网络中包有可能会丢失,客户端等待2MSL的时间是担心服务器端没有收到ACK包,从而重发FIN请求。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境