TCP協議的三次握手與四次揮手

2021-10-25 21:20:15 字數 1463 閱讀 6503

先明確乙個問題:每一次client與server交換的東西叫 —— 報文段

tcp是面向連線的,安全可靠的協議,三次握手正是為了保證能夠建立乙個安全可靠的連線

何為安全,如何保證安全?

question:為什麼2次握手?不行?

到目前為止,客戶端client已經知道了自己既能給server發訊息也能接受server的訊息,但是server只曉得client發給自己的資訊可以收到,但是自己發給client的訊息client能不能接受的到這個不知道,所以2次握手不夠(這一條也就是很多面經裡寫到的「同步序列號問題」,即client與server就server的初始序列號問題無法達成一致,這樣後面很有可能會導致錯誤的連線)

question:4次握手?呢?

3次握手就已經能將client與server序列號同步問題解決,多加一次只會浪費資源降低效率

至此,client和server都知道了彼此之間能給對方發訊息也能收到對方的訊息

seq起到的乙個很重要的作用:

若client的initial sequence number = 1000,那麼,它之後傳送的報文seq number都是1001、1002、1003...,若突然出現了乙個seq number = 900,表明該報文不合法(校驗合法的作用)

像3次握手這種機制叫做「雙工通訊」因為是client發起的斷開,所以在此時client是一定做好斷開準備的1.客戶端傳送,fin位至1(fin=1),隨機生成乙個初始序列號seq=x

2.服務端傳送ack=1,ack=x+1,seq=u(這一次的意義好比:服務端向客戶端說:「好的,收到你請求斷開的請求,我目前並未準備好,待我準備好時再通知你!」)

question:為什麼揮手?一定要4次?

這裡server不一定能夠做好斷開準備

3.服務端繼續傳送fin=1,ack=1,seq=v(「我準備好了,分手吧!」),ack=x+1

4.客戶端傳送ack=1,ack=v+1,seq=x+1

tip:你是否對syn、fin、ack...弄不清楚,什麼時候該位為1,何時該位為0?

1)syn表示建立連線;

2)fin表示關閉連線;

3)ack表示響應;

附上兩張官方講解圖:

TCP三次握手與四次揮手協議

tcp 在不可靠的網路通道傳進行可靠的訊息傳輸 1 tcp首部資訊 2 三次握手 syn synchronrous 同步訊息序列,發起乙個新的連線 tcp三次握手過程中,攜帶syn 同步序號 seq 訊息序號 rwd 視窗大小 1 urg 緊急指標 urgent pointer 有效。2 ack 確...

TCP協議三次握手與四次揮手

其實該過程就像一次打 前去拜訪 1 客戶端 喂?伺服器麼,我今天要去拜訪你。syn 1 seq x 2 伺服器 哦,好的,我去門口接你。syn 1 ack 1 seq y ack x 1 3 客戶端 我到了,你真客氣,我要進來了。ack 1 seq x 1 ack y 1 客戶端主動開啟,伺服器被動...

TCP協議,三次握手與四次揮手

tcp報文格式 每行簡介 1.源埠和目的埠各佔2個位元組,即16位。2.32位序號,佔4個位元組,tcp連線中傳送的位元組流中每個位元組都按順序編號。例如,一段報文的序號字段值是 301 而攜帶的資料共有100欄位,顯然下乙個報文段 如果還有的話 的資料序號應該從401開始。3.32位確認序號。是期...