文章目录
- 传输层
- 导学
- TCP和UDP比较
- 传输层的寻址 - 端口号
- 端口号分类
- 常见端口号
- 套接字socket = (主机IP地址,端口号)
- UDP
- UDP首部格式
- UDP检验和
- 发送端校验
- 接收端校验
- TCP
- TCP 报文段首部格式 ⭐
- **序号字段:该报文中的第一个字节**
- **确认号:期待对方发送的第一个字节**
- **数据偏移:正好是首部长度**
- 窗口
- 检验和
- 紧急指针
- 选项(长度可变的字段)
- 控制位
- URG 紧急位
- ACK 确认位
- PUSH 推送位
- RST 复位
- SYN 同步位
- FIN 终止位
传输层
只有主机才会有传输层
主机(五层) - 传输设备(三层) - 主机(五层)
传输层功能:进程与进程之间的通信
网络层功能:主机与主机之间的通信
复用:不同进程可以共用一个传输层传输到网络层
分用:剥去报文之后(从网络层收到数据后),能够送交给正确的进程
QQ给女朋友发的消息,微信上是收不到的
网络层首部校验和 :只检查了头部
传输层 对数据部分进行校验(差错j检测)
导学
TCP和UDP比较
TCP:
传数据之前需要建立连接,传送结束后释放连接
不提供广播和多播
UDP:
只管发不管你收不收得到
传输层的寻址 - 端口号
端口号分类
常见端口号
套接字socket = (主机IP地址,端口号)
UDP
在IP数据报基础上,增加了复用分用和差错检测
UDP面向报文:不切分,给多少就是多少,完整的
所以要选择合适的报文.尽量不要后续在网络层分片
无拥塞控制:不会从源头上限制发送报文的速度
拥塞会适量的丢包,但影响不大
UDP首部格式
UDP检验和
当校验的时候,会给数据添上伪首部
发送端校验
接收端校验
TCP
可以实现全双工通信
发送缓存: 存储了未发送的数据 和 已经发送但是还未确认达到的数据
接收缓存:存储了到达了未被读取的数据 和 没有按序到达的数据
流: 字节序列 ,流入进程或流出进程
TCP 报文段首部格式 ⭐
填充字段的作用: 用来凑数的 ,保证首部是4字节整数倍
序号字段:该报文中的第一个字节
1 |1 2 3 , 4 | 4 5 6
确认号:期待对方发送的第一个字节
已发送123 接下来发送456, 4就是确认号
数据偏移:数据起始处,距离TCP报文的起始处的 距离
数据偏移:正好是首部长度
首部长度 = 固定长度20字节 + 选项 +填充
窗口
对于接收端而言,所能容纳的最大的数据量
A给B发文件,B得告诉A,自己的窗口是多少,A就知道如何设置发送缓存了
例: 若确认号701 ,窗口为1000 ,所以从701开始发送数据 ,接收缓存空间就是 701~1700
检验和
传输层 检验首位 + 数据部分
紧急指针
指明了紧急数据的末尾 在 报文段中的位置
紧急指针为70 则0~70就是紧急数据
选项(长度可变的字段)
最大报文段长度MSS等
控制位
URG 紧急位
对于发送方而言
URG = 1 ,有高优先级的数据来了, 结合紧急指针使用
不在缓存中排队了,赶紧发送出去
ACK 确认位
ACK = 0 ,确认号无意义
所以建立连接成功后ACK为1
PUSH 推送位
对接收端而言 , 尽快交付PUSH=1的应用进程 , 不用等缓存填满了再向上交付
RST 复位
TCP出现严重差错,释放当前连接并且重新建立连接
SYN 同步位
SYN=1 ,表示 这是一个请求建立连接的报文
FIN 终止位
FIN = 1.报文段发送方数据发送完毕, 释放连接