一、UDP 协议
UDP 在前面套接字编程介绍了特点是: 无连接、不可靠传输、面向数据报、全双工。
UDP 协议格式:

- 16 位 UDP 长度,表示整个数据报 (UDP 首部+UDP 数据) 的最大长度,0 - 65535,也就 64KB;
- 16 位 UDP 校验和:如果校验和出错,就会直接丢弃;
校验和的作用:
- 防止传输过程出现比特翻转(比特翻转就是指:数据受到外界干扰,0 变 1,1 变 0)
发送之前,先计算一个校验和,把真个数据报的数据都代入 把数据 和 校验和 一起发送给对端 接收方收到之后重新计算一下校验和,和收到的校验和进行对比 (UDP 发现校验和不一致,就会直接丢弃) UDP 的校验和使用了 CRC 方式来进行校验(循环冗余校验) 把每个字节(除了校验和位置的部分之外),都当做整数进行累加。溢出也没关系,继续加 最终得到结果 CRC 校验和 传输到对端时,数据如果出现错误了,对端再次计算的校验和,就会和第一个校验和不一样了 校验和相同,原始数据可能相同(原始数据不同发生的概率非常小)。 校验和不同,原始数据一定不同。
这样的机制虽然也有错,因为一个数据和对应的数据不是唯一的,但是这种是小概率事件。
二、TCP 协议
2.1 TCP 结构
TCP 在前面套接字编程介绍了特点是: 有连接、可靠传输、面向字节流、全双工。
TCP 格式:

-
4 位首部长度:表示该 TCP 头部有多少个 32 位 bit (有多少个 4 字节);所以 TCP 头部最大长度是 15 * 4 = 60 字节
-
选项:选项就是确定 TCP 长度是可变的,固定长度是 20 字节,选项最多增加 40 字节
-
保留位:UDP 长度不够时,不能扩展,而保留位就是 TCP 预留解决这种问题的。
-
6 个标志位:
- URG:紧急指针(相当于'插队',跳过前面数据,从指定序号开始)是否有效
-
ACK:确认号是否有效
-
PSH:催促标志位,提示接收端应用程序立刻从 TCP 缓冲区把数据读走
-
RST:对方要求重新建立连接;我们把携带 RST 标识的称为复位报文段
-
SYN:请求建立连接;我们把携带 SYN 标识的称为同步报文段
-
FIN:通知对方,本端要关闭了,我们称携带 FIN 标识的为结束报文段
-
16 位校验和:校验数据是否出现错误
-
16 位紧急指针:标识哪部分数据是紧急数据
2.2 TCP 十大核心机制
2.2.1 确认应答
保证可靠性:那就肯定需要,发送方知道接收方是否接收到请求,接收方返回一个'应答报文(acknowledge,ack)'
如果有这种情况:后发先至
网上做题是答案是对应题目的,但是如果你先写的第一题答案,后写的第二题答案,由于传输问题,导致第二题答案先到。那么如果没有题号对应的话,那么就可能填在第一题去了。所以 TCP 也引入的类似题号作用的东西:














