TCP協定三次握手
小測試帶你走進TCP協定~
— 初識TCP協定 —
1
什麼是TCP協定?
傳輸控制協定(TCP,Transmission Control Protocol)是一種面向連接配接的、可靠的、基于位元組流的傳輸層通信協定。
2
TCP封包頭部詳解

上面就是TCP協定頭部格式,下面就一起深入淺出的了解以下它們:
● 源端口/目的端口
源端口和目的端口分别占用16位,用于差別主機中的不同程序。而IP位址是用來區分不同的主機的,源端口号和目的端口号配合上IP首部中的源IP位址和目的IP位址就能唯一的确定一個IP位址。
● 序号
占32位,用來辨別從TCP發端向TCP收端發送的資料位元組流,它表示在這個封包段中的第一個資料位元組在資料流中的序号,主要用來解決網絡報亂序的問題。
● 确認序列号
占32位,确認号包含發送确認的一端所期望收到的下一個序列号,是以,确認序列号應當是上次已成功收到資料位元組加1。不過隻有标志位中的ACK标志(下面介紹)為1時,該确認序列号的字段才有效。主要用來解決不丢包的問題。
● 資料偏移(首部長度)
給出TCP 封包段的資料起始處距離 TCP 封包段的起始處有多遠,即首部的長度。需要這個值是因為任選字段的長度時可變的。這個字段占4Bit(最多能表示15個32Bit的字即4*15=60個位元組的首部長度),是以TCP最多有60個位元組的首部。然而,沒有任選字段,正常的長度是20位元組。
● 标志位(flags)TCP首部有6個标志bit,他們中的多個可同時被設定位1,主要是用與操控TCP的狀态的。依次為:URG、ACK、PSH、RST、SYN、FIN
● 視窗大小
也就是有名的滑動視窗,用來進行流量控制
— TCP标志位 —
URG(緊急指針):
此标志用于将輸入資料辨別為“緊急”。這樣的進入段不必等待直到先前段被接收端消耗,而是直接發送并立即處理。用來保證TCP連接配接不中斷,并且督促中間層裝置要盡快處理這些資料。
ACK(表示響應):
确認标志用于确認資料包的成功接受,ACK 置1時表示确認号為合法,為0的時候表示資料段不包含确認資訊,确認号被忽略。
PSH(推送标志):
用來表示push操作,所謂push操作就是指在資料包到達用戶端以後,立即發送給應用程式,而不是在緩沖區中排隊。
置1時請求的資料段在接收方得到後就可直接送到應用程式,而不必等到緩沖區滿時才傳送。
RST(複位标志):
用來表示連接配接的複位請求,用來複位那些産生錯誤的連接配接,也被用來拒絕錯誤和非法的資料包。
RST标志位用來複位一條連接配接。當RST=1時,表示出現嚴重錯誤,必須釋放連接配接,然後再重建立立。
SYN(表示連接配接):
表示同步序列号,用來建立連接配接。SYN标志位和ACK标志位搭配使用,當請求的時候:SYN=1,ACK=0;連接配接被響應的時候:SYN=1,ACK=1;這個标志的資料包經常被用來進行端口掃描。掃描者發送一個隻有SYN的資料包,如果對方主機響應了一個資料包回來,就表明這台主機存在這個端口;但是這種掃描方式隻是進行TCP三向交握的第一次握手,是以這種掃描的成功表示被掃描的機器很不安全,一台安全的主機會強制要求一個連接配接嚴格的進行TCP三向交握。
FIN(表示關閉連接配接):
表示發送端已經達到資料末尾,也就是說雙方的資料傳輸已經完成,沒有資料傳送了,發送FIN标志位的TCP資料包後,連接配接将被斷開。
— TCP三向交握 —
TCP是面向連接配接的,無論哪一方向另一方發送資料之前,都必須先在雙方之間建立一條連接配接。
在TCP協定中,TCP協定提供可靠的連接配接服務,連接配接是通過三次握手進行初始化的。三次握手的目的是同步連接配接雙方的序列号和确定号并交換TCP的視窗大小資訊。這就是面試中經常被問到的三次握手,以下是三次握手的過程:
-
第一次握手:
用戶端發送連接配接請求封包段,将SYN位置為1,Sequence Number(序号)為X;然後用戶端進入SYN_SEND狀态,等待伺服器确認。
-
第二次握手:
伺服器收到SYN封包段,需要對這個SYN封包段進行确認,設定Acknowledgment Number(确認号)為X+1(sequence number+1);同時,自己還要發送SYN确認請求資訊,将SYN設定為1,sequence number為Y;伺服器端将上述的所有資訊放到一個封包段(即SYN+ACK封包段)中,一并發送給用戶端,此時伺服器進入SYN_RECVD狀态
-
第三次握手:
用戶端收到伺服器的SYN+ACK封包段。然後将Acknowledgment Number設定為Y+1,向伺服器發送ACK封包段這個封包段發送完畢以後,用戶端和伺服器都進入ESTABLISHED狀态,完成TCP三向交握。
完成了三次握手,用戶端和服務端就可以開始傳送資料,以上就是TCP三向交握的介紹。
我隻是個小測試
微信号 : minitest
Email:[email protected]
星河在上,波光在下。我在你身邊,等着你的 點贊,分享,關注