TCP/IP协议族【第14章用户数据报协议UDP】
14.1 引言
UDP协议 (User Datagram Protocol, UDP)是一个简单的面向无连接的,不可靠的数据报的传输层(transport layer)协议,IETF RFC 768是UDP的正式规范。
缺点也可以看做优点:非常简单,额外开销小。
14.2 用户数据报
14.3 UDP提供的服务
14.3.1 进程到进程的通信
14.3.2 无连接的服务
14.3.3 流量控制
14.3.4 差错控制
伪首部(pseudoheader)
包含了源IP和目的IP,若首部收到损伤,可能交付到错误的主机。类型17,表示是UDP协议。
14.3.5 拥塞控制
14.3.6 封装和解封
封装:当进程有报文要通过UDP发送时,它就将此报文连同一对插口地址以及数据的长度传递给UDP。UDP收到数据后就加上UDP首部。然后UDP就将这用户数据报连同插口地址一起传递给IP。IP加上自己的首部,在协议字段使用值17,指出这数据是从UDP协议来的。这个IP数据报在传递给数据链路层。数据链路层收到IP数据报后,加上自己的首部(可能还有尾部),再传递给物理层。物理层将这些比特编码为电信号或光信号将其发送到远程的机器上。
解封:当这个报文到达目的只及时,物理层对信号解码,将其变为比特,传递给数据链路层。数据链路层使用其首部(和尾部)检查数据。若无差错,则剥去首部和尾部,并将数据报传递给IP,IP软件进行它的检查。若无差错,就剥去首部,将用户数据报连同发送端和接收端的IP地址一起传递给UDP,UDP使用检验和对整个用户数据报进行检查。若无差错,则剥去首部,将应用数据连同发送端的插口地址一起传递给接收进程。在需要回答收到的报文时,就应将发送端的插口地址传递给进程
14.3.7 排队
在客户端,进程启动时从操作系统处请求得到(临时)端口号,并最终有一个入和一个出队列
在服务器端,在它开始运行时就请求为它的熟知端口创建入队列和出队列
若报文到达端口没有对应的出队列则通过ICMP发送端口不可达报文
14.3.8 复用和分用
当主机运行TCP/IP协议族时,只有一个UDP,但可能会有多个进程想要使用DUP的服务,UDP可以进行复用和分用。
复用:在发送端,有多个进程需要发送用户数据报,但是只有一个UDP,需要复用。
分用:接收端也只有一个UDP,可能有多个进程需要接收用户数据报。需要分用。
14.3.9 UDP与简单协议的比较
UDP在分组的基础上增加了一个可选的校验和用于差错检测,但是并没有反馈给发送方。
14.4 UDP的应用
- 无连接服务:DNS
- 缺少差错控制:视频传输
- RIP路由表定期更新
14.5 UDP软件包
14.5.1 控制模块表
14.5.2 输入队列
每个进程对应一个输入队列。
14.5.3 控制块模块
控制块模块负责管理控制块表。当系统启动时,它就从操作系统要一个端口号。进程将进城ID和端口号传递给控制块模块,以便在表中为该进程创建一个项目。这个模块不创建队列。
udp_control_block_module(ip,port){
查找控制块表的free表项
if(未找到)
预定义策略删除表项
创建状态为INUSE的新表项
输入进程ID和端口号
return
}
14.5.4 输入模块
输入模块从IP接收用户数据报。它查找控制块表,寻找具有具有和这个用户数据报同样端口号的项目。若这道这样的项目,模块就利用这项目中的信息将这个数据放入队列。若未找到这样的项目,它就产生ICMP报文。
14.5.5 输出模块
上一篇: Hadoop学习笔记 2 - MapReduce 简单实例
下一篇: 打印空心菱形(Java)