• TCP建立连接和释放的过程,及TCP状态变迁图


    一、TCP报文格式

    下面是TCP报文格式图:

    重要字段介绍:

    (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。

    (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。

    (3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:

    (A)URG:紧急指针(urgent pointer)有效。
    (B)ACK:确认序号有效。
    (C)PSH:接收方应该尽快将这个报文交给应用层。
    (D)RST:重置连接。
    (E)SYN:发起一个新连接。
    (F)FIN:释放一个连接。

    二、TCP三次握手

      所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发,整个流程如下图所示:

    1) 请求端(通常称为客户)发送一个SYN段指明客户打算连接的服务器的端口,以及初始序号。这个SYN段为报文段J。
    2) 服务器发回包含服务器的初始序号的SYN报文段(报文段2)作为应答。同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个S Y N将占用一个序号。
    3) 客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认(报文段3)。

    三、TCP四次挥手

      四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发,整个流程如下图所示:

    四、TCP 状态变迁图

      TCP的完整状态变迁图如下:

    重点说明TIME WAIT状态:

    TIME WAIT状态也称为2 MSL等待状态。每个具体TCP实现必须选择一个报文段最大生存时间MSL(Maximum Segment Lifetime)。它是任何报文段被丢弃前在网络内的最长时间。我们知道这个时间是有限的,因为TCP报文段以IP数据报在网络内传输,而IP数据报则有限制其生存时间的TTL字段。

    为什么需要TIME WAIT 状态,原因有二:

    1、保证TCP协议的全双工连接能够可靠关闭(防止最后FIN的ACK在网络中丢失,如果最后发送FIN的那段,在规定时间内没有收到FIN的ACK,就会重发FIN,由于有2MSL的等待时间,那么另一端就可以再次收到FIN,再次发送一个ACK)
    2、保证这次连接的迷途数据段从网络中消失(防止立即建立这个连接的替身,如果没有2 MSL等待迷途数据消失,那么有可能上一个连接的数据被当作当前连接的数据)

  • 相关阅读:
    [转载]ipmitool 对linux服务器进行IPMI管理
    js获取屏幕分辨率
    jquery实现点击块时高亮显示
    [转载]jquery的each()详细介绍
    jQuery用户登录时鼠标焦点事件
    ABAP Programs For Learners
    如何调整ABAP程序的性能
    函数 BAPI_GOODSMVT_CREATE调用实例
    For all entries使用中注意的问题
    用SAP Authority Object 对权限控制
  • 原文地址:https://www.cnblogs.com/wangjzh/p/4695940.html
Copyright © 2020-2023  润新知