• tcp 三次握手建立连接难点总结


    所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。

    三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.在socket编程中,客户端执行connect()时。将触发三次握手。

    要了解tcp包的头部信息

    网络中传输的数据包由两部分组成:一部分是协议所要用到的首部,另一部分是上一层传过来的数据。首部的结构由协议的具体规范详细定义。在数据包的首部,明确标明了协议应该如何读取数据。反过来说,看到首部,也就能够了解该协议必要的信息以及所要处理的数据。包首部就像协议的脸。

    下面是tcp包头的信息

    这里要区分32位确认序号ack 和标志位的ACK,标志位的ACK一般为空或者置为1,但是确认序号ack一般是和序号seq这一串数字+1。

      • TCP端口号
        TCP的连接是需要四个要素确定唯一一个连接:
        (源IP,源端口号)+ (目地IP,目的端口号)
        所以TCP首部预留了两个16位作为端口号的存储,而IP地址由上一层IP协议负责传递
        源端口号和目地端口各占16位两个字节,也就是端口的范围是2^16=65535
        另外1024以下是系统保留的,从1024-65535是用户使用的端口范围

      • TCP的序号和确认号
        32位序号 seq:Sequence number 缩写seq ,TCP通信过程中某一个传输方向上的字节流的每个字节的序号,通过这个来确认发送的数据有序,比如现在序列号为1000,发送了1000,下一个序列号就是2000。
        32位确认号 ack:Acknowledge number 缩写ack,TCP对上一次seq序号做出的确认号,用来响应TCP报文段,给收到的TCP报文段的序号seq加1。

      • TCP的标志位
        每个TCP段都有一个目的,这是借助于TCP标志位选项来确定的,允许发送方或接收方指定哪些标志应该被使用,以便段被另一端正确处理。
        用的最广泛的标志是 SYNACK 和 FIN,用于建立连接,确认成功的段传输,最后终止连接。

        1. SYN:简写为S,同步标志位,用于建立会话连接,同步序列号;
        2. ACK: 简写为.,确认标志位,对已接收的数据包进行确认;
        3. FIN: 简写为F,完成标志位,表示我已经没有数据要发送了,即将关闭连接;
        4. PSH:简写为P,推送标志位,表示该数据包被对方接收后应立即交给上层应用,而不在缓冲区排队;
        5. RST:简写为R,重置标志位,用于连接复位、拒绝错误和非法的数据包;
        6. URG:简写为U,紧急标志位,表示数据包的紧急指针域有效,用来保证连接不被阻断,并督促中间设备尽快处理;

    建立连接的过程

    seq 和 ack 的信息就像是客户端与服务端通信的问答信息。

    第一个包:客户端请求(问)

    第二个包:服务端应答(答),并且也有一个请求,SYN=1,也生成一个seq(问)

    第三个包:客户端回应(答),回答第二个包里的seq,返回ack=seq+1         

      • 第一次握手
        客户端将TCP报文标志位SYN置为1,随机产生一个序号值seq=J,保存在TCP首部的序列号(Sequence Number)字段里,指明客户端打算连接的服务器的端口,并将该数据包发送给服务器端,发送完毕后,客户端进入SYN_SENT状态,等待服务器端确认。

      • 第二次握手
        服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将TCP报文标志位SYN和ACK都置为1,ack=J+1,随机产生一个序号值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。

      • 第三次握手
        客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。

    https://blog.csdn.net/a519640026/article/details/104448480

  • 相关阅读:
    结对第一次—疫情统计可视化(原型设计)
    寒假作业(2/2)
    寒假作业(1/2)
    android 全局悬浮窗的使用以及权限
    个人作业——软件工程实践总结&个人技术博客
    个人作业——软件评测
    结对第二次作业——某次疫情统计可视化的实现
    软工实践寒假作业(2/2)
    软工实践寒假作业(1/2)
    蒟蒻博主又回来了
  • 原文地址:https://www.cnblogs.com/fengfengyang/p/15487418.html
Copyright © 2020-2023  润新知