1.三次握手
聊一聊每一次的握手
- 第一次握手:A向B发的第一次SYN同步包:
- A发送自己的同步号,期望B接受自己的同步号,以为后续的传输做准备。
- 假如丢失,那么A会超时重传。
- 第二次握手:B向A发的SYN+ACK的同步、响应包:
- B向A发送 自己接收到A后的响应号,表明自己是接受的A。之后把自己的同步号发送过去,表明自己的是谁。
- 假如丢失,相当于B就会超时重传。
- 第三次握手:A向B发的ACK的响应包:
- A向B发送已收到B的同步包和正确的响应包,据此在发送自己的最终响应。
- 假如丢失:因为A此时已经处于Established状态,所以有以下三种可能:
-
- a.若A没有数据发送、B也没有数据发送。此时B会因为未收到A的响应二超时重发自己的SYN+ACK。
-
- b.若A有数据要发,则将ACK+Data一同发送出去。
-
- c.若B要发送数据,会因为处于sync-received,二重发自己的SYN+ACK。
为什么不是两次或者四次?
- 假如两次握手:
- 很显然,假如两次握手,B无法接受到 A是否已经接收到自己的同步信息,这会导致TCP的可靠性大打折扣。
- 假如四次握手:
- 四次握手会多出一次多进行一次确认,但是不会提高太多的可靠性。也就是说四次握手在耗费更多资源的时候,并没有将可靠性提高很多。所以不采用。