==> UDP首部(略)
==> 需要明确的几个术语:
1、IP数据报 — 是指IP层端到端的传输单元(在分片之前和重新组装之后);
2、IP分组 — 是指在IP层和链路层之间传送的数据单元。一个分组可以是一个完整的IP数据报,也可以是IP数据报的一个分片。
==> 用ICMP不可达差错(需要分片)来发现路径MTU:
在IP首部设置不分片标志比特(DF),当增大分组的数据长度时,一旦中间的某个路由器需要将该数据报进行分组才能继续发送,就会出现这个差错。首先出现差错时的分组长度即是路径MTU。
==> 用traceroute来发现路径MTU:
修改traceroute程序:发送分组,设置"不分片"标志比特,发送的第一个分组长度正好与出口MTU相等,每次收到ICMP不能分片差错时就减小分组的长度,如果返回的ICMP报文是新格式,则用其中包含的MTU值发送,否则尝试用下一个最小的MTU值发送。
==> UDP对中间连路的MTU来说过长产生的一系列作用:
先在源主机尝试进行分片,如果不行,再把DF置0,但是每隔一定时间又会将DF置1看看MTU是否增大了。
==> UDP和ARP之间的相互作用:
如果发生分片且ARP缓存被清空,那么第一个分片到达可能会超时造成组装超时从而使UDP被丢弃,因为每个分片发送之前要先发送ARP请求,而目的段处理ARP请求的队列是后进先出的。
==> ICMP源站抑制差错:
当系统的接收速度比处理速度快时(如某个中间路由器由于下一连路的速度慢而导致缓存被塞满),可能发生此差错。
==> 设计UDP服务器:
* UDP服务器一般是交互式服务器,即某个UDP端口的所有客户请求只由单个服务器进程来进行处理;
* 通常一个UDP端口对应一个有限大小的输入队列;
* 输入队列是先进先出的;
* 来自客户端的UDP数据报:IP首部包含了源和目的段的IP地址,UDP首部包含了源和目的端的端口号;
* 可以对UDP服务器的本地IP地址和远程(客户端)IP地址进行限制;
* 某些服务器可以使同一IP地址和端口上有多个接收者(程序端点)。