分享

新手:TCP 的三向交握

 xiejunxy 2017-01-23

TCP 被称为可靠的联机封包,主要是透过许多机制来达成的,其中最重要的就是三向交握的功能。 当然, TCP 传送数据的机制非常复杂,有兴趣的朋友请自行参考相关网络书籍。 OK,那么如何藉由 TCP 的表头来确认这个封包有实际被对方接收,并进一步与对方主机达成联机? 我们以底下的图示来作为说明。新手:TCP 的三向交握

在上面的封包连接模式当中,在建立联机之前都必须要通过三个确认的动作, 所以这种联机方式也就被称为三向交握(Three-way handshake)。 那么我们将整个流程依据上面的 A, B, C, D 四个阶段来说明一下:

  • A:封包发起

    当客户端想要对服务器端联机时,就必须要送出一个要求联机的封包,此时客户端必须随机取用一个大于 1024 以上的端口来做为程序沟通的接口。然后在 TCP 的表头当中,必须要带有 SYN 的主动联机(SYN=1),并且记下发送出联机封包给服务器端的序号 (Sequence number = 10001) 。

  • B:封包接收与确认封包传送

    当服务器接到这个封包,并且确定要接收这个封包后,就会开始制作一个同时带有 SYN=1, ACK=1 的封包, 其中那个 acknowledge 的号码是要给 client 端确认用的,所以该数字会比(A 步骤)里面的 Sequence 号码多一号 (ack = 10001+1 = 10002), 那我们服务器也必须要确认客户端确实可以接收我们的封包才行,所以也会发送出一个 Sequence (seq=20001) 给客户端,并且开始等待客户端给我们服务器端的回应喔!

  • C:回送确认封包

    当客户端收到来自服务器端的 ACK 数字后 (10002) 就能够确认之前那个要求封包被正确的收受了, 接下来如果客户端也同意与服务器端建立联机时,就会再次的发送一个确认封包 (ACK=1) 给服务器,亦即是 acknowledge = 20001+1 = 20002 啰。

  • D:取得最后确认

    若一切都顺利,在服务器端收到带有 ACK=1 且 ack=20002 序号的封包后,就能够建立起这次的联机了。

也就是说,你必须要了解『网络是双向的』这个事实! 所以不论是服务器端还是客户端,都必须要透过一次 SYN 与 ACK 来建立联机,所以总共会进行三次的交谈! 在设定防火墙或者是追踪网络联机的问题时,这个『双向』的概念最容易被忽略, 而常常导致无法联机成功的问题啊!切记切记!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多