• 【计算机网络】详解TCP协议(上) TCP协议头结构 | ACK确认应答 | 超时重传机制


    创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
    主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
    更多计算机网络知识专栏:计算机网络🔥
    给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

    在这里插入图片描述


    一、TCP协议的特点

    TCP 是⾯向连接的可靠的基于字节流的传输层通信协议

    • 1.⾯向连接的:⼀定是⼀对⼀才能连接,不能像 UDP 协议可以⼀个主机同时向多个主机发送消息,也就是⼀对多是⽆法做到的
    • 2.可靠的:⽆论的⽹络链路中出现了怎样的链路变化,TCP 都可以保证⼀个报⽂⼀定能够到达接收端。可靠有序,不丢不重
    • 3.字节流:消息是没有边界的,所以⽆论我们消息有多⼤都可以进⾏传输。并且消息是有序的,当前⼀个消息没有收到的时候,即使它先收到了后⾯的字节,那么也不能扔给应⽤层去处理,同时对重复的报⽂会⾃动丢弃

    二、TCP协议头结构

    在这里插入图片描述

    首先是源端口目的端口,共占32个字节。这两个是UDP中也有的,但是UDP中只有这两个,没有后面的校验数据

    序列号:在建立连接时由计算机生成的随机数作为初始值,发送端和接收端每发送一次数据,就累加一次数据大小。

    序列号保证了网络包不会乱序

    确认号:指下一次期望收到的数据的序列号,发送端收到确认应答后代表确认序号之前的网络包都已成功收到

    确认应答号保证了不丢包

    数据偏移:首部长度

    控制位: 哪一位置为1,对应的字段变为有效

    • URG:紧急指针,标明此报文段中有紧急数据,是高优先级的数据,应尽快传送,不用在缓存里排队,配合紧急指针字段使用

    • ACK:ACK=1时确认号有效,除了最初SYN包,其余ACK都置为1

    • PSH:推送位,接收方尽快交付接收应用进程,不再等到缓存填满再向上交付

    • RST:表明TCP连接中出现严重差错,必须释放连接,然后再重新建立传输链接

    • SYN:连接请求/连接接受报文,最初需要设定序列号初始值

    • 窗口:指的是发送本报文段的一方的接收窗口,即现在允许对方发送的数据量

    • 检验和:检验首部和数据部分长度

    • 紧急指针: URG=1时才有意义,指出本报文段中紧急数据的字节数

    • 选项:最大报文段长度MSS、窗口扩大、时间戳、选择确认…

    三、ACK确认应答机制

    一个客户端和服务端进行数据传输的简单示例

    如下图:

    在这里插入图片描述

    当客户端发送一个数据包时,它将包含一个序列号seq,以便服务端可以确认数据包的顺序

    当服务端收到数据包时,它将通过发送一个带有确认号ack=N+1的ACK包来确认收到N号数据包。这个确认号N+1表示下一个期望接收的数据包序列号,也代表101之前的包我都收到了

    在客户端,每次发送完一个数据包后,它都会等待服务端的确认。当客户端收到服务端返回的ack=N+1的确认包ACK时,它会知道服务端已经成功接收到了上一个1—100的数据包。然后,客户端可以继续发送下一个数据包

    四、超时重传机制

    TCP在传输数据的过程中,为了确保数据的可靠传输,采用了超时重传机制

    即TCP的发送方在规定的时间内没有收到确认就要重传已发送的报文段

    在这里插入图片描述

    • 情况1:数据包丢失

    在客户端发送数据后,如果在规定时间没有收到服务端回复的ack(超过超时时间),那么就证明我们发送包丢失,重新给服务端重新发送上次丢失的包(没有收到ack回应的包),直到在规定时间收到服务端回复的ack

    • 情况2:确认应答包丢失

    在规定时间(超过超时时间)内没有收到服务端回复的ack包,就再次发送一遍数据,服务端已经接收过这个数据不会再次处理,把重复的包丢弃,然后重新回复一遍ack

    往返时延RTT和超时重传时间RTO

    RTT:数据从⽹络⼀端传送到另⼀端所需的时间,也就是包的往返时间

    RTT表示从发送端发送数据开始,到发送端接收到来自接收端的确认(ACK),总共经历的时延。也就是从发送数据到收到ack的时间

    RTT由三个部分决定:
    1.链路的传播时间
    2.末端系统的处理时间
    3.路由器的缓存中的排队和处理时间

    RTO:超时重传时间,指发送方发送数据后,等待接收方确认的时间

    TCP每发送一个报文段,就会对这个报文段设置一个超时重传计时器,此时计时器设置的超时重传时间RTO应略大于TCP报文段的平均往返时延RTT,一般取RTO=2RTT
    在这里插入图片描述

    ** **


    在这里插入图片描述

    大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
    大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)
  • 相关阅读:
    深度解析:为何在 SwiftUI 视图的 init 初始化器里无法更改 @State 的值?
    Go语言error错误处理
    JVM的故事——类文件结构
    EventLoop框架C++服务端(Tcp/Ip)搭建---完善
    PTR: Prompt Tuning with Rules for Text Classification
    瑞_23种设计模式_组合模式
    Google guava第二讲:Ratelimiter限流原理与实现
    LOTO虚拟示波器 关于触发灵敏度功能
    4.2 onnx简化模型结构
    2022年最新Vue常见基础面试题(看这一篇就够了)
  • 原文地址:https://blog.csdn.net/TiSg0/article/details/133275265