传输层协议 TCP(1)

传输层协议 TCP(1)

TCP 协议

TCP 全称为 "传输控制协议(Transmission Control Protocol"). 人如其名, 要对数据的传输进行一个详细的控制;

TCP 协议段格式

• 源/目的端口号: 表示数据是从哪个进程来, 到哪个进程去;

• 32 位序号/32 位确认号: 后面详细讲;

• 4 位 TCP 报头长度: 表示该 TCP 头部有多少个 32 位 bit(有多少个 4 字节); 所以TCP 头部最大长度是 15 * 4 = 60

• 6 位标志位:

○ URG: 紧急指针是否有效

○ ACK: 确认号是否有效

○ PSH: 提示接收端应用程序立刻从 TCP 缓冲区把数据读走

○ RST: 对方要求重新建立连接; 我们把携带 RST 标识的称为复位报文段

○ SYN: 请求建立连接; 我们把携带 SYN 标识的称为同步报文段

○ FIN: 通知对方, 本端要关闭了, 我们称携带 FIN 标识的为结束报文段

• 16 位窗口大小: 后面再说

• 16 位校验和: 发送端填充, CRC 校验. 接收端校验不通过, 则认为数据有问题. 此处的检验和不光包含 TCP 首部, 也包含 TCP 数据部分.

• 16 位紧急指针: 标识哪部分数据是紧急数据;

• 40 字节头部选项: 暂时忽略;

类比文件:把数据到文件做写入,把文件打开,在内核中创建一个struct file对象,把文件对应的属性载入到内核中,以innode的形式让我们能通过struct file结构体找到它

struct file有对应的缓冲区,文件缓冲区,把数据从应用层通过write或系统调用把数据写入对应的文件,并不是把数据写到对应的外设,而是把数据写入到该文件的内核,缓冲区里,操作系统把数据刷新到外设中

刷新的过程:从自己的TCP数据缓存区放送到对方的数据缓冲区,发送的多少叫刷新的策略

报头和有效载荷分离?

4比特位,从二进制角度来说是[0,15],但是起步要二十个字节,所以有规定:基本单位是4字节,所以实际上是[20,60],TCP报头一定要能整除四个字节

怎么没有报文大小,只有报头大小?

因为TCP是面向字节流的,数据的大小由上层决定

TCP的可靠性

1.具有应答,可以保证对历史消息的可靠性

2。通信中最新的报文永远无法应答,最新可靠性无法保证

3.保证可靠性,处于核心地位:确认应答机制

我们不能够对应答做出应答,这会处于无限循环

这是有确认序号,确认序号是在原有序号基础上加1,在指定报文序号前把所有信息收集起来,下一次发送开始从确认序号开示,

服务端不只有应答,还有报头加上有效载荷

比如:一段对话

李雷:你吃了吗

韩梅梅:我吃了我吃的饺子

李雷:我吃的寿司

。。。

也会有出现乱序的情况,这是不可靠的,所以双方传递的TCP报文必须有报头

相关推荐
努力努力再努力wz3 分钟前
【MySQL进阶系列】拒绝冗余SQL:带你透彻理解视图的底层逻辑
android·c语言·数据结构·数据库·c++·sql·mysql
杨云龙UP4 分钟前
Windows Server 2012 环境下 Oracle 11.2 使用 expdp 实现自动备份、异地复制与定期清理_20260504
服务器·数据库·windows·mysql·docker·oracle·容器
ACP广源盛139246256735 分钟前
一芯搞定多屏高清@ACP#GSV1221 DP 1.4 MST 转 HDMI 1.4 高集成转换芯片
网络·人工智能·嵌入式硬件·计算机外设·电脑
小风吹啊吹~16 分钟前
vscode的tunnel链接(Linux 服务器 + Windows 本地电脑版本)
服务器·vscode·microsoft·远程工作
Empty-Filled17 分钟前
AI Agent 测试入门:从回答问题到执行任务
网络·人工智能
Jinkxs24 分钟前
LoadBalancer- 常见负载均衡算法:轮询 / 加权轮询 / 最少连接等基础实现
运维·算法·负载均衡
eastyuxiao28 分钟前
流程图 + 配置清单 在团队 / 公司运维场景的落地应用方法
运维·人工智能·流程图
Yupureki30 分钟前
《Linux网络编程》4.应用层HTTP协议
linux·服务器·c语言·网络·c++·http
m0_7381207234 分钟前
网路安全编程——熟悉并使用Scapy简单实现捕捉主流邮箱协议(SMTP、POP3和IMAP) 的身份凭证
网络·python·网络协议·tcp/ip·安全·网络安全
Brilliantwxx36 分钟前
【C++】认识vector(概念+题目OJ)
开发语言·c++·笔记·算法