TCP基礎(一)

背景

  在工作中接觸到通訊這塊比較多,有一次服務器出了問題,無法正常提供服務,然後面對一大堆關於tcp的問題,深知自己的不足,所以抽個時間,好好學習一下tcp的基礎知識。

一、前言

  TCP是一種面向連接的、可靠的、基於字節流的傳輸層通訊協議。TCP建立連接三次握手,釋放連接四次揮手。

二、TCP建立連接、斷開連接流程講解

image.png

1、TCP建立連接—三次握手

①服務器綁定好端口,開始監聽
②客戶端連接服務器地址端口,發送SYN包(SYN=1,seq=x),並進入SYN-SEND狀態
③服務器接收到客戶端的SYN包,發送SYN包,即SYN+ACK包(SYN=1,ACK=1,ack=x+1,seq=y),並進入SYN-RECV狀態
④客戶端接收到服務器的SYN包,報送ACK包(ACK=1,ack=y+1,seq=x+1),並進入ESTABLISHED(建立連接)狀態
⑤服務器接收到客戶端的ACK包,最後也進入了ESTABLISHED狀態

我用自己的大白話再描述一次

背景
普通飛機RLinux(簡稱R)、空中加油機CLinux(簡稱C)
R在執行任務,不能落地,又快沒油了,向空中管制部門求救,部門告訴R,C的頻道是多少,同時部門讓C起飛,並要開啓指定廣播頻道進行監聽---①,於是開始了他們的對話。。。

R:(調節頻道)你在不在啊,我需要你加點油啊---②
C:我在啊,你把油閥門開一開---③
R:好勒(油閥門開了,建立連接)---④
C:得嘞(加油管伸出去了,建立連接)---⑤

2、TCP斷開連接—四次揮手(假設客戶端先斷)

① 客戶端發送FIN包(FIN=1,seq=x),用來關閉客戶端到服務器的數據,客戶端進入FIN_WAIT1狀態
② 服務器接收到FIN,發送ACK包(ACK=1,seq=z,ack=x+1),服務器進入CLOSE_WAIT狀態,客戶端進入FIN_WAIT2狀態
③ 服務器發送FIN包(FIN=1,ACK=1,sqe=y,ack=x+1),用來關閉服務器到客戶端的數據,服務器進入LAST_ACK狀態
④ 客戶端回覆ACK包(ACK=1,sqe=x+1,ack=y+1),客戶端進入TIME_WAIT狀態,此時不會里面釋放TCP,必須等待計時器設置的時間2MSL(最長報文壽命),客戶端才進入CLOSED狀態
⑤ 服務器接收到客戶端的ACK包後,進入了CLOSED狀態

我用自己的大白話再描述一次

背景
兩個快遞點互相寄快遞,一個快遞點RLinux(簡稱R),一個快遞點CLinux(簡稱C),送快遞最長時間爲2MSL

R:我這個快遞點幹不下了,準備關門了,沒東西寄給你了---①
C:噢噢,我知道了,我這邊也收拾收拾,看看有沒有你的東西,有就繼續給你發,沒有的話,我也準備關了---②
 
C繼續寄快遞到R。。。C不寄了
 
C:不寄給你了,等你收到我這信息,我收拾收拾就關閉了---③
R:收到你消息,你關吧,我等等時間就關了(2MSL)---④
C:好,我關了---⑤

PS:
1、同步到我的個人站點:小白求學進階
2、微信公衆號:待補充

參考資料

1、https://www.cnblogs.com/cy568searchx/p/4211124.html
2、https://blog.csdn.net/weixin_41565133/article/details/89737112

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章