TCP为什么需要三次握手和四次挥手

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Betterc5/article/details/81751141

网上已经有很多解释了,就不瞎说了,Mark一些链接作为自己的学习笔记吧。
学习参考链接1
学习参考链接2
学习参考链接3
学习参考链接4

为什么要3次握手
  • 防止已过期的连接请求报文突然又传送到服务器,因而产生错误。

    Client发生一个请求连接报文可能因为网络延迟等原因,没有送达到server中。但是当这个client的请求报文送达到server时,如果没有三次握手的话,server就会直接发数据可client,这样会导致server资源的浪费。

  • 这个问题的本质是, 信道不可靠。

    信道不可靠,但是通信双发需要就某个问题达成一致. 而要解决这个问题, 无论你在消息中包含什么信息, 三次通信是理论上的最小值. 所以三次握手不是TCP本身的要求, 而是为了满足”在不可靠信道上可靠地传输信息”这一需求所导致的. 请注意这里的本质需求,信道不可靠, 数据传输要可靠. 三次达到了, 那后面你想接着握手也好, 发数据也好, 跟进行可靠信息传输的需求就没关系了. 因此,如果信道是可靠的, 即无论什么时候发出消息, 对方一定能收到, 或者你不关心是否要保证对方收到你的消息, 那就能像UDP那样直接发送消息就可以了.”。

为什么要4次挥手?
  • 确保数据能够完成传输。

    关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

猜你喜欢

转载自blog.csdn.net/Betterc5/article/details/81751141