传输层
传输层概述
功能
-
进程和进程之间的通信,也就是端口到端口(端到端),逻辑通信
-
复用
- 应用层多个应用使用一个传输层
-
分用
- 一个传输层的数据交付给多个应用层的应用
-
差错检测
- 对报文检错
端口号
-
一个进程对应一个端口号
-
服务端端口
-
客户端口
套接字
TCP协议
特点
- 全双工
- 面向字节流
报文段首部
-
序号字段(32位)
- 发送方的TCP缓存队列,有编号1-10 的字节
- 序号表示,发送给接收方的TCP报文,的第一个字节的序号
- 比如一个报文能承载3个字节,那么第一个报文的序号就是1,第二个报文的序号就是4
-
确认号(32位)
- 接收方期望收到的报文序号
-
数据偏移(4bit)
- 首部长度,4B为单位
-
控制位(第四行9-15bit)
-
10紧急位URG
- 先从TCP缓存中发出
-
11ACK确认位
-
12
- 接收方使用,先从TCP缓存提出给应用层
-
13
-
14SYN
- 三次握手使用
-
15FIN
- 发送方请求释放连接
-
-
窗口(16位)
-
检验和
-
紧急指针
- 紧急数据位于TCP数据部分的开头
-
选项
-
填充
- TCP首部大小是4字节的整数倍
TCP连接建立(三次握手)
-
seq(序号)
- 发送方的信息序号
-
7
- 期望收到的seq
TCP连接释放(四次握手)
- w-v是服务器传送数据的长度
实现的功能
-
可靠传输
-
序号
-
确认
-
捎带确认
- 传送数据的时候捎带确认信息
-
累计确认
- 若收到123,78
- 则返回的ack是4
-
冗余确认
- 收到123,78
- 收到9,10的时候,发送的ACK还是4
-
-
重传
-
超时重传
-
设置重传时间
- 自适应算法,计算RTTS(加权平均往返时间)
- 利用之前发送的报文的RTT计算
-
快速重传
- 冗余确认实现的
-
-
-
流量控制
-
让发送方发慢点,根据接收方窗口大小设置发送方的窗口大小
-
使用滑动窗口
-
发送窗口
-
接收窗口
- 接收方发送回去的确认报文中的窗口字段,叫做rwnd,若rwnd=300,就说明发送方还可以发送300个字节的数据
-
拥塞窗口
-
-
-
拥塞控制
-
慢开始
- 一轮表示一个往返时延RTT(数据发送完到收到确认号的时间
- 有个阈值
- 一个拥塞窗口大小cwnd
- cwnd第1轮为1,以2为底的指数增长(指数增长刚开始的时候很慢所以叫慢开始)
-
拥塞避免
- 当cwnd大于阈值的时候,下一轮cwnd加1,而不是指数增长了
- 发送方检测到网络拥塞的时候,下一轮的cwnd变为1
-
快重传
- 收到三个冗余确认的时候执行快充穿
-
快恢复
- 快重传使用快恢复
- 此时cwnd除以二,然后设置阈值为2
-
UDP协议
特点
-
无连接
-
不保证可靠交付
-
面向报文
- UDP保存整个应用层的报文,直接用UDP首部封装应用层传下来的报文
-
无拥塞控制
-
首部8B
首部
UDP检验和校验过程
-
伪首部
-
发送端
- 伪首部+首部+数据部分,以2B为一行
- 加完取反码,填入检验和
-
接收端
- 伪首部+首部+数据部分,取反码
- 全为1就无差错
-
过程