运输层协议
- 运输层的复用与常见端口
-
- UDP协议
-
- TCP协议
- 特点
- socket套接字
- 可靠传输工作原理
- TCP帧首部
-
- TCP可靠传输
- 以字节为单位的滑动窗口
- 选择超时重传时间
- 选择确认SACK(未经常使用P227)
- TCP流量控制
- TCP拥塞控制
- TCP拥塞控制办法:慢开始、拥塞避免、快重传、快恢复
- 慢开始与拥塞避免
- 快重传与快恢复
- TCP连接建立与断开:
- TCP连接建立
- 2次握手为什么不行
- TCP连接释放
- 为什么要等待两个MSL
- TCP有限状态机
运输层向上面的应用层提供通信服务,为两个主机进程间提供端到端的逻辑通信。
运输层的复用与常见端口
- 运输层的复用/分用技术靠端口号实现;
- 运输层向下屏蔽了网络层的核心;
- TCP:逻辑信道相当于一条全双工可靠信道;
- UDP:相当于一跳不可靠信道;
常用端口
FTP TCP 21 文件传输
SSH TCP 22 加密传输
TELNET TCP 23 远程终端接入
SMTP TCP 25 邮件
HTTP TCP 80 超文本传输
HTTPS TCP 443
====================================
DNS UDP 53 名字转换
RIP UDP 520 路由选择
DHCP UDP 67 IP地址配置
IGMP UDP ? 多播
TFTP UDP 69 简单文件传输
……
端口号分类:
- 服务器使用的端口号:
- 系统端口号: 0 ~ 3FF
- 登记端口号: 400 ~ BFFF
- 客户端使用的端口号: C000 ~ FFFF
UDP协议
特点
- 无连接的
- 尽最大努力交付
- 面向报文的
- 无拥塞控制(允许丢失一些数据,但不允许数据有大的延迟)
- 一对一、多对多交互通信
- 首部开销小(8字节)
UDP帧格式
伪首部 源IP地址4B 目的IP地址4B 1B 类型1B UDP长度2B
0 17
首部 源端口 目的端口 长度 校验和
2 2 2 2B
UDP校验和计算需要加上伪首部,类似IP的计算方式(16bit求和取反)
TCP协议
特点
- 面向连接的运输层协议
- 端到端的通信
- 可靠的通信
- 全双工的通信
- 面向字节流的(将程序交付下来的数据看成无结构的字节流)
socket套接字
TCP把连接作为最基本的抽象。
TCP连接的端点叫做套接字(IP地址:端口号)
可靠传输工作原理
理想传输特点:
- 信道不产生差错;
- 无论发送方速率多快,接收方总是来得及接收;
可靠传输流程:
- 停止等待协议
- 无差错ARQ协议:对最后一个到的分组发送确认
- 124到,发2的确认;
- 5到,发2的确认;
- 2、7到,发5的确认;
- 每到一个,必须发确认。
需要注意情况(无差错):
- 暂存已发送分组副本至收到确认信号;
- 发送分组、确认分组都必须编号;
- 重传时间比RTT时间要稍微长一些;
TCP帧首部
TCP检验和也要添加伪首部
重要字段
- 序号(seq):发送每一个字节都要编号;
- 假如本次发送了100有效字节,下一次发送编号+100;
- 确认号(ack):期望对方下一个报文段的第一个数据字节的序号;
- 紧急URG:若为1则紧急字段有效;
- 确认ACK:ACK=1时确认字段有效;
- 同步SYN:SYN=1,ACK=0时表示请求连接的报文;
- 终止FIN:FIN=1表示终止请求;
- 校验和:同UDP;
- 时间戳:计算RTT等
TCP可靠传输
以字节为单位的滑动窗口
依次发送窗口内的数据,收到回复确认后移动窗口、修改窗口大小;超时后重新发送需要发送的字节
选择超时重传时间
R
T
O
=
R
T
T
S
+
4
⋅
R
T
T
D
RTO = RTT_S + 4{\cdot}RTT_D
RTO=RTTS+4⋅RTTD
n
e
w
R
T
T
S
=
(
1
−
α
)
⋅
o
l
d
R
T
T
S
+
α
⋅
R
T
T
,
α
=
1
8
newRTT_S = (1-\alpha) \cdot old RTT_S + \alpha\cdot RTT,\alpha = \frac{1}{8}
newRTTS=(1−α)⋅oldRTTS+α⋅RTT,α=81
n
e
w
R
T
T
D
=
(
1
−
β
)
⋅
o
l
d
R
T
T
D
+
β
⋅
∣
R
T
T
S
−
R
T
T
∣
,
β
=
1
4
newRTT_D = (1-\beta) \cdot old RTT_D + \beta\cdot |RTT_S - RTT|,\beta = \frac{1}{4}
newRTTD=(1−β)⋅oldRTTD+β⋅∣RTTS−RTT∣,β=41
- 第一次测量时,
R
T
T
D
RTT_D
RTTD取测量到的RTT样本的一半;
- 重传报文不计算RTT;
- 每次重传RTO应适度增大;
选择确认SACK(未经常使用P227)
TCP流量控制
让发送方的发送速率不要太快,要让接收方来得及接受;
- 接收方来不及处理数据时,可以先将窗口设置为0,等缓存空间空闲大于一半时,再通知对方。
TCP拥塞控制
拥塞:网络中对资源的需求超过了该资源所能提供的可用部分。
拥塞控制:防止过多的数据注入到路网络中,使路由器或链路不至于过载
- 流量控制时端到端的问题;
- 拥塞控制是全局性的问题;
- 拥塞控制用一些信息通知端,网络出现麻烦,需要降低放松速率;
TCP拥塞控制办法:慢开始、拥塞避免、快重传、快恢复
指数上升,线性增长,乘法减小,快速恢复;
AIMD:加法增大乘法减小
拥塞控制效果图:
拥塞控制关键词:
- cwnd:拥塞窗口,计算单位;
- SMSS:发送方最大报文段,计算cwnd的字节数;
- ssthresh:慢开始门限;
慢开始与拥塞避免
- 先发送1个cwnd的数据;
- 接收到确认报文段后,每个传输轮次,cwnd数量指数增长;
- 当cwnd > ssthresh时,进入拥塞避免阶段;
- 拥塞避免阶段,每个传输轮次,cwnd + 1;
出现超时:
- ssthesh变为原先一半;
- cwnd从1重新指数增长;
快重传与快恢复
接收方对失序的报文段必须立即回复,连续三次重复确认回复,发送方重新发送。
此时发送的拥塞创空与慢开始门限如下:
- ssthesh:变为之前一半(误认为超时之前);
- cwnd:变为与ssthesh一样,直接进入线性增长阶段。
eg:
- A发送123456;
- B收到13,回复2;
- 收到4,5,6分别回复2,2,2;
- A收到连续三次回复2,立刻重新发送2,并跳过慢开始阶段,直接进入拥塞避免阶段。
TCP连接建立与断开:
连接建立、数据传送、连接释放:
TCP连接建立
注意:
- 1、2次握手,不能携带数据,必须消耗序号seq;
- 3次握手,可以携带数据,不带数据不消耗序号seq;
2次握手为什么不行
- 若第二次握手消息包丢失,则服务器进入无限等待客户机数据状态;
- 若第一次握手的请求包延迟(多发了一个,前一个延迟到达,到达时前一次传输已经结束),服务器回复同意连接,陷入无限等待数据阶段。
TCP连接释放
- FIN不携带数据也需要消耗一个序列
- 客户机(最先发送释放连接请求的),最后需要等待两个MSL(最长报文段寿命)
为什么要等待两个MSL
- 保证最后的ACK报文段能够到达服务器(可能因网络问题被丢弃)
- 保证网络中所有连接请求报文段都已失效。
保活计时器
TCP有限状态机
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)