TCP/IP协议族【第14章用户数据报协议UDP】

来源:互联网 发布:淘宝能申请几次退款 编辑:程序博客网 时间:2024/06/05 21:18

14.1 引言

UDP协议 (User Datagram Protocol, UDP)是一个简单的面向无连接的,不可靠的数据报的传输层(transport layer)协议,IETF RFC 768是UDP的正式规范。

缺点也可以看做优点:非常简单,额外开销小。


14.2 用户数据报

UDP分组叫用户数据报(user datagrams),它有8个字节的固定首部。


源端口号:16位长,2字节,可选范围0-65535,在客户端主机,UDP软件选择是临时端口号,在服务端端口号是一个熟知的端口号。
目的端口号:16位长,2字节。
总长度: 16位长,标识首部+数据的总长度,理论值是0-65535,实际上用户数据报被封装在一个IP数据报中,所以
UDP总长度 = IP长度-IP首部长度。
校验和:校验整个用户数据报(首部+数据)出现的差错。

14.3 UDP提供的服务

14.3.1 进程到进程的通信



14.3.2 无连接的服务

每个用户数据报是独立的,使用UDP进程不能发送数据流到UDP,
所以只有短报文的进程才能使用UDP<65507字节(65535-20(IP首部)-8(UDP首部))。

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的应用

  1. 无连接服务:DNS
  2. 缺少差错控制:视频传输
  3. RIP路由表定期更新

14.5 UDP软件包

包括一个控制块表、若干个输入队列、一个控制块模块、一个输入模块和一个输出模块。

14.5.1 控制模块表

*********************************************************************

UDP有一个控制块表来记录打开的端口。表中的每一个项目最小有4个字段:状态(可以使FREE或IN-USE)、进程ID、端口号以及相应的丢列号。

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 输出模块

输出模块负责创建和发送用户数据报。
*********************************************************************
上面是纯理论,下篇我们写个demo测试下、


阅读全文
0 0
原创粉丝点击