TCP三次握手图解
三次握手过程网上都很详细,然而第三次握手客户端发送给服务器的seq = x+1,自己画图的时候画成了seq = x+2,于是查了下问题所在。
原因是 TCP 协议规定SYN报文虽然不携带数据,但是也要消耗1个序列号,所以前两次握手客户端和服务端都需要向对方回复 x+1 或 y+1 。
常见问题
TCP 为什么三次握手而不是两次、四次?
在《计算机网络》中,三次握手的目的是“为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误。”
通俗的说就是client发送了一个报文段,由于网络原因导致延误了,若此时连接已经释放并断开,那么这个晚来的失效报文段被server接收,server以为是client再次发出的一个新的连接请求,就向client发出确认报文段,同意建立连接。(其实这时client已经断开连接了)。
假设不采用“三次握手”,例如两次握手。那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据,但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。好比:
A:喂,听到吗?
B:能听到,你呢?
A:...
B:...