第十一章 UDP
UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。这与面向流字符的协议不同,如TCP,应用程序产生的全体数据与真正发送的单个IP数据报可能没有什么联系。
UDP首部
UDP检验和
UDP检验和覆盖UDP首部和UDP数据。
UDP和TCP在首部中都有覆盖它们首部和数据的检验和。UDP的检验和是可选的,而TCP的检验和是必需的
IP分片
IP把MTU与数据报长度进行比较,如果需要则进行分片。分片可以发生在原始发送端主机上,也可以发生在中间路由器上。
重新组装由目的端的IP层来完成,其目的是使分片和重新组装过程对运输层(TCP和UDP)是透明的,除了某些可能的越级操作外。已经分片过的数据报有可能会再次进行分片(可能不止一次)。IP首部中包含的数据为分片和重新组装提供了足够的信息。
IP数据报是指IP层端到端的传输单元(在分片之前和重新组装之后),分组是指在IP层和链路层之间传送的数据单元。一个分组可以是一个完整的IP数据报,也可以是IP数据报的一个分片。
ICMP不可达差错(需要分片)
UDP和URP之间的相互作用
ARP洪泛(ARP flooding,即以高速率重复发送到同一个IP地址的ARP请求)。建议最高速率是每秒一次。
最大UDP数据报长度
UDP数据报中用户数据的最长长度为65507字节。但是,大多数实现所提供的长度比这个最大值小。
- 应用程序可能会受到其程序接口的限制。
- TCP/IP的内核实现。
ICMP源站抑制差错
客户IP地址及端口号
来自客户的是UDP数据报。IP首部包含源端和目的端IP地址,UDP首部包含了源端和目的端的UDP端口号。当一个应用程序接收到UDP数据报时,操作系统必须告诉它是谁发送了这份消息,即源IP地址和端口号
目的IP地址
一些应用程序需要知道数据报是发送给谁的,即目的IP地址
UDP输入队列
来自不同客户的差不多同时到达的请求将由UDP自动排队。接收到的UDP数据报以其接收顺序交给应用程序(在应用程序要求交送下一个数据报时)
第十二章广播与多播
有三种IP地址:单播地址、广播地址和多播地址。
广播和多播仅应用于UDP,它们对需将报文同时传往多个接收者的应用来说十分重要。
TCP是一个面向连接的协议,它意味着分别运行于两主机(由IP地址确定)内的两进程(由端口号确定)间存在一条连接。
通常每个以太网帧仅发往单个目的主机,目的地址指明单个接收接口,因而称为单播(unicast)。在这种方式下,任意两个主机的通信不会干扰网内其他主机(可能引起争夺共享信道的情况除外)。
有时一个主机要向网上的所有其他主机发送帧,这就是广播。
多播(multicast)处于单播和广播之间:帧仅传送给属于多播组的多个主机
受限的广播
受限的广播地址是255.255.255.255。该地址用于主机配置过程中IP数据报的目的地址,此时,主机可能还不知道它所在网络的网络掩码,甚至连它的IP地址也不知道
指向网络的广播
指向网络的广播地址是主机号为全1的地址。A类网络广播地址为netid.255.255.255,其中netid为A类网络的网络号。
一个路由器必须转发指向网络的广播,但它也必须有一个不进行转发的选择
指向子网的广播
指向子网的广播地址为主机号为全1且有特定子网号的地址
指向所有子网的广播
指向所有子网的广播也需要了解目的网络的子网掩码,以便与指向网络的广播地址区分开。指向所有子网的广播地址的子网号及主机号为全1
多播
IP多播提供两类服务:
向多个目的地址传送数据。有许多向多个接收者传送信息的应用:例如交互式会议系统和向多个接收者分发邮件或新闻。如果不采用多播,目前这些应用大多采用TCP来完成(向每个目的地址传送一个单独的数据复制)。然而,即使使用多播,某些应用可能继续采用TCP来保证它的可靠性。
客户对服务器的请求。例如,无盘工作站需要确定启动引导服务器。目前,这项服务是通过广播来提供的(正如第16章的BOOTP),但是使用多播可降低不提供这项服务主机的负担。
多播组地址
多播地址到以太网地址的转换
IANA拥有一个以太网地址块,即高位24 bit为00:00:5e(十六进制表示),这意味着该地址块所拥有的地址范围从00:00:5e:00:00:00到00:00:5e:ff:ff:ff。IANA将其中的一半分配为多播地址。为了指明一个多播地址,任何一个以太网地址的首字节必须是01,这意味着与IP多播相对应的以太网地址范围从01:00:5e:00:00:00到01:00:5e:7f:ff:ff。
第十四章域名系统
DNS基础
顶级域名被分为三个部分:
- arpa是一个用作地址到名字转换的特殊域(我们将在14.5节介绍)。
- 7个3字符长的普通域。有些书也将这些域称为组织域。
- 所有2字符长的域均是基于ISO3166中定义的国家代码,这些域被称为国家域,或地理域
DNS报文格式
QR是1bit字段:0表示查询报文,1表示响应报文。
opcode是一个4bit字段:通常值为0(标准查询),其他值为1(反向查询)和2(服务器状态请求)。
AA是1bit标志,表示“授权回答(authoritative answer)”。该名字服务器是授权于该域的。
TC是1bit字段,表示“可截断的(truncated)”。使用UDP时,它表示当应答的总长度超过512字节时,只返回前512个字节。
RD是1bit字段表示“期望递归(recursion desired)”。该比特能在一个查询中设置,并在响应中返回。这个标志告诉名字服务器必须处理这个查询,也称为一个递归查询。如果该位为0,且被请求的名字服务器没有一个授权回答,它就返回一个能解答该查询的其他名字服务器列表,这称为迭代查询。在后面的例子中,我们将看到这两种类型查询的例子。
RA是1bit字段,表示“可用递归”。如果名字服务器支持递归查询,则在响应中将该比特设置为1。在后面的例子中可看到大多数名字服务器都提供递归查询,除了某些根服务器。随后的3bit字段必须为0。
rcode是一个4bit的返回码字段。通常的值为0(没有差错)和3(名字差错)。名字差错只有从一个授权名字服务器上返回,它表示在查询中制定的域名不存在。
DNS查询报文中的问题部分
查询名是要查找的名字,它是一个或多个标识符的序列。
每个标识符以首字节的计数值来说明随后标识符的字节长度,每个名字以最后字节为0结束,长度为0的标识符是根标识符。
计数字节的值必须是0~63的数,因为标识符的最大长度仅为63(在本节的后面我们将看到计数字节的最高两比特为1,即值192~255,将用于压缩格式)。
不像我们已经看到的许多其他报文格式,该字段无需以整32 bit边界结束,即无需填充字节
DNS响应报文中的资源记录部分
域名是记录中资源数据对应的名字。它的格式和前面介绍的查询名字段格式(图14-6)相同。
类型说明RR的类型码。它的值和前面介绍的查询类型值是一样的。类通常为1,指Internet数据。
生存时间字段是客户程序保留该资源记录的秒数。资源记录通常的生存时间值为2天。
资源数据长度说明资源数据的数量。该数据的格式依赖于类型字段的值。对于类型1(A记录)资源数据是4字节的IP地址
第十五章TFTP
TFTP(Trivial File Transfer Protocol)即简单文件传送协议,最初打算用于引导无盘系统(通常是工作站或X终端)。和将在第27章介绍的使用TCP的文件传送协议(FTP)不同,为了保持简单和短小,TFTP将使用UDP。TFTP的代码(和它所需要的UDP、IP和设备驱动程序)都能适合只读存储器
最后一种 TFTP报文类型是差错报文,它的操作码为 5。它用于服务器不能处理读请求或写请求的情况。在文件传输过程中的读和写差错也会导致传送这种报文,接着停止传输。差错编号字段给出一个数字的差错码,跟着是一个 ASCII表示的差错报文字段,可能包含额外的操作系统说明的信息。
既然TFTP使用不可靠的 UDP,TFTP就必须处理分组丢失和分组重复。分组丢失可通过发送方的超时与重传机制解决(注意存在一种称为“魔术新手综合症 ( sorcerer’s apprentices y n drome)”的潜在问题,如果双方都超时与重传,就可能出现这个问题。 12.2 节 [ S t e v e n s1990] 介绍了这个问题是如何发生的 )。和许多 U D P应用程序一样, TFTP报文中没有检验和,它假定任何数据差错都将被 UDP的检验和检测到
安全性
TFTP分组中并不提供用户名和口令。这是TFTP的一个特征(即“安全漏洞”)。由于TFTP是设计用于系统引导进程,它不可能提供用户名和口令。