您好,登錄后才能下訂單哦!
TCP的三次握手四次揮手時面試時面試官經常問道的問題
在互聯網中,如何使不同網段的主機相互通信,需要用到TCP協議;
TCP,提供面向連接的服務,在傳送數據之前必須先建立連接,數據傳送完成后要釋放連接。TCP是一種可靠的的運輸服務,采用三次握手建立一個連接。
首先介紹下TCP的報文格式
序號 發送端為每個字節編號,方便接收端正確重組。
確認號 用于確認發送端的信息。
窗口大小 用于說明本地可接收數據段的數目。
標志位
URG 緊急指針位 1 開啟 0 關閉。
不經過緩存直接提交給對方。
PSH 快速接受傳遞給應用層 1 開啟 0 關閉
需要經過緩存,等一批報文段到齊,直接發送應用層。
SYN 同步序號位 建立連接的請求標記
FIN 斷開連接的請求標記
ACK 確認序號位
RST 重新連接
第一次握手
客戶機想和服務器建立連接,就向服務器發送了一個SYN到服務器,等待服務器確認
第二次握手
TCP服務器收到請求報文后,先確認SYN包,如果同意連接,則發出SYN+ACK包.
第三次握手
客戶端收到服務器的SYN+ACK包后,還需要向服務器發送確認包ACK,此包發送完畢,此后雙方就可以開始通信了,完成三次握手。
由于TCP連接是全雙工的,因此每個方向都必須單獨進行關閉。這個原則是當一方完成它的數據發送任務后就能發送一個FIN來終止這個方向的連接。收到一個 FIN只意味著這一方向上沒有數據流動,一個TCP連接在收到一個FIN后仍能發送數據。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。
第一次揮手
服務器向客戶端發送FIN和ACK位置1的TCP報文段。
第二次揮手
客戶端向服務器返回ACK位置1的TCP報文段。
第三次揮手
客戶端向服務器發送FIN和ACK的位置1的TCP報文段。
在TCP斷開連接的過程中,有一個半關閉的概念。TCP的一方(通常是客戶端)可以終止發送數據,但仍然可以接受數據,稱為半關閉。
為什么建立連接時時三次握手,而斷開連接時時四次揮手?
關閉連接時,服務器收到對方的FIN報文時,表示對方不再發送數據,但是還能接收數據,而自己也未必把全部數據都發送給對方了,所以發送完數據給對方后,再發送FIN報文給對方來表示同意現在關閉連接,因此,ACK和FIN一般都會分開發送,從而導致多了一次。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。