文章目录
4. 运输层
4.1 运输层协议概述
- 端到端
- TCP 可靠通信 面向连接
- UDP 不可靠通信 无连接
- 端口号
- UDP:DNS, DHCP, RIP, TFTP
- TCP:HTTP, SMTP, FTP, TELNET
4.2 用户数据报协议UDP
- 特点:
- 无连接
- 尽最大努力交付
- 面向报文
- 没有拥塞控制
- 支持一对一,一对多,多对一,多对多的交互通信
- 首部开销少,才8字节
4.3 传输控制协议 TCP 概述
-
每一条 TCP 连接只能有两个端点,每一条 TCP 连接只能是点对点的(一对一)
-
全双工
-
面向字节流
-
TCP 连接的端点:套接字或插口
-
套接字 socket = (IP地址 : 端口号)
-
每一条 TCP 连接唯一地被通信两端的两个端点(即两个套接字)所确定:
TCP 连接 ::= {socket1, socket2} = {(IP1: port1),(IP2: port2)}
-
4.4 可靠传输的工作原理
-
IP层是不可靠传输
-
停止等待协议:
-
信道利用率:U = TD / TD + RTT + TA
- TD:A发送分组需要的时间
- RTT:往返时间
- TA:B发送确认分组需要的时间
-
信道利用率太低
-
-
连续ARQ协议:
- 流水线传输:在收到确认之前,发送方连续发出多个分组
- Go-back-N(回退N):表示需要再退回来重传已发送过的 N 个分组
4.5 TCP 报文段的首部格式
- TCP 首部的最小长度是 20 字节 TCP首部的长度是 4n 字节
- 序号:每个字节都有一个序号,这里指的最开始发送的序号
- 确认号:期望收到对方的下一个报文段的数据的第一个字节的序号
- 紧急URG:应该尽快上传的紧急数据
- 确认ACK:只有当ACK = 1才有效
- 推送PSH:接收 TCP 收到 PSH = 1 的报文段后,就尽快交付接收应用进程
- 同步SYN:
- SYN = 1 ACK = 0:连接请求
- SYN = 1 ACK = 1:连接接受
4.6 TCP 可靠传输的实现
4.7 TCP 的流量控制
4.8 TCP 的拥塞控制
-
拥塞窗口:cwnd
-
判断拥塞:
- 超时重传计时器超时:已经拥塞
- 收到3个重复的确认:预示可能出现拥塞
-
TCP拥塞控制算法:
- 慢开始:
- 由小到大逐渐增大拥塞窗口数值
- 控制变量:慢开始门限:ssthresh 拥塞窗口:cwnd
- 在收到一个确认后,拥塞窗口 cwnd 每次的增加量 = min (N, SMSS) SMSS发送方的最大报文段
- 窗口大小按指数增长
- 慢开始门限用法:
- 当 cwnd < ssthresh 时,使用慢开始算法
- 当 cwnd > ssthresh 时,停止使用慢开始算法,改用拥塞避免算法
- 当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞避免算法
- 拥塞避免:
- 每经过一个往返时间 RTT(不管在此期间收到了多少确认),发送方的拥塞窗口 cwnd = cwnd + 1
- 不是完全避免拥塞,只是让拥塞窗口增长缓慢一点,不容易出现拥塞
- 当网络出现拥塞,ssthresh = cwnd / 2 cwnd = 1 执行慢开始算法
-
当拥塞窗口 cwnd = 16 时,发送方连续收到 3 个对同一个报文段的重复确认(记为 3-ACK)。发送方改为执行快重传和快恢复算法
-
快重传:
- 3-ACK后立即重传
-
快恢复:
- ssthresh =cwnd / 2 cwnd = ssthresh 开始执行避免拥塞算法
-
当 rwnd(接收窗口) < cwnd 时,是接收方的接收能力限制发送窗口的最大值
-
当 cwnd < rwnd 时,是网络拥塞限制发送窗口的最大值
- 慢开始:
4.9 TCP 的运输连接管理
- TCP连接3阶段:连接建立、数据传送、连接释放
4.9.1 TCP 的连接建立
- 握手 三报文握手
- seq是第一个字节的编号
- 前两个不能带数据,第三个可以携带数据
- SYN报文段不能携带数据,但要消耗一个序号 **
seq
**同理 - ACK报文段 不携带数据就不会消耗序号
4.9.2 TCP的连接释放
- 四报文握手
- FIN 报文段即使不携带数据,也消耗掉一个序号
- B 第一次发送数据时从 A 到 B 这个方向的连接就释放了,TCP 连接处于半关闭状态,即B发送数据A还是要接收的
- 若 B 已经没有要向 A 发送的数据,其应用进程就通知 TCP 释放连接 —>第二次 B 发送数据
- A 收到连接释放报文段后,必须发出确认 —>第四次
- 注意:此时 TCP 连接还没有释放掉。必须经过时间等待计时器设置的时间 2MSL 后,A 才释放 TCP 连接