張菲紅
“我是喲喲吼說科技,專注於數據網絡的回答,歡迎大家與我交流數據網絡的問題”
TCP協議採用三次握手的機制建立連接,提供穩定可靠的傳輸服務。
何為三次握手?
三次握手就是客戶端與服務器端建立TCP連接時需要發送3個包進行連接的確認,在三次握手完成後即可建立連接。那麼具體的每次握手都發送什麼信息呢?
1、第一次握手。客戶端發送請求報文,標誌位SYN設置為1,隨機產生seq值為x,客戶端進入SYN_SENT狀態,等待服務器端的回應。
2、第二次握手。服務器端接收到請求報文,將SYN和ACK都設置為1,ack為x+1,隨機產生seq值為y,然後將數據包發送給客戶端進行確認,服務器端進入SYN_RCVD狀態。
3、第三次握手。客戶端收到回應的數據包後,確認ack是否為x+1,以及ACK是否為1,若正確,則將ACK設置為1,ack為y+1,然後將數據發送給服務器端。服務器端在接受到數據後檢查ack是否為y+1,ACK是否為1,若正確則正確建立連接,雙方均進入ESTAB-LISHED狀態,完成三次握手。
若是用簡單的語言來描述的話,可以根據書本上經典的“兩軍通信”來理解。
背景為山的兩頭為紅軍和藍軍,山上為白軍,紅軍和藍軍都不是白軍的對手,若想要打敗白軍必須一起行動才可以,這時兩軍需要通信進行溝通了:
1、紅軍派人過去告訴藍軍明天中午12點進攻;
2、藍軍接受到通知並同意以後,派人告訴紅軍已收到指令,並同意該時間進攻;
3、紅軍收到通知後,會再次派人告訴藍軍自己已經收到回應,決定明天中午12點進攻。
這三次過程後,紅軍和藍軍就會在第二天中午12點發起進攻。這就可以簡單的理解為三次握手。
請大家多多關注我,探討其它問題。
喲喲吼說科技
TCP的三次握手很好理解,相當於這樣的場景:
A:你瞅啥?
B:瞅你咋地?
A:來,過來嘮嘮。
這不是開玩笑,這不是開玩笑,這不是開玩笑!
詳解TCP三次握手
第一步,A向B發送了一句“你瞅啥?”。這個時候:
A:不能確認B是否收到。
B:確定A能發消息。
第二步,B收到A的消息之後,回覆了一句“瞅你咋地?”。這個時候:
A:確認B能收到。
B:確認A能發消息,但是不確定A能不能收到消息。
第三步,A收到B的“瞅你咋地?”之後,發送了一句“來,過來嘮嘮。”。這個時候:
A:確認B能發能收。
B:確認A能發能收。
然後他們就開始愉快的“嘮嘮”。
TCP/UDP
除了TCP之外,我們還常聽到的是UDP,那麼他倆有啥區別呢?
TCP對應的是可靠性要求高的應用,從上面的解釋可以看出來,在真正通信之前要三次握手,是面向連接的;並且TCP利用序列號保證消息的有序性。
而UDP對應的則是可靠性要求低,但是流量大、速度快的應用;和TCP相比,UDP是無連接的並且可能是無序的。
TCP更重量,UDP更輕量,沒有高低之分,只是應用的場景不同。
希望我的回答可以幫助到你!