美文网首页
UDP:用户数据报协议

UDP:用户数据报协议

作者: 食梦狸猫 | 来源:发表于2019-05-14 15:56 被阅读0次

udp是一种简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报

2.43.15.png

UDP不提供可靠性:它把应用程序传给IP层的数据发送出去,但是不保证它们能到达目的地。

UDP首部:

2.45.40.png

端口号表示发送进程和接收进程。UDP长度字段表示UDP首部和UDP数据的字节长度。IP数据报的长度是指整个数据报长度。所以UDP数据报长度=IP数据报长度-IP首部长度

UDP检验和只覆盖UDP首部和UDP数据,IP首部的检验和也只覆盖IP的首部。UDP的检验和是可选的,而TCP的检验和是必须的。

UDP数据报和TCP数据报都包含一个12字节的伪首部,目的是为了计算检验和。伪首部包含的IP首部一些字段,是为了让UDP两次检查数据是否已经到达目的地。


2.53.47.png

IP分片

物理网络层一般要限制每次发送数据帧的最大长度。当IP层收到一份要发送的IP数据报时,要判断向本地哪个接口发送数据,查询并获取该接口的MTU。如果需要分片,分片这个过程可以发生在发送端主机上,也可以发生在中间路由器上。

当把一份IP数据报进行分片后,只有到达了目的地才能进行重新组装。重新组装的过程由目的端的IP层来完成。已经分片后的数据报也可能再进行分片。

在IP首部中。

  • 每份IP数据报的标识字段都包含唯一的值。标识字段中包含的唯一的值在数据报分片时被复制到每个片中。
  • 标示字段中的一个比特位表示“更多的片”,除了最后一片外,其他片都将该位标为1。
  • 片偏移字段是该片偏移原始数据报处的位置。
  • 分片后,每片的IP首部总长度要改为该片的长度。
  • 标示字段由一个比特位是“不分片”位,设置改位后将不会进行分片,但若长度大于MTU,那就只有将数据报丢弃,然后发送一个ICMP差错报文给发送端。

当数据报的这些片到达目的端后可能会失序,但在IP首部中有足够的信息让接受端正确的组装这些片。

缺点:即使只丢失了其中一片数据也要对整个数据报进行重传。

ICMP不可达差错(需要分片)

当路由器收到一份需要分片的数据报,而在IP首部又设置了不分片的标志比特。
可用于判断到达目的端的路途中最小MTU是多少。


3.20.47.png

如果路由器没有提供这种新的ICMP差错报文格式,那么下一站MTU会被设为0

最大UDP数据报长度

理论上,UDP数据报中用户数据的最大长度为IP数据报最大长度减去IP首部和UDP首部=65507字节。
但是大多数实现所提供的长度比这个最大值小:

  • 应用程序可能会受到其程序接口的限制。
  • TCP/IP内核实现的限制。

IP能发送或接收特定长度的数据报并不意味着接收应用程序可以读到该长度的数据。UDP编程接口允许程序指定每次返回的最大字节数。如果接收到的数据报长度大于应用程序所能处理的长度,那么处理结果取决于编程接口的实现。

ICMP源站抑制差错

当一个系统接收数据报的速度比其处理速度快时,可能产生这个差错(一个系统没有缓存并丢弃了数据,也不一定要求发送源站抑制报文)
格式:


3.42.33.png

UDP服务器的设计

对于服务器,它启动后处于休眠状态,等待客户端请求的到来。

  • 来自客户的UDP数据报的IP首部中包含了发送端和目的端的IP地址,UDP首部包含了发送端和目的端的UDP端口号。服务器通过IP地址和端口号就可以知道是谁发送了消息,这就允许一个交互UDP服务器对多个客户进行处理。

  • UDP输入队列。单个服务器进程对单个UDP端口上的所有客户请求进行处理。程序所使用的每个UDP端口都与一个有限大小的输入队列相联系。当排队的数据报太多造成溢出,会发生UDP模块丢弃数据报。

  • 限制远端IP地址。大多数系统运行对远端地址进行限制。

相关文章

  • Socket-UDP数据传输

    1、UDP 用户数据报协议,又称用户数据报文协议 简单的面向数据报的传输层协议 用户数据协议,非连接协议 不可靠、...

  • iOS 网络相关面试题

    问题:TCP、UDP TCP/UDP 传输层协议 ||—— UDP:用户数据报协议 TCP与UDP的区别: 问题...

  • Socket进阶4之初识UDP

    UDP是什么 英语:User Datagram Protocol,缩写为UDP一种用户数据报协议,又称用户数据报文...

  • UDP协议详解

    相比于TCP协议(传输控制协议)来说,UDP协议(用户数据报协议)要简单很多。 UDP协议的首部格式 UDP协议的...

  • Linux下Socket编程(六)——udp

    简介 udp协议 udp通信流程 示例 udp协议 中文叫用户数据报协议,属于传输层。UDP是面向非连接的协议,它...

  • 037 Android网络编程-UDP

    UDP是什么英语:User Datagram Protocol,缩写为UDP一种用户数据报协议,又称用户数据报文协...

  • 套接字编程

    UDP简介 UDP - 用户数据报协议(User Datagram Protocol)。UDP是一个无连接协议。U...

  • TCP 协议如何保证可靠传输

    UDP&TCP UDP: (1) UDP,user datagram protocol,用户数据报协议,不提供复杂...

  • golang udp编程

    介绍 用户数据报协议(User Datagram Protocol,缩写为UDP),又称用户数据报文协议,是一个简...

  • UDP协议

    用户数据报协议(英语:User Datagram Protocol,缩写为UDP),又称用户数据报文协议,是一个简...

网友评论

      本文标题:UDP:用户数据报协议

      本文链接:https://www.haomeiwen.com/subject/vumsaqtx.html