5.1运输层协议概述
5.1.1 进程之间的通信
运输层的作用
屏蔽作用
可靠信道与不可靠信道
5.1.2 运输层的两个主要协议
5.1.3 运输层的端口
运输协议数据单元
两个对等运输实体在通信时传送的数据单位叫作运输协议数据单元 TPDU (Transport Protocol Data Unit)。
TCP 传送的数据单位协议是 TCP 报文段 (segment)。
UDP 传送的数据单位协议是 UDP 报文或用户数据报。
UDP 与 TCP 的区别
使用 UDP 和 TCP 的典型应用和应用层协议
复用和分用
需要考虑的问题
进程的创建和撤销都是动态的,因此发送方几乎无法识别其他机器上的进程。
我们往往需要利用目的主机提供的功能来识别终点,而不需要知道具体实现这个功能的进程是哪一个。
有时我们会改换接收报文的进程,但并不需要通知所有的发送方。
端口号 (protocol port number)
解决方法:在运输层使用协议端口号 (protocol port number),或通常简称为端口 (port)。把端口设为通信的抽象终点。
软件端口与硬件端口
TCP/IP 运输层端口的标志
两大类、三种类型的端口
常用的熟知端口
5.2用户数据报协议 UDP
5.2. UDP 概述
UDP 的主要特点
UDP 是面向报文的
UDP 通信和端口号的关系
5.2.2 UDP 的首部格式
UDP 基于端口的分用
计算 UDP 检验和的例子
5.3传输控制协议 TCP 概述
5.3.1TCP 最主要的特点
TCP 面向流的概念
5.3.2 TCP 的连接
套接字 (socket)
TCP 连接,IP 地址,套接字
Socket 有多种不同的意思
5.4可靠传输的工作原理
5.4.1停止等待协议
理想传输条件的特点
停止等待协议
1. 无差错情况
2. 出现差错
3. 确认丢失和确认迟到
4. 信道利用率
停止等待协议要点
提高传输效率:流水线传输
5.4.2连续 ARQ 协议
发送窗口
累积确认
5.5 TCP 报文段的首部格式
源端口和目的端口
各占 2 字节。端口是运输层与应用层的服务接口。 运输层的复用和分用功能通过端口实现。
序号
占 4 字节。TCP 连接中传送的数据流中的每一个字节都有一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
确认号
占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。
记住:若确认号 = N,则表明:到序号 N – 1 为止的所有数据都已正确收到。
数据偏移(即首部长度)
占 4 位,指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。单位是 32 位字(以 4 字节为计算单位)。
保留
占 6 位,保留为今后使用,但目前应置为 0。
紧急 URG
控制位。当 URG = 1 时,表明紧急指针字段有效,告诉系统此报文段中有紧急数据,应尽快传送 (相当于高优先级的数据)。
确认 ACK
控制位。只有当 ACK =1 时,确认号字段才有效。当 ACK =0 时,确认号无效。
推送 PSH (PuSH)
控制位。接收 TCP 收到 PSH = 1 的报文段后,就尽快(即“推送”向前)交付接收应用进程,而不再等到整个缓存都填满后再交付。
复位 RST (ReSeT)
控制位。当 RST=1 时,表明 TCP 连接中出现严重差错(如主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
同步 SYN (SYNchronization)
控制位。 同步 SYN = 1 表示这是一个连接请求或连接接受报文。 当 SYN = 1,ACK = 0 时,表明这是一个连接请求报文段。 当 SYN = 1,ACK = 1 时,表明这是一个连接接受报文段。
终止 FIN (FINish)
控制位。用来释放一个连接。 FIN=1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
窗口
占 2 字节。 窗口值告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量(以字节为单位)。
记住:窗口字段明确指出了现在允许对方发送的数据量。窗口值经常在动态变化。
检验和
占 2 字节。检验和字段检验的范围包括首部和数据这两部分。 在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。
紧急指针
占 2 字节。在 URG = 1时,指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据),指出了紧急数据的末尾在报文段中的位置。
选项
长度可变,最长可达 40 字节。TCP 最初只规定了一种选项,即最大报文段长度 MSS。
填充
使整个 TCP 首部长度是 4 字节的整数倍。
选项(2):最大报文段长度 MSS
MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。”
是 TCP 报文段中的数据字段的最大长度。 数据字段加上 TCP 首部才等于整个的 TCP 报文段。 所以,MSS是“TCP 报文段长度减去 TCP 首部长度”。
选项(3):窗口扩大
选项(8):时间戳
5.6TCP 可靠传输的实现
5.6.1以字节为单位的滑动窗口
发送窗口
接收窗口
窗口的滑动
发送缓存与发送窗口
需要强调三点
5.6.2超时重传时间的选择
TCP 超时重传时间设置
加权平均往返时间 RTTS
超时重传时间 RTO
5.6.3选择确认 SACK
5.7TCP 的流量控制
5.7.1 利用滑动窗口实现流量控制
流量控制 (flow control) :让发送方的发送速率不要太快,使接收方来得及接收。
利用滑动窗口机制可以很方便地在 TCP 连接上实现对发送方的流量控制。
持续计时器
5.7.2 TCP 的传输效率
糊涂窗口综合症
发送方糊涂窗口综合症
接收方糊涂窗口综合症
5.8 TCP 的拥塞控制
5.8.1拥塞控制的一般原理
拥塞产生的原因
增加资源能解决拥塞吗?
拥塞控制与流量控制的区别
拥塞控制所起的作用
拥塞控制的一般原理
开环控制和闭环控制
闭环控制措施
5.8.2 TCP 的拥塞控制方法
控制拥塞窗口变化的原则
只要网络没有出现拥塞,拥塞窗口就可以再增大一些,以便把更多的分组发送出去,提高网络的利用率。
但只要网络出现拥塞或有可能出现拥塞,就必须把拥塞窗口减小一些,以减少注入到网络中的分组数,缓解网络出现的拥塞。
发送方判断拥塞的方法:隐式反馈
TCP 拥塞控制算法
1. 慢开始 (Slow start)
每经过一个传输轮次,拥塞窗口就加倍。窗口大小按指数增加,不慢!
传输轮次(transmission round)
慢开始门限 ssthresh
2. 拥塞避免
当网络出现拥塞时
3.快重传 FR (Fast Retransmission) 算法
4.快恢复 FR (Fast Recovery)算法
慢开始和拥塞避免算法的实现举例
开始执行慢开始算法时,拥塞窗口 cwnd=1,发送第一个报文段。
发送方每收到一个对新报文段的确认 ACK,就把拥塞窗口值加 1,因此拥塞窗口 cwnd 随着往返时延 RTT 按指数规律增长。
当拥塞窗口 cwnd 增长到慢开始门限值 ssthresh 时,改为执行拥塞避免算法,拥塞窗口按线性规律增长。
当拥塞窗口 cwnd = 24 时,网络出现了超时,发送方判断为网络拥塞。调整门限值 ssthresh = cwnd / 2 = 12,同时设置拥塞窗口 cwnd = 1,进入慢开始阶段。
按照慢开始算法,发送方每收到一个对新报文段的确认 ACK,就把拥塞窗口值加 1。当拥塞窗口 cwnd = ssthresh = 12 时,改为执行拥塞避免算法,拥塞窗口按线性规律增大。
当拥塞窗口 cwnd = 16 时,发送方连续收到 3 个对同一个报文段的重复确认(记为 3-ACK)。发送方改为执行快重传和快恢复算法。
当拥塞窗口 cwnd = 16 时,发送方连续收到 3 个对同一个报文段的重复确认(记为 3-ACK)。发送方改为执行快重传和快恢复算法。
执行快重传和快恢复算法:发送方调整门限值 ssthresh = cwnd / 2 = 8,设置拥塞窗口 cwnd = ssthresh = 8,开始执行拥塞避免算法。
TCP 拥塞控制流程图
发送窗口的上限值
5.8.3 主动队列管理 AQM(略)
5.9 TCP 的运输连接管理
运输连接的三个阶段
TCP 连接建立过程中要解决的三个问题
5.9.1 TCP 的连接建立
三报文握手
5.9.2 TCP 的连接释放
四报文握手
必须等待 2MSL 的时间
第一,保证发送的最后一个 ACK 报文段能够到达 B。
第二,防止“已失效的连接请求报文段”出现在本连接中。
保活计时器
用来防止在 TCP 连接出现长时期空闲。
通常设置为 2 小时 。
若服务器过了 2 小时还没有收到客户的信息,它就发送探测报文段。
若发送了 10 个探测报文段(每一个相隔 75 秒)还没有响应,就假定客户出了故障,因而就终止该连接。