第七章
用户数据报协议 UDP
RFC768
TCP/IP详解卷 1,CH11,CH12,CH13
主要内容
? 7.1 运输层协议概述
? 7.2 用户数据报协议 UDP
? 7.3 广播和多播
? 7.3 IGMP协议
? 课下作业
7.1 运输层协议概述
? 从通信和信息处理的角度看, 运输层向它上面
的应用层提供通信服务, 它属于面向通信部分
的最高层, 同时也是用户功能中的最低层 。
物理层
网络层
运输层
应用层
数据链路层
面向信息处理
面向通信
用户功能
网络功能
运输层为相互通信的应用进程提供了逻辑通信
5
4
3
2
1
运输层提供应用进程 间的逻辑 通信
主机 A 主机 B
应用进程 应用进程
路由器 1 路由器 2AP
1 LAN
2WANAP
2
AP3
AP4
IP 层
LAN1
AP1 AP2 AP4
端口 端口 5
4
3
2
1
IP 协议的作用范围
运输层协议 TCP 和 UDP 的作用范围
AP3
运输层协议和网络层协议的主要区别
?
应用进程
… ? ?
应用进程
… ?
IP 协议的作用范围
(提供主机之间的逻辑通信)
TCP 和 UDP 协议的作用范围
(提供进程之间的逻辑通信)
因 特 网
运输层的主要功能
? 运输层为应用进程之间提供端到端的逻辑通信
( 但网络层是为主机之间提供逻辑通信 )
? 运输层还要对收到的报文进行差错检测
? 运输层需要有两种不同的运输协议, 即面向连
接的 TCP 和无连接的 UDP。
运输层与其上下层之间的关系
运输实体 运输实体运输协议 运输层
层接口
运输服务用户
(应用层实体)
运输服务用户
(应用层实体)
层接口网络层
(或网际层)
应用层
主机 A 主机 B
运输层服务访问点
TSAP
网络层服务访问点
NSAP
运输层向上提供可靠的和不可靠的逻辑通信信道
?应用
层
运
输
层
发
送
进
程
接
收
进
程
接
收
进
程数据 数据
全双工可靠信道
数据 数据
使用 TCP 协议 使用 UDP 协议
不可靠信道
? ? ? ?发送进
程
运输层的 QoS参数
? 连接建立
连接建立时延
连接建立失败概率
? 数据传送
吞吐量
传送时延
残留误码率
数据安全性
优先级
? 连接释放
连接释放时延
连接释放失败概率
网络服务分类
? A 型网络服务
可接受的残留差错率、可接受的可报告差错率;
? B 型网络服务
可接受的残留差错率、不可接受的可报告差错率;需要运
输实体进行差错恢复;
? C 型网络服务
不可接受的残留差错率、不可接受的可报告差错率;需要
运输实体进行差错检测和差错恢复;
运输层定义了 5 个运输协议类
运输层采取的技术措施
? 复用 /解复用
? 目的:当网络层服务质量 (吞吐量、传输延迟等 )较好,而运输层用
户要求不高时,可通过复用在满足运输用户要求的前提下降低费用。
? 定义:复用 /解复用是指在一个网络连接上支持多个运输层连接。
? 分流 /合流
? 目的:当网络层服务质量 (吞吐量、传输延迟等 )较差,而运输层用
户要求较高时,可通过分流满足运输用户的要求 (提高吞吐量,减
少传输延迟 )。
? 定义:分流 /合流是指把一个运输连接上传送的会话数据映射到多
个网络连接上传送,各网络连接可相互独立地并行传送。
运输服务原语
? 三个阶段
? 连接建立
? 数据传送
? 连接释放
? 4 种服务
? TC 建立
? 正常数据传送
? 加速数据传送
? TC 释放
? 12 种原语
? TC 建立 (4 种 )
? 正常数据传送 (4 种 )
? 加速数据传送 (2 种 )
? TC 释放 (2 种 )
用户数据运输服务原语时序
? 连接建立阶段 (3 种可能 )
成功建立连接、被叫用户拒绝,TS 提供者拒绝;
? 数据传送阶段 (2 种可能 )
正常数据传送、加速数据传送;
? 连接释放阶段 (4 种可能 )
一个用户发起的释放、两个用户同时发起的释放,TS 提供
者发起的释放,TS 用户和提供者同时发起的释放;
TCP/IP 体系中的运输层协议
TCPUDP
IP
应用层
与各种网络接口
运输层
? 两个对等运输实体在通信时传送的数据单位叫作
运输协议数据单元 TPDU (Transport Protocol
Data Unit)
? TCP 传送的协议数据单位是 TCP 报文段
(segment)
? UDP 传送的协议数据单位是 UDP 报文 或 用户数
据报
TCP 与 UDP
TCP 与 UDP
? UDP 在传送数据之前 不需要先建立连接 。 对方的运输
层在收到 UDP 报文后, 不需要给出任何确认 。 虽然
UDP 不提供可靠交付, 但在某些情况下 UDP 是一种
最有效的工作方式 。
? TCP 则提供 面向连接 的服务 。 TCP 不提供广播或多播
服务 。 由于 TCP 要提供可靠的, 面向连接的运输服务,
因此不可避免地增加了许多的开销 。 这不仅使协议数
据单元的首部增大很多, 还要占用许多的处理机资源 。
端 口
? 端口就是运输层服务访问点 TSAP
? 端口是用来标志应用层的进程
? 由 ICANN负责分配
? 端口用一个 16 bit 端口号进行标志
? 端口号只具有本地意义
端口在进程之间的通信中所起的作用
应
用
层
运
输
层
网
络
层
TCP 报文段 UDP用户数据报
应用进程
TCP 复用
???
IP 复用
UDP 复用
???
TCP 报文段 UDP用户数据报
??? ???
应用进程
端口端口
TCP 分用 UDP 分用
IP 分用
IP 数据报IP 数据报
发送方 接收方
两类端口
? 熟知端口 其数值一般为 0~1023。当一种新
的应用程序出现时,必须为它指派一个熟知端
口。
? 一般端口 用来随时分配给请求通信的客户进
程。
套接字 socket
? IP地址 +Port——套接字 socket
? 一对套接字对应一对通信的进程
如,(138.3.1.6,1500)和 221.2.3.1,25)
(144.43.4.1,1500)和 (221.2.3.1,25)
常用的端口号
TCP
端口号
F
T
P
传输层
T
E
L
N
E
T
D
N
S
S
N
M
P
T
F
T
P
S
M
T
P
UDP
应用层
21 23 25 53 69 161
R
I
P
520
使用 TCP和 UDP协议的各种应用和应用层协议
应 用 应用层协议 运输层协议
名字转换 DNS 一般用 UDP
选路协议 RIP 一般用 UDP
网络管理 SNMP 一般用 UDP
网络文件服务 NFS 一般用 UDP
IP电话 专用协议 一般用 UDP
流式多媒体通信 专用协议 一般用 UDP
邮件传输 SMTP TCP
远程登陆 TELNET TCP
超文本传输 HTTP TCP
文件传输 FTP TCP
同一个名词 socket有多种不同的意思
? 应用编程接口 API 称为 socket API,简称为 socket。
? socket API 中使用的一个函数名也叫作 socket。
? 调用 socket 函数的端点称为 socket。
? 调用 socket函数时其返回值称为 socket描述符, 可简
称为 socket。
? 在操作系统内核中连网协议的 Berkeley 实现, 称为
socket 实现 。
7.2 用户数据报协议 UDP
? UDP 只在 IP 的数据报服务之上增加了很少一点的功能, 即端口
的功能和差错检测的功能 。
? U D P不提供可靠性:它把应用程序封装后传给 I P层, 被 IP层封
装后发送出去, 但是并不保证它们能到达目的地 。
? 但 UDP 在某些方面有其特殊的优点:
? 发送数据之前不需要建立连接
? UDP 的主机不需要维持复杂的连接状态表
? UDP 用户数据报只有 8个字节的首部开销
? 网络出现的拥塞不会使源主机的发送速率降低, 这对某些实时应用是
很重要的 。
端口是用报文队列来实现
UDP 端口 51000 UDP 端口 69
? ?
出队列 入队列出队列入队列
TFTP 服务器TFTP 客户
UDP 用户数据报
应
用
层
运
输
层
UDP被 IP封装后的格式
? 端口号表示发送进程和接收进程。
? 长度 —— UDP数据报的长度为多少字节
? 校验和 —— 防止 UDP数据报在传输中出错
UDP的包格式
源端口 (16) 目的端口 (16)
长度 (16)
数据 (可变长 )
1位 0 15 16 31
校验和 (16)
8
字节
校 验 和
? 校验方式与 IP数据包的首部校验一样
? 但:
? 校验范围为首部和数据
? 计算校验和时,在 UDP数据报之前增加 12字节的 伪
首部,伪首部只是在计算校验和时使用,既不向下
传送,也不向上递交。
? 若数据是奇数字节,要在数据最后填充 1个字节的 0
伪首部 源端口 目的端口 长 度 检验和
数 据首 部
UDP长度源 IP 地址 目的 IP 地址 0 17
IP 数据报
字节 4 4 1 1 2
12 2 2 2 2字节
发送在前
数 据首 部UDP 用户数据报
计算 UDP 检验和的例子
10011001 00010011 → 153.19
00001000 01101000 → 8.104
10101011 00000011 → 171.3
00001110 00001011 → 14.11
00000000 00010001 → 0 和 17
00000000 00001111 → 15
00000100 00111111 → 1087
00000000 00001101 → 13
00000000 00001111 → 15
00000000 00000000 → 0 (检验和)
01010100 01000101 → 数据
01010011 01010100 → 数据
01001001 01001110 → 数据
01000111 00000000 → 数据和 0(填充)
10010110 11101101 → 求和得出的结果
01101001 00010010 → 检验和
153.19.8.104
171.3.14.1112 字节伪首部
8 字节
UDP 首部
7 字节
数据
填充
二进制求和
求反码
全 0 17 15
1087 13
15 全 0
数据 数据 数据 数据
数据 数据 数据 全 0
注:
? U D P的检验和是可选的,而 T C P的检验和是必需的。
? 如果传送的检验和为 0,说明发送端没有计算检验和。
? 如果发送端没有计算检验和而接收端检测到检验和有差
错,那么 U D P数据报就要被悄悄地丢弃,不产生任何
差错报文。
? U D P检验和选项在默认条件下是打开的
? 尽管 U D P检验和是可选的,但是它们应该总是在用。
? U D P数据报的长度在检验和计算过程中出现两次。
检测到不同检验和差错的分组统计结果
IP分片
? 把一份 I P数据报分片以后,只有到达目的地才进行重新
组装。
? 即使只丢失一片数据也要重传整个数据报。
? 因为 I P层本身没有超时重传的机制 ——由更高层来负责
超时和重传,T C P有超时和重传机制,但 U D P没有。
? 所以要避免分片
? T C P试图避免分片
查资料
? 避免分片的措施
ICMP不可达差错(需要分片)
? 当路由器收到一份需要分片的数据报,但 I P首部
中的 D F位又为 1,则发生 I C M P不可达差错。
不能分片时的 ICMP不可达差错报文格式
用 Traceroute确定路径 MTU
? 尽管大多数的系统不支持路径 MTU发现功能,但可以修
改 Traceroute程序,用它来确定路径 MTU。
? 具体做法:发送分组,并设置, 不分片, 标志位。发送的
第一个分组的长度正好与出口 M T U相等,每次收到
ICMP“不能分片, 差错时就减小分组的长度。如果路由
器发送的 ICMP差错报文是新格式,包含出口的 M T U,
那么就用该 MTU值来发送,否则就用下一个最小的 MTU
值来发送。 MTU值的个数是有限的,因此在程序中构造
一些由近似值构成的表,取下一个最小 MTU值来发送。
最大 UDP数据报长度
? 理论上,I P数据报的最大长度是 6 5 5 3 5字节,
这是由 I P首部 1 6比特总长度字段所限制的。
? 去除 2 0字节的 I P首部和 8个字节的 U D P首部,
U D P数据报中用户数据的最长长度为 6 5 5 0 7字
节。
? 但是,大多数实现所提供的长度比这个最大值小。
? 主要原因:
? 1,应用程序可能会受到其程序接口的限制 。 socket API
提供了一个可供应用程序调用的函数,以设置接收和发送
缓存的长度。对于 UDP socket,这个长度与应用程序可
以读写的最大 U D P数据报的长度直接相关。现在的大部
分系统都默认提供了可读写大于 8 1 9 2字节的 U D P数据
报(使用这个默认值是因为 8 1 9 2是 N F S读写用户数据
数的默认值)。
? 2,因为 T C P / I P的内核实现,存在一些实现特性 (或
差错),使 I P数据报长度小于 6 5 5 3 5字节。
ICMP源站抑制差错
? 同样也可以使用 U D P产生 I C M P“源站抑制
(source quench)”差错。
? 当一个系统(路由器或主机)接收数据报的速度
比其处理速度快时,可能 产生这个差错。
?, 可能,,即使一个系统已经没有缓存并丢弃数
据报,也不要求它一定要发送源站抑制报文。
ICMP源站抑制差错报文格式
对源站抑制的态度
? 尽管 RFC 1009 要求路由器在没有缓存时产生源
站抑制差错报文,但是新的 Router
Requirements RFC [Almquist 1993] 对此作
了修改,提出路由器不应该产生源站抑制差错报
文。由于源站抑制要消耗网络带宽,且对于拥塞
来说是一种无效而不公平的调整,因此现在人们
对于源站抑制差错的态度是不支持的。
7.3 广播和多播
? 广播和多播仅应用于 U D P
协议栈各层对收到帧的过滤过程
广 播
? 受限的广播(本地广播)
255.255.255.255
? 直接广播
N-ID.主机号全 1
广播与多播的比较
? 广播增加了对广播数据不感兴趣主机的处
理负荷
? 多播减少了对应用不感兴趣主机的处理负
荷
多 播
? I P多播提供两类服务:
? 1) 向多个目的地址传送数据
? 2) 客户对服务器的请求 如无盘工作站
多播地址( D类地址)
分配的 28 bit均用作多播组号而不再表示其他
主机组
? 一个主机组可跨越多个网络
? 主机组中成员可随时加入或离开主机组
? 主机组中对主机的数量没有限制
? 不属于某一主机组的主机可以向该组发送
信息
熟知组播地址(永久组)
如:
? 2 2 4, 0, 0, 1 该子网内的所有主机
? 2 2 4, 0, 0, 2 该子网内的所有路由器
? 2 2 4, 0, 1, 1 用作网络时间协议 NTP
? 2 2 4, 0, 0, 9 用作 RIPV2
? 2 2 4, 0, 1, 2 用作 SGI公司的 dogfight应用
D类 IP地址到以太网多播地址的映射
? I A N A拥有一个以太网地址块,即高位 24 bit为 0 0, 0
0, 5 e(十六进制表示),这意味着该地址块所拥有的地
址范围从 0 0, 0 0, 5 e, 0 0, 0 0, 0 0到 0 0, 0 0, 5
e, ff, ff, ff。
? I A N A将其中的一半分配为多播地址。
? 为了指明一个多播地址,任何一个以太网地址的首字节必
须是 0 1,这意味着与 I P多播相对应的以太网地址范围从
0 1, 0 0, 5 e, 0 0, 0 0, 0 0到 0 1, 0 0, 5 e, 7 f,
ff, ff。
地址映射的不唯一性
? 由于多播组号中的最高 5 bit在映射过程中被忽略,
因此每个以太网多播地址对应的多播组是不唯一的。
? 3 2 个不同的多播组号被映射为一个以太网地址。
? 例如:多播地址 2 2 4, 1 2 8, 6 4, 3 2(十六进
制 e 0, 8 0, 4 0, 2 0)和 2 2 4, 0, 6 4, 3 2
(十六进制 e 0, 0 0, 4 0, 2 0)都映射为同一以
太网地址 0 1, 0 0, 5 e, 0 0, 4 0, 2 0。
多播过滤
? 既然地址映射是不唯一的,那么设备驱动程序
或 I P层就必须对数据报进行过滤。
? 因为网卡可能接收到主机不想接收的多播数据
帧。另外,如果网卡不提供足够的多播数据帧
过滤功能,设备驱动程序就必须接收所有多播
数据帧,然后对它们进行过滤。
局域网网卡趋向两种处理类型
? 一种是网卡根据对多播地址的散列值实行多播过
滤,这意味仍会接收到不想接收的多播数据;
? 另一种是网卡只接收一些固定数目的多播地址,
这意味着当主机想接收超过网卡预先支持多播地
址以外的多播地址时,必须将网卡设置为, 多播
混杂 (multicast promiscuous)”模式。
对多播的评价
尽管:
? 地址映射不完美
? 需要硬件过滤
但:
? 前景非常好
单个网多播和跨网多播
? 单个网多播 多播进程将目的 I P地址指明为多播
地址,设备驱动程序将它转换为相应的以太网地
址,然后把数据发送出去。
? 跨网多播 需要有一个协议让多播路由器了解确
定网络中属于确定多播组的任何一个主机,这个
协议就是 Internet组管理协议( IGMP)。
7.4 IGMP协议
? RFC1112
? IGMP封装在 IP数据报中,IP首部中协议字段值为 2。
IGMP报文
?类型 为 1是由多播路由器发出的查询报文
为 2说明是主机发出的报告报文
?组地址 在查询报文中组地址设置为 0
在报告报文中组地址为要参加的组地址
加入一个多播组
? 在一个给定接口上的多播组中的成员是动态的 ——它随时
因进程加入和离开多播组而变化
? 进程必须以某种方式在给定的接口上加入某个多播组
? 一个主机通过组地址和接口来识别一个多播组。
? 主机必须保留一个表,此表中包含所有至少含有一个进程
的多播组以及多播组中的进程数量。
IGMP 报告和查询
多播路由器使用 IGMP报文来记录与该路由器相连网络中组
成员的变化情况。使用规则如下:
? 1) 当第一个进程加入一个组时,主机就发送一个 IGMP报告。
如果一个主机的多个进程加入同一组,只发送一个 IGMP报
告。这个报告被发送到进程加入组所在的同一接口上。
? 2) 进程离开一个组时,主机不发送 IGMP报告,即便是组中
的最后一个进程离开。主机知道在确定的组中已不再有组成
员后,在随后收到的 IGMP查询中就不再发送报告报文。
? 3) 多播路由器定时发送 IGMP查询来了解是否还有任何主
机包含有属于多播组的进程。多播路由器必须向每个接口
发送一个 IGMP查询。因为路由器希望主机对它加入的每
个多播组均发回一个报告,因此 IGMP查询报文中的组地
址被设置为 0。
? 4) 主机通过发送 IGMP报告来响应一个 IGMP查询,对每
个至少还包含一个进程的组均要发回 IGMP报告。
? 使用这些查询和报告报文,多播路由器对每个接口保持一
个表,表中记录接口上至少还包含一个主机的多播组。
IGMP查 询和报告举例
为改善 IGMP的效率,需要考虑的实现细节
? 当一个主机首次发送 IGMP报告时,并不保证该
报告被可靠接收(因为使用的是 I P交付服务),
下一个报告将在间隔一段时间后发送,这个时间
间隔由主机在 0 ~ 1 0秒的范围内随机选择。
? 当一个主机收到一个从路由器发出的查询后,并
不立即响应,而是经过一定的时间间隔后才发出
一些响应。
生存时间字段 TTL
? 一个初始 T T L为 0的多播数据报将被限制
在同一主机
? 在默认情况下,待传多播数据报的 T T L被
设置为 1,这将使多播数据报仅局限在同一
子网内传送。
? 更大的 T T L值能被多播路由器转发
课下作业(必做)
1,查资料:避免分片的措施
2.查资料:组播和可靠组播技术
课下作业(选做)
1,编写一个能够发现路径 MTU的 Traceroute程序
2,编写程序,设计 UDP服务器,操作系统、编程
语言和环境不限。要求:
1)程序能流畅地完成视频文件的传输
2)能对多个客户端进行管理(需要通过 UDP模
拟多个客户端连接验证的情况)
用户数据报协议 UDP
RFC768
TCP/IP详解卷 1,CH11,CH12,CH13
主要内容
? 7.1 运输层协议概述
? 7.2 用户数据报协议 UDP
? 7.3 广播和多播
? 7.3 IGMP协议
? 课下作业
7.1 运输层协议概述
? 从通信和信息处理的角度看, 运输层向它上面
的应用层提供通信服务, 它属于面向通信部分
的最高层, 同时也是用户功能中的最低层 。
物理层
网络层
运输层
应用层
数据链路层
面向信息处理
面向通信
用户功能
网络功能
运输层为相互通信的应用进程提供了逻辑通信
5
4
3
2
1
运输层提供应用进程 间的逻辑 通信
主机 A 主机 B
应用进程 应用进程
路由器 1 路由器 2AP
1 LAN
2WANAP
2
AP3
AP4
IP 层
LAN1
AP1 AP2 AP4
端口 端口 5
4
3
2
1
IP 协议的作用范围
运输层协议 TCP 和 UDP 的作用范围
AP3
运输层协议和网络层协议的主要区别
?
应用进程
… ? ?
应用进程
… ?
IP 协议的作用范围
(提供主机之间的逻辑通信)
TCP 和 UDP 协议的作用范围
(提供进程之间的逻辑通信)
因 特 网
运输层的主要功能
? 运输层为应用进程之间提供端到端的逻辑通信
( 但网络层是为主机之间提供逻辑通信 )
? 运输层还要对收到的报文进行差错检测
? 运输层需要有两种不同的运输协议, 即面向连
接的 TCP 和无连接的 UDP。
运输层与其上下层之间的关系
运输实体 运输实体运输协议 运输层
层接口
运输服务用户
(应用层实体)
运输服务用户
(应用层实体)
层接口网络层
(或网际层)
应用层
主机 A 主机 B
运输层服务访问点
TSAP
网络层服务访问点
NSAP
运输层向上提供可靠的和不可靠的逻辑通信信道
?应用
层
运
输
层
发
送
进
程
接
收
进
程
接
收
进
程数据 数据
全双工可靠信道
数据 数据
使用 TCP 协议 使用 UDP 协议
不可靠信道
? ? ? ?发送进
程
运输层的 QoS参数
? 连接建立
连接建立时延
连接建立失败概率
? 数据传送
吞吐量
传送时延
残留误码率
数据安全性
优先级
? 连接释放
连接释放时延
连接释放失败概率
网络服务分类
? A 型网络服务
可接受的残留差错率、可接受的可报告差错率;
? B 型网络服务
可接受的残留差错率、不可接受的可报告差错率;需要运
输实体进行差错恢复;
? C 型网络服务
不可接受的残留差错率、不可接受的可报告差错率;需要
运输实体进行差错检测和差错恢复;
运输层定义了 5 个运输协议类
运输层采取的技术措施
? 复用 /解复用
? 目的:当网络层服务质量 (吞吐量、传输延迟等 )较好,而运输层用
户要求不高时,可通过复用在满足运输用户要求的前提下降低费用。
? 定义:复用 /解复用是指在一个网络连接上支持多个运输层连接。
? 分流 /合流
? 目的:当网络层服务质量 (吞吐量、传输延迟等 )较差,而运输层用
户要求较高时,可通过分流满足运输用户的要求 (提高吞吐量,减
少传输延迟 )。
? 定义:分流 /合流是指把一个运输连接上传送的会话数据映射到多
个网络连接上传送,各网络连接可相互独立地并行传送。
运输服务原语
? 三个阶段
? 连接建立
? 数据传送
? 连接释放
? 4 种服务
? TC 建立
? 正常数据传送
? 加速数据传送
? TC 释放
? 12 种原语
? TC 建立 (4 种 )
? 正常数据传送 (4 种 )
? 加速数据传送 (2 种 )
? TC 释放 (2 种 )
用户数据运输服务原语时序
? 连接建立阶段 (3 种可能 )
成功建立连接、被叫用户拒绝,TS 提供者拒绝;
? 数据传送阶段 (2 种可能 )
正常数据传送、加速数据传送;
? 连接释放阶段 (4 种可能 )
一个用户发起的释放、两个用户同时发起的释放,TS 提供
者发起的释放,TS 用户和提供者同时发起的释放;
TCP/IP 体系中的运输层协议
TCPUDP
IP
应用层
与各种网络接口
运输层
? 两个对等运输实体在通信时传送的数据单位叫作
运输协议数据单元 TPDU (Transport Protocol
Data Unit)
? TCP 传送的协议数据单位是 TCP 报文段
(segment)
? UDP 传送的协议数据单位是 UDP 报文 或 用户数
据报
TCP 与 UDP
TCP 与 UDP
? UDP 在传送数据之前 不需要先建立连接 。 对方的运输
层在收到 UDP 报文后, 不需要给出任何确认 。 虽然
UDP 不提供可靠交付, 但在某些情况下 UDP 是一种
最有效的工作方式 。
? TCP 则提供 面向连接 的服务 。 TCP 不提供广播或多播
服务 。 由于 TCP 要提供可靠的, 面向连接的运输服务,
因此不可避免地增加了许多的开销 。 这不仅使协议数
据单元的首部增大很多, 还要占用许多的处理机资源 。
端 口
? 端口就是运输层服务访问点 TSAP
? 端口是用来标志应用层的进程
? 由 ICANN负责分配
? 端口用一个 16 bit 端口号进行标志
? 端口号只具有本地意义
端口在进程之间的通信中所起的作用
应
用
层
运
输
层
网
络
层
TCP 报文段 UDP用户数据报
应用进程
TCP 复用
???
IP 复用
UDP 复用
???
TCP 报文段 UDP用户数据报
??? ???
应用进程
端口端口
TCP 分用 UDP 分用
IP 分用
IP 数据报IP 数据报
发送方 接收方
两类端口
? 熟知端口 其数值一般为 0~1023。当一种新
的应用程序出现时,必须为它指派一个熟知端
口。
? 一般端口 用来随时分配给请求通信的客户进
程。
套接字 socket
? IP地址 +Port——套接字 socket
? 一对套接字对应一对通信的进程
如,(138.3.1.6,1500)和 221.2.3.1,25)
(144.43.4.1,1500)和 (221.2.3.1,25)
常用的端口号
TCP
端口号
F
T
P
传输层
T
E
L
N
E
T
D
N
S
S
N
M
P
T
F
T
P
S
M
T
P
UDP
应用层
21 23 25 53 69 161
R
I
P
520
使用 TCP和 UDP协议的各种应用和应用层协议
应 用 应用层协议 运输层协议
名字转换 DNS 一般用 UDP
选路协议 RIP 一般用 UDP
网络管理 SNMP 一般用 UDP
网络文件服务 NFS 一般用 UDP
IP电话 专用协议 一般用 UDP
流式多媒体通信 专用协议 一般用 UDP
邮件传输 SMTP TCP
远程登陆 TELNET TCP
超文本传输 HTTP TCP
文件传输 FTP TCP
同一个名词 socket有多种不同的意思
? 应用编程接口 API 称为 socket API,简称为 socket。
? socket API 中使用的一个函数名也叫作 socket。
? 调用 socket 函数的端点称为 socket。
? 调用 socket函数时其返回值称为 socket描述符, 可简
称为 socket。
? 在操作系统内核中连网协议的 Berkeley 实现, 称为
socket 实现 。
7.2 用户数据报协议 UDP
? UDP 只在 IP 的数据报服务之上增加了很少一点的功能, 即端口
的功能和差错检测的功能 。
? U D P不提供可靠性:它把应用程序封装后传给 I P层, 被 IP层封
装后发送出去, 但是并不保证它们能到达目的地 。
? 但 UDP 在某些方面有其特殊的优点:
? 发送数据之前不需要建立连接
? UDP 的主机不需要维持复杂的连接状态表
? UDP 用户数据报只有 8个字节的首部开销
? 网络出现的拥塞不会使源主机的发送速率降低, 这对某些实时应用是
很重要的 。
端口是用报文队列来实现
UDP 端口 51000 UDP 端口 69
? ?
出队列 入队列出队列入队列
TFTP 服务器TFTP 客户
UDP 用户数据报
应
用
层
运
输
层
UDP被 IP封装后的格式
? 端口号表示发送进程和接收进程。
? 长度 —— UDP数据报的长度为多少字节
? 校验和 —— 防止 UDP数据报在传输中出错
UDP的包格式
源端口 (16) 目的端口 (16)
长度 (16)
数据 (可变长 )
1位 0 15 16 31
校验和 (16)
8
字节
校 验 和
? 校验方式与 IP数据包的首部校验一样
? 但:
? 校验范围为首部和数据
? 计算校验和时,在 UDP数据报之前增加 12字节的 伪
首部,伪首部只是在计算校验和时使用,既不向下
传送,也不向上递交。
? 若数据是奇数字节,要在数据最后填充 1个字节的 0
伪首部 源端口 目的端口 长 度 检验和
数 据首 部
UDP长度源 IP 地址 目的 IP 地址 0 17
IP 数据报
字节 4 4 1 1 2
12 2 2 2 2字节
发送在前
数 据首 部UDP 用户数据报
计算 UDP 检验和的例子
10011001 00010011 → 153.19
00001000 01101000 → 8.104
10101011 00000011 → 171.3
00001110 00001011 → 14.11
00000000 00010001 → 0 和 17
00000000 00001111 → 15
00000100 00111111 → 1087
00000000 00001101 → 13
00000000 00001111 → 15
00000000 00000000 → 0 (检验和)
01010100 01000101 → 数据
01010011 01010100 → 数据
01001001 01001110 → 数据
01000111 00000000 → 数据和 0(填充)
10010110 11101101 → 求和得出的结果
01101001 00010010 → 检验和
153.19.8.104
171.3.14.1112 字节伪首部
8 字节
UDP 首部
7 字节
数据
填充
二进制求和
求反码
全 0 17 15
1087 13
15 全 0
数据 数据 数据 数据
数据 数据 数据 全 0
注:
? U D P的检验和是可选的,而 T C P的检验和是必需的。
? 如果传送的检验和为 0,说明发送端没有计算检验和。
? 如果发送端没有计算检验和而接收端检测到检验和有差
错,那么 U D P数据报就要被悄悄地丢弃,不产生任何
差错报文。
? U D P检验和选项在默认条件下是打开的
? 尽管 U D P检验和是可选的,但是它们应该总是在用。
? U D P数据报的长度在检验和计算过程中出现两次。
检测到不同检验和差错的分组统计结果
IP分片
? 把一份 I P数据报分片以后,只有到达目的地才进行重新
组装。
? 即使只丢失一片数据也要重传整个数据报。
? 因为 I P层本身没有超时重传的机制 ——由更高层来负责
超时和重传,T C P有超时和重传机制,但 U D P没有。
? 所以要避免分片
? T C P试图避免分片
查资料
? 避免分片的措施
ICMP不可达差错(需要分片)
? 当路由器收到一份需要分片的数据报,但 I P首部
中的 D F位又为 1,则发生 I C M P不可达差错。
不能分片时的 ICMP不可达差错报文格式
用 Traceroute确定路径 MTU
? 尽管大多数的系统不支持路径 MTU发现功能,但可以修
改 Traceroute程序,用它来确定路径 MTU。
? 具体做法:发送分组,并设置, 不分片, 标志位。发送的
第一个分组的长度正好与出口 M T U相等,每次收到
ICMP“不能分片, 差错时就减小分组的长度。如果路由
器发送的 ICMP差错报文是新格式,包含出口的 M T U,
那么就用该 MTU值来发送,否则就用下一个最小的 MTU
值来发送。 MTU值的个数是有限的,因此在程序中构造
一些由近似值构成的表,取下一个最小 MTU值来发送。
最大 UDP数据报长度
? 理论上,I P数据报的最大长度是 6 5 5 3 5字节,
这是由 I P首部 1 6比特总长度字段所限制的。
? 去除 2 0字节的 I P首部和 8个字节的 U D P首部,
U D P数据报中用户数据的最长长度为 6 5 5 0 7字
节。
? 但是,大多数实现所提供的长度比这个最大值小。
? 主要原因:
? 1,应用程序可能会受到其程序接口的限制 。 socket API
提供了一个可供应用程序调用的函数,以设置接收和发送
缓存的长度。对于 UDP socket,这个长度与应用程序可
以读写的最大 U D P数据报的长度直接相关。现在的大部
分系统都默认提供了可读写大于 8 1 9 2字节的 U D P数据
报(使用这个默认值是因为 8 1 9 2是 N F S读写用户数据
数的默认值)。
? 2,因为 T C P / I P的内核实现,存在一些实现特性 (或
差错),使 I P数据报长度小于 6 5 5 3 5字节。
ICMP源站抑制差错
? 同样也可以使用 U D P产生 I C M P“源站抑制
(source quench)”差错。
? 当一个系统(路由器或主机)接收数据报的速度
比其处理速度快时,可能 产生这个差错。
?, 可能,,即使一个系统已经没有缓存并丢弃数
据报,也不要求它一定要发送源站抑制报文。
ICMP源站抑制差错报文格式
对源站抑制的态度
? 尽管 RFC 1009 要求路由器在没有缓存时产生源
站抑制差错报文,但是新的 Router
Requirements RFC [Almquist 1993] 对此作
了修改,提出路由器不应该产生源站抑制差错报
文。由于源站抑制要消耗网络带宽,且对于拥塞
来说是一种无效而不公平的调整,因此现在人们
对于源站抑制差错的态度是不支持的。
7.3 广播和多播
? 广播和多播仅应用于 U D P
协议栈各层对收到帧的过滤过程
广 播
? 受限的广播(本地广播)
255.255.255.255
? 直接广播
N-ID.主机号全 1
广播与多播的比较
? 广播增加了对广播数据不感兴趣主机的处
理负荷
? 多播减少了对应用不感兴趣主机的处理负
荷
多 播
? I P多播提供两类服务:
? 1) 向多个目的地址传送数据
? 2) 客户对服务器的请求 如无盘工作站
多播地址( D类地址)
分配的 28 bit均用作多播组号而不再表示其他
主机组
? 一个主机组可跨越多个网络
? 主机组中成员可随时加入或离开主机组
? 主机组中对主机的数量没有限制
? 不属于某一主机组的主机可以向该组发送
信息
熟知组播地址(永久组)
如:
? 2 2 4, 0, 0, 1 该子网内的所有主机
? 2 2 4, 0, 0, 2 该子网内的所有路由器
? 2 2 4, 0, 1, 1 用作网络时间协议 NTP
? 2 2 4, 0, 0, 9 用作 RIPV2
? 2 2 4, 0, 1, 2 用作 SGI公司的 dogfight应用
D类 IP地址到以太网多播地址的映射
? I A N A拥有一个以太网地址块,即高位 24 bit为 0 0, 0
0, 5 e(十六进制表示),这意味着该地址块所拥有的地
址范围从 0 0, 0 0, 5 e, 0 0, 0 0, 0 0到 0 0, 0 0, 5
e, ff, ff, ff。
? I A N A将其中的一半分配为多播地址。
? 为了指明一个多播地址,任何一个以太网地址的首字节必
须是 0 1,这意味着与 I P多播相对应的以太网地址范围从
0 1, 0 0, 5 e, 0 0, 0 0, 0 0到 0 1, 0 0, 5 e, 7 f,
ff, ff。
地址映射的不唯一性
? 由于多播组号中的最高 5 bit在映射过程中被忽略,
因此每个以太网多播地址对应的多播组是不唯一的。
? 3 2 个不同的多播组号被映射为一个以太网地址。
? 例如:多播地址 2 2 4, 1 2 8, 6 4, 3 2(十六进
制 e 0, 8 0, 4 0, 2 0)和 2 2 4, 0, 6 4, 3 2
(十六进制 e 0, 0 0, 4 0, 2 0)都映射为同一以
太网地址 0 1, 0 0, 5 e, 0 0, 4 0, 2 0。
多播过滤
? 既然地址映射是不唯一的,那么设备驱动程序
或 I P层就必须对数据报进行过滤。
? 因为网卡可能接收到主机不想接收的多播数据
帧。另外,如果网卡不提供足够的多播数据帧
过滤功能,设备驱动程序就必须接收所有多播
数据帧,然后对它们进行过滤。
局域网网卡趋向两种处理类型
? 一种是网卡根据对多播地址的散列值实行多播过
滤,这意味仍会接收到不想接收的多播数据;
? 另一种是网卡只接收一些固定数目的多播地址,
这意味着当主机想接收超过网卡预先支持多播地
址以外的多播地址时,必须将网卡设置为, 多播
混杂 (multicast promiscuous)”模式。
对多播的评价
尽管:
? 地址映射不完美
? 需要硬件过滤
但:
? 前景非常好
单个网多播和跨网多播
? 单个网多播 多播进程将目的 I P地址指明为多播
地址,设备驱动程序将它转换为相应的以太网地
址,然后把数据发送出去。
? 跨网多播 需要有一个协议让多播路由器了解确
定网络中属于确定多播组的任何一个主机,这个
协议就是 Internet组管理协议( IGMP)。
7.4 IGMP协议
? RFC1112
? IGMP封装在 IP数据报中,IP首部中协议字段值为 2。
IGMP报文
?类型 为 1是由多播路由器发出的查询报文
为 2说明是主机发出的报告报文
?组地址 在查询报文中组地址设置为 0
在报告报文中组地址为要参加的组地址
加入一个多播组
? 在一个给定接口上的多播组中的成员是动态的 ——它随时
因进程加入和离开多播组而变化
? 进程必须以某种方式在给定的接口上加入某个多播组
? 一个主机通过组地址和接口来识别一个多播组。
? 主机必须保留一个表,此表中包含所有至少含有一个进程
的多播组以及多播组中的进程数量。
IGMP 报告和查询
多播路由器使用 IGMP报文来记录与该路由器相连网络中组
成员的变化情况。使用规则如下:
? 1) 当第一个进程加入一个组时,主机就发送一个 IGMP报告。
如果一个主机的多个进程加入同一组,只发送一个 IGMP报
告。这个报告被发送到进程加入组所在的同一接口上。
? 2) 进程离开一个组时,主机不发送 IGMP报告,即便是组中
的最后一个进程离开。主机知道在确定的组中已不再有组成
员后,在随后收到的 IGMP查询中就不再发送报告报文。
? 3) 多播路由器定时发送 IGMP查询来了解是否还有任何主
机包含有属于多播组的进程。多播路由器必须向每个接口
发送一个 IGMP查询。因为路由器希望主机对它加入的每
个多播组均发回一个报告,因此 IGMP查询报文中的组地
址被设置为 0。
? 4) 主机通过发送 IGMP报告来响应一个 IGMP查询,对每
个至少还包含一个进程的组均要发回 IGMP报告。
? 使用这些查询和报告报文,多播路由器对每个接口保持一
个表,表中记录接口上至少还包含一个主机的多播组。
IGMP查 询和报告举例
为改善 IGMP的效率,需要考虑的实现细节
? 当一个主机首次发送 IGMP报告时,并不保证该
报告被可靠接收(因为使用的是 I P交付服务),
下一个报告将在间隔一段时间后发送,这个时间
间隔由主机在 0 ~ 1 0秒的范围内随机选择。
? 当一个主机收到一个从路由器发出的查询后,并
不立即响应,而是经过一定的时间间隔后才发出
一些响应。
生存时间字段 TTL
? 一个初始 T T L为 0的多播数据报将被限制
在同一主机
? 在默认情况下,待传多播数据报的 T T L被
设置为 1,这将使多播数据报仅局限在同一
子网内传送。
? 更大的 T T L值能被多播路由器转发
课下作业(必做)
1,查资料:避免分片的措施
2.查资料:组播和可靠组播技术
课下作业(选做)
1,编写一个能够发现路径 MTU的 Traceroute程序
2,编写程序,设计 UDP服务器,操作系统、编程
语言和环境不限。要求:
1)程序能流畅地完成视频文件的传输
2)能对多个客户端进行管理(需要通过 UDP模
拟多个客户端连接验证的情况)