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

发布于:2023-09-27 ⋅ 阅读:(177) ⋅ 点赞:(0)

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

在这里插入图片描述


一、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
在这里插入图片描述

** **


在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到