一个tcp协议的问题

为什么tcp建立连接的时候只需要三次握手,而断开连接的时候需要四次挥手? 这多出来的一次交互有必要吗?

有必要,四次挥手防止数据没传输完

就如同上面这位同学说的,四次挥手中有一次要保证对方正在传输或者计划传输的数据要传输完毕再关闭连接,不然可能会导致数据的不完整。

还是不太理解,我查了一下,四次挥手的时候server的fin和ack是分开发的,而三次握手的时候syn和ack是一起发的,这个是怎么保证数据没传输完的呢?

C端发FIN请求,是表示C端没有数据发送了,但还可以接收,同时S端可能没有把所有数据发过来,所以不会立刻关闭SOCKET,所以先发ACK,当S端都传输完后就发FIN给C端。

通俗点就是
C:我这边该说的都说完了
S:行,我知道了,请稍等一会,我还有点没说完
S:OK,我这边也说完了
C:合作愉快!

1 Like

非常感谢,终于理解了

关闭