TCP三次握手四次断开

来源:互联网 发布:淘宝客api怎么用 编辑:程序博客网 时间:2024/05/22 17:34
        
  了解TCP为什么要三次握手的时候,觉得这个描述比较好理解。
  在谢阿希仁著《计算机网络》第四版中讲“三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”。在另一部经典的《计算机网络》一书中讲“三次握手”的目的是为了解决“网络中存在延迟的重复分组”的问题。这两种不用的表述其实阐明的是同一个问题。
谢希仁版《计算机网络》中的例子是这样的,“已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”
  这也是一个挺好的例子:
  三次握手:
“喂,你听得到吗?”
“我听得到呀,你听得到我吗?”
“我能听到你,今天balabala……”
四次断开也是一个相互确认的过程:
1 ·当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求
2 ·主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1
3 ·由B 端再提出反方向的关闭请求,将FIN置1
4 ·主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束.