-百分号
一、英译汉
Tcp_ip
illustrated volume 1
第十一章
11.1
这样的
UDP
数据报长度为总长度减去的
IP
报头长度
用户数据包协议(
UDP
)
p>
,是一个简单的,面向数据报的,传输层的协议。每个输出操作的过
程中都会产生一个
UDP
数据报,
并使
一个
IP
数据报发送。
这是一个不同于
面向信息流的协议,
如
TCP
。
p>
TCP
通过应用程序写入的数据量可能实际上会与单个的
IP
数据报发送的内容的关系
不大。
UDP
数据报封装为
IP
数据报。
UDP
不提供可靠性:
它发送应用程序写入
IP
< br>层的数据包,
但是不能保证他们会到到达目的地。
鉴于这
种可靠性的缺乏,我们倾向于认为我们应该避免
UDP
,而一直
使用一个可靠的协议,
如
TCP
。
p>
在我们描述了
TCP
在
17
章,
我们会回到这个话题,
看
什么类型的应用程序可以使用
UDP
。
应用程序需要担心产生的
IP
数据报的
大小。如果它超过网络的最大传输单元
( MTU )
(
p>
2.8
节),
IP
数据报会产生碎片。这适用于数据包传输时从源到目的地每个网络,不仅是第一个
连接发
送主机的网络。我们将会在
11.5
节中检查
< br>IP
碎片。
11.2
端口号确认发送过程和接收过程。
TCP
和<
/p>
UDP
使用目的端口号从
IP
多路复用传进来的数据。
由
于
IP
已经解复用
IP
数据报的传入
的
TCP
或
UDP
(基于
IP
报头中的协议价值),这意味着
TCP
端
口号都看的
TCP<
/p>
,
UDP
的则看
UDP
。
TCP
端口号都是独立于
p>
UDP
端口号的。
尽管存在这种独立性,
如果一个知名的服务是通过
TCP
p>
和
UDP
提供的。
对于这两个传输层,
端
口号通常被选择为相同的。这纯粹是为了
方便,而不是协议的需要。
UDP
长
度字段代表的是
UDP
报头加上
UDP
数据的字节长度。
该字段的最小值是
8
字节。
(发送一
个
0
字节的
UDP
数据包是可行的)
这
UDP
长度是多余的。
IP
数据报中包含总的字节长度,所以
UDP
数据报
长度为总长度减去的
IP
报头长度。
11.3
UDP
校验和包括
UDP
报头和
UDP
数
据。回想一下,在
IP
报头校验只包括
IP
报头不包括在
IP
数据
报的任何数据。
UDP
和
TCP
有校验在它们的标题来掩盖他们的头和他们的数据。
UD
P
校验和是
可选的,而
TCP
是强制性的。
虽然计算
UDP
校验和基本类似于我们在
3.2
节中描述的
IP
报头校验
(的补充和
16
位字)
,
有差
异。首先,对
UDP
数据报的长度
可以是奇数字节,而校验算法增加了
16
位的字。解决方法是<
/p>
添加一个
0
瓦字节到最后,如果必要的话
,只是用于校验和计算。(这是可能的,这不是垫
字节传输。)
接下来,
UDP
和
TCP
包括一个
12
字节的伪头与
UDP
数据报(或
TCP
段)只是用于校验和计算。
这
个伪报头包括从
IP
标头的某些领域。目的是让
UDP
双重检查数据到达正确的目的地(即,
IP
数
据报,没有接受,不给这个主机的
IP
,没有给予
UDP
数据报,是另一种上层)。
在图中我们明确地显示一个奇数长度的数据包,需要一个校验和计算垫字节。注意,
UDP
数
据报长度校验和计算中出现两次。
如果计算校验码是
0
,它存
储为一位(
65535
),这是在的补码运算等效。如果发送的
校验和
是
0
,这表明发件人没有计算校
验和。
如果发件人并计算校验和接收器检测校验和错误,
p>
UDP
数据报是默默丢弃。没有产生错误消
息。(这是如果检测到
IP
是
IP
p>
报头校验错误。发生什么)
这是一个端到
端的
UDP
校验和校验。它是由发送方计算,并通过接收器。它
的目的是捕捉任
何修饰的
UDP
标题或
数据的发送者和接收者之间的任何地方。
尽管
UDP
校验和是可选的,
他们应该启用。
在
20
世纪
80
年代,
一些电脑厂商关闭
UDP
< br>校验和默
认情况下,加快其
Sun
的网络文件系统(
NFS
)的实现,使用
UDP
。虽然这可能在一个单一的
局域网是可以接受的,在
循环冗余校验数据链路上的框架
(例如,
以太网或令牌环帧)<
/p>
可以
检测框架最腐败,当数据包通过路由器,
所有的赌注都关闭。
相信它或没有,有软件和硬件
错误,<
/p>
修改位在数据包被路由的路由器。
这些错误被检测不到在
UDP
数据报如果端到端的
UDP
校验和残疾。也意识到一些数据链路协议(例如,滑)没有任何形式的数据链路校验和。
主机需求
RFC
要求是默
认启用
UDP
校验和。
它还指出,
p>
实施必须验证接收到的校验和,
如果发
送方
计算(即,接收的校验和是非零)。许多实施违反本,然而,只有验证接收到的校验和
如
果即将离任的校验和启用。
检测出是否一个特定的系统已经启
用
UDP
校验和是很难的。
一个应用程
序在接收的
UDP
报头获
得校验和字段
通常是不可能的。为了解决这个问题,作者对
tcpdump
程
序,打印接收的
UDP
校验和添加另一个选项。如果打印的值是
0
,这意味着发送主机不计算校验和。
图
11.4
显示输出和来自三个不同的
系统,
在我们的测试网络(见封面图)。我们把袜子程序
(附录
C
),用
9
个
字节的数据到标准的回声服务器发送一个
UDP
数据报。
11.10
从理论上讲,
一个
IP
数据报的最大大小为
65535
字节,
由
16
位总长度字段在
IP
报头强加的
(图
3.1
)。与一个
20
字节的
IP
报头和一个
8
字节的
UDP
报头,这使得最大为
65507
字节的
UDP
数据
报的用户数据。大多数的实现,然而,提供小于这个最大的。
有两个限制,
我们会遇到。
首先,
应用程序可以通过编程接口有限公司。
套接字
API
(第
1.15
节)提供了一个函数,应用程序可以调用设置接收缓冲区和发送缓冲区的大小。一个
UD
P
套
接字,这个尺寸是最大规模的
UD
P
数据包的应用程序可以读取或写入直接相关。今天,大多
数系
统提供一个默认的刚刚超过
8192
字节的
UDP
数据报可以读取或写入的最大尺寸。(这是
因为
p>
8192
是默认的用户数据量,
NFS
p>
读取和写入默认情况下。)
未来的限制来
自于
TCP
/
IP
核的实现。有可能实现的功能(或错误),一个
IP
数据报
的限制
到小于
65535
字节的大小。
作者试验了各种各样的
UDP
数据包大小,使用的袜子程序。使用环回接口在
SunOS
4.1.3
,
IP
数据
报的最大大小为
32767
字节。
所有
值较高的失败。
但在以太网从
BSD
/
386
到
SunOS
4.1.3
,
IP
数据报的最
大大小的太阳能接受
32786
(即,
32758
字节的用户数据)。使用环回接口在
Solaris
2.2
,最大
65535
字节的
IP
数据包可以发送和接收。从
Solari
s 2.2 AIX 3.2.2
,最
大
65535
字节的
IP
数据报可以转
移。显然这个极限取决于源和目标的实现。
我们
3.2
节中提到,一个主机必须至少有一个
576<
/p>
字节的
IP
数据报接收。许多的
UDP
应用程序
的设计限制了它们的应用数据为
512
字节或更少,低于此限制。我们看到这在
10.4
节中,例
如,在路由信息协议总是差小于
p>
512
字节的数据,每个数据报。我们会遇到同样的限制与其
他
UDP
的应用:的
DNS
(
14
章),
< br>TFTP
(
15
章),
BOOTP
(
16
章)
,和简单网络管理协议(
25
章)。
数据截断
因为
IP
能够发送和接收数据报的大小并不意味着接收应用程序编写的读取,大小。
UDP
编程
接口允许应用程序指定要返回的最
大字节数的每一次。
如果接收到的数据包超过大小的应用
是准备
以应付发生了什么?
不幸的是,答案取决于编程接口和实现。
插座的传统伯克利版
API
截断数据包,
< br>丢弃任何多余的数据。
应用程序是否通知取决于版本。
(
4.3BSD
雷诺和以后可以通知数据包被截断。应用)
API
在
SVR4
插座(包括
Solaris 2
。
p>
x
)不截断数据报。任何多余的数据返回在随后的读取。
应用程序没有通知多个读取是从一个单一的
UDP
数据报实现。
TLI API
不丢弃
数据。相反,一个标志还表明更多的数据是可用的,和随后的读取由应用程
序返回的数据
报的休息。
当我们讨论
TCP
我们会看到它的应用程序提供了一个连续的字节流,
没有任何消息边界
。
TCP
将数据传递到任何大小的应用程序读取应用程序要求是
没有任何数据丢失在这个界面。
11.13
从理论上讲,
一个
IP
数据报
的最大大小为
65535
字节,
由
p>
16
位总长度字段在
IP
< br>报头强加的
(图
3.1
)。与一
个
20
字节的
IP
报头和一个
8
字节的
UDP
报头,这使得最大为
65507
字节的
UDP
数据
报的用户数据。大多数的实现,然
而,提供小于这个最大的。
有两个限制,
我们会遇到。
首先,
应用程序可以通过编程接口有限公司。
套接字
API
(第
1.15
节)
提供了一个函数,
应
用程序可以调用设置接收缓冲区和发送缓冲区的大小。
一个套接字
这个尺寸是最大规模的
UDP
,
UD
P
数据包的应用程序可以读取或写入直接相关。
今天,
大多数
系统提供一个默认的刚刚超过
8192<
/p>
字节的
UDP
数据报可以读取或写入的最
大尺寸。(这是因
为
8192
是默认的
用户数据量,
NFS
读取和写入默认情况下。)
未来的限制来自于
TCP
IP
/核的实现。有可能实现的功能(或错误),一个
IP
p>
数据报的限制
到小于
65535
字节的大小。
作者试验了各种各样的
UDP
数据包大小,使用的袜子程序。使用环回接口在
SunOS
4.1.3
,
IP<
/p>
数据报的最大大小为
32767
字节。<
/p>
所有值较高的失败。
但在以太网从
BSD
/
386
到
SunOS
4.1.3
,
IP
数据报的最
大大小的太阳能接受
32786
(即,
32758
字节的用户数据)。使用环回接口在
Solaris
2.2
,最大
65535
字节的
IP
数据包可以发送和接收。从
Solari
s 2.2 AIX 3.2.2
,最
大
65535
字节的
IP
数据报可以转
移显然这个极限取决于源和目标的实现。
我们
3.2
节中提到,一个主机必须至少有一个
576
p>
字节的
IP
数据报接收。许多的
UDP
应用程序
的设计限制了它们的应用数据为<
/p>
512
字节或更少,低于此限制。我们看到这在
< br>10.4
节中,例
如,在路由信息协议总是差小于
512
字节的数据,每个数据报。我们会遇到同样的限制与其
他
UDP
的应用:的
D
NS
(
14
章),
TFTP
(
15
章),
BOOTP
(
16
章),
和简单网络管理协议(
25
章)。
数据截断
因为能够发送和接收数据报
的大小并不意味着接收应用程序编写的读取
IP
,
UDP
大小。编程
接口允许应用程序指定要返回的最
大字节数的每一次。
如果接收到的数据包超过大小的应用
是准备
以应付发生了什么?
不幸的是,答案取决于编程接口和实现。
插座的传统伯克利版
API
截断数据包,
< br>丢弃任何多余的数据。
应用程序是否通知取决于版本。
(
4.3BSD
雷诺和以后可以通知数据包被截断。应用)
API
在
SVR4
插座(包括
Solaris 2
。
p>
x
)不截断数据报。任何多余的数据返回在随后的读取应
用程序没有通知多个读取是从一个单一的
UDP
数
据报实现。
-百分号
-百分号
-百分号
-百分号
-百分号
-百分号
-百分号
-百分号
-
上一篇:DW CS5属性的英文翻译
下一篇:数字开头的四字成语