Chap 3 传输层
3.1 概述和传输层服务
- 传输层提供的服务是进程与进程之间, 以 message 为单位的逻辑的通信.
- 传输协议在端系统:
- 发送方: 将应用层的报文分成报文段, 然后传输给网络层
- 接收方: 将报文段重组成报文, 然后传递给应用层
- 依赖于网络层的服务: 延时, 带宽
- 并对网络层的服务进行增强: 数据丢失, 顺序混乱, 加密
- 有些服务是可以加强的: 不可靠 -> 可靠, 安全; 但有些服务是不可以被加强的: 带宽, 延迟
- 类比: 两个家庭的通信 – Ann 家的 12 个小孩和 Bill 家的 12 个小孩发信
- 主机: 家庭
- 进程: 小孩
- 应用层报文: 信封中的信件
- 传输协议: Ann 和 Bill
- 为家庭小孩提供复用解复用服务
- 网络层协议: 邮政服务
- 家庭 - 家庭的邮包传输服务
3.2 多路复用/解复用
- 在发送方主机多路复用:
- 从多个套接字接收来自多个进程的报文, 根据套接字对应的IP地址和端口号等信息对报文段用头部加以封装 (该头部信息用于以后的解复用)
- 在接收方主机多路解复用:
- 根据报文段的头部信息中的IP地址和端口号将接收到的报文段发给正确的套接字(和对应的应用进程)
TCP 是四元组的捆绑关系, (source IP, port; dest IP, port):

3.3 无连接传输: UDP (User Datagram Protocol)
- “尽力而为”的服务,报文段可能:
- 丢失
- 送到应用进程的报文段乱序
- 无连接:
- UDP发送端和接收端之间没有握手
- 每个UDP报文段都被独立地处理
- UDP 被用于:
- 流媒体(丢失不敏感, 速率敏感、应用可控制传输速率)
- DNS
- SNMP
- 在UDP上可行可靠传输:
- 在应用层增加可靠性
- 应用特定的差错恢复
- 为什么要有UDP?
- 不建立连接 (会增加延时)
- 简单: 在发送端和接收端没有连接状态
- 报文段的头部很小 (开销小)
- 无拥塞控制和流量控制: UDP可以尽可能快的发送报文段
- 应用 -> 传输的速率 = 主机 -> 网络的速率
UDP校验和
目标: 检测在被传输报文段中的差错 (如比特反转)
- 发送方:
- 将报文段的内容视为16比特的整数
- 校验和:报文段的加法和 (1的补运算)
- 发送方将校验和放在UDP的校验和字段
- 接收方:
- 计算接收到的报文段的校验和
- 检查计算出的校验和与校验和字段的内容是否相等:
- 不相等 –- 检测到差错
- 相等 – 没有检测到差错,但也许还是有差错 – 残存错误