zoukankan      html  css  js  c++  java
  • 初识TCP

      TCP(Transmission Control Protocol):传输控制协议。

      TCP特点:

        1. 面向连接的。
                2. 提供可靠性,实现了丢失重传。RTT的估算。
                3. 通过给所发送数据的每一个段管理一个序列号进行排序。
                3. 提供流量控制和拥塞控制:通告窗口、拥塞窗口。
                4. 连接是全双工的。

      TCP协议数据段格式

        

           字段说明:

          HLEN:首部长度,以4字节(32位)为单位。tcp数据段首部包括固定和变长两部分;
          窗口:为通告窗口;
          URG位:如果使用紧急数据指针,则将这一位设为1
          ACK位:如果确认序列号有效,则设为1;
          PSH位:表示”推”数据,如果这一位设置成1,表示希望接收方在接收到这个数据段之后,将它立即传送给高层应用程序,而不是缓存起来。        

                     RST位:表示请求重置连接。当TCP协议接收到一个不能处理的数据段时,向对方TCP协议发送这种数据段,表示这个数据段所标识的连接出现了某种错    误,请求对方TCP协议将这个连接清除。                                                                                                                                                                   SYN位:请求建立连接。tcp用这种数据段向对方tcp协议请求建立连接,在这个数据段中,tcp协议将它选择的初始序列号通知对方,并且与对方协议协商最大数据段的大小。
            FIN位:请求关闭连接。当协议收到对这个数据段的确认后,成功关闭写方向的连接,因为tcp连接是全双工的,在发送了FIN数据段之后,它仍能接收数据,直至对方也发送FIN数据段。
             紧急指针:如果设置了URG位,这个字段指出紧急数据相对于这个数据段的开始序列号的偏移量。tcp协议只提供一字节的紧急数据,但由于历史原因,紧急指针指向 紧急数据的下一个位置。

              有3种情况可能导致TCP协议发送RST数据段                                                                                                              (1)SYN数据段指定的目的端口处没有接收进程等待;                                                                  (2)TCP协议想放弃一个已经存在的连接;                                                                                (3)TCP接收到一个数据段,但是这个数据段所标识的连接不存在。接收到RST数据段的TCP协议立即将这条连接非正常断开,并向应用程序报告;

     

          TCP三次握手过程如下

          

        三次握手的目的是同步连接双方的序列号和确认号并交换 TCP 窗口大小信息。

        以下步骤概述了通常情况下客户端计算机联系服务器计算机的过程:
        1. 客户端向服务器发送一个SYN置位的TCP报文,其中包含连接的初始序列号J和一个窗口大小(表示客户端上用来存储从服务器发送来的传入段的缓冲区的大小)。
        2. 服务器收到客户端发送过来的SYN报文后,向客户端发送一个SYN和ACK都置位的TCP报文,其中包含它选择的初始序列号k、对客户端的序列号的确认J+1和一个窗口大小(表示服务器上用来存储从客户端发送来的传入段的缓冲区的大小)。
        3. .客户端接收到服务器端返回的SYN+ACK报文后,向服务器端返回一个确认号k+1和序号J+1的ACK报文,一个标准的TCP连接完成。

         TCP释放连接的过程如下:

          

  • 相关阅读:
    Tensorflow结点打包和依赖控制
    理解sklearn.feature.text中的CountVectorizer和TfidfVectorizer
    scipy稀疏矩阵
    最佳阈值划分问题
    hihocoder217周 树形DP
    linux免密码登录
    我说
    Linux查看GPU使用情况
    Java交替打印两个字符串
    2018摩拜算法工程师笔试题
  • 原文地址:https://www.cnblogs.com/blogXiong/p/3322702.html
Copyright © 2011-2022 走看看