zoukankan      html  css  js  c++  java
  • 关于对TCP三次握手的理解

    TCP报文格式

    1. TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接。TCP在发送数据前必须在彼此间建立连接,这里连接意思是:双方需要内保存对方信息(例如:IP,Port…)

    2. 报文主要段的意思

        序号(sn):表示发送的数据字节流,确保TCP传输有序,对每个字节编号

        确认序号(asn):发送方期待接收的下一序列号,接收成功后的数据字节序列号加 1。只有ACK=1时才有效。

        ACK:确认序号的标志,ACK=1表示确认号有效,ACK=0表示报文不含确认序号信息

        SYN:连接请求序号标志,用于建立连接,SYN=1表示请求连接

        FIN:结束标志,用于释放连接,为1表示关闭本方数据流

      我在这里把序号叫做Sequence Number,简写sn

      确认序号叫做Acknowledgment Sequence Number,简写asn

    第一阶段:客户端发起连接阶段

       客户端发起连接请求,将SYN置为1, 同时发送序列号sn为x(x 是随机生成的一个 int 数值), 然后客户端进入SYN_SEND状态,等待服务器的确认,

      总之: client 发送的数据包:SYN=1;sn=x

      状态:SYN_SEND

    第二阶段:服务器确认收到请求

      服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Sequence Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为 y (y 是随机生存的一个 int 数值);服务器端将上述所有信息放到一个报文段中,一并发送给客户端,此时服务器进入SYN_RECV状态

           总之:server发送的数据包, SYN=1;ACK=1;asn=x+1;sn=y

      状态:SYN_RECV

    第三阶段:客户端确认收到,发送确认信息

      客户端收到报文后,需要对报文段进行确认,所以ACK标志位为1,设置Acknowledgment Sequence Number为y+1;这个时候,不是发起连接请求,不必要对SYN标志位置为1;同时发送自己的序列号sn=x+1

           总之:server发送的数据包, ACK=1;asn=y+1;sn=x+1

      状态:ESTABLISHED

    三次握手过程分析:

    • 第一次:客户端发送请求到服务器,服务器知道客户端发送,自己接收正常。客户端没法知道自己的状态。SYN=1,seq=x
      • 客户端:没法知道自己发送和接收是否正常,也没法知道服务器是否发送接收正常
      • 服务器:知道客户端发送正常,知道自己接收正常。
    •  
    • 第二次:服务器发给客户端,客户端知道自己发送、接收正常,服务器知道自己接收正常。ACK=1,ack=x+1,SYN=1,seq=y
      •  客户端:知道自己发送和接收都正常了,知道服务器发送接收都正常了
      •  服务器:知道客户端发送正常,知道自己接收正常
    • 第三次:客户端发给服务器:服务器知道客户端发送,接收正常,自己接收,发送也正常.seq=x+1,ACK=1,ack=y+1
      • 客户端:知道自己发送和接收都正常了,知道服务器发送接收都正常了
      • 服务器:知道客户端发送接收都正常了,知道自己发送了接收都正常了

    上面分析过程可以看出,握手两次达不到让双方都得出自己、对方的接收、发送能力都正常的结论的。

      

    当值未一旬,而视茫茫,而发苍苍,而齿牙动摇
  • 相关阅读:
    jmeter(46) redis
    jmeter(45) tcp/ip协议
    Codeforces Round #538 (Div. 2)D(区间DP,思维)
    Codeforces Global Round 1D(DP,思维)
    Educational Codeforces Round 57D(DP,思维)
    UPC11073(DP,思维)
    Yahoo Progamming Contest 2019D(DP,思维)
    Atcoder Beginner Contest 118D(DP,完全背包,贪心)
    Xuzhou Winter Camp 1C(模拟)
    Educational Codeforces Round 57 (Rated for Div. 2)D(动态规划)
  • 原文地址:https://www.cnblogs.com/niuniuc/p/14387722.html
Copyright © 2011-2022 走看看