传输层
1. 服务
1.1 功能
-
应用进程之间的逻辑通信。
从传输层来说,通信的真正端点是
主机中的进程
-
复用和分用
- 复用:发送方的不同进程都可以使用同一个传输层协议进行数据传输
- 接收方传输层能将数据正确交付到不同的目的应用进程
-
检错检测
- TCP:发现报文出错,要求重发
- UDP:发现出错,直接丢弃
- 区别网络层:网络层的IP数据报只检验首部,不检查数据
-
提供面向连接和无连接的传输协议。TCP/IP、UDP
1.2 寻址和端口
-
端口号 16bit
- 服务器端使用的端口号。熟知端口号(0 ~ 1023);登记端口号(1024 ~ 49151)
- 客户端使用的端口号。49152 ~ 65535,也称短暂端口号
-
套接字
套接字(Socket)=(IP地址:端口号)
1.3 无连接服务和面向连接服务
- TCP/IP:建立连接、可靠数据传输、释放连接。确认、流量控制、计时器、连接管理。FTP、HTTP、TELNET
- UDP:无需建立连接和返回确认。TFTP、DNS、SNMP、RTP
2. UDP
2.1 数据报
2.1.1 概述
功能:复用和分用,差错检测
特点:无需建立连接;无连接状态;首部开销小;无拥塞控制;支持1对1,1n,n1,nn的交互通信
面向报文。报文不可分割,是UDP处理的最小单位。
2.1.2 首部格式
首部
字段(8B)和用户数据
字段。
首部(2B*4):源端口(不需要时可全0),目的端口,长度(首部+数据),检验和(可选,可全0)
2.2 UDP检验
计算UDP检验和之前,还需要加上伪首部
,以计算UDP检验和。
检验方法:补充0成偶数个字节后,按二进制反码计算这些16位字的和,最后将此和的反码写入检验和字段。接收方最终计算结果应全1,才表示无差错。这种方法不强,但简单快速。
3. TCP
3.1 特点
- 面向连接,逻辑连接
- 一对一
- 可靠交付,无差错、不丢失、不重复且有序
- 全双工通信。
- 发送缓存:准备发的数据;已发送但未收到确认的数据
- 接收缓存:到达但未被读取的数据;不按序到达的数据
- 面向字节流。
TCP报文由接收方窗口值和网络拥塞程度决定;UDP报文由发送应用进程决定
3.2 报文段
首部(20B)和数据
首部字段:
- 源端口
- 目的端口
- 序号
- 确认号
- 数据偏移。表示首部长度
- 保留
- 紧急位URG
- 确认位ACK
- 推送位PSH
- 复位位RST
- 同步位SYN
- 终止位FIN
- 窗口
- 检验和
- 紧急指针
- 选项,最长40B
3.3 连接管理
TCP连接的端口是套接字。连接的建立采用C/S模式,
三次握手
- 客户机发请求(连接请求报文段)。SYN不能携带数据,但消耗一个序号。SYN-SENT
- 服务器同意,发回确认。确认报文段不能携带数据,但消耗一个序号。SYN-RCVD
- 客户机给出确认。可以携带数据,不携带数据就不消耗序号。ESTABLISHED
四次挥手
-
客户机发送连接释放报文段,并停止发送数据。消耗一个序号。FIN-WAIT-1
-
服务器发出确认。CLOSED-WAIT。服务器继续未完成的数据传送,客户机收到确认后进入FIN-WAIT-2
-
服务器数据传送完成后,发出FIN=1的连接释放报文段。服务器LAST-ACK
-
客户机收到后,必须发出确认。进入TIME-WAIT,等待2MSL(Maximum Segment Lifetime,最长报文段寿命),进入CLOSED。服务器收到确认后进入CLOSED
服务器最快1.5RTT,客户端最快1RTT+2MSL
3.4 TCP可靠传输
检验(同UDP)、序号、确认、重传
a. 序号
序号字段,保证数据有序
b. 确认
确认号,表示期望收到的下一个报文段的第一个字节的序号
默认使用累计确认
c. 重传
-
超时。
重传时间到期,未收到确认。维护了RTT(Round-Trip Time)的一个加权平均往返时间RTTS,设置的超时重传时间(Retransmission Time-Out,RTO)应略大于RTTS。
-
冗余ACK。
接收方发送3个对某报文的冗余ACK,发送方则立即重传该报文。这种技术称为
快速重传
3.5 TCP流量控制
让发送方的发送速率不要太快,以便接收方来得及接收。速度匹配服务。
数据链路层和传输层区别:
- 传输层:端到端(两个进程之间的流量控制),窗口大小动态变化
- 数据链路层:两个中间的相邻节点之间的流量控制,滑动窗口不能动态变化
滑动窗口机制。发送方的发送窗口不能超过接收方给出的接收窗口值
收到零窗口通知后,开始计时,计时结束后发送一个零窗口探测报文段,对方进行回应以给出窗口值。若仍为0,继续计时。
3.6 TCP拥塞控制
拥塞控制:防止过多的数据注入网络,保证网络中的路由器或链路不致过载。
拥塞控制与流量控制
-
拥塞控制:全局性的网络负荷的控制
-
流量控制:点对点的通信量的控制
但是,都是提供控制发送方的发送速率实现控制效果
除了接收窗口(rwnd),TCP还要求发送方维持一个拥塞窗口(cwnd)
。
假设以下内容以最大报文段长度(MSL)为单位
1. 慢开始
从小到大增大拥塞窗口,cwnd的值随传输轮次(一个往返时延RTT)指数增长。先令cwnd=1,然后接着是2,4……。
需要设置一个慢开始门限ssthresh(阈值)
。当cwnd大于ssthresh时,改用拥塞避免算法
2. 拥塞避免
每经过一个RTT,cwnd+=1,按线性规律缓慢增长。
出现网络拥塞(确认超时):
\[ssthresh = cwnd/2, \geq 2\\ cwnd=1\\ 执行慢开始算法 \]3. 快重传
发送方连续收到3个冗余ACK,尽早重传
4. 快恢复
当发送方连续收到3个冗余ACK:
\[ssthresh=cwnd/2\\ cwnd =cwnd/2\\ 开始拥塞避免算法 \]同时应用以上四种算法
标签:报文,TCP,发送,拥塞,传输层,cwnd,连接 From: https://www.cnblogs.com/walkallday/p/18147768