zoukankan      html  css  js  c++  java
  • TCP的三次握手与四次挥手学习笔记

    TCP的三次握手与四次挥手学习笔记

    参考资料

    计算机网络——TCP的三次握手与四次挥手(超详细)

    1. 三次握手

    1.1 三次握手的流程

    SYN为1代表这是一个建立链接的请求
    ACK代表确认序号是有效的,即接收到之前报文的序号是正确的
    序号、确认序号:
    TCP开始,客户端初始化时请求报文随机生成一个序号c

    服务端收到序号后,设置确认序号为c+1
    同时服务端设置序号为s

    客户端收到后,设置确认序号为s+1
    设置序号为c+1
    此阶段报文可以发送数据,上面两个阶段报文处于未确认连接阶段。

    1.2 为什么要三次握手

    两次握手,可以证明通信是可达的。

    此时服务端已经确认了来自客户端的client-isn序号

    但是客户端还未确认来自服务的的server-isn序号

    所谓SYN,就是Synchronize的缩写,它之所以只存在在建立连接的阶段,是因为它存在的目的就是为了同步客户端和服务端的初始序号。这个序号是随机生成的,所以需要去确认。

    如果未进行第三次握手,这个时候去通信,因为SYNACK报文的缺失,客户端并不知道server-isn,则无法完成通信。

    2. 四次挥手

    2.1 挥手状态

    时间 状态(客/服) 有无发送功能(断开方/被动方)
    第一次 FIN1 1/1
    第二次 ACK1 0/1
    第三次 FIN2 0/1
    第四次 ACK2 0/0

    在第四次时,主动断开方也收到了被动断开方的断开报文,会回复一个ACK到被动断开方。被动断开方确认后,会释放相关的资源;主动断开方会在发送后等待一段时间(半分钟、一分钟或两分钟),再释放资源。

    2.2 为什么要等待一段时间后再释放

    • 因为第三次挥手时,会回送一条报文(第四次挥手)。第四次挥手时,如果出现损坏、丢失或超时,导致被动断开方收不到ACK,那么被动断开方会再次发送一次FIN到主动断开方(重新开始第二次挥手)。如果主动断开方此时已经释放资源,则无法处理这次请求。因此不能立即释放资源!

    • 另一个原因,是在断开之后,可能还会存在一些断开之前还在进行的网络传输。如果此时又建立了一个新的,端口和IP都一样的连接,那么遗留的网络报文此时会被当作新连接的报文做处理,这中不确定性会导致一些不可预估的问题。因此要在断开后,等待所有的传输都死掉,才释放资源。(未释放资源时,无法以同一IP和端口创建新连接)

    2.3 为什么需要四次挥手

    TCP连接是全双工的,即双方都可以主动发送报文。如果某一方断开连接,代表这一方不会再发送数据到另一方。但是不代表,另一方就不会再发送数据到断开方了。所以,一定要双方都确认断开才行。

  • 相关阅读:
    三比三:无线监控优点与传输技术剖解
    手把手教你学习FPGA系列视频教程_救护车鸣笛声
    世纪大争论:Linux还是GNU/Linux?
    [分享]我的LABVIEW快速开发串口测试软件实例
    高能效系统的功耗优化技术
    python学习小脚本多用户登录
    python学习三级菜单省市选择
    python学习购物车小程序
    python学习语句总结
    python学习猜年龄小游戏
  • 原文地址:https://www.cnblogs.com/Jennyism/p/computer_network_tcp01.html
Copyright © 2011-2022 走看看