计算机网络3-运输层-UDP
本文主要分为以下几个部分讲解。
- 介绍udp
- 说明udp分组的格式
- udp提供的服务
- 说明如何计算可选的检验和
UDP报文
udp是一种无连接 不可靠的运输协议。
udp的分组叫做用户数据报,它有8个字节的固定首部。
- 源端口号:源主机上运行的进程所使用的端口号
- 目的端口号:目的主机上进程所使用的端口号
- 总长度:这是一个16位的字段,它定义了用户数据报的总长度,首部加上数据。16位可定义的总长度是从0到65535字节。实际上总长度必须比这个数小,因为udp用户数据要放在总长度65535字节的ip数据报中。
- 检验和:这个字段用来检验整个数据报出现的差错。
UDP服务
udp使用套接字提供进程到进程的服务。
无连接服务:udp提供无连接服务,意味着每一个用户数据报都是独立的数据报。
不提供流量控制
差错控制,除了检验和之外,没有其他机制、这就表示发送方并不知道报文是丢失了还是重复交付了,当接收方通过检验和检测出差错时,就悄悄地讲这个用户数据报丢掉。伪首部是封装用书包的那个ip分组的首部的一部分,其中有些字段要填入0。其中有一个协议字段是为了确保这个分组属于udp,值为17,如果这个值在传输过程中改变了,接收端计算检验和就可能检测出来,udp就会放弃这个分组。
不提供拥塞控制
-
封装和解封
当进程有报文要通过udp发送,他就把这个报文连同一堆套接字地址以及数据的长度传递给udp。udp收到数据后添加一个udp首部。然后udp把这个用户数据报连同套接字一起传递给ip。ip再加上自己的首部。在协议字段使用值17,支出该数据是从udp协议来的。然后再把这个ip传递给链路层,封装成帧,再传递给物理层。物理层把比特编码成电信号和光信号,发送到远程的机器上。
-
排队
udp中,队列和端口相关联。
在客户端,当一个进程启动时,他从操作系统哪里请求得到一个端口号。有些实现为每个进程创建一个如队列和一个出队列与之相关。
在服务器端,创建队列的机制是不同的,在最简单的形势下,服务器进程在它开始运行时就请求为他的熟知端口创建如队列和出队列。只要服务器进程一直运行,这些对列就一直是打开的、
所有发送给某个特定服务器程序的入报文,不管是来自相同的或者是不用的客户,都会被放入到一个队列。入队列可能会溢出。若发生溢出,udp就会丢弃这个用户数据报,并请求向客户发送端口不可达。
当服务器想要回答客户时,他就要在请求中之名的源端口把报文送到出队列。
-
复用和分用
主机上只有一个udp,但可能多个进程希望使用udp服务。那么udp进行复用和分用,
复用:在发送端根据指定不同的端口号来区分。分用,根据目的端口号,吧每一个报文交付给适当的进程。
UDP应用
- udp使用与只要求简单的请求-响应通信的进程。
- udp适用于具有内部流量控制和差错控制机智的进程,例如简单文件传输协议(TFTP)
- 对于多播来说,udp是一个合适的运输协议。
- 适用于管理进程,如snmp
- 适用于某些路由选择更新协议。
- 适用于实时应用,他们不能容忍在就收报文的各个片段之间存在变化的时延。