TCP之连接的建立与终止

作者: 采风JS | 来源:发表于2017-04-14 17:48 被阅读239次

    一、TCP浅谈

    TCP:传输控制协议,一种面向连接的、可靠的、端到端的字节流服务。TCP包首部如下图,

    TCP包首部

    基于WireShark分析TCP首部字段的含义,如下图,

    WireShark分析TCP首部

    下面列出TCP头部中常用的字段含义:

    a)以太网帧头+IP头+TCP头部

    b)源端口和目的端口:分别为16位字节,最大为65535,详情参照计算机端口详解

    c)序列号和确认号:序列号,标识发端到收端的字节流;确认号,确认的一端期望收到的下一个序号,详情参照TCP序列号与确认号详解 下文截图中,注意观察序列号与确认号的变化

    d)标志比特:URG、ACK、PSH、RST、SYN和FIN,用于发端和收端的通信交流

    e)窗口大小:发端有控制窗口,用于发端流量控制;收端有通用窗口,用于收端流量控制

    二、三次握手与四次挥手

    TCP建立时,三次握手;TCP终止时,四次挥手。其中,涉及到发端与收端的共计12种状态,如下图所示,

    三次握手与四次挥手

    为更好的解释连接与终止的过程,结合WireShark分析此过程,

    Client主动连接

    a)CLIENT主动连接,发送SYN J同步信号,从CLOSED状态进入SYN_SENT状态

    SERVER接收SYN,并发送SYN K和ack J+1

    b)SERVER接收SYN,进入SYN_RCVD状态,并且发送SYN K和ack J+1

    CLIENT发送ack K+1

    c)CLIENT收到SYN K和ack J+1,进入ESTABLISHED状态,并且发送ack K+1

    d)SERVER收到ack K+1,进入ESTABLISHED状态

    至此,经过三次握手,TCP正式建立连接

    CLIENT发送FIN M,主动关闭连接

    e)CLIENT发送FIN终止信号,主动关闭连接,进入FIN_WAIT_1状态;CLIENT不再发送数据,但SERVER仍然可以发送数据

    SERVER发送ack M+1

    f)SERVER收到FIN M,进入CLOSE_WAIT状态,并且发送ack M+1

    SERVER发送FIN N

    g)CLIENT收到ack M+1,进入到FIN_WAIT_2状态

    CLIENT发送ack N+1

    h)CLIENT收到FIN N,并且发送ack N+1,进入TIME_WAIT状态,在2MSL时间后,进入到CLOSED状态(2MSL在下文解释)

    三、补充问题说明

    a)主动终止也可以发生在SERVER端

    b)发端进行主动SYN请求时,发生连接建立的超时情况,超时间隔由二进制指数退避算法确定

    c)在连接建立阶段,收发双方会传送MSS(最大报文段长度),分别通告对方期望接受的选项

    d)为什么终止需要四次挥手?因为TCP是一种全双工的模式,即通信双方同时双向传输数据,任意一段断开连接仅会进入半关闭状态,仍然单方向存在数据传输

    e)MSL为报文段最大生存时间,假设网络不可靠,最后的ack确认指令丢失。该字段用于重发可能丢失的报文

    f)在2MSL阶段,本地IP、端口号和远端IP、端口号构成四元组,理论上其他应用程序不能暂用,但是具体软件实现存在特殊情况

    g)三次握手与四次挥手为最常见的情况,但同时存在双方同时打开与同时关闭的情况,但是发生的概率很小,仅需要四个报文段完成连接和终止

    相关文章

      网友评论

      本文标题:TCP之连接的建立与终止

      本文链接:https://www.haomeiwen.com/subject/qjxgattx.html