zoukankan      html  css  js  c++  java
  • TCP连接及11种状态总结

    一、什么是TCP:

    TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内 [1] 另一个重要的传输协议。

     二、什么是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建立连接(一般称为三次握手)

    过程描述总结:

    第一次握手:client端向server端发送一个请求为,SYN=1,并随机生成一个序列号作为自己的初始序号发送server,seq=x,

    第二次握手:server对client的数据包确认,SYN=1,ACK=1,收到序列号为x的数据包为ack=x+1,同时回复自己的初始序列号,seq=y

    第三次握手:client收到server的确认信息并建立连接,ACK=1,这次消息的序列号为seq=x+1,client收到server的序列号为seq=y,则ack=y+1

    然后client和server进去established状态,进行数据传输

    解释:SYN =1      发起一个新连接请求

       seq=x      序列号对数据进行标记,(x为随机号)

       ACK=1    确认对方的序号有效

       ack =x+1   server端收到client的序列号的确认回复

       seq = y    server端的初始序列号(y为随机号)

         seq =x+1      client第二发送的消息的序列号(x+1)

       ack=y+1      client收到server序列号的确认回复

     四、TCP释放连接(一般称为四次挥手)

    由于TCP连接是是全双工的,因此,每个方向都必须要单独关闭,client端和server端都要发送FIN=1 来终止连接

    过程描述总结:

    第一次挥手:client向server发送连接释放,即FIN=1,并生成消息序列号seq=u,client进去了FIN_WAIT-状态;

    第二次挥手:server收到client发送的FIN,发送ACK=1,确认序号为ack=u+1,并生成server序列号seq=v ,server进入CLOSE_WAIT状态;

    第三次挥手:server发送一个FIN,用来关闭client到server数据传输,Server进入LAST_ACK 状态;

    第四次挥手:client收到FIN,进入TIME_WAIT状态, 等待 2MSL 时间,发送ACK=1,确认序号ack=w+1, 完成四次挥手

    五、TCP连接11种状态

    解释

    CLOSED:初始状态,表示TCP连接是“关闭着的”或“未打开的”。

    LISTEN:表示服务器端的某个SOCKET处于监听状态,可以接受客户端的连接。

    SYN_SENT:发送完一个连接请求后等待一个匹配的连接请求。

    SYN_RECEIVED:发送连接请求并且接收到匹配的连接请求以后等待连接请求确认。

     ESTABLISHED :表示TCP连接已经成功建立。

     FIN_WAIT_1:等待远端TCP 的连接终止请求,或者等待之前发送的连接终止请求的确认。

     FIN_WAIT_2:等待远端TCP 的连接终止请求。

     CLOSE_WAIT:等待本地用户的连接终止请求。

    LAST_ACK:等待先前发送给远端TCP 的连接终止请求的确认(包括它字节的连接终止请求的确认)

     TIME_WAIT:等待足够的时间过去以确保远端TCP 接收到它的连接终止请求的确认。

    CLOSING:等待远端TCP 的连接终止请求确认。

  • 相关阅读:
    intellij idea 将taskRequest.java文件识别为文本文档
    react 学习笔记2
    react 学习笔记1
    webpack4 配置笔记(转自掘金)
    音乐播放之进度条-自定义
    EBS
    Python 学习笔记
    Form 电子表格(JTF GRID)
    Form 中实现历史记录查询
    Form 去掉使用格式掩码带来的多余字符
  • 原文地址:https://www.cnblogs.com/51wansheng/p/9163111.html
Copyright © 2011-2022 走看看