傳輸控制協定(TCP,Transmission Control Protocol)的标志位
- SYN:同步序列編号(Synchronize Sequence Numbers)請求建立連接配接
- ACK (Acknowledge character)即是确認字元,在資料通信中,接收站發給 發送站的一種傳輸類控制字元。表示發來的資料已确認接收無誤。
- PSH(Push)表示有 DATA資料傳輸,當設定為1時,要求把資料盡快的交給應用層,不做處理
- FIN(Finish)表示關閉連接配接
- REST(Reset) 一般是在FIN之後才會出現為1的情況,表示的是連接配接重置。
- URG(Urgen)設定為1時,首部中的緊急指針有效;為0時,緊急指針沒有意義。
- Sequence number(順序号碼)
- Acknowledge number(确認号碼)
TCP的三次握手
第一次握手:主機A發送位碼為syn=1,随機産生seq number=1234567的資料包到伺服器,主機B由SYN=1知道,A要求建立聯機;
第二次握手:主機B收到請求後要确認聯機資訊,向A發送ack number=(主機A的seq+1),syn=1,ack=1,随機産生seq=7654321的包;
第三次握手:主機A收到後檢查ack number是否正确,即第一次發送的seq number+1,以及位碼ack是否為1,若正确,主機A會再發送ack number=(主機B的seq+1),ack=1,主機B收到後确認seq值與ack=1則連接配接建立成功。
完成三次握手後,主機A與主機B開始傳送資料。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxSP9EkT1kFVONzaE1UMNRVT4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL1gzM5ETN0gDMwEjNwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
四次揮手(用戶端和服務端均可發起)
-
L第一次揮手:用戶端的資料傳輸了底部,向伺服器發送了FIN=1,就是用戶端請求斷開。
就是我這邊即将要把資料傳輸完了,我準備跟你斷開連接配接了。
-
第二次揮手:TCP的連接配接時全雙工的雙向連接配接,關閉必須從兩邊關閉,服務端收到了FIN标志位後,并不會立即向用戶端發送FIN标志位,而是發送一個ACK的應答資訊。
相當于:你想要關閉的請求我已經收到,但是我可能還沒有接受完你的資料,等我資料接受完了我會告訴你。
- 第三次揮手:伺服器接受資料完成,向用戶端發送一個FIN=1
-
第四次揮手:用戶端收到伺服器發來的接收資料完成并想要斷開連接配接的請求,然後用戶端發送一個确認斷開連接配接的請求給服務端。這時候用戶端進入TIME_WAIT定時器狀态。
如果在2MSL(2倍的最大封包生存時間)時間内沒有收到服務端的重傳請求,就确認服務端已經收到了,此時關閉自己的連接配接。如果逾時了,用戶端就會重新發送。
就那蹦極來舉個例子:傳輸層TCP的标志位及三次握手,四次揮手 - 我:(此時我的安全帶已經綁好(相當于資料傳輸完畢))我要跳了(第一次揮手)。
- 從業人員:等等,我再檢查一下安全帶,我讓你跳你再跳(第二次揮手)
- 從業人員:(安全措施檢查完畢)好了,現在你可以跳了。(第三次揮手)
- 我:啊!!!!!(第四次揮手)
我跳完之後從業人員會幫我解開安全帶把我帶上岸,若沒有聽見我的 啊!!!!!!的尖叫聲 我就會再 啊!!!!! 給從業人員。(逾時重傳)
如果是服務端主動請求斷開連接配接的話,服務端就會先發送FIN=1标志位
參考部落格:
https://blog.csdn.net/zycxnanwang/article/details/77413870