三次握手流程
第一次握手:客戶端向服務端發起建立連接請求,客戶端會隨機生成一個起始序列號x,客戶端向服務端發送的字段包含標志位SYN=1,序列號seg=x。第一次握手后客戶端的狀態為SYN-SENT。此時服務端的狀態為LISTEN
第二次握手:服務端在收到客戶端發來的報文后,會隨機生成一個服務端的起始序列號y,然后給客戶端回復一段報文,標志位SYN=1,序列號seq=y,ACK=1,確認號ack=x+1。第二次握手后服務端的狀態為SYN-RCVD(SYN=1表示要和客戶端建立一個連接,ACK=1表示確認序號有效)
第三次握手:客戶端收到服務端發來的報文后,會再向服務端發送報文。ACK=1,序列號seq=x+1,確認號ack=y+1。客戶、服務端狀態變為ESTABLISTED。此時連接建立完成
為什么需要三次握手?
- 第一次握手:Client 什么都不能確認;Server 確認了對方發送正常,自己接收正常
- 第二次握手:Client 確認了:自己發送、接收正常,對方發送、接收正常;Server 確認了:對方發送正常,自己接收正常
- 第三次握手:Client 確認了:自己發送、接收正常,對方發送、接收正常;Server 確認了:自己發送、接收正常,對方發送、接收正常
所以三次握手目的是保證雙方都有發送和接收的能力。