05-传输层
概览
分割上层数据为 segment
建立端到端连接传输 segment
可靠传输:确保数据完整性
流量控制:防止服务端发送速度过快
端口
TCP/UDP 使用端口来区分不同的应用程序
16位无符号整数
低于
255
的端口号保留
Socket
形式:
(IP, Port)
每个连接由两个 socket 组成
(IP_src, Port_src) <=> (IP_dest, Port_dest)
Socket 点对点,全双工
TCP Transmission Control Protocol
需要解决的问题
可靠传输
流量控制
滑动窗口:客户端告知窗口大小,服务端发送数据不超过窗口大小
拥塞控制:逐步增加发送速度,直到出现丢包,然后减速
连接管理:建立/释放连接
TCP 报文
源端口、目的端口:16位
序号
seq
:32位单位:字节
报文中的序号为该报文的第一个字节的序号
若序号超过
2^32
,则从0
开始
确认号
ack
:32位值为下一个期望接收的序号
目的:减少数据的通讯量
偏移:4位
指示报头长度
单位:4 Bytes
计算方法:
4 Bytes * 值
因此最大报头长度为
60 Bytes
保留字段:6位
标志位:6位
URG
:紧急指针(优先传送)ACK
:确认号有效PSH
:客户端应该尽快将数据交给应用层RST
:重置连接SYN
:同步序号,表明是连接请求/连接接受报文FIN
:释放连接
窗口大小
win
:16位单位:字节
表示服务端被允许发送的数据量
流量控制
校验和:16位
紧急指针:16位
仅在 URG 标志位为 1 时有效
单位:字节
紧急数据范围:
[序号, 序号+紧急指针)
选项:可选
最大报文段长度 MSS
……
填充字段:使报头长度为 4 Bytes 的倍数
报头最小:
20 Bytes
报头最大:
60 Bytes
数据最大取决于底层网络
建立连接 三次握手
1
CLOSED -> SYN_SENT
->
LISTEN->SYNC_RCVD
SYN=1, seq=x
SYN
为 1 ACK
为 0的包表示建立连接请求
2
SYN_SENT
<-
SYNC_RCVD
SYN=1, ACK=1, seq=y, ack=x+1
第二次握手若没有对应的端口监听,则返回 RST
3
ESTABLISHED
->
SYNC_RCVD -> ESTABLISHED
ACK=1, seq=x+1, ack=y+1
完成三次握手后,通知上层应用程序握手完成
可能发生的问题
Lost ACK:ACK没能到达客户端
Late ACK:ACK延迟到达
无论哪种情况,客户端只有收到服务端重传的数据后才知道传输出错
此时服务端会直接丢弃重复的数据,重新发送数据
客户端收到 Late ACK 后,也会直接丢弃
Stop & Wait protocol 停止等待协议
若第一次握手后,客户端没有收到回复,则会等待一段时间后重发
SYN
包在发送数据时保留备份
重传时间:
2 * RTT
(往返时间)缺点:效率低下
Contiguous ARQ 连续 ARQ 协议
客户端无需请求重传,服务端自动重传
基本流程
服务端维持发送窗口
收到确认后发送窗口向前滑动,指针前移
可发送的数据量:
发送窗口大小 - 已发送未确认的数据量
释放连接 四次挥手
1
ESTABLISHED -> FIN_WAIT_1
->
ESTABLISHED
FIN=1, seq=u
表明客户端不再传输数据 同时告知上层
2
FIN_WAIT_1
<-
CLOSE_WAIT
ACK=1, seq=v, ack=u+1
确认收到释放连接请求
3
FIN_WAIT_2
<-
LAST_ACK
FIN=1, ACK=1, seq=w, ack=v+1
通知对方释放连接
4
TIME_WAIT
->
LAST_ACK -> CLOSED
ACK=1, seq=v+1, ack=w+1
等待 2MSL 后 客户端状态变为 CLOSED
前2次:关闭客户端到服务端的传输
在第2次握手后,服务端继续向客户端发送剩余数据
后2次:关闭服务端到客户端的传输
等待 2MSL
保证服务端发送的最后一个 ACK 能够到达客户端
确保能及时收到丢包重发的 FIN 包
等待2MSL后若无重发的包则代表对方已经收到最后的ACK,连接可释放
TCP 计时器
重传计时器:若收不到 ACK,重传数据
坚持计时器:若
win
为 0,发送方启动坚持计时器,定期发送窗口探测报文,检查接收方是否重新打开窗口保持计时器:定期发送探测报文确认对方是否在线
时间等待计时器:在挥手时等待 2MSL
UDP User Datagram Protocol
无连接
没有握手挥手
每个报文独立
报文小
无可靠传输
无流量控制:很快发送数据
使用场景:对速率敏感,对准确率不敏感(例如SNMP即使在拥堵情况下也要能传数据)
报文格式
TCP vs UDP
连接
面向连接
无连接
可靠性
可靠
不可靠
流量控制
有
无
检查 segment
有
无
重发错误内容
有
无
使用ACK确认
有
无
多播/广播
不支持
支持
底层为 TCP 的协议:HTTP、FTP、SMTP
底层为 UDP 的协议:RIP、DHCP、TFTP、SNMP
NAT & PAT
特点
在内网和公网间的路由器把在IP报文头中的网络地址按照NAT表转换为另一个网络地址
允许使用私有地址的多个主机共享一个公网IP地址访问互联网
优点:复用IP地址
缺点:一对一映射,不支持端口复用
种类
静态 NAT:一对一映射
动态 NAT:动态一对一映射,先来先服务
PAT:端口地址转换,多对一映射,解决NAT的端口复用问题
NAT 地址种类
Inside Local Address:内网私有 IP 地址
Inside Global Address:内网设备对外展示的公共 IP 地址
Outside Global Address:外网目标设备的公网 IP 地址
最后更新于