TCP连接如何确保其可靠性

TCP通过序列号,数据校验,ACK确认,超时重传,流量控制,拥塞控制等确保传输的可靠性与效率。

1.序列号

在建立连接时由计算机生成的随机数作为其初始值,通过SYN包传给接收端主机,每发送一次就累加一次,用来解决网络包乱序的问题。

2.数据校验

目的:确保数据在传输过程中不被篡改或损坏

TCP使用16位校验和来检测数据在传输过程中的错误。校验和覆盖整个TCP段(包括头部和数据),以及一个"伪头部"。

校验和算法原理

1. 将数据按16位(2字节)分组

2. 所有16位字相加(二进制反码加法)

3. 结果取反码,得到校验和

接收方与发送方校验和确认

3.ACK确认

指下一次「期望」收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。用来解决丢包的问题。

4.超时重传

重传机制的其中一个方式就是在发送数据时,设定一个定时器,当超过指定的时间后,没有收到对方的ACK报文,就会重发该数据,也就是超时重传

TCP超时重传情况:

  • 数据包丢失
  • ACK确认应答丢失

5.流量控制

TCP滑动窗口机制是一种用于流量控制的技术,旨在确保数据的发送方不会超过接收方的处理能力。滑动窗口通过动态调整数据发送量,使数据传输更加高效,同时避免网络拥堵。

滑动窗口原理:随着接收方已收到数据的确认,发送方的窗口范围会向前滑动,允许发送新的数据,通过接收方动态调整数据发送量,是数据传输更加高效。

TCP的流量控制主要使用TCP的滑动窗口机制。

接收方维护一个接收窗口

这个接收窗口的大小不超过接收缓冲区大小,并且每次返回的ACK确认告知发送方

发送方维护一个发送窗口

发送窗口的大小不超过接收窗口的大小,也不超过发送缓存区的大小

里面既有发送了还没确认的消息,也有还没发送的消息

6.拥塞控制

网络拥塞 是指在网络中传输的数据量超过了可用带宽或中间设备(如路由器、交换机)的处理能力时,导致网络性能下降的现象。

TCP 拥塞控制机制通过慢启动、拥塞避免、快重传和快恢复四个阶段,动态调整发送速率,保证网络的稳定性和高效性。

慢启动:初始阶段,TCP发送方以较小的发送窗口传输数据,随着每次成功收到确认数据,指数级增大发送窗口大小。确保在网络发送初期谨慎地逐步增加发送窗口大小,以免引起网络拥塞。

拥塞避免:达到阈值(一般指慢启动阈值),进入拥塞避免阶段。发送窗口大小不再是指数级增长,而是线性增长。避免引起网络拥塞。

快重传:发送方连续收到相同的确认,会认为出现了数据包丢失,会迅速重新传输未确认的数据包,不用等待超时。这有助于更快地恢复拥塞引起的数据包丢失。

快恢复:快重传之后,进入快恢复阶段。发送方不会回到慢启动阶段,而是将慢启动阈值设置为当前窗口大小的一半,同时将拥塞窗口大小设置为慢启动阈值加上已确认但未被快速重传的数据块的数量。这有助于更快从拥塞中恢复。

7.头部开销

TCP头部

TCP头部固定20字节+可变选项(0-40)字节

UDP头部

UDP头部固定为8字节,总长度由Length字段和IP层报文长度共同决定,所以无需额外的首部字段长度。

头部长度是固定的------永远 8 Byte

1.UDP 头部只有 4 个字段,各占 2 字节:

|-------|----------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 | ┌───────┬───────┬────────┬────────┐ │SrcPort│DstPort│ Length │Checksum│ ← 共 ``8 Byte └───────┴───────┴────────┴────────┘ |

既然长度恒定,就无需额外再告诉一次"我有多长"。

2.没有可变选项

IP:因为支持可变的 Options,所以有 IHL。

TCP:因为支持 Options(MSS、SACK、Timestamp...),所以有 Data Offset。

UDP 不支持任何可选字段,自然不必保留这一项。

3.Length字段已隐含头部8Byte

UDP 的Length= 头部 8 Byte + 负载长度;解析方只要减去 8 就知道数据区长度,也能验证报文完

整性,再次证明单独的"头部长度"没意义。

相关推荐
SelectDB1 小时前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
zzzzzz3101 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
XIAOHEZIcode1 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220702 天前
如何搭建本地yum源(上)
运维
大树885 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠5 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质5 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
小宇宙Zz5 天前
Maven依赖冲突
java·服务器·maven
Inhand陈工5 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智5 天前
ARP代理--工作原理
运维·网络·arp·arp代理