Professional Documents
Culture Documents
协议实 例剖 析与服务器 配置
林腾 李国锋 许崇敬 赵勇 编著
人 民 邮 电 出 版 社
图书在版编目(CIP)数据
Internet 应用协议实例剖析与服务器配置/林腾等编著. —北京:人民邮电出版社,2004.5
ISBN 7-115-12207-5
内 容 提 要
编 著 林 腾 李国锋 许崇敬 赵 勇
责任编辑 徐享华
人民邮电出版社出版发行 北京市崇文区夕照寺街 14 号
网址 http://www. ptpress.com.cn
读者热线:010-67129258
北京汉魂图文设计有限公司制作
北京顺义振华印刷厂印刷
新华书店总店北京发行所经销
开本:7871092 1/16
印张:15.25
字数:362 千字 2004 年 5 月第 1 版
印数:1 – 0 000 册 2004 年 5 月北京第 1 次印刷
ISBN 7-115-12207-5/TN·2269
定价: .00 元
本书如有印装质量问题,请与本社联系 电话:(010)67129223
前 言
第 1 章 TCP/IP 基础 ·
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
··1
1.1 协议的层次结构··········································································································1
1.1.1 ISO/OSI 协议模型 ·························· 1
1.1.2 Internet 协议模型 ·························· 3
1.2 以太网基础 ·················································································································4
1.2.1 以太网的设备 ··························· 4
1.2.2 以太网地址(MAC 地址) ······················ 5
1.2.3 以太网帧结构 ··························· 7
1.2.4 用集线器(HUB)连接以太网 ···················· 8
1.2.5 载波监听/冲突检测(CSMA/CD) ··················· 9
1.2.6 用交换机连接以太网 ························ 9
1.2.7 冲突域与广播域 ························· 10
1.2.8 虚拟局域网(VLAN) ······················· 12
1.3 IP 地址与掩码···········································································································13
1.3.1 IP 地址的结构与分类 ······················· 13
1.3.2 网络地址 ···························· 14
1.3.3 广播地址 ···························· 15
1.3.4 A 类 IP 地址 ··························· 16
1.3.5 B 类 IP 地址 ··························· 16
1.3.6 C 类 IP 地址 ··························· 17
1.3.7 多播 IP 地址(D 类地址) ····················· 17
1.3.8 其他 IP 地址 ··························· 17
1.3.9 IP 地址与以太局域网 ······················· 18
1.3.10 掩码(mask) ·························· 18
1.3.11 私有地址 ···························· 19
1.4 ARP 基础与实例剖析 ·······························································································20
1.4.1 ARP 协议的作用 ························· 20
1.4.2 ARP 包结构 ··························· 21
1.4.3 在以太网帧中封装 ARP 包 ····················· 21
1.4.4 ARP 协议的工作过程 ······················· 22
1.4.5 静态 ARP 项 ··························· 22
1.4.6 ARP 代理 ···························· 22
·2· Internet 应用协议实例剖析与服务器配置
第 3 章 DHCP 应用 ·
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···59
3.1 DHCP 基础 ···············································································································59
目 录 ·3·
第 4 章 DNS 应用·
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
·81
4.1 DNS 简介··················································································································81
4.2 DNS 包格式 ··············································································································81
4.2.1 DNS 包的基本结构 ························ 81
4.2.2 DNS 头结构 ··························· 82
4.2.3 问题记录的格式 ························· 83
4.2.4 回答记录的格式 ························· 83
4.3 DNS 客户端 ··············································································································84
4.3.1 DNS 客户端实现 ························· 84
4.3.2 DNS 客户端配置 ························· 85
4.4 DNS 服务器 ··············································································································86
4.4.1 DNS 服务器简介 ························· 86
4.4.2 DNS 服务器的分类 ························ 87
4.4.3 DNS 服务器的安装与启动 ····················· 87
4.4.4 DNS 服务器的配置 ························ 87
4.5 DNS 查询方式 ··········································································································94
4.5.1 反复式查询 ··························· 94
4.5.2 递归式查询 ··························· 95
4.6 实例剖析 ··················································································································95
4.6.1 环境介绍 ···························· 95
4.6.2 通信过程中的帧 ························· 96
4.6.3 帧剖析 ····························· 97
4.6.4 校验和的计算 ·························· 100
·4· Internet 应用协议实例剖析与服务器配置
第 5 章 TELNET 应用 ·
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···101
5.1 TELNET 协议基础 ··································································································101
5.2 网络虚拟终端(NVT) ··························································································102
5.2.1 数据传输 ···························· 102
5.2.2 控制功能 ···························· 103
5.2.3 TELNET 同步信号 ························ 103
5.2.4 NVT 打印机和键盘 ························ 104
5.3 TELNET 命令 ·········································································································106
5.4 TELNET 选项 ·········································································································107
5.5 TELNET 客户端 ·····································································································110
5.6 TELNET 服务器端 ··································································································112
5.6.1 in.telnetd 的安装与启动 ······················ 112
5.6.2 in.telnetd 的配置 ························· 112
5.7 实例剖析 ················································································································113
5.7.1 环境介绍 ···························· 113
5.7.2 通信过程中的帧 ························· 114
5.7.3 帧剖析 ····························· 117
第 6 章 WWW 应用 ·
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
··119
6.1 WWW 简介 ············································································································119
6.2 HTTP 协议 ··············································································································119
6.2.1 HTTP 协议概述 ·························· 119
6.2.2 HTTP 包的格式 ·························· 119
6.2.3 HTTP 协议的工作过程 ······················· 121
6.3 WWW 客户端 ·········································································································122
6.4 WWW 服务器 ·········································································································123
6.4.1 Apache 的获取和安装 ······················· 123
6.4.2 Apache 的启动和关闭 ······················· 123
6.4.3 Apache 的基本配置 ························ 123
6.4.4 配置虚拟主机 ·························· 125
6.4.5 管理 log 文件 ··························· 125
6.4.6 用 Apache 建立动态网站 ······················ 126
6.4.7 使用 SSL 建立安全的 Web 站点 ··················· 127
6.5 实例剖析 ················································································································128
6.5.1 环境介绍 ···························· 128
6.5.2 通信过程中的帧 ························· 128
6.5.3 帧剖析 ····························· 131
6.5.4 校验和的计算 ·························· 147
目 录 ·5·
第 7 章 FTP 应用 ·
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
··149
7.1 FTP 协议基础 ·········································································································149
7.1.1 FTP 模型 ···························· 149
7.1.2 FTP 与 TELNET 之间的关系 ···················· 150
7.1.3 数据表示 ···························· 150
7.1.4 数据结构 ···························· 150
7.1.5 FTP 命令 ···························· 151
7.1.6 FTP 应答 ···························· 155
7.1.7 FTP 服务器的最小实现 ······················ 157
7.2 FTP 客户端 ·············································································································157
7.2.1 命令行 FTP ··························· 157
7.2.2 CuteFtp ····························· 160
7.3 FTP 服务器 ·············································································································163
7.3.1 Wu-Ftpd 的获取和安装 ······················· 163
7.3.2 Wu-Ftpd 服务器的配置 ······················· 163
7.3.3 FTP 服务的启动和关闭 ······················ 166
7.3.4 FTP 服务器相关程序 ······················· 166
7.4 实例剖析 ················································································································167
7.4.1 环境介绍 ···························· 167
7.4.2 通信过程中的帧 ························· 168
7.4.3 帧剖析 ····························· 175
第 8 章 MAIL 应用 ·
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
··177
8.1 MAIL 系统的组成···································································································177
8.2 SMTP 协议 ·············································································································177
8.2.1 SMTP 协议简介·························· 177
8.2.2 SMTP 协议模型·························· 177
8.2.3 SMTP 命令 ··························· 178
8.2.4 SMTP 应答 ··························· 179
8.2.5 用 telnet 模拟 SMTP 协议实现过程 ·················· 179
8.3 POP 协议 ················································································································180
8.3.1 POP 协议简介 ·························· 180
8.3.2 POP3 命令 ···························· 180
8.3.3 POP3 应答 ···························· 181
8.3.4 用 telnet 模拟 POP3 协议实现过程 ·················· 181
8.4 MAIL 系统的客户端程序························································································182
8.5 MAIL 服务器 ··········································································································187
8.5.1 sendmail 的安装和启动······················· 187
·6· Internet 应用协议实例剖析与服务器配置
第 9 章 PROXY 应用 ·
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
··205
9.1 PROXY 简介 ··········································································································205
9.2 PROXY 的客户端配置 ····························································································205
9.3 PROXY 服务器 ·······································································································206
9.3.1 squid 代理服务器的安装和启动 ··················· 206
9.3.2 squid 代理服务器的配置 ······················ 207
9.4 实例剖析 ················································································································208
9.4.1 环境介绍 ···························· 208
9.4.2 通信过程中的帧 ························· 209
9.4.3 帧剖析 ····························· 214
第 10 章 常用网络调试软件的使用 ·
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
·217
10.1 用 tcpdump 进行网络数据的采集和分析 ·······························································217
10.1.1 数据选择和过滤 ························· 217
10.1.2 数据输入和输出 ························· 217
10.2 用 NetXray 进行网络数据的采集和分析 ·······························································219
10.3 用 ifconfig 命令设置和查看网络接口 ····································································221
10.3.1 查看接口信息 ·························· 221
10.3.2 设置接口 ···························· 222
10.4 用 route 命令设置和查看路由信息 ········································································223
10.4.1 查看路由信息 ·························· 224
10.4.2 设置路由 ···························· 224
10.4.3 删除路由 ···························· 225
10.5 用 ping 命令测试网络连通状态 ·············································································225
10.6 用 netstat 命令显示网络状态 ·················································································227
10.7 用 traceroute 命令显示经过的网关 ········································································228
10.8 用 arp 命令操作 ARP 缓存 ····················································································229
第1章 TCP/IP 基础
1.1 协议的层次结构
为了使数据在网络上从源到达目的,网络通信的参与方必须遵循相同的规则,这套规则
称为协议(protocol),它最终体现为在网络上传输的数据包的格式。协议往往分成几个层次
进行定义,分层定义是为了使某一层协议的改变不影响其他层次的协议。本节将分别介绍
ISO/OSI 模型和 Internet 协议模型。
国际标准化组织(ISO)为了规范协议层次的划分制定了开放系
应用层
统互连(OSI,Open Systems Interconnection)模型,即 ISO/OSI 参考
模型。此模型根据网络功能制定出 7 层网络协议结构,由低到高分别 表示层
为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,
会话层
如图 1-1 所示。
在 ISO/OSI 参考模型中,每一层都依赖下层提供的服务,同时对 传输层
自己的高层提供服务。
网络层
下面从低层向高层依次介绍每一层。
(1)物理层(physical layer) 数据链路层
简单地说,物理层协议对与基本物理信号传输有关的机械、电气
物理层
等功能进行描述。若生产相互连接的两个设备的两个厂商都遵循相同
物理层规范,则二者必定能被连接在一起,并能接收到对方发来的电、 图 1-1 ISO/OSI 参考模型
光或其他的物理信号,而且能正确地将这些物理信号理解为二进制的
0 和 1 序列。物理层只负责正确地接收和发送比特,并不关心这些比特的具体含义。在大部
分计算机上都能够见到的异步串行接口所对应的 RS-232 规范就是典型的物理层协议的实例。
(2)数据链路层(data-link layer)
数据链路层简称链路层,它依赖物理层提供的比特传输能力把数据组织成为有边界的传
输单位,称为“帧” 。链路层把来自网络层的数据组织成“帧”,然后再通过物理层向外发送。
当然,链路层也要负责从来自物理层的比特序列(或者字节序列)中区分出一个个的帧,并
·2· Internet 应用协议实例剖析与服务器配置
将帧中的数据传递给网络层。为了将各个帧区分开来,需要在帧的头部和尾部附加一些特定
的信息,这个过程称为“封装” ,其相反的过程称为“解封装”。“封装”的概念不只在链路层
中存在,在更高的各层协议中同样存在。所有层上的“封装”问题的共同特征是把来自高层
的封装单位根据本层的需要附加上特定信息形成本层的封装单位,然后向低层传递,同时把
来自低层的数据解封装后向高层传递。另外,链路层还可以有其他的诸如差错校验、流量控
制等功能,但要理解整个协议体系,则首先应记住它和帧之间的密切关系,因为帧使无头无
尾的比特序列变成容易控制的有界的单位。
(3)网络层(network layer)
网络层解决如何标识通信各方和数据如何从源到达目的这个问题。网络层用特定的网络
层地址来标识整个网络中的一个节点,并负责使来自传输层的应该到达某个网络层地址的数
据能够被送达这个网络层地址所对应的网络节点,这就是本章后面部分将要涉及到的“路由”
问题。网络层的封装单位称为“包” (本书将网络层及网络层以上各层的封装单位都称为“包”,
见本书说明部分) , “包”需要被进一步封装成链路层的帧然后才能通过物理层发送出去,而
在接收方,包在链路层的帧中被解封装出来。最典型的网络层协议就是目前在 Internet 中使
用的 IP 协议,它使用 IP 地址惟一地标识 Internet 中的一台主机,路由设备根据 IP 包中的目
的 IP 地址将一个 IP 包一步步转发至目的主机。
(4)传输层(transport layer)
依赖物理层、数据链路层和网络层,任意一个网络节点都能把任何信息传递到其他任意
节点,而传输层在物理层、数据链路层和网络层提供的节点间的通信能力基础上进一步提供
了面向应用的服务。传输层向上层提供屏蔽了传输细节的数据传输服务,将来自高层的数据
进行分段并将来自低层的数据重组,对数据传输进行差错恢复和流量控制。通过对每个网络
节点的多个进程进行标识,传输层可以实现对网络层的多路复用。
(5)会话层(session layer)
会话层用于建立和管理不同主机的两个进程之间的对话。会话层可以管理对话,可允许
对话在两个方向上同时进行,也可以强制对话同时只在一个方向上进行。在后一种情况下,
会话层可以提供会话令牌来控制某时刻哪一方可以发送数据。会话层还可以提供同步服务,
它可以在数据流中插入同步点,每当因网络出现故障而造成大量数据传输中断时,通过同步点
机制可以使两个进程之间的数据传输不需要从头开始,而是从最后一个同步点开始继续传输。
(6)表示层(presentation layer)
表示层协议规定对来自应用层的数据如何进行表达,例如采用什么样的文字编码、是否
及如何进行压缩、是否及如何加密等。
不同的计算机采用不同的数据编码方法,如 ASCII 与 EBCDIC、反码与补码等,另外例
如表达数字时的字节顺序、表达数据结构时的成员组织方法等在不同的系统环境下都有很大
不同。为了通过网络在不同的计算机之间交换数据,需要制定一种标准的、抽象的编码标准;
数据的发送方将用本机编码方法表示的数据转换成标准标码后才能进行发送,接收方收到数
据后应该将用标准编码表示的数据转换成本地编码。按照 ISO/OSI 模型的要求,上述功能应
该在表示层协议中进行规定。
数据压缩及加密的方法有多种。表示层协议通过规定压缩方法可以缩短数据的传输时
间,通过规定加密方法可以保护所传送的数据的安全。
第1章 TCP/IP 基础 ·3·
(7)应用层(application layer)
应用层是 ISO/OSI 模型中最靠近用户的一层,应用层协议直接面对用户的需求,例如与
发送邮件相关的应用层协议可以规定诸如邮件地址的格式、邮件内容的段落表示、客户与服
务器进行交互的命令串等。
ISO/OSI 协议模型只是一个参考模型,实际的网络不一定要严格地按照这 7 个层次来制
定协议,实际上目前也确实没有一个协议体系完全符合 ISO/OSI 模型,但所有的协议体系都
可以与 ISO/OSI 模型之间建立近似的层次对应关系。
应用层
Telnet FTP TFTP „„
传输层
TCP UDP „„
网络层
IP&ICMP
ARP
802.3、802.5、x.25 等 通信子网层
组成,由低到高分别是通信子网层、网络层、 应用层
传输层和应用层。Internet 是成熟的网络,每一
表示层 应用层
层都存在一些成熟的具体协议,本书后面各章
节将对图 1-2 中的每一个层次分别进行介绍。 会话层
Internet 协议结构和 ISO/OSI 模型的近似
的对应关系如图 1-3 所示。 传输层 传输层
1.2 以太网基础
1.2.1 以太网的设备
以太网设备可以粗略地分成 3 类:传输介质、接口卡和汇接设备。
(1)传输介质
传输介质包括同轴电缆、双绞线、光纤等。随着以太网技术的发展,双绞线和光纤已经
替代了早期的同轴电缆,因此在本书中不讨论以同轴电缆为介质的网络。
关于线缆的分类和工程布线的标准有很多,如 EIA/TIA-568A、EIA/TIA-568B 等。有关
线缆的几何参数、设备级联的最大个数等工程布线的详细参数,请参阅网络布线相关资料,
本书不作详细介绍。
(2)接口卡
接口卡既包括常用的 ISA 或 PCI 以太网插卡或主板集成部件,也包括路由器的以太网接
口卡等部件,在此后的各章节中将它们统称为“以太网卡” 。以太网卡包含了 ISO/OSI 网络层
次模型的物理层和链路层功能,它既能借助相应传输介质进行基本物理信号的发送和接收,
又具有帧处理功能。
通常说一个设备是某某层设备,是指此设备包含了 ISO/OSI 某某层及某某层下面各层的
功能,例如称一种设备是链路层设备就是指此设备包含了 ISO/OSI 链路层和物理层的功能,
比如以太网卡就是一种链路层设备。
(3)汇接设备
汇接设备包括中继器、集线器、网桥、交换机等。
中继器是两端口物理层设备,其基本功能是将从其中一端口收到的信号整形放大后发向
另一端口。
集线器(HUB)是多端口的中继器,它是一种物理层设备,基本功能是将从某一端口收
到的信号整形放大后发送到其他所有端口。
网桥是两端口链路层设备,它除了能够完成物理层的信号收发功能外,还能够根据帧中
第1章 TCP/IP 基础 ·5·
图 1-4 以太网地址构成
卡的厂商,或带以太网接口的路由器生产厂商)需要首先申请获得厂商号,并且在自己生产
的设备中使用这个厂商号。下面列出一些以太网厂商号。
厂商号 厂商名
00000C Cisco Systems, Inc.
000142 Cisco Systems, Inc
000143 Cisco Systems, Inc
000163 Cisco Systems, Inc
000164 Cisco Systems, Inc
000196 Cisco Systems, Inc
000197 Cisco Systems, Inc
.. ....
..
0002B3 Intel Corporation
000347 Intel Corporation
000423 Intel Corporation
0007E9 Intel Corporation
000CF1 Intel Corporation
00D0B7 Intel Corporation
.. ....
..
00068C 3com Corporation
000A5E 3com Corporation
00104B 3com Corporation
00105A 3com Corporation
0020AF 3com Corporation
.. ....
..
由上面列出的详细信息可知,同一个厂商可以根据需要获得多个以太网厂商号。
序列号部分的长度为 24bit,它由厂商自行分配,并保证不出现重复。
下面看一个以太网地址实例。某 Linux 主机有一个 PCI 接口的 100Mbit/s 以太网卡,用
ifconfig 命令得到下面的结果:
eth0 Link encap:Ethernet HWaddr 00:00:B4:91:8C:6A
inet addr:202.194.254.138 Bcast:202.194.254.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:230694 errors:2 dropped:0 overruns:0 frame:0
TX packets:179911 errors:0 dropped:0 overruns:0 carrier:0
collisions:182 txqueuelen:100
Interrupt:11 Base address:0x1000
上面结果中的“HWaddr 00:00:B4:91:8C:6A”即表示本主机的以太网卡 0(eth0)的硬件
地址(HWaddr:HardWare address)为 00:00:B4:91:8C:6A,此硬件地址中的厂商号 00:00:B4
为 Realtek 公司厂商号,91:8C:6A 为网卡地址的序列号部分。
使用以太网卡的 Windows 用户可以使用 ipconfig/all 命令来看到相应的 MAC 地址。
第1章 TCP/IP 基础 ·7·
1.2.3 以太网帧结构
7 Byte 前同步码
帧是以太网传输的基本单位,以太网的帧 1 Byte 分界符
结构如图 1-5 所示。 6 Byte 目的以太网地址
在传输介质中发送一个帧时, “前同步码” 6 Byte 源以太网地址
字段是最先被发送的字段。 2 Byte 长度/类型
以太网帧各字段分别描述如下所述。 所携带数据
46~1500 Byte
① 前同步码:此字段的内容按照发送顺 填充字节
序 排 列 为 10101010 10101010 10101010 4 Byte 校验值
10101010 10101010 10101010 10101010,接口
扩展部分
卡将其进行串行发送时的顺序为从左到右。前
同步码的作用是通过连续的“1” “0”序列使接 图 1-5 以太网帧结构
收方达到电路稳定状态。
② 分界符:此字段的内容为 10101011,它的作用是标识帧有效部分的正式开始。
③ 目的以太网地址、源以太网地址:这两个字段分别指定了“接收方”和“发送方”
的 MAC 地址。源以太网地址一般为单播地址,目的以太网地址可以是单播或多播地址或广
播地址。
④ 长度/类型:此字段是一个整数,若此整数的值小于 0x5dc(十进制 1500) ,则用于表
示此帧中所携带的数据的按字节计算的长度,否则表示所携带数据采用的协议类型。在
Internet 通信中,此字段总是作为“类型”使用,常用的字段值及其含义如下:
0x0800 表示所携带的数据遵循 IP 协议规定的格式,或者说携带的是 IP 包。
0x0806 表示所携带的数据遵循 ARP 协议规定的格式,或者说携带的是 ARP 包。
⑤ 所携带数据:此字段通常又称为所封装数据,例如可以是一个 IP 包。从协议层次的
角度出发,我们通常将“所携带数据包”称为“高层数据”。
⑥ 填充字节:此字段的作用是使每个帧达到最小的帧长度的要求。
⑦ 校验值:此字段是根据目的以太网地址字段、源以太网地址字段、长度或类型字段、
所携带数据和填充字节字段的内容采用循环冗余校验(CRC 校验)算法得到的结果。在 CRC
算法中使用的多项式如图 1-6 所示,CRC 校验的算法细节请参考相关资料。
G(x)=x32+x26+x 23+x22+x16+x12+x 11+x10+x8+x7+x5 +x4+x 2+x+1
图 1-6 以太帧校验 CRC 多项式
netxray、sniffer 等网络侦听软件工作的基础,网络中的以太网卡可以侦听到哪些类型的帧与
所使用的汇接设备有关,详见 1.2.4 和 1.2.6 节中关于集线器和交换机的部分。
1.2.4 用集线器(HUB)连接以太网
集线器
A B
MAC:00:00:b4:91:8c:6a MAC:00:d0:b7:37:55:00
图 1-7 用集线器连接以太网
图中 A、B 节点可以是桌面计算机的以太网卡,也可以是路由器的一个以太网接口等。
若 A 与 B 的 MAC 地址分别用 MACA 和 MACB 表示,根据图 1-7,则有:
MACA: 00:00:b4:91:8c:6a
MACB: 00:d0:b7:37:55:00
若 A 节点欲向 B 节点发送一个帧,则 A 节点首先应获得 B 节点的 MAC 地址,本章的
1.4 节“ARP 基础与实例剖析”将通过实例具体介绍利用已知的对方的 IP 地址获得对方 MAC
地址的方法,此处假设 A 节点已经获得 B 节点的 MAC 地址,则 A 节点发向 B 节点的帧结
构如图 1-8 所示。
6 Byte 6 Byte
集线器是一个物理层设备,随着此帧中的每个比特通过双绞线向集线器发送,集线器只
是把收到的信号整形放大后从其他端口发出(注意, “从所有端口发出”与“以太网广播”不
是同一个概念) ,连接在集线器上的所有节点的以太网卡同时开始接收该帧每一个比特,当接
收完帧的目的以太网地址字段(此例中为 MACB)后,所有的接收以太网卡都将此 MAC 地
址与自身 MAC 地址进行比较,若不同则将帧丢弃;若相同,则接收整个帧并通过相应机制
(例如中断机制)将帧交由操作系统处理。此例中只有 B 节点的操作系统会收到 A 发送的帧。
从上述过程可以看出,连接在集线器上的各节点同时只能有一对节点进行通信,而且只
能进行半双工通信,即发送和接收不能同时进行。因此对于 10/100Mbit/s 集线器来说是所有
节点分享了 10/100Mbit/s 的速率。
从上述过程还可以看出,若连接在集线器上的某以太网卡被设置为全接收模式(例如使
用 tcpdump、netxray、sniffer 等网络侦听软件)
,则它就可以把连接于同一集线器上的其他计
第1章 TCP/IP 基础 ·9·
算机之间的通信过程全盘窃听,因此,若某计算机的通信过程不希望被他人窃听,哪怕是同
一间办公室的人,则此计算机应该通过 “以太网交换机”与他人连接,而不是通过集线器。
1.2.5 载波监听/冲突检测(CSMA/CD)
集线器连接的各节点同时只能在一对节点之间进行半双工通信,当两个节点同时向外发
送信号时便会发生冲突。当冲突发生时,所有网卡将无法接收到正确的信号,所以必须有一
种方法使通信各方检测到冲突的发生并弥补由于冲突而造成的损失,即发送方应该重新发送
刚刚因为冲突而没有被对方正确接收的帧。CSMA/CD 就是以太网采用的用于解决这种冲突
的一种方法。
CSMA/CD 机制要求每一节点在发送帧之前必须首先判断线路是否空闲;若不空闲,则
等待并不断监测线路状态直至空闲再发送帧。若两节点同时检测到空闲并同时进行帧的发送,
则每一个节点应能够检测到冲突的发生,并进入退避、延迟和重发的步骤。CSMA/CD 机制
的电路实现原理不是本书的内容,详见 IEEE802.3 文档。
实际上,冲突不只发生在两节点同时发送数据帧的情况下。因电信号的传递需要时间,
A 节点开始发送一个帧一段时间后,另外一个距离较远的B节点仍有可能检测到线路空闲并
开始发送自己的帧,这样A和B节点发送的帧仍有可能发生冲突。同样,因为电信号的传递
需要时间,A节点需要在一段时间之后才能检测到冲突的发生,若在这段时间内,A节点已
经发送完帧的最后一个比特,则 A 节点会认为此帧已经正确发送,但实际上因为冲突,接收
方可能没有正确地接收到此帧。因为以上原因,以太网有最小帧长度的规定,以让双方能够
在帧发送完毕之前检测到冲突的存在并进行重发。
1.2.6 用交换机连接以太网
交换机
A B C D
MACA:00:00:b4:91:8c:6a
MACB:00:d0:b7:37:55:00
图 1-9 用交换机连接以太网
交换机是链路层设备,它可以通过查看从某一端口发来的帧的源以太网地址字段建立此
MAC 地址与交换机端口之间的对应关系,例如某交换机的 MAC 地址与端口的对应表如下:
Port MACs MAC addresses
Port 1 0 <No MAC addresses are active>
Port 2 0 <No MAC addresses are active>
·10· Internet 应用协议实例剖析与服务器配置
1.2.7 冲突域与广播域
由集线器或几个集线器的级联加上传输介质和接口卡构成的以太局域网内,同时只能有
一对节点进行半双工通信,若两节点欲同时发送数据就会产生冲突,因此常把这样的一些设
备的集合称为一个冲突域,如图 1-10 所示。
图 1-10 中任一节点发出的目的地址为某一 MAC 地址的帧都会被其他所有节点侦听和判
断,当然,大部分节点会因为此帧的目的地址与自身 MAC 地址不相符而丢弃此帧,而目的
MAC 地址为广播地址 0xffffffffffff 的帧会被所有节点接收,因此这样一些设备的集合又被称
为一个广播域。
过多的节点属于同一个冲突域将大大降低通信效率,因为节点过多将导致太多冲突,以
至于真正有效的传输时间将大大缩短。
若由交换机或几个交换机的级联加上传输介质和接口卡构成以太局域网,并且每一个接
口卡都支持全双工通信方式,则在带宽足够的情况下,可以认为此局域网内已不存在冲突,
即冲突域已经消除,但仍构成一个广播域,如图 1-11 所示。
第1章 TCP/IP 基础 ·11·
集线器
„
集线器 集线器
„
„ „
冲突域
„ „
广播域
图 1-10 用集线器连接的冲突域和广播域
交换机
„„
交换机 交换机
„„ „„
广播域
图 1-11 用交换机连接的广播域
交换机
„„
集线器 集线器
„„ „„
冲突域
广播域
图 1-12 交换机与集线器混合构成的冲突域和广播域
·12· Internet 应用协议实例剖析与服务器配置
交换机通过缩小甚至消除以太网冲突域可以大大提高平均通信速率,由多个汇接设备组
成的以太局域网总是构成一个广播域,这对于后面要介绍的基于以太网的 IP 网络是非常重要
的。在后面各章节中提到的以太局域网,就是指一个以太网广播域(其他类型的局域网不一
定存在广播域的概念),在后面各章中用图 1-13 所示的方法表示一个以太网广播域。
A „„ B
图 1-13 以太网广播域的表示方法
一个以太网广播域内包含过多的节点(例如几百台计算机)时,也会大大降低通信效率,
因为广播域内的每一个接口卡都会将目的地址为广播地址的帧接收下来交给操作系统,在 1.4
节将会讲到,其实有些时候,某个节点发出广播帧的目的并不是希望把数据发给广播域内每
一个节点,而是因为它暂时不知道对方的 MAC 地址,只好采用广播方式,而让接收了此帧
的操作系统去根据高层数据判断自己到底是否应该丢弃此帧。在这种情况下,显然广播域内
的大部分操作系统是在浪费时间,同时交换机的负担也大大加重,因此也应该防止建立过大
的以太网广播域,例如可以通过路由器将大的以太网分成多个广播域,详见 1.5 节“路由器”
相关部分。
1.2.8 虚拟局域网(VLAN)
交换机
„„
Studentgroup1
„„ Studentgroup2 „„
1.3 IP 地址与掩码
1.3.1 IP 地址的结构与分类
而有所不同。
以二进制来表示,具有如图 1-16 所示特征的 IP 地址分别称为 A 类地址、B 类地址、C
类地址。
网络位 主机位
网络位 主机位
网络位 主机位
图 1-16 IP 地址的分类
1.3.2 网络地址
内的所有 IP 地址。
1.3.3 广播地址
1.3.4 A 类 IP 地址
按照 A 类地址的定义,A 类 IP 地址的范围为:
0.0.0.0~127.255.255.255
A 类网络地址的范围为:
0.0.0.0~127.0.0.0
在 Internet 实践中,0.0.0.0 网络地址被用于表示默认路由,127.0.0.0 网络地址被用于对
IP 协议进行测试(读者可在自己的计算机上运行 ping 127.0.8.67 体验一下),因此实际可以被
分配使用的 A 类网络地址共有 126(27–2)个:
1.0.0.0~126.0.0.0
每一个 A 类网络内可以容纳的主机数就是一个网络地址所容纳的 IP 地址数,例如网络
地址 1.0.0.0 容纳的 IP 地址范围为:
1.0.0.0~1.255.255.255
其中 1.0.0.0 已用于标识整个网络,而 1.255.255.255 被用于标识本网络所有主机,即它
是本网络的广播地址,因此每一个 A 类网络内可以被主机使用的 IP 地址数为 224-2 个。例如
1.0.0.0 网络内可以被主机使用的 IP 地址的范围为:
1.0.0.1~1.255.255.254
对于 Internet 来说,A 类 IP 地址资源早已被用完,因为它们已被 HP、IBM 等大公司和
美国的一些大学申请并获得。A 类网络的个数只有 126 个,但每一个网络所能容纳的主机数
却可以达到 16777214(224–2)个,已经申请获得 A 类地址的用户一般并不可能拥有如此庞
大的一个 IP 网络,可以使用子网掩码将一个 A 类网络分成多个子网供不同部门使用,详见
1.3.10 节的“掩码”部分。
1.3.5 B 类 IP 地址
按照 B 类地址的定义,B 类地址的范围为:
128.0.0.0~191.255.255.255
B 类网络地址的范围为:
128.0.0.0~191.255.0.0
B 类网络的总个数为 16384(214)个。
每一个 B 类网络内可以容纳的主机数就是一个 B 类网络地址所容纳的 IP 地址数,例如
网络地址 128.8.0.0 容纳的 IP 地址范围为:
128.8.0.0~128.8.255.255
其中 128.8.0.0 已用于标识整个网络,而 128.8.255.255 被用于标识本网络所有主机,即
它是本网络的广播地址,因此每一个 B 类网络内可以被主机使用的 IP 地址数为(216–2)个。
例如 128.8.0.0 网络内可以被主机使用的 IP 地址的范围为:
第1章 TCP/IP 基础 ·17·
128.8.0.1~128.8.255.254
像 A 类地址资源一样,B 类地址资源目前也已经被用完,它们已经被 Microsoft、Cisco
等大公司以及大学机构申请并得到。
1.3.6 C 类 IP 地址
按照 C 类地址的定义,C 类地址的范围为:
192.0.0.0~223.255.255.255
C 类网络地址的范围为:
192.0.0.0~223.255.255.0
C 类网络的总个数为 2097152(221)个。
每一个 C 类网络内可以容纳的主机数就是一个 C 类网络地址所容纳的 IP 地址数,例如
网络地址 192.8.8.0 容纳的 IP 地址范围为:
192.8.8.0~192.8.8.255
其中 192.8.8.0 已用于标识整个网络,而 192.8.8.255 被用于标识本网络所有主机,即本
网络的广播地址,因此每一个 C 类网络内可以被主机使用的 IP 地址数为 254(28~2)个。
例如 192.8.8.0 网络内可以被主机使用的 IP 地址的范围为:
192.8.8.1~192.8.8.254
C 类地址资源是 Internet 新用户可以申请得到的地址资源,但随着 Internet 的迅速膨胀,
C 类地址资源也面临被用完的危险。Ipv6 的出现可以解决目前面临的 IP 地址资源短缺问题,
详见 RFC3513。
多播地址的结构如下:
1110**** ******** ******** ********
其中“*”代表 0 或 1,所以多播地址的范围为:
224.0.0.0~239.255.255.255
每一个多播地址用于代表一组特定的主机,称为“多播组”。几个常用的永久的多播地
址如下:
224.0.0.2 本网络内的所有路由器
224.0.0.9 支持 RIP2 的路由器
224.0.0.10 支持 IGRP 的路由器
另外,一个多播组也可以根据需要(如视频会议)临时创建;在支持多播的路由器的帮
助下,任何主机都可以随时加入某个多播组。
本书在第 2 章“多播在 RIP 中的应用”中结合实例介绍了多播地址的使用。关于多播的
更详细信息,请参阅 RFC1112。
1.3.8 其他 IP 地址
1.3.9 IP 地址与以太局域网
Internet 是由不同类型、不同规模的局域网通过路由设备连接而成的。要想将一个以太局
域网与 Internet 连接起来,此以太局域网内的每一个接口卡都应该被赋予一个惟一的 IP 地址
(在 Windows 系统中,称这个过程为“将某 IP 地址与某网卡绑定”)
,以太局域网内所有接口
卡的 IP 地址应该属于同一个网络,即它们的网络地址应该相同。
实际上,在没有 IP 地址的情况下,以太网节点之间可以通过 MAC 地址互相通信,我们
为每一个以太接口卡再分配一个 IP 地址的作用是为了让这个局域网与 Internet 上各种其他局
域网通过 IP 协议连接起来。
IP 网络之间必须通过路由器互连,通过路由器连通的 IP 网络可以建立在相同或不同的
通信子网技术之上。一个 IP 包穿过路由器到达另一个 IP 网络时,路由器把 IP 包由一种帧封
装转换到另一种帧封装。路由器把局域网连接起来的方法在 1.5 节中进行具体介绍。
1.3.10 掩码(mask)
1.3.11 私有地址
以下地址被定义为私有地址(Private Address) :
A 类网络地址中的 10.0.0.0
B 类网络地址中的 172.16.0.0~172.31.0.0
C 类网络地址中的 192.168.0.0~192.168.255.0
这些私有地址不会被分配给任何加入 Internet 的组织使用,但任何组织可以在组建
Intranet 时使用这些地址。若使用私有地址的网络试图与 Internet 通信,必须使用一种称为
“NAT(网络地址转换) ”的技术,详见 RFC2663。
·20· Internet 应用协议实例剖析与服务器配置
IP&ICMP 网络层
ARP
802.3、802.5、x.25 等 通信子网层
以太网帧头 数据
图 1-18 以太网帧基本结构
所要被解析的网络层地址的类型,例如 0x0800
n Byte 发送者网络层地址
表示网络层地址类型为 IP 地址。
③ 链路地址长度:此字段是以字节为单位 m Byte 接收者链路地址
的链路地址的长度值,对于以太网来说,这个值
n Byte 接收者网络层地址
总是为 6。
④ 网络层地址长度:此字段是以字节为单
图 1-19 ARP 包的结构
位的网络层地址的长度值,对于 IP 地址来说,这
个值总是为 4。
⑤ 操作码:此字段表示此 ARP 包的作用,0x0001 表示此 ARP 包是一个问询包,0x0002
表示此 ARP 包是一个应答包。
⑥ 发送者链路地址:此字段表示发送此 ARP 包的主机的链路地址。
⑦ 发送者网络层地址:此字段表示发送此 ARP 包的主机的网络层地址。
⑧ 接收者链路地址:此字段表示应接收此 ARP 包的主机的链路地址。
⑨ 接收者网络层地址:此字段表示应接收此 ARP 包的主机的网络层地址。
ARP 协议包结构的更详细信息可参阅 RFC826。
长度/类型=0x0806
假设基于一个以太网广播域组建成了一个 IP 网络,即此广播域内每一主机都被赋予了一
个 IP 地址和相应掩码,且所有 IP 地址的网络位都相同。
当一主机试图和网内的另一主机通信时,要使用 ARP 协议惟一地确定对方的 MAC 地
址,即信息发送方应首先发送一个封装了 ARP 问询包(包中含有对方的 IP 地址)的以太
网广播帧(即目的 MAC 地址为 0xffffffffffff 的以太网帧)。从 1.2 节“以太网基础”可以知
道,目的 MAC 地址为广播地址的帧会被同一个广播域内的所有接口卡接收,并通过与计
算机体系结构相关的某种方式(例如中断方式)将帧传递给操作系统。接收方操作系统收
到广播帧后,可以根据以太网帧的类型字段获知这是 ARP 包,然后可以根据 ARP 包的内
容得知这是一个 ARP 问询包, 并且通过进一步阅读 ARP 包的内容可获得被问询的 IP 地址。
所有的接收者都会将这个被问询的 IP 地址与自己的 IP 地址相比较,若被问询的 IP 地址与
自身的 IP 地址不同,则此 ARP 问询包被操作系统丢弃;若被问询的 IP 地址与自身的 IP 地
址恰好相同,则此计算机的操作系统就会向问询者发回一个 ARP 应答包,告知自己的
MAC 地址。问询方得到对方的 MAC 地址后,会在自己的缓存中增加一条记录,这条记
录包含了一个 IP 地址和一个 MAC 地址的对应关系,此后再与同样一个 IP 地址对应的主
机通信时,不再需要发送 ARP 问询来得知对方的 MAC 地址,而只需从缓存中搜索到相
应的记录即可。
一台主机的 ARP 缓存可以用 arp 命令获得,操作系统一般按照一定的时限来维护 ARP
缓存,即若缓存中的某条记录项长时间未被刷新就会被自动删除。
1.4.5 静态 ARP 项
1.4.6 ARP 代理
通常一个 IP 网络是基于一种通信子网技术组建的,例如基于以太网广播域组建一个
IP 网络。在某些特殊情况下,一个 IP 网络可以基于多种通信子网技术,例如图 1-21 所示
的网络。
第1章 TCP/IP 基础 ·23·
IP 地址:192.168.0.100
拨号服务器
掩码: 255.255.255.0
A B „„„„
I S1 S2 Sn
IP 地址:192.168.0.1 IP 地址:192.168.0.2
掩码:255.255.255.0 掩码:255.255.255.0 „„
掩码: 255.255.255.0
C Modem
电话网
D Modem
IP 地址:192.168.0.102:
掩码:255.255.255.0
图 1-21 ARP 代理
通过相应的串行口发向相应的远程客户。
1.4.7 实例剖析
A „„ B
IP 地址:202.194.254.138 IP 地址:202.194.254.254
掩码:255.255.255.0 掩码:255.255.255.0
以太网地址:00:00:B4:91:8C:6A 以太网地址:00:00:B7:37:55:00
00 0D 0E 29
ARP 包
以太网帧
下面对这两个帧进行详细剖析。
1. A 发出的 ARP 问询帧
字节偏移 内容 含义
00~05 ffff ffff ffff 目的以太网地址(广播)
06~0b 0000 b491 8c6a 源以太网地址(A 的以太网地址)
0c~0d 0806 所携带数据为 ARP 包
*******************(以下是 ARP 包的内容)*******************************
·26· Internet 应用协议实例剖析与服务器配置
1.5 IP 协议与路由
1.5.1 IP 包结构
按照 IP 协议组织起来的符合 IP 协议规则的一段数据称为 IP 包。
IPv4 协议的包结构如图 1-24 所示。
版本号 头长 服务类型 包总长度
标识符 标志 偏移
生存时间 协议 头校验和
源 IP 地址
目的 IP 地址
可选项 填充字节
所携带的数据
各字段的含义如下。
① 版本号:此字段表示本包所遵循的 IP 协议版本。本书只讨论目前占主导地位的 IPv4,
因此此字段的 4 个比特的值总是 0100。
② 头长:此字段表示从版本号开始到填充字节结束的所有 IP 头字段以 4 Byte 为单位的
长度。若某个 IP 包中不包含可选项,则头长字段的 4 个比特总是 0101,表示头长为 5 4=20
Byte。后面将要介绍的填充字节将用来保证 IP 头长为 4 的整数倍。
③ 服务类型:此字段用于表达此数据包在被转发的过程中希望得到怎样的服务。这 8
个比特历经几次重新定义目前仍未得到很好的利用,本书后面各章所使用的实例中此字段全
·28· Internet 应用协议实例剖析与服务器配置
1.5.2 在以太网帧中封装 IP 包
IP 包必须封装在通信子网链路层的帧中才能被一步步传递。封装了 IP 包的以太网帧如
图 1-25 所示。
第1章 TCP/IP 基础 ·29·
长度/类型=0x0800
以太网帧的“长度/类型”字段的值为 0x0800,代表以太网帧的数据部分封装的是一个
IP 包,收到此帧的操作系统会根据长度/类型字段判断出 IP 包的存在,并启用相应的处理程
序对 IP 包进行具体分析。
1.5.3 路由器简介
路由器是网络层设备,也是一台计算机,它既可以是为路由选择功能而专门设计的硬件
与相应软件的结合(例如运行 Cisco IOS 操作系统的 Cisco2621 路由器)
,也可以是一台拥有
多个网络接口的普通的台式微机。 路由器可以将多个相同技术或不同技术的局域网连接起来,
在它们之间进行基于 IP 的路由选择,使整个大网络内的任意两个节点之间都可以互相通信。
1.5.4 一台路由器连接多个网络
图 1-26 是路由器的一种简单应用。
I1 I2
路由器
IP 地址:192.168.0.254 IP 地址:192.168.1.254
掩码:255.255.255.0 掩码:255.255.255.0
网络地址:192.168.0.0
网络地址:192.168.1.0
A1 A2 „„ A253 B1 B2 „„ B253
图 1-26 路由器的简单应用
图 1-27 同一网络内通信帧格式
图 1-28 不同网络之间通信帧格式
通过以上过程,可以看出主机设置的默认网关实际上是路由器的一个接口,当主机经过
IP 地址与掩码的计算得知对方主机与自身不属于同一个 IP 网络时,便会利用默认网关向外
转发 IP 包。
A1 首先判断目的地址 IPB1 与自己的 IP 地址 IPA1 不属于同一个 IP 网络,因此 A1 组建
一个目的 MAC 地址为 MACI1,源 MAC 地址为 MACA1 的以太网帧,但此帧所封装的 IP 包
的目的 IP 地址却为 IPB1。因为此帧的目的 MAC 地址是 I1 的 MAC 地址,因此 I1 会接收此
帧并交给路由器的操作系统,操作系统将此帧的帧头去掉剥离出 IP 包,根据目的 IP 信息和
路由器自身配置信息,路由器得出“此 IP 包应该从 I2 接口发出”的结论,然后路由器组建
新的帧把 IP 包重新封装并从 I2 接口发出,这个新的帧的源和目的 MAC 地址分别是 MACI2
和 MACB1,但源和目的 IP 地址仍然分别是 IPA1 和 IPB1,这个新的帧会被 B1 的网卡接收
并交由 B1 的操作系统处理,B1 的相应软件会对 IP 包所封装的数据进行分析,并可能随后向
对方发送数据。同样来自 B1 的 IP 包亦会按照与上述类似的步骤传至 A1。
此处 I1→I2 或 I2→I1 的过程是由路由器的操作系统和路由软件完成的,它并不指 IP 包
从一个接口发送到另一个接口,而是指 IP 包从一个缓冲区转移到另一个缓冲区。
这里假设同一个广播域内各主机(包括路由器的各接口)都已经缓存有其他主机的 MAC
地址,否则通信过程中可以根据对方的 IP 地址通过 ARP 协议得到对方的 MAC 地址(详见
1.4 节) 。
1.5.5 一台路由器连接基于不同类型的局域网技术的网络
图 1-29 不同类型局域网间的 IP 通信
1.5.6 多台路由器连接多个网络
下面仍只以以太网为例,假设所有的路由器接口和主机接口都是以太网接口,如图 1-30
所示。
图 1-30 中有 3 台路由器 R1、R2、R3 并且每台路由器有两个以太网接口(路由器可以有
超过 2 个接口,为了简化问题,这里只使用了两接口路由器) ,整个大网络(这个大网络可以
称之为 Intranet)共由 4 个 IP 网络通过路由器互连而成,每一个 IP 网络都构建在一个以太网
广播域之上,这 4 个 IP 网络分别是 192.168.0.0/24 网络、192.168.1.0/24 网络、192.168.2.0/24
网络和 192.168.3.0/24 网络,其中 192.168.0.0/24 网络节点包括主机 A1~A253 和路由器 R1
的 I1 接口;192.168.1.0/24 网络是一个特殊的网络,它的节点只包括 R1 的 I2 接口和 R2 的 I3
接口,它的作用只是为了连接两个路由器,192.168.1.0/24 网络中的其他 252 个地址被浪费掉
了(其实这种浪费可以通过创建子网来消除,但此处只是为了描述清楚路由的过程,就不再
细分子网) ;192.168.2.0/24 网络的节点包括主机 B1~B252 和路由器 R2 的 I4 接口及路由器
R3 的 I6 接口;192.168.3.0/24 网络的节点包括主机 C1~C253 和路由器 R3 的 I5 接口。设主
机 A1~A253 分别占用 IP 地址 192.168.0.1~192.168.0.253,主机 B1~B252 分别占用 IP 地址
192.168.2.1~192.168.2.252,主机 C1~C253 分别占用 IP 地址 192.168.3.1~192.168.3.253,每
一主机的掩码都设置为 255.255.255.0,A1~A253 主机的默认网关设置为 192.168.0.254,B1~
B252 主 机 的 默 认 网 关 都 设 置 为 192.168.2.254 , C1 ~ C253 主 机 的 默 认 网 关 都 设 置 为
192.168.3.254(通过后面的分析将会看到,B1~B252 主机的默认网关设置为 192.168.2.253
也是可以的) 。
图 1-30 中各个 IP 网络内部的通信因不需路由,在此不再赘述,关于与同一个路由器直
接相连的多个网络的主机之间的通信亦完全可以参考 1.5.4 节所描述的步骤,例如主机 C1 与
B1 之间的通信与 1.5.4 节描述的 A1 与 B1 的通信过程完全相同。
若仍像 1.5.4 节那样只对各个路由器的各个接口地址和掩码进行配置并启用每个路由器
的路由功能,然后来观察一下 A1 与 C1 之间的通信,在 A1 上用“ping 192.168.3.1”命令,
第1章 TCP/IP 基础 ·33·
就会得到一个错误提示“destination unreachable”
,为什么会得到这样的结果呢?
IP 地址:192.168.0.254 IP 地址:192.168.1.254
掩码:255.255.255.0 掩码:255.255.255.0
R1
I1 I2
网 络 地 址 192.168.0.0
网 络 地 址 192.168.1.0
IP 地址:192.168.1.253
掩码:255.255.255.0
网 络 地 址 192.168.2.0
I3 R2 I4
A1 A2 „„ A253
IP 地址:192.168.2.253
掩码:255.255.255.0
IP 地址:192.168.3.254
掩码:255.255.255.0
B1 B2 „„ B252
网 络 地 址 192.168.3.0
I5 R3 I6
IP 地址:192.168.2.254
掩码:255.255.255.0
C1 C2 „„ C253
图 1-30 多台路由器连接多个网络
图 1-31 跨多个路由器的通信
第1章 TCP/IP 基础 ·35·
从上述过程可以进一步看出,尽管一个 IP 包每穿过一个路由器便会被从一个帧中剥离出
来,然后封装在另外一个帧中传递,但 IP 包中的源和目的 IP 地址始终保持不变,不变的目
的 IP 地址正是路由器一步步转发 IP 包的依据。
若网络是由更多的路由器连接而成的,那么对每一个路由器进行路由配置将是一项艰难
的工作,这时最好使用路由协议让各个路由器自动更新路由表。
路由协议可以使路由器之间通过单播、广播或多播互相通告自己的路由信息,并学习其
他路由器的路由信息以达到自动维护路由表的功能。常用的路由协议有 RIP(Routing
、IGRP(InterGateway Routing Protocol)
Information Protocol) 、OSPF(Open Shortest Path First)、
BGP(Border Gateway Protocol)等,它们都是应用层协议,在本书的第 2 章“多播在 RIP 中
的应用”中将介绍一个 RIP 实例。适当地使用了路由协议后,前面手工配置路由表的过程就
可以省略掉了,路由协议的具体配置方法请参阅相关资料,本书不再赘述。
1.5.8 路由器的广域连接
I1 I2
基带 Modem
DDN
基带 Modem
I4 I3
图 1-32 路由器的广域连接
为了在此线路上传递 IP 包,其基本配置和基于以太网的连接类似,只是需要与以太网不
同的链路层封装,例如若通过 DDN 将两路由器的串行接口连接起来(如图 1-32 所示) ,除了
要为两个串行接口配置 IP 地址、为路由器配置路由等信息外,还要指定链路封装协议为高级
数据链路控制规程(HDLC,High level Data Link Control)或点对点协议(PPP,Point to Point
Protocol)等,这是因为串行口只是物理层的设备,不具有对帧的处理能力,不像以太网卡那
样包含了物理层和链路层的功能,因此必须在连接的两端规定相同的帧封装协议才能依赖它
·36· Internet 应用协议实例剖析与服务器配置
转发 IP 包。其他广域连接手段还包括 X.25、帧中继等技术,这里的“串行口+HDLC”或“串
行口+PPP”组成了与“以太网”并列的一种 Internet 通信子网技术。
当用 ping 命令测试对方是否可连通时使
用的就是如图 1-33 所示的这种包格式。 1Byte 类型
图 1-33 中各字段含义如下所述。
1Byte 编号(0)
① 类型:此字段表明包的类型,值为 8
2Byte 校验和
表示是回应请求包,值为 0 表示是回应包。
② 编号:此字段的值目前必须为 0。 2Byte 标识符
④ 标识符:此字段用于帮助软件区分多
次的回应请求与回应,回应包中的标识符必须 图 1-33 ICMP 回应请求与 ICMP 回应包格式
与相应的回应请求中的标识符相同。
⑤ 序列号:此字段与标识符字段的作用相同,可以与之配合使用,创造出特定软件需
要的标识。
⑥ 数据:此字段是不定长的一段任意数据,由回应请求的发送者决定其内容,回应包
的数据字段必须与所对应的回应请求的数据字段内容完全相同。
当一主机试图测试与另一主机是否可以通过 IP 协议通信时,就可以通过 ping 命令向对
方发送 ICMP 回应请求包,对方操作系统若能够正确接收到 ICMP 回应请求包并且未受防火
墙阻拦的话就会反向发回一个 ICMP 回应包,此回应包的标识符字段、序列号字段和数据字
段的内容应该与 ICMP 回应请求包相应字段的内容相同。若测试方能够正确收到此回应包,
就可以认为它与被测试方之间的基于 IP 协议的通信是畅通的。
第1章 TCP/IP 基础 ·37·
3 目的不可达差错报告
5 网关重定向报告
11 超时差错报告
若路由器从一个接口收到一个需要被转发的 IP 包,但查询路由表后却没有找到到达目的
的路径,便会向此 IP 包的发送者发送类型为“目的不可达差错报告”的 ICMP 包,实际上“目
的不可达”又被细分为由多种原因引起,针对每一种原因都有相应的 ICMP 包子格式,此处
不再一一列举。
在连接了多台路由器的 IP 网络中,当一台主机将 IP 包经由自己的默认网关向外发送时,
有时路由器会通过类型为“网关重定向报告”的 ICMP 包告诉此主机“有一个更好的路径可
供你选择” ,大部分系统会根据此 ICMP 包修改自己的默认网关配置。
一个 IP 包在被路由器转发的过程中,如果生存时间字段的值被减为 0,则将这个字段的
值减为 0 的路由器应该向此 IP 包中的源 IP 地址发送类型为“超时差错报告”的 ICMP 包,
封装这个 ICMP 包的 IP 头的源 IP 地址字段的值为此路由器收到出错 IP 包的接口的 IP 地址。
UNIX 系统的 traceroute 命令(Windows 系统的 tracert 命令)正是利用此功能工作的,traceroute
程序依次向某个 IP 地址发出生存时间字段分别为 1、2„„的 IP 包,根据途径的路由器发回
的超时差错报告便可以得知到达最终目的需要经过的路由器的接口地址,这对于调试网络是
非常重要的。
ICMP 包还有其他许多类型,都是针对 IP 协议的差错报告或路由优化的,此处不再一一
描述。ICMP 的更详细信息可参阅 RFC792、RFC1122 和 RFC1812。
1.6.5 实例剖析
路由器(有两个以太网接口)
接口 1 接口 2
IP 地址:202.194.254.254 IP 地址:202.194.240.254
掩码:255.255.255.0 掩码:255.255.255.0
以太网地址:00:D0:B7:37:55:00 以太网地址:00:C0:32:32:17:6B
A „„ „„ B
IP 地址:202.194.254.138 IP 地址:202.194.240.88
掩码:255.255.255.0 掩码:255.255.255.0
网关:202.194.254.254 网关:202.194.240.254
以太网地址:00:00:B4:91:8C:6A 以太网地址:00:C0:53:42:C3:00
ICMP 包
IP 包
以太网帧
图 1-35 ICMP 回应请求与回应帧的基本结构
下面分别对这两个帧进行具体的剖析。
1.A 发出的 ICMP 回应请求帧
字节偏移 内容 含义
00~05 00d0 b737 5500 目的以太网地址(网关的以太网地址)
06~0b 0000 b491 8c6a 源以太网地址(A 的以太网地址)
0c~0d 0800 表明所携带数据为 IP 包
****************(以下是 IP 包的内容)**********************************
0e~0f 0100010100000000 (展开成二进制,十六进制为 4500)
0100 IPv4(IP 版本)
·40· Internet 应用协议实例剖析与服务器配置
1.6.6 校验和的计算
TCP/IP 协议中常用的校验和的计算方法是先将校验和字段清零,然后把被校验的所有字
节排列起来, 若总字节数为奇数则用值为 0 的字节补成偶数字节,然后每两字节作为一个 16bit
整数,所有字节组成一个整数序列 n1、n2、n3.....,然后让这个序列依次累加,每一次累加若
产生了向第 17bit 的进位,则把此进位作为整数 1 累加到剩余 16bit 组成的整数,最后得到的
结果按位取反即为校验和。
下面分别计算 1.6.5 节中 IP 头校验和与 ICMP 校验和。
·42· Internet 应用协议实例剖析与服务器配置
1.IP 头校验和的计算
按照上述算法来计算 A 发向 B 的 IP 头校验和,依次执行以下步骤:
(1)确定要被校验的字段,组成一个字节序列,按照 IP 协议的要求,被校验字段是所有
的 IP 头字段(计算前先把校验和字段清零) ,如下所示。
4500 0054 a63c 0000 4001 0000 cac2 fe8a cac2 f058
(2)确定要被校验的字节数,此例中被校验的是第 0e~21 Byte,共 20(十进制)Byte,
总字节数为偶数,不需补零。
(3)累加所有整数,为了计算方便,先把所有整数累加后,再将所有进位一次截取加到
剩余 16 位整数上。
4500+0054+a63c+0000+4001+0000+cac2+fe8a+cac2+f058=4aff7
aff7+4=affb
(4)将结果取反: ~affb=5004。
(5)将结果 5004 填写到校验和字段。
最后得到的结果 5004 与我们实际看到的由 A 发出的 ICMP 回应请求帧的 18~19 字节吻合。
2.ICMP 包校验和的计算
以 A 发向 B 的 ICMP 包为例看一下 ICMP 校验和的计算,依次执行以下步骤:
(1)确定要被校验的字段,组成一个字节序列,按照 ICMP 协议的要求被校验字段是所
有的 ICMP 包字段(计算前先把校验和字段清零) ,如下所示。
0800 0000 5b03 0000 e255 f914 1f99 0e00
0809 0a0b 0c0d 0e0f 1011 1213 1415 1617
1819 1a1b 1c1d 1e1f 2021 2223 2425 2627
2829 2a2b 2c2d 2e2f 3031 3233 3435 3637
(2)确定要被校验的字节数,此例中被校验的是第 0x22~0x61 Byte,共 64(十进制)
Byte,总字节数为偶数,不需补零。
(3)累加所有整数,为了计算方便,先把所有整数累加后,再将所有进位一次截取到剩
余 16 位整数上。
0800+0000+5b03+0000+e255+f914+1f99+0e00
+0809+0a0b+0c0d+0e0f+1011+1213+1415+1617
+1819+1a1b+1c1d+1e1f+2021+2223+2425+2627
+2829+2a2b+2c2d+2e2f+3031+3233+3435+3637=55705
5705+5=570a
(4)将结果取反: ~5709=a8f5。
(5)将结果 a8f5 填写到校验和字段。
最后得到的结果 a8f5 与实际看到的由 A 发出的 ICMP 回应请求帧的第 24~25 Byte 吻合。
1.7.1 端口号
端口号是在传输层实现对网络层 IP 协议多路复用的重要机制,通过前面内容可以知道,
一个 IP 包可以携带任意的数据从 Internet 任一节点出发,穿过若干路由器到达目的(这里的
“目的”是由 IP 包中的“目的 IP 地址”字段指定的) 。一个 IP 包所携带的数据可以是一个 ICMP
包或 TCP 包或 UDP 包。目前 Internet 上已经存在大量的应用层协议和相应的遵循这些应用层
协议的应用程序,大多应用层协议是依赖 UDP 或 TCP 的。在一台主机上可能同时有多个进
程运行于 TCP 或 UDP 之上,这些进程都与一个惟一的 TCP 或 UDP 端口号相对应。
端口号是 16bit 的数字资源,一个参与 Internet 通信的基于 UDP 或 TCP 的应用进程在与
对方进程通信之前实际上都会首先向主机的操作系统申请获得一个 TCP 或 UDP 端口号,这
个端口号在本主机中必须是惟一的(数值相同的 TCP 端口号和 UDP 端口号是两个不同的端
口号) ,一个应用进程根据自己是依赖 TCP 还是依赖 UDP 来决定是向操作系统申请 TCP 端
口号还是申请 UDP 端口号。当通信双方的进程都获得了自己的端口号之后,就可以组建 UDP
或 TCP 包来封装自己的数据,并用 IP 封装 TCP 包或 UDP 包后发向目的主机,并在所组建
的 UDP 或 TCP 包中包含有目的端口号和源端口号以区分主机上的进程。IP 地址惟一确定了
一台主机,而端口号惟一确定了一台主机上的一个进程。
使用 UDP 或 TCP 通信时,双方进程中至少应该有一方事先获得对方进程的端口号,并
主动向对方发起通信,依赖 UDP 或 TCP 包中所包含的源端口号信息让对方获知自己的端口
号,Internet 上主动发起通信的一方称为“客户方” ,而被动等待的另一方称为“服务器方”。
大部分情况下客户方与服务器方应用程序并不是由同一个公司开发,例如 WWW 服务器程序
和 WWW 浏览器程序往往由许多软件开发公司分别开发,为了让这些应用标准化,除了制定
相应的应用层协议外,Internet 协会还为不同的协议指定了固定的端口号,这些端口号大多是
为服务器方指定的,也有某些特殊协议的客户端也被指定了固定端口号。常用的指定端口号
见表 1-2。
表 1-2 常用的指定端口号
协 议 名 称 端 口 号
FTP-data TCP 20
FTP-control TCP 21
TELNET TCP 23
SMTP TCP 25
DNS TCP/UDP 53
DHCP-SERVER TCP/UDP 67
·44· Internet 应用协议实例剖析与服务器配置
续表
协 议 名 称 端 口 号
DHCP-CLIENT TCP/UDP 68
HTTP TCP 80
1.7.2 UDP 基础
0 15 16 31
源端口号 目的端口号
源端口号
包长度 校验和
数据
图 1-36 中各字段的含义如下:
① 源端口号,此字段的长度为 2Byte,它表示发送此 UDP 包的进程占用的本地 UDP 端
口号。
② 目的端口号,此字段的长度为 2Byte,它表示目的主机上接收此 UDP 包的进程的 UDP
端口号。
③ 包长度,此字段占 2Byte,它表示整个 UDP 包的以字节为单位的长度。
④ 校验和,此字段占 2Byte,它是根据一个 UDP 伪头和将校验和字段清零后的 UDP 包
计算得到的,详细计算方法与 1.6.6 一节描述的计算方法完全相同,这里用到的伪 UDP 头是
第1章 TCP/IP 基础 ·45·
0 15 16 31
源 IP 地址
目的 IP 地址
图 1-37 UDP 伪头
1.7.4 TCP 基础
序列号
确认号
校验和 紧急指针
选项 填充
数据
TCP 包各字段含义如下:
① 源端口号、目的端口号,这两个字段的长度都为 2Byte,分别表示发送和接收此 TCP
包的进程占用的 TCP 端口号。
·46· Internet 应用协议实例剖析与服务器配置
0 15 16 31
源 IP 地址
目的 IP 地址
图 1-39 TCP 伪头
分利用两字节的“窗口大小”字段表达任意大小的“窗口大小”值,具体的移动位数由选项
的“其他字节”指定。
1 空选项
2 TCP 包最大长度选项(RFC793)
3 窗口大小度量选项(RFC1323)
4 发送方支持“选择性确认”选项(RFC1072)
8 时间标签选项(RFC1323)
“发送方支持选择性确认”选项的作用是通知对方自己支持“选择性确认”机制。当使
用 TCP 传输大批量数据时,若中间出现丢包现象,“选择性确认机制”可以允许接收方具体
指定哪一部分需要重传,而不是要求对方把丢失的部分及其之后的所有字节全部重传。在不
支持“选择性确认机制”的情况下,采用简单的“确认号”机制来要求对方从某字节开始重
传,会造成大量不必要的重传。
“时间标签”选项的目的是在 TCP 包中携带一个发送方的时间标记,同时,在 TCP 包中
“确认号”有效的情况下,时间标签也用于反馈对方与被确认数据相关的时间标记。
上述选项的使用细节请读者直接参阅本书第 6 章“WWW 应用”。TCP 的详细信息请参
阅 RFC793。
在 IP 包中,
“协议”字段的值来区分 IP 包所封装数据的类型,若协议字段的值为 0x6 则
表示所封装数据为一个 TCP 包。一个封装了 TCP 包的 IP 包经路由器多次转发后到达目的,
目的主机根据 IP 包头信息中的“协议”字段的值判断出所封装的数据为一个 TCP 包,然后
根据 TCP 包中的目的 TCP 端口号进一步判断此 TCP 包应该让哪一个进程处理,并由进程根
据相应的应用层协议去分析 TCP 包中所封装的数据。
UDP 是非面向连接的传输层协议,它不提供以让双方的数据传输实现顺序性的相应机制
(即不保证发送的顺序与接收的顺序相同) ,也不保证数据传输的正确性(即不能自动进行丢
包检测),应用程序只能在应用层实现这些功能。此外,UDP 也不提供流量控制功能。
TCP 是面向连接的传输层协议,基于 TCP 的通信过程涉及 3 个基本步骤:建立连接、数
据传输、结束连接。其具体过程是:在正式传输应用层数据之前先要在通信双方进程之间建
立连接,协商双方的起始序列号,然后开始传输应用层数据。每一个 TCP 包都依赖“序列号”
字段来为它所携带的数据的每一个字节编号以实现接收方的正确排序,另外每一个 TCP 包都
可以通过“确认号”字段对已经正确接收了的数据予以确认,若一方在接收数据过程中根据
序列号检测到数据包的丢失,则自动通过确认号要求对方重发丢失的数据,这个重发操作对
·48· Internet 应用协议实例剖析与服务器配置
应用程序是透明的,另外通过改变窗口大小,TCP 协议可以进行数据传输过程中的流量控制。
当数据传输完毕,任一方都可以主动发送连接结束请求使整个通信过程进入结束连接步骤。
1.TCP 连接的建立
TCP 连接的建立过程一般被称为“三次握手” ,即双方之间需要用 3 个特定格式的 TCP
包协商连接初始参数。这 3 个步骤具体如下所述。
(1)客户方向服务器方发送同步包。所谓同步包即“同步位”为 1 的 TCP 包,客户方向
服务器方发送的同步包中的序列号称为客户方的初始序列号。为了防止特殊情况下的序列号
冲突,初始序列号一般不是从 0 开始,而是由操作系统的协议代码按照一定的规律产生,详
细讨论请参阅 RFC793 中的“3.3 Sequence Numbers”这一节,这里假设这个初始序列号的
值为 SYN_CLIENT;客户方向服务器方发送的同步包中的“确认号”总是无效,即确认位总
为 0。客户方向服务器方发送同步包尽管不携带正式数据,但是按照 TCP 的要求应该把被置
位的同步位当成一个字节进行计算。
(2)服务器方向客户方发送同步包。服务器方收到客户发来的同步包后,若系统允许建
立连接则应该向客户方发送同步包。这个包中的同步位也应为 1,序列号字段的值称为服务
器方的初始序列号,这里假设它的值为 SYN_SERVER。服务器方向客户方发送的同步包中的
确认位为 1,表明确认号有效,而且确认号的值总是 SYN_CLIENT+1,这个值是对客户方发
来的初始序列号的一个确认,实际上是把同步位当成一个字节的数据予以确认,它告诉对方,
当正式开始传输数据时请从 SYN_CLIENT+1 开始编号。服务器方向客户方发送的同步包中
不携带正式数据,但它的被置位了的同步位将被当成一个字节予以确认。
(3)客户方向服务器方发送确认包。当客户方收到服务器方发来的同步包后,会发送确
认包对服务器方的初始序列号予以确认。这个 TCP 包的同步位为 0,序列号的值为
SYN_CLIENT+1 , 表 明 若 本 TCP 包 中 携 带 有 数 据 的 话 , 则 数 据 的 首 字 节 编 号 为
SYN_CLIENT+1,其他字节类推(实际上在大多操作系统的协议实现中,这个包是不携带数
据的) ;这个包的确认位应该为 1,且确认号为 SYN_SERVER+1,这个值是对服务器方发来
的初始序列号的一个确认,实际上是对同步位所代表的一个字节的确认,它告诉对方,当正
式开始传输数据时请从 SYN_SERVER+1 开始编号。
对于依赖操作系统的 TCP 功能的应用程序来说,建立连接的过程只是一个调用以对方的
IP 地址和 TCP 端口号等为参数的函数的过程而已,实际上是操作系统完成了上述的连接建立
的步骤。
2.TCP 数据传输
TCP 连接建立后,客户方和服务器方从 TCP 角度看实际上已经处于平等地位,任一方都
可以在任意时刻向对方发送数据,当然这些数据都封装在 TCP 包中,并且 TCP 包是被封装
在 IP 包中的。假设客户方自连接建立完毕后先后向服务器方发送了多个 TCP 包,这些包中
所 封 装 的 数 据 字 节 数 分 别 是 n1 、 n2 、 n3 „ , 则 这 些 TCP 包 中 的 序 列 号 值 应 分 别 为
SYN_CLIENT+1、SYN_CLIENT+1+n1、SYN_CLIENT+1+n1+n2„,服务器方根据序列号值
将数据排序。实际上这个排序过程是由操作系统完成的,应用程序通过操作系统的接收函数
所接收到的数据是已经排序了的数据,若客户发向服务器的某个 TCP 包丢失,则服务器会通
过序列号的不连续觉察出数据包的丢失。当然,序列号的暂时不连续并不代表 TCP 包一定已
经丢失,因为携带 TCP 包的 IP 包的接收顺序和发送者的发送顺序不一定是相同的,这种不
第1章 TCP/IP 基础 ·49·
相同往往是因为不同的 IP 包经过的路径不同造成的,所以操作系统一般都是在等待足够长时
间后才认为数据已丢失。
对于客户方发向服务器方的数据,服务器应该利用确认号予以确认,而且这种确认也是
操作系统完成的。对于前面假设的客户向服务器发送的分别携带了 n1、n2、n3„个字节数据
的 TCP 包,服务器方可以分别予以确认,每一个确认包的确认号字段的值将分别是
SYN_CLIENT+1+n1、SYN_CLIENT+1+n1+n2、SYN_CLIENT+1+n1+n2+n3„,若中间出现
了丢包现象,则服务器方的确认值可能会出现重复。确认号用于表示此编号之前的数据已经
正确接收,同时也表示要求对方下次发送的数据的编号,若客户方收到一个确认号的值小于
客户方已经发出的所有字节中最后一个字节的编号,就会将其理解为对方没有收到确认号所
代表的字节之后的字节,之后将等待确认或重新发送这些字节。实际上服务器发向客户的确
认包中可以同时携带有服务器发向客户的数据,只要用正确的序列号标识这些数据即可。另
外若服务器在接收客户发来的数据的同时并没有向客户发送数据的需要,则不一定要对客户
发来的每一个包予以确认,因为这样的确认包纯粹是为了确认,不携带任何数据。服务器方
完全可以连续收到多个数据包后对所有收到的字节进行一次确认,而客户方在未得到服务器
方的确认之前最多可以连续发送多少字节取决于服务器发向客户的 TCP 包中窗口大小字段
的值。
前面描述的是客户方发送数据而服务器方接收数据的情况下发送和确认的过程,实际上
TCP 连接建立完毕后,客户方与服务器方的地位是平等的,双方数据的发送和确认是同时进
行的,至于什么时候哪一方发送数据,完全取决于应用程序的需要。
操作系统根据 TCP 协议为应用程序构造出一条面向字节流的通道,应用程序只需源源不
断地调用操作系统的发送函数将要发送的字节流交给操作系统,由操作系统对这些字节编号、
发送,并由操作系统应对方的要求重发某一段数据,即操作系统会一直缓存应用程序交付的
尚未得到对方确认的数据。而对于数据接收方的应用程序来说,它只需不断地调用操作系统
的接收函数获得对方发来的数据,而且应用程序接收到的数据的排列顺序必定和发送者的发
送顺序相同,当然,大多应用程序既是数据发送方也是数据接收方。
3.TCP 连接的结束
TCP 连接的任一方的操作系统都可以随时根据应用程序的要求向对方发出结束位被置位
的 TCP 包,以要求与对方断开连接。对方收到结束位被置位的 TCP 包后,会把被置位的结
束位当成一个字节予以确认,并且在将缓存中的字节流发送完毕后也向对方发出结束位被置
位的 TCP 包,这个 TCP 包同样也要得到确认,这时 TCP 连接就彻底结束了。
本书第 6 章“WWW 应用”中包含对使用 TCP 协议通信的过程进行帧剖析的一个实例。
第2章 多播在 RIP 协议中的应用
在第 1 章中已经介绍了路由器与路由的基本概念,Internet 路由器依照路由表对来自某
接口的 IP 包进行转发。路由表可以手工建立,此时称为“静态路由”。但是,当网络达到
一定规模后,在每一路由设备上分别设置静态路由将是一件非常复杂的任务,而适当地使
用路由协议,例如 RIP 协议,则可以解决这个问题。路由协议可以使路由器之间通过单播、
广播或多播互相通告自己的路由信息,并学习其他路由器的路由信息以达到自动维护路由
表的目的。
当一台路由器刚刚启动时,路由器的路由表项中只有静态项和直接相连的 IP 网络信息,
若路由器被配置为在某接口上执行 RIP 协议,则本路由器的路由表会被定期地(默认为 30s)
从这个接口发出,并且从这个接口收到的来自其他路由器的路由表信息会被路由器分析和利
用以更新自己的路由表。另外路由器也可以主动地向另外的路由器发出 RIP 请求,要求得到
对方的路由信息,本章不讨论这种情况,请读者参阅 RFC1058。
命令 版本 未用字段
地址类别标识 路由标记
IP 地址 一
条
掩码 路
由
信
下一跳地址 息
跳数
N 条路由信息
路由器事先相互知道其他路由器的存在,当向其他路由器传播自己的路由信息时,路由器要
组建相应的封装了 RIP 信息的 UDP 包,而 UDP 信息又需要被封装在包含目的 IP 地址的 IP
包中,为了使这个 IP 包能被本 IP 网络内的所有路由器接收,路由器可以把这个 IP 包的目的
IP 地址设置为 255.255.255.255,用以表示本 IP 网络内的所有主机,同时在用以太网帧封装
IP 包时,令以太网帧的目的以太网地址为广播地址 FF:FF:FF:FF:FF:FF,这样的一个帧从路由
器的一个接口发出后,被以太网广播域内的所有网卡接收并交给操作系统处理,操作系统读
取 IP 包中的“目的 IP 地址”字段后得知这是一个要求所有主机接收的 IP 广播包,于是读取
UDP 包的“目的端口号”字段,当然这个字段的值应该是十进制数 520。对于普通主机来说,
因为并没有一个进程向操作系统申请 520 号端口,所以操作系统最终会将其丢弃,而对于本
IP 网络内运行 RIP 协议的路由器来说,UDP 包所携带的 RIP 信息将被交给 RIP 进程处理,
RIP 进程会根据 RIP 包中的路由信息更新自己的路由表,当接收 RIP 包的路由器下一次向外
发布自己的路由信息时,被发布的就是已经被更新的路由表。
用广播方式发送 RIP 包最终能够使本 IP 网络内的所有路由器收到 RIP 信息,但所有的普
通主机也被迫接收并丢弃 RIP 包,因此,为了使 RIP 协议的运行更合理,可以使用多播地址
发送 RIP 信息。
2.3 实 例 剖 析
2.3.1 环境介绍
I1 I2 I3 I4 I5 I6
202.194.240.70 202.194.240.72
R2 R4 255.255.255.192
255.255.255.192
I7 I8 I11 I12
202.194.240.71
202.194.240.129 R3 202.194.245.253
255.255.255.192
255.255.255.192 255.255.255.0
I9 I10
202.194.240.33
255.255.255.224
图 2-2 RIP 实例
2.3.2 通信过程中的帧
2.3.3 帧剖析
上述帧中各字节的含义如下:
·56· Internet 应用协议实例剖析与服务器配置
字节偏移 内容 含义
00~05 0100 5e00 0009 目的以太网多播地址(和 224.0.0.9 配合使用)
06~0b 00d0 b737 5500 源以太网地址
0c~0d 0800 表明所携带数据为 IP 包
*******************(以下是 IP 包的内容)********************************
0e~0f 0100010100000000 (展开成二进制,十六进制为 4500)
0100 IPv4 (IP 版本)
0101 IP 包头长为 5×4=20Byte
00000000 未指定服务类型
10~11 00d4 IP 包总长度
12~13 c3f4 标识符
14~15 0000000000000000 (展开成二进制,十六进制为 0000)
000 此包可以被分段,且这是最后一段(即未分段)
000000000000 此段的偏移
16 01 生存时间
17 11 此 IP 包所携带数据为 UDP 包
18~19 4b5a 头部校验和
1A~1D cac2 fefe 源 IP 地址为 202.194.254.254
1e~21 e000 0009 目的 IP 多播地址为 224.0.0.9
********************(以下是 UDP 包的内容)********************************
22~23 0208 源 UDP 端口号(十进制 520)
24~25 0208 目的 UDP 端口号(十进制 520)
26~27 00c0 UDP 包的长度
28~29 8b39 校验和
********************(以下是 RIP 包的内容)*******************************
2a 02 本 RIP 包是一个应答包
2b 02 RIP 版本 2
2c~2d 0000 未用
********************(以下是用横线分开的多个路由项)********************
2e~2f 0002 地址类别为 IP 地址
30~31 0000 路由标记
32~35 cac2 f040 网络地址 202.194.240.64
36~39 ffff ffc0 掩码 255.255.255.192
3a~3d 0000 0000 下一跳地址为 202.194.254.254
3e~41 0000 0001 跳数为 1
---------------------------------------------------------------------------------------
42~43 0002 地址类别为 IP 地址
44~45 0000 路由标记
46~49 cac2 f080 网络地址 202.194.240.128
第2章 多播在 RIP 协议中的应用 ·57·
3.1 DHCP 基础
3.1.1 DHCP 简介
序号
秒数 标志
客户 IP 地址(ciaddr)
分配给客户的 IP 地址(yiaddr)
服务器 IP 地址(siaddr)
中继 IP 地址(giaddr)
客户硬件地址(16Byte)(chaddr)
服务器名(64Byte)(sname)
启动文件名(128Byte)
客户硬件地址(16 (file)
字节)
)
选项(字节数不定)
客户硬件地址(16 字节)
)
客户硬件地址(16 字节)
图 3-1 DHCP 包结构 )
DHCP 包中各个字段的含义如下所述。
① 操作码:该字段用以表明此 DHCP 包的基本类型,值为 1 表示由客户发向服务器的
包,值为 2 表示由服务器发向客户的包。
② 硬件类型:该字段代表了特定的通信子网类型,目前可用的硬件类型及其编号如下:
编号 硬件类型
1 Ethernet (10Mbit/s)
2 Experimental Ethernet (3Mbit/s)
3 Amateur Radio AX.25
4 Proteon ProNET Token Ring
5 Chaos
6 IEEE 802 Networks
7 ARCNET
8 Hyperchannel
9 Lanstar
10 Autonet Short Address
11 LocalTalk
12 LocalNet (IBM PCNet or SYTEK LocalNET)
13 Ultra link
14 SMDS
15 Frame Relay
16 Asynchronous Transmission Mode (ATM)
17 HDLC
18 Fibre Channel
19 Asynchronous Transmission Mode (ATM)
第3章 DHCP 应用 ·61·
20 Serial Line
21 Asynchronous Transmission Mode (ATM)
22 MIL-STD-188-220
23 Metricom
24 IEEE 1394.1995
25 MAPOS
26 Twinaxial
27 EUI-64
28 HIPARP
29 IP and ARP over ISO 7816-3
30 ARPSec
31 IPsec tunnel
32 InfiniBand (TM)
③ 硬件地址长度:该字段是以字节为单位的硬件地址长度,例如以太网地址的长度为 6。
④ 步数:客户方总是将本字段的值赋零,DHCP 中继可以用它表示距离。
⑤ 序号:由客户方产生的随机数,用以匹配请求和应答。
⑥ 秒数:此字段由客户填充,用以表示从开始请求起经过的时间。
⑦ 标志:标志所占用的 16bit 被分成两部分,如图 3-2 所示。
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
后 15bit 必须为 0
图 3-2 DHCP 标志
3.1.3 DHCP 选项
代码 长度 数据
图 3-3 变长选项的结构
1 4 m1 m2 m3 m4
图 3-4 子网掩码选项
3 n a1 a2 a3 a4 a1 .
a2...
1 4 m1 m2 m3 1 m4 4 m1 m2 m3 1 m4 4 m1 m2 m3 m4
图 3-5 路由器选项
6 n a1 a2 a3 a4 a1 .
a2...
1 4 m1 m2 m3 1 m4 4 m1 m2 m3 1 m4 4 m1 m2 m3 m4
图 3-6 域名服务器选项
12 n h1 h2 h3 h4 h5 .
h6...
1 4 m1 m2 m3 1 m4 4 m1 m2 m3 1 m4 4 m1 m2 m3 m4
图 3-7 客户名称选项
为 15,选项长度取决于域名字的长度,d1、d2、d3.
..为域的名字字节。
15 n d1 d2 d3 d4 d5 .
d6...
1 4 m1 m2 m3 1 m4 4 m1 m2 m3 1 m4 4 m1 m2 m3 m4
图 3-8 域选项
50 4 a1 a2 a3 a4
图 3-9 指定 IP 地址选项
51 4 t1 t2 t3 t4
图 3-10 租期选项
53 1 1~9
图 3-11 信息类型选项
是当客户通过某种方式检测到服务器分配来的地址与其他主机冲突时,向服务器发出的拒绝
接受信息;DHCPACK 用于对客户发来的 DHCPREQUEST 进行确认;DHCPNAK 用于对客
户 发 来 的 DHCPREQUEST 进 行 否 认 ; DHCPRELEASE 用 于 释 放 已 经 获 得 的 地 址 ;
DHCPINFORM 用于客户在已经通过某种方式获得了地址(例如手工配置)的情况下,向服
务器申请其他配置信息。
⑩ 服务器标识选项:该选项用于表示服务器的 IP 地址信息,这个选项由 6Byte 构成,
如图 3-12 所示。选项代码为 54,选项长度为 4,a1、a2、a3、a4 为服务器 IP 地址。
54 4 a1 a2 a3 a4
图 3-12 服务器标识选项
请求列表选项:该选项用于客户方向服务器表达所请求的选项,选项结构如图 3-13
所示。该选项的选项代码为 55,选项长度取决于所请求选项的个数,c1、c2 等分别是一个选
项的代码。
55 n c1 c2 c3 .
c4..
图 3-13 请求列表选项
60 n i1 i2 i3 i4...
图 3-14 客户提供商标识选项
客户标识选项:该选项用于惟一地标识客户身份,例如可以用客户的硬件地址作为标
识,选项结构如图 3-15 所示。该选项的选项代码为 61,选项长度取决于客户标识的长度,t1
为标识类型,i1、i2 等组成相应类型的标识。
61 n t1 i1 i2 .
i3..
图 3-15 客户标识选项
结束选项:该选项仅由一个值为 255(0xff)的选项代码构成,用以表示选项的结束。
其他选项请读者参阅 RFC2132。
在 Windows98 系统中,选择“控制面板”中的“网络”项或用鼠标右击桌面上的“网上
邻居”,选择“属性” ,即出现如图 3-16 所示的“网络”属性设置的界面。
双击“TCP/IP”选项或选择“TCP/IP”选项后单击右下角的“属性”按钮(如果系统有
多个适配器的话会出现多个 TCP/IP 相关选项, 这时要注意选择正确的选项),
会出现如图 3-17
所示的“TCP/IP 属性”设置界面,选择“自动获取 IP 地址”即可使用 DHCP 分配地址信息。
若使用 DHCP 服务器提供 DNS 服务器信息,则需选择“DNS 配置”中的“禁用 DNS”
选项,如图 3-18 所示。
单击“详细信息”按钮,可以看到更多信息,如果安装了拨号适配器,默认显示的将是
拨号适配器项,此时可从下拉列表框中选择相应的网卡项,如图 3-21 所示。
DHCP 的默认配置文件是/etc/dhcpd.conf,这个文件在默认情况下是不存在的,可以按照
下列格式手工建立 dhcpd.conf 文件或在/usr/share/doc/dhcp-3.0pl1 目录下拷贝一个样本文件
dhcpd.conf.sample 进行修改。
下面是一个 dhcpd.conf 实例:
subnet 192.168.1.0 netmask 255.255.255.0{
#指定子网的网络地址和子网的掩码
range 192.168.1.10 192.168.1.100;
range 192.168.1.150 192.168.1.200;
#指定可分配地址范围
default-lease-time 28800;
# 默认租借时间,以 s 为单位
max-lease-time 43200;
第3章 DHCP 应用 ·69·
#最大租借时间
option subnet-mask 255.255.255.0;
# 定义被分配的子网掩码,如果不定义该选项,则使用 subnet 行中的子网掩码
option routers 192.168.1.1;
#定义被分配的默认网关地址
option domain-name-servers 192.168.1.2;
# 定义被分配的域名服务器地址
option domain-name "sdie.edu.cn";
#定义被分配的默认域名
}
此配置文件定义了该 DHCP 服务器可以分配给客户端的地址范围是:从 192.168.1.10~
192.168.1.100 和从 192.168.1.150~192.168.1.200,同时服务器发送以下参数给客户端。
子网掩码:255.255.255.0
默认网关:192.168.1.1
域名服务器的地址:192.168.1.2
默认域名:sdie.edu.cn
在/var/lib/dhcp/目录下有一个文件 dhcpd.leases (DHCP 客户租约的数据库文件),此文
件包含租约声明,每次一个租约被获取、更新或释放,它的新值就被追加到该文件。dhcpd
记录这个文件的格式是:
lease ip-address { statements... }
每个记录包含一个提供给客户方的 IP 地址,在括号里的语句包含一些租期信息,具体的
租期信息会因客户方发出不同的 DHCP 请求而稍有差别。
3.4 实 例 剖 析
3.4.1 环境介绍
3.4.2 通信过程中的以太帧
3.4.3 帧剖析
---------------------------------------------------------------------------------------
13e 37 请求列表选项代码
13f 09 选项长度 9Byte
140 01 子网掩码选项代码
141 0f 域名选项代码
142 03 路由选项代码
143 06 域名服务器选项代码
144 2c netbios 名称服务器选项代码
145 2e netbios 节点类型选项代码
146 2f netbios scope 选项代码
147 2b 提供商指定信息选项代码
148 4d 用户类型选项代码(RFC3004)
---------------------------------------------------------------------------------------
149 ff 结束选项代码
---------------------------------------------------------------------------------------
150~155 0000 0000 0000 空选项
---------------------------------------------------------------------------------------
通过上面的指定 IP 地址选项可以看出,A 计算机要求获得地址 202.194.254.13。
(2)B 发向 A 的 DHCPOFFER 帧
字节偏移 内容 含义
00~05 ff:ff:ff:ff:ff:ff 目的以太网地址(以太网广播地址)
06~0b 0000 b491 e66a 源以太网地址(DHCP 服务器的以太网地址)
0c~0d 0800 表明所携带数据为 IP 包
************************(以下为 IP 包的内容)***********************
0e~0f 0100010100000000 (展开成二进制,十六进制为 4500)
0100 IPv4(P 版本)
0101 IP 包头长为 5×=20Byte
00000000 未指定服务类型
10~11 0148 IP 包总长度
12~13 8a9a 标识符
14~15 0000000000000000 (展开成二进制,十六进制为 0000)
000 此包可以被分段,并且这就是最后一段(即未分段)
000000000000 此段的偏移
16 40 生存时间
17 11 此 IP 包所携带数据为 UDP 包
18~19 2575 头部校验和
1A~1D cac2 fed3 源 IP 地址 202.194.254.211
1e~21 ffff ffff 目的 IP 地址为 IP 广播地址
************************(以下为 UDP 包的内容)***********************
·74· Internet 应用协议实例剖析与服务器配置
16 80 生存时间
17 11 此 IP 包所携带数据为 UDP 包
18~19 e19f 头部校验和
1A~1D 0000 0000 源 IP 地址未知
1e~21 ffff ffff 目的 IP 地址为 IP 广播地址
************************(以下为 UDP 包的内容)***********************
22~23 0044 源 UDP 端口号
24~25 0043 目的 UDP 端口号(DHCP 服务器的周知端口号 67)
26~27 013a UDP 包的长度
28~29 325c 校验和
************************(以下为 DHCP 包的内容)*********************
2a 01 操作码 01 表示由客户发向服务器
2b 01 硬件类型 01 表示硬件类型为以太网
2c 06 硬件地址长度(6Byte)
2d 00 步数 0(未经过 DHCP 中继)
2e~31 c770 e71b 序号
32~33 0000 从开始请求起经过的时间为 0s
34~35 0000 标志字段的首比特为 0 表示客户可以接收 IP 单播
地址
36~39 0000 0000 客户 IP 地址未知
3a~3d 0000 0000 分配给客户的 IP 地址
3e~41 0000 0000 服务器 IP 地址
42~45 0000 0000 中继 IP 地址
46~55 0010 5a5e 7d10 0000 „.0000 客户硬件地址
56~95 0000 „. 0000 DHCP 服务器的名字
96~115 0000 „. 0000 启动文件名
116~119 6382 5363 幻数,表明后面跟有 DHCP 选项
*************(以下是用横线分开的 DHCP 选项)**********************
11a 35 信息类型选项代码
11b 01 选项长度为 1Byte
11c 03 信息类型为地址租用选择(DHCPREQUEST)
---------------------------------------------------------------------------------------
11d 3d 客户标识选项代码
11e 07 选项长度为 7Byte
11f 01 客户标识将是客户的以太网地址
120~126 0010 5a5e 7d10 客户的以太网地址
---------------------------------------------------------------------------------------
127 32 指定 IP 地址选项代码
128 04 选项长度为 4Byte
第3章 DHCP 应用 ·77·
11a 35 信息类型选项代码
11b 01 选项长度为 1Byte
11c 05 信息类型为地址租用确认(DHCPACK)
---------------------------------------------------------------------------------------
11d 36 服务器标识选项代码
11e 04 选项长度为 4Byte
11f~122 ca c2fe d3 服务器标识为“202.194.254.211”
---------------------------------------------------------------------------------------
123 33 租期选项代码
124 04 选项长度为 4Byte
125~128 00 00a8 c0 租期为 0xa8c0(43200)s
---------------------------------------------------------------------------------------
129 3a T1 选项代码
12a 04 选项长度为 4Byte
12b~12e 00 0054 60 T1 为 0x5460(21600)s
---------------------------------------------------------------------------------------
12f 3b T2 选项代码
130 04 选项长度为 4Byte
131~134 00 0093 a8 T2 为 0x93a8(37800)s
---------------------------------------------------------------------------------------
135 01 子网掩码选项代码
136 04 选项长度为 4Byte
137~13a ff ffff 00 子网掩码为 255.255.255.0
---------------------------------------------------------------------------------------
13b 03 路由选项代码
13c 04 选项长度为 4Byte
13d~140 ca c2fe fe 默认路由为 202.194.254.254
---------------------------------------------------------------------------------------
141 06 域名服务器选项代码
142 04 选项长度为 4Byte
143~146 ca c2f0 58 域名服务器为 202.194.240.88
---------------------------------------------------------------------------------------
147 0f 域名选项代码
148 0c 选项长度为 12Byte
149~154 73 6469 652e 6564 752e 636e 00 域名为“sdie.edu.cn”
---------------------------------------------------------------------------------------
155 ff 结束选项代码
---------------------------------------------------------------------------------------
UDP 校验和的计算见第 4 章“DNS 应用”的实例剖析部分。
第4章 DNS 应用
4.1 DNS 简介
③ 回答记录区:这一部分记录服务器对客户
方问题作出的回答。 DNS 头
④ 权威记录区:服务器利用此区域指引客户
问题记录区
方查找权威的域名服务器。
⑤ 附加记录区:这一部分用于记录与本次问 回答记录区
询过程非直接相关的记录。
权威记录区
4.2.2 DNS 头结构
附加记录区
1:服务器支持递归式查找
9~11 保留位
12~15 应答码
0000:没有错误发生
0001:服务器无法理解查询包
0010:因服务器失败而无法正确回答
0011:无法找到被问询的名字
0100:服务器不支持此类型的查询
0101:服务器拒绝服务
其他:未用
③ 问题记录的个数字段:该字段的长度为 16bit,表示问题记录区包含的记录个数。
④ 回答记录的个数字段:该字段的长度为 16bit,表示回答记录区包含的记录个数。
⑤ 权威记录的个数字段:该字段的长度为 16bit,表示权威记录区包含的记录个数。
⑥ 附加记录的个数字段:该字段的长度为 16bit,表示附加记录区包含的记录个数。
4.2.3 问题记录的格式
4.2.4 回答记录的格式
④ 生存时间字段:此字段长度为 32bit,它是允许客
数据长度
户缓存此记录的以 s 为单位的最长时间。
⑤ 数据长度字段:当数据字段是一个 IP 地址时,此 数据
字段的值总为 4。
图 4-4 回答记录的格式
⑥ 数据字段:长度与数据长度字段值相同的数据。
一般每个主机都会有许多客户端应用程序需要利用名字来工作,多数操作系统提供了系
统函数 gethostbyname(),应用程序需要对名字进行解析时可以直接调用这个函数,而
gethostbyname()的功能就是根据本机的配置信息向相应的域名服务器查询应用程序通过参
数传递来的名字,并把服务器发来的结果通过返回值传递给应用程序。
另外应用程序 nslookup 也是一个完整的 DNS 客户端的实现,可以用它来学习或调试域
名服务器的配置。nslookup 可以根据用户需要组建相应的查询包并发向用户指定的域名服
务器,然后把得到的结果显示给用户。下面是一段用 nslookup 程序查询一个域名服务器的
实例。
1 [nothing@IBMServer /nothing]$ nslookup - 202.194.254.210
2 Default Server: dns.clab.sdie.edu.cn
3 Address: 202.194.254.210
4 > set type=A
5 > www.sdie.edu.cn
6 Server: dns.clab.sdie.edu.cn
7 Address: 202.194.254.210
8 Name: www.sdie.edu.cn
9 Address: 202.194.240.88
10 > set type=MX
11 > sdie.edu.cn
第4章 DNS 应用 ·85·
12 Server: dns.clab.sdie.edu.cn
13 Address: 202.194.254.210
14 sdie.edu.cn preference = 10, mail exchanger = mail.sdie.edu.cn
15 mail.sdie.edu.cn internet address = 218.98.166.6
16 > set type=NS
17 > clab.sdie.edu.cn
18 Server: dns.clab.sdie.edu.cn
19 Address: 202.194.254.210
20 clab.sdie.edu.cn nameserver = dns.clab.sdie.edu.cn
21 dns.clab.sdie.edu.cn internet address = 202.194.254.210
上例中,斜体部分是用户输入信息,其他部分为 nslookup 程序显示的信息。第 4~9
行实现了查询出“www.sdie.edu.cn”这个名字对应的 IP 地址为“202.194.240.88”的功能;
第 10~15 行实现了查出“sdie.edu.cn”所对应的邮件交换器地址为“218.98.166.6”的功能;
第 6~21 行实现了查出“clab.sdie.edu.cn”域的域名服务器的 IP 地址为“202.194.254.210”
的功能。
域名服务器既可以帮助客户端根据名字查询 IP 地址或另一个名字,也可以根据 IP 地址
查询名字,前者是大部分 Internet 用户最经常使用的功能,也是本章后面各部分主要介绍内
容。Internet 域名系统中的域名服务器按照其所服务的域组成一个树型结构,如图 4-6 所示。
.(192.58.128.30)
„„
com cn edu
clab cc „„
(202.194.254.210) (202.194.253.246)
图 4-6 域名服务器组成的树
另外多个域的域名服务也可以合并到一个域名服务器上,这完全取决于管理者的策略,
但逻辑上的树结构并没有改变。
任何一个节点增加一个子域名服务器或备份域名服务器,都必须在父节点的数据库中增
加一条指向子节点的记录。
BIND 的配置需要多个配置文件,其中大致分为全局配置文件(/etc/named.conf)和数据
库文件(默认在/var/named 目录下)两类。
1.全局配置文件/etc/named.conf
该配置文件主要定义数据库文件的位置信息和区(zone)声明等全局参数。
一个区对应一个用于存储名字信息的数据文件, DNS 服务器是以区为单位来管理域名
空间的。一个 DNS 服务器可以管理一个或多个区。
每个区声明中主要包括本区对应的域、服务器的类型和对应的数据库文件 3 项。各种类
型服务器的 named.conf 配置文件实例分别如下所述。
·88· Internet 应用协议实例剖析与服务器配置
(1)纯缓存服务器
假设某 DNS 服务器为纯缓存型服务器,则其默认 named.conf 文件如下。
options {
directory "/var/named";
};
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
zone "." IN {
type hint;
file "named.ca";
};
zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};
include "/etc/rndc.key";
在这个配置文件中,options 配置项指定了数据库文件的存放目录是/var/named/,controls
和 include 与用 rndc(name server control utility)工具来管理域名服务器有关,此处不详述,
下面主要对有关的区声明进行说明。
① zone "." IN 配置项:该配置项定义了一个与 Internet 类型的根域相关的区,这个区对
应的数据库文件为/var/named/named.ca,记录的是所有的 Internet 根域名服务器的信息。这个
区的类型为 hint,表示 named.ca 中的内容只是提示性的,而不是由本服务器定义的。
② zone "localhost" IN 配置项: 该配置项定义了一个与 localhost 域相关的 zone,这个 zone
对应的数据库文件为/var/named/localhost.zone。localhost.zone 只是将名字 localhost 转换为本
地回送地址(127.0.0.1)。这个 zone 的类型为 master,即管理员可以根据需要任意修改名字
localhost 与 IP 地址的对应关系。
③ zone"0.0.127.in-addr.arpa"IN 配置项:该配置项定义了一个与 0.0.127.in-addr. arpa 域相
关的区,这个区对应的数据库文件为/var/named/named.local。named.local 中只是将本地回送
地址(127.0.0.1)反向转换为名字 localhost。这里的域的名字“0.0.127.in-addr.arpa”比较特殊,
它是为了反向域名解析而制定的一种固定写法,由“0.0.127”和“in-addr.arpa”组成,其中
后者是固定的,前者根据要反向解析的地址范围而定,例如本例中的“0.0.127”代表的地址
范围是 127.0.0.*。
第4章 DNS 应用 ·89·
(2)主域名服务器
IP 地址为 202.194.254.210 的主域名服务器能够对类似于“*.clab.sdie.edu.cn”的名字进
行解析,其 named.conf 配置如下。
options {
directory "/var/named";
};
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
zone "." IN {
type hint;
file "named.ca";
};
zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};
zone "clab.sdie.edu.cn"{
type master;
file "named.host";
};
include "/etc/rndc.key";
此文件比纯缓存型域名服务的 named.conf 文件增加了一个区声明: “clab.sdie.edu.cn”
,
它所对应的 named.host 数据库文件建立了“clab.sdie.edu.cn”域中的名字信息,详见本节对
named.host 的分析部分。
(3)备份域名服务器
“clab.sdie.edu.cn”域的某备份域名服务器需定期从 IP 地址为 202.194.254.210 的主域名
服务器上更新数据库,其 named.conf 如下。
options {
directory "/var/named";
};
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
·90· Internet 应用协议实例剖析与服务器配置
};
zone "." IN {
type hint;
file "named.ca";
};
zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};
zone "clab.sdie.edu.cn"{
type slave;
file "named.host";
masters{202.194.254.210};
};
include "/etc/rndc.key";
此文件与主域名服务器的 named.conf 的区别如下:
① “clab.sdie.edu.cn”区声明中的类型由 master 变成了 slave,表示这个区的数据库文件
将从其他主域名服务器上获得。
② 上述的区声明中增加了“masters{202.194.254.210}”配置行,用于指定主域名服务器。
备份域名服务器一般通过 TCP 的 53 号端口从主域名服务器定期下载数据库文件。
2./var/named 下的数据库文件
数据库文件都是以资源记录(resource record)的形式存储数据的。每个资源记录都遵循
如下的基本格式:
<name> [<ttl>] [<class>] <type> <data>
每个字段之间由空格或制表符分隔。常用字段的含义见表 4-1。
表 4-1 名字段的含义
字 段 取 值 说 明
. 根域
空值 使用于最后一个带有名字的资源记录的名字信息
第4章 DNS 应用 ·91·
续表
字 段 取 值 说 明
A(Address) 后面数据为网络层地址
PTR(Pointer) 后面数据为对地址反向解析的信息
type
与相应的 type 值对应的 data 字段的含义:
取值:
A IP 地址
CNAME 别名
MX 邮件交换器名字或地址
NS 域名服务器名字或地址
PTR 名字
person 管理员的邮件地址,注意邮件格式需要用“.”代替“@”
本文件的版本号,文件修改后要增加其值。备份服务器向该服务器索取数据时会根据
serial
此值决定是否更新
SOA
refresh 备份服务器向该服务器索取数据的时间间隔
retry 备份服务器更新数据失败时再次尝试的时间间隔
expire 备份服务器无法更新数据时原有数据多长时间失效
(1)named.ca
Internet 中的每个根域名服务器都在该文件中有一个登记项。当 DNS 服务器启动时,根
据此文件里的每个根域名服务器的登记项初始化 DNS 服务器的高速缓存。本文件一般不需要
管理员进行配置,采用系统提供的配置即可,但由于根域名服务器可以发生变化,因此系统
管理员需要定期更新该文件,该文件可以从 ftp://rs.internic.net/domain/named.ca 获得。去掉注
释后的文件实例如下所述。
. 3600000 IN NS A.ROOT-SERVERS.NET.
·92· Internet 应用协议实例剖析与服务器配置
1D IN NS @
1D IN A 127.0.0.1
第4章 DNS 应用 ·93·
(3)named.local
此文件用于将本地回送地址(127.0.0.1) 转换为名字 localhost。一般情况下,该文件不需
要重新配置。文件实例如下所述。
$TTL 86400
@ IN SOA localhost. root.localhost. (
1997022700 ; serial
28800 ; refresh
14400 ; retry
3600000 ; expire
86400 ) ; minimum
IN NS localhost.
1 IN PTR localhost.
(4)named.host
此文件是主域名服务器中最重要的记录文件,文件实例如下所述。
@ IN SOA clab.sdie.edu.cn. webmaster.clab.sdie.edu.cn. (
2000083103 ; serial
900 ; refresh
300 ; retry
604800 ; expire
36000 ; minimum
)
@ IN MX mail.clab.sdie.edu.cn.
mail IN A 202.194.254.72
www IN A 202.194.254.89
ftp IN A 202.194.254.89
cc IN NS 202.194.254.246
此数据库文件中每一行的含义如下所述。
① “@ IN SOA clab.sdie.edu.cn. webmaster.clab.sdie.edu.cn.”表示本机的名字为
clab.sdie.edu.cn,管理员的邮件地址是 webmaster@clab.sdie.edu.cn。
② “2000083103 ; serial”表示本文件的版本号是 2000083103(一般用日期和时间表示)。
行中的分号后面部分是注释,下同。
③ “900 ; refresh” 表示备份服务器向该服务器索取数据的时间间隔为 900s。
④ “300 ; retry” 表示备份服务器更新数据失败时再次尝试的时间间隔为 300s。
⑤ “604800 ; expire”表示经过 604800s(7 天)若备份服务器仍无法更新数据时原有数
据失效。
⑥ “36000 ; minimum”表示最小生存时间(TTL)值为 36000s。
⑦ “@ IN MX mail.clab.sdie.edu.cn.”表示“clab.sdie.edu.cn”对应的 Internet 邮
件交换服务器是“mail.clab.sdie.edu.cn”,即若要向 XXX@sdie.edu.cn(此处的 XXX 代表
·94· Internet 应用协议实例剖析与服务器配置
域名客户端查询域名服务器的基本方式有两种:反复式查询和递归式查询。
4.5.1 反复式查询
4.5.2 递归式查询
4.6 实 例 剖 析
4.6.1 环境介绍
路由器(有两个以太网接口)
接口 1 接口 2
IP 地址:202.194.254.254 IP 地址:202.194.240.254
掩码:255.255.255.0 掩码:255.255.255.0
以太网地址:00:D0:B7:37:55:00 以太网地址:00:C0:32:32:17:6B
A „„ C „„ B
DNS:202.194.254.210
4.6.2 通信过程中的帧
4.6.3 帧剖析
0 (只在应答包中有效,此处无效)
0 此包没有被截尾
1 要求服务器按照递归方式回答
0 (只在应答包中有效,此处无效)
000 保留未用,此处必须为 0
0000 (只在应答包中有效,此处无效)
2e~2f 0001 问题记录区中有 1 个记录
30~31 0000 回答记录区中有 0 个记录
32~33 0000 权威记录区中有 0 个记录
34~35 0000 附加记录区中有 0 个记录
36~46 0377 7777 0473
6469 6503 6564
7502 636e 00 名字“www.sdie.edu.cn”
47~48 0001 查询类型为 A
49~4a 0001 地址类别为“Internet 地址”
总结以上各个字段的含义,可知此帧中所包含的 DNS 包是向 DNS 服务器发出一个问询
“名字为 www.sdie.edu.cn 的主机的 IP 地址是什么?”
2.C 发出的 DNS 回答帧
字节偏移 内容 含义
00~05 0000 b491 8c6a 目的以太网地址(A 的以太网地址)
06~0b 00a0 c966 9833 源以太网地址(C 的以太网地址)
0c~0d 0800 表明所携带数据为 IP 包
****************(以下为 IP 包的内容)******************************
0e~0f 0100010100000000(展开成二进制,十六进制为 4500)
0100 IPv4(IP 版本)
0101 IP 包头长为 5 4=20Byte
00000000 未指定服务类型
10~11 004d IP 包总长度
12~13 c300 标识符
14~15 0000000000000000(展开成二进制,十六进制为 0000)
000 此包可以被分段,并且这就是最后一段(即未分段)
000000000000 此段的偏移
16 80 生存时间
17 11 此 IP 包所携带数据为 UDP 包
18~19 e4bc 头部校验和
1A~1D cac2 fed2 源 IP 地址为 202.194.254.210
1e~21 cac2 fe8a 目的 IP 地址为 202.194.254.138
****************(以下为 UDP 包的内容)***************************
22~23 0035 源 UDP 端口号(DNS 服务器的周知端口号)
第4章 DNS 应用 ·99·
4.6.4 校验和的计算
0 15 16 31
源 IP 地址(202.194.254.138)
目的 IP 地址(202.194.254.210)
(2)确定要被校验的字段。令所有要被校验的字段组成一个字节序列,按照 UDP 协议
要求,这个字节序列是根据一个 UDP 伪头和将校验和字段清零后的 UDP 包组合得到的,因
此可把 UDP 伪头的各个字节和整个 UDP 包(校验和字段清零)的各个字节排列如下:
cac2 fe8a cac2 fed2 0011 0029 0401 0035
0029 0000 7926 0100 0001 0000 0000 0000
0377 7777 0473 6469 6503 6564 7502 636e
0000 0100 01
(3)确定要被校验的字节数。此例中被校验的是 45(十进制)个字节,总字节数为奇数,
需补零,补零后形成的字节序列为:
cac2 fe8a cac2 fed2 0011 0029 0401 0035
0029 0000 7926 0100 0001 0000 0000 0000
0377 7777 0473 6469 6503 6564 7502 636e
0000 0100 0100
(4)累加所有 16bit 整数。为了计算方便,可先把所有整数累加后,再将所有进位一次
截取加到剩余 16bit 整数上。
cac2+fe8a+cac2+fed2+0011+0029+0401+0035
+0029+0000+7926+0100+0001+0000+0000+0000
+0377+7777+0473+6469+6503+6564+7502+636e
+0000+0100+0100=69a41
9a41+6=9a47
(5)将结果取反: ~9a47=65b8。
(6)将结果 65b8 填写到校验和字段。
最后得到的结果 65b8 与我们实际看到的由 A 发出的 UDP 包的第 28~29 字节吻合。
第5章 TELNET 应用
选项协商的基本策略是一方向另一方发出要求对方接受某选项的请求,若对方接受此选
项,则发回相应的接受回答,此选项将在双方同时生效;若对方不接受此选项,则发回不接
受选项的回答,双方都禁用此选项,继续使用标准 NVT 作为默认约定。通信一方可以拒绝
对方发来的所有的要求启用某选项的请求,但不能拒绝对方发来的禁用某选项的请求,因为
双方必须都支持 NVT。
TELNET 协商方法规定,若双方同时向对方发出启用同一个选项的请求,则对方发来的
请求被自动当作对本方发出的相应请求的接受回答。
通信双方在已经建立 TCP 连接的基础上,任一方都可以在任意时刻向对方发送选项请求
或发送数据,二者地位对等。从前面的介绍可以看到,选项协商语法是对称的,选项协商语
法的对称性可能会导致无穷尽的应答循环:每一方都把对方发送过来的命令当作必须回答的
请求而不是对方的应答。为防止这种循环,可以应用下面这些规则。
① 一方只能请求改变选项的状态,也就是说一方不能发送对它正在使用的选项的肯定
请求。
② 如果一方所接收到的请求是要求它进入当前它所在的状态,那么该请求将不会被应
答,这种不应答对防止无穷尽的循环是非常重要的。对于那些改变模式的请求,都需要一个
应答,尽管该模式不一定改变。
③ 无论何时,只要一方向第二方发送一个选项命令(不管该命令是请求还是应答) ,而
且使用该选项将会对从第一方发送到第二方的数据进行处理时产生影响,那么必须把该命令
插到数据流中它希望开始起作用的点上。需要注意的是,传送请求和接收到可能是否定的应
答的过程需要一些时间,因此,一台主机在发出对一个选项的请求后可能需要缓冲后面要发
送的数据,直到它知道该请求是被接受还是被拒绝。
选项请求在 TELENT 连接刚刚建立的时候要在连接的两端往返传送许多次,每一方都试
图从对方获取尽可能好的服务。
如果一个进程在收到一个拒绝回应后,仅仅是重新请求该选项,那么由一个进程发起的
请求将会导致不停的请求循环。为了防止出现这样的循环,不能重复发送被拒绝的请求,除
非某些东西改变了(例如该进程运行了一个不同的程序,或者用户已经发出了另外的命令,
或者出现了其他所有可以影响一个进程及其选项的上下文的东西)。根据经验,重新请求只能
是在一个连接的另外一端后来又提交了某些信息,或者本地用户的有人工干预的情况下进行。
5.2 网络虚拟终端(NVT)
NVT 是双向字符设备,它具有打印机和键盘,打印机处理对方发来的数据,键盘可以产
生数据并通过已经建立的连接发向对方,若需要“本地响应” ,打印机也要处理本地键盘产生
的数据。
NVT 字符集是 8bit USASCII 码,任何字符转换都是本地问题,它并不影响 NVT。
5.2.1 数据传输
性缓存模式(line-buffered mode),也就是说,除非使用选项协商功能改变了工作模式,否则
必须遵守下面的数据传输规则。
(1)在本地缓存允许的情况下,发送方应该收集一行数据后将整行数据一起发出,或使
用本地特定的某个信号来决定数据发送的时刻,这个特殊信号可以由一个进程产生或人为产
生。制订这个规则的原因是:若每产生一个字符就向对方发送一次,则对方将因频繁的网络
中断而消耗大量系统时间。
(2)当一个进程已经向打印机发送完数据,但暂时还没有来自键盘的数据需要处理时,
此进程必须发送一个名称为“TELNET Go Ahead(GA)”的命令,这是为了使像 IBM 2741
这样的半双工终端正常工作。
5.2.2 控制功能
TELENT 协议的主要目标是在通过网络连接的终端设备和面向终端的进程之间提供一个
标准的接口。早期具有这种互联性质的实验表明,大部分的服务器都实现了某些功能,但调
用这些功能的方式却差别很大。对于一个要与多个服务器系统交互的用户来说,这些差别是
一个非常大的障碍。因此,TELNET 协议定义了这些功能中的 5 种标准表示。NVT 定义的 5
种常用的控制功能表述如下。
① 中断进程(IP,Interrupt Process)。大多系统需要对进程实行挂起、中断、结束
等功能,例如当用户怀疑进程陷入死循环的时候。在 NVT 中用命令名“IP”代表此项
功能。
② 放弃输出(AO,Abort Output) 。当一个进程在源源不断地产生输出时,可能需要中
途停止这种输出。在 NVT 中用命令名“AO”代表此项功能。
③ 查询对方的存在(AYT,Are You There) 。当对方长时间沉默时,可以使用这种功能
向对方发出问询,若对方支持的话,则会回应一串可显示字符以表达对方目前的状态。在 NVT
中用命令名“AYT”代表此项功能。
④ 删除字符(EC,Erase Character)。当需要删除刚刚错误输入的字符时使用此项功能。
在 NVT 中用命令名“EC”代表此项功能。
⑤ 删除行(EL,Erase Line)。此功能可以将当前行的数据全部删除。在 NVT 中用字符
串“EL”代表此项功能。
许多系统提供有一个终端的用户对一个“失控”的进程重新获得控制权的机制。5.2.2 节
描述的 IP 和 AO 功能就是这种机制的例子。在本地使用终端时,系统可以对用户发出的所有
信号进行及时响应,不管这些信号是一些普通字符还是电传打字机中的“BREAK”键或 IBM
2741 中的“ATTN”键发送的“带外”信号。然而当通过网络把系统连接起来时,情况就可
能有所不同,网络的流量控制机制可能导致这些信号被缓存到用户的计算机中而没有得到系
统的及时响应。
为了解决这个问题,TELNET 中提出了“同步” (SYNCH)机制。一个同步信号包含一
个同 TELNET 命令“DATA MARK”结合在一起的 TCP 紧急数据。该紧急数据不受制于 TCP
连接中的流量控制,接收它的进程会据此来启动对数据流的特殊处理过程。在这种模式中,
·104· Internet 应用协议实例剖析与服务器配置
接收方立即对数据流进行扫描,查找一些“特殊”的信号,而把其他的数据丢弃,这些“特
殊”的信号包括 TELNET 中的 IP、AO 和 AYT(没有 EC 或 EL)的标准表示,与这些标准
表示类似的本地表示(如果有的话) ,所有的其他 TELNET 命令,其他不延迟数据流的扫描
并且能够起作用的自定义信号。
TELNET 命令“DATA MARK(DM)”是数据流中的同步标记,表示所有特殊的信号都
已经产生,接受者可以继续对数据流进行一般的处理。
同步信号通过 TCP 的发送操作发送,在发送过程中需要把紧急标志设为“真” ,并且把
DM 作为最后(或者惟一的)一个字节。
当许多同步信号快速地连续不断地发送时,紧急通知可能被淹没。系统不可能去计算紧
急通知的次数,因为接收到的紧急通知的次数可能等于或者少于发送次数。在普通模式中,
一个 DM 是没有任何操作的,但在紧急模式中,它表示紧急处理过程的结束。
如果在发现 DM 之前,TCP 已经指示紧急数据的结束,TELNET 应该继续对数据流
进行特殊的处理,直到发现 DM。如果在发现 DM 之后,TCP 指示有更多的紧急数据,那
它只能是另外的同步信号。TELNET 应该继续对数据流进行特殊的处理,直到发现另外一
个 DM。
由于 SYNCH 机制的一个影响是丢弃本来在发送者和接收者之间要传输的所有字符(除
了 TELNET 命令) ,所以如果需要,这个机制可以作为清除数据路径的一种标准方式。例如,
若一个终端用户需要传输一个 AO,接收到该 AO 的服务器应该给该用户返回一个同步信号
(如果它提供该功能的话) 。
就像在 TELNET 中需要把一个 TCP 紧急通知当作一个带外信号一样,其他使用 TELNET
的协议可能需要另外的可以当作带外信号的命令。按照传统, “IP,Synch”可以作为这样的信
号。例如,假设有一个使用 TELNET 协议的其他协议定义了一个类似于 TELNET 命令 AO
的命令 STOP,使用该协议的用户希望服务器处理 STOP 字符串,但由于服务器在处理其他
的命令,导致连接被阻塞,此时该用户应该这样操作他的系统:
(1)发送出 TELNET IP 字符;
(2)发送出 TELNET SYNC 系列,即在一个紧急模式的 TCP 发送操作中把“Data Mark
(DM)作为惟一的字符发送出去。
(3)发送出字符串 STOP。
(4)如果有的话,把其他协议中类似于 TELNET DM 的命令发送出去。
用户(或者代表该用户的进程)必须传输上面步骤 2 中的 TELNET SYNCH 系列,以确
保 TELNET IP 已经到达服务器的 TELNET 解释器。紧急通知将激活 TELNET 进程,而 IP
将激活随后级别较高的进程。
名称 编码 意义
NULL (NUL) 0 没有操作
Line Feed (LF) 10 打印头移到下一个打印行,但不改变打印
头的垂直位置。
Carriage Return (CR) 13 把打印头移到当前行的左边。
BELL (BEL) 7 产生一个可以看到或可以听到的信号(而
不移动打印头。)
Back Space (BS) 8 向左移动打印头一个字符位置。
Horizontal Tab (HT) 9 把打印头移到下一个水平制表符停止的位
置。它没有指定每一方如何检测或者设定
制表符的停止位置。
Vertical Tab (VT) 11 把打印头移到下一个垂直制表符停止的位
置。它仍然没有指定每一方如何检测或者
设定制表符的停止位置。
Form Feed (FF) 12 把打印头移到下一页的顶部,保持打印头
在相同的水平位置上。
其中编码 7~9 和 11~12 是不必要在 NVT 打印机上定义的。未列出的其他编码都不会
导致 NVT 打印机实施任何动作。
在上述定义中,系列“CR LF”将导致 NVT 打印头移动到下一行的左边(与系列 “LF CR”
的效果是一样的) 。然而,许多系统和终端并不独立处理 CR 和 LF,为了模拟它们的效果,需
要进行一些处理(比如,许多终端没有独立于 LF 的 CR,但是在这样的终端上可以用退格键来
模拟一个 CR) 。在需要把它们结合在一起使用的时候,必须把系列“CR LF”当作一个单独的
“新行”字符看待。在只需要一个单独的回车键时必须使用系列“CR NUL” ;在其他的情况下
必须避免使用 CR 字符。这个规则可以确保系统在发现一个 TELNET 流中有一个字符的后面跟
有 CR 的情况下,可以作出合理的选择:是进行“换行”功能还是进行多次的退格操作。
NVT 键盘由键、键的组合或者键系列来产生所有 128 个 USAASCII 编码。尽管一些编码
在 NVT 打印机上没有什么用处,NVT 键盘还是可以生成它们。
除了这些编码,NVT 键盘还可以生成下面这些附加的编码。
(1)Synch
这个键允许一个用户清空到另一方的数据通道。激活该键将导致发送一个伴随 TCP 紧急
通知的 DM。
(2)Break(BRK)
之所以提供这个编码,是因为在当前的许多系统中,它是 USASCII 集合之外的一个信号,
但是具有本地意义,可以用它来表示 Break 键或 Attention 键已被按下。但是,需要注意的是,
它的目的是给需要它的系统提供第 129 个编码,而不等同于 IP 的标准表示。
(3)Interrupt Process(IP)
是挂起、中断、终止一个 NVT 连接的进程,另外,也是那些使用 TELNET 的其他协议
的带外信号的一部分。
(4)Abort Output(AO)
·106· Internet 应用协议实例剖析与服务器配置
允许当前的进程继续运行直到结束,并且把一个同步信号发送给用户,但不给用户发送
它的输出信息。
(5)Are You There(AYT)
对方应发送回一些可见的(也就是可打印的)信息以表明已经收到 AYT。
(6)Erase Character(EC)
接收者将删除数据流中最后一个未被删除的前导字符或者“打印位置” 。
(7)Erase Line(EL)
接收方将删除由 TELNET 连接发送的数据流中最后一个“CR LF”系列(但不包括该系
列)后面的全部内容。
5.3 TELNET 命令
5.4 TELNET 选项
的终端速率
IAC WON'T TERMINAL-SPEED 表示发送者拒绝发送自己的终端速率
IAC DO TERMINAL-SPEED 表示发送者希望对方发送终端速率
IAC DON'T TERMINAL-SPEED 表示发送者拒绝对方发送终端速率
IAC SB TERMINAL-SPEED SEND IAC SE 发送者用这个子选项命令要求对方发送终
端速率,此处的“SEND”编码为 0x01
IAC SB TERMINAL-SPEED IS „ IAC SE 发送者用这个子选项命令发送终端速率,
其中的“IS”编码为 0x00,
“...”是用 ASCII
码表示并以“, ”隔开的两个数字,例如
“1200,1200”,两个数字分别发送和接收
速率
默认值:WON'T TERMINAL-SPEED
DON'T TERMINAL-SPEED
(7)TOGGLE-FLOW-CONTROL 选项(选项代码为 33,RFC1372)
包含此选项的各种命令及含义如下:
命令 含义
IAC WILL TOGGLE-FLOW-CONTROL 发送者希望改变流量控制状态
IAC WON'T TOGGLE-FLOW-CONTROL 发送者不希望改变流量控制状态
IAC DO TOGGLE-FLOW-CONTROL 发送者希望对方能够改变流量控制状
态
IAC DON'T TOGGLE-FLOW-CONTROL 发送者不要求对方能够改变流量控制
状态
IAC SB TOGGLE-FLOW-CONTROL OFF IAC SE 发送者要求对方关闭流量控制功能,
此处的“OFF”编码为 0x00
IAC SB TOGGLE-FLOW-CONTROL ON IAC SE 发送者要求对方开启流量控制功能,
此处的“ON”编码为 0x01
默认值:WON'T TOGGLE-FLOW-CONTROL
DON'T TOGGLE-FLOW-CONTROL
(8)LINEMODE 选项(选项代码为 34,RFC1184)
包含此选项的各种命令及含义如下:
命令 含义
IAC WILL LINEMODE 发送者用这个命令请求协商行模式
IAC WON'T LINEMODE 发送者用这个命令禁止协商行模式
IAC DO LINEMODE 发送者用这个命令要求对方主动开始协商行模式
IAC DON'T LINEMODE 发送者用这个命令禁止对方主动开始协商行模式
默认值:WON'T LINEMODE
DON'T LINEMODE
(9)X-DISPLAY-LOCATION 选项(选项代码为 35,RFC1096)
包含此选项的各种命令及含义如下:
·110· Internet 应用协议实例剖析与服务器配置
命令 含义
IAC WILL X-DISPLAY-LOCATION 发送者希望通过子选项发送 X 显示的位置
IAC WON'T X-DISPLAY-LOCATION 发送者拒绝发送 X 显示的位置
IAC DO X-DISPLAY-LOCATION 发送者要求对方通过子选项发送 X 显示的位置
IAC DON'T X-DISPLAY-LOCATION 发送者禁止对方发送 X 显示的位置
默认值:WON'T X-DISPLAY-LOCATION
DON'T X-DISPLAY-LOCATION
(10)NEW-ENVIRON 选项(选项代码为 39,RFC1572)
这个选项可以帮助实现客户方与服务器方的环境变量传递。
包含此选项的各种命令及含义如下:
命令 含义
IAC WILL NEW-ENVIRON 发送者希望用子选项向对方发送环境变量
IAC WON'T NEW-ENVIRON 发送者拒绝向对方发送环境变量
IAC DO NEW-ENVIRON 发送者能够接收接收者发来的环境变量
IAC DON'T NEW-ENVIRON 发送者拒绝接收接收者发来的环境变量
默认值:WON'T NEW-ENVIRON
DON'T NEW-ENVIRON
(1)客户方向服务器方发送同步包;
(2)服务器方向客户方发送同步包;
(3)客户方向服务器方发送确认包。
协商 TELNET 选项的具体步骤根据客户端和服务器端使用的软件的不同而不同,下面是
在“telnet 10.0.2.250”命令发出后,利用启动了 debug 功能的服务器端观察到的客户方与服
务器方用“DO,DON'T,WILL,WON'T”协商的过程:
td: send do TERMINAL TYPE
td: send do TSPEED
td: send do XDISPLOC
td: send do NEW-ENVIRON
td: recv do ENCRYPT
td: send wont ENCRYPT
td: recv will ENCRYPT
td: send dont ENCRYPT
td: recv do SUPPRESS GO AHEAD
td: send will SUPPRESS GO AHEAD
td: recv will TERMINAL TYPE
td: recv will NAWS
td: send do NAWS
td: recv will TSPEED
td: recv will LFLOW
td: send do LFLOW
td: recv will LINEMODE
td: send dont LINEMODE
td: recv will NEW-ENVIRON
td: recv do STATUS
td: send will STATUS
td: recv wont XDISPLOC
td: recv suboption NAWS 0 80 (80) 0 25 (25)
td: recv suboption TERMINAL-SPEED IS 38400,38400
td: recv suboption ENVIRON IS
td: recv suboption TERMINAL-TYPE IS "LINUX"
td: send do ECHO
td: recv wont ECHO
td: send will ECHO
td: recv do ECHO
经过上述步骤之后,TELNET 客户方与服务器方开始按照协商后的约定互相发送数据,
用户在任何时候都可以使用“Ctrl+]”组合键进入 TELNET 命令状态,通过输入相应的命令
来手工改变 TELNET 选项的协商结果。
·112· Internet 应用协议实例剖析与服务器配置
实例:
#%PAM-1.0
auth required /lib/security/pam_securetty.so
auth required /lib/security/pam_stack.so service=system-auth
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_access.so
account required /lib/security/pam_stack.so service=system-auth
password required /lib/security/pam_stack.so service=system-auth
session required /lib/security/pam_stack.so service=system-auth
session optional /lib/security/pam_console.so
除了第 1 行外,每一行都指定了一个 Linux-PAM 安全模块,当 login 运行时,此处指定
的每一个模块都将得到执行,每一个模块都会根据自己的配置文件对登录过程进行审查和限
制。例如 pam_securetty.so 模块的配置文件为/etc/securetty,此文件中规定了超级管理员(root)
可以登录的终端,此文件实例如下:
tty1
tty2
tty3
tty4
tty5
tty6
此配置文件表明,超级管理员只允许从本地虚拟控制台 tty1-tty6 上登录。
再例如 pam_access.so 模块,它使用配置文件/etc/security/access.conf,下面是此文件的一
个实例:
+: zhangsan: ALL
+: ppp: ttyS0
+: root: tty1 tty2 tty3 tty4 tty5 tty6
-: ALL: ALL
此实例表明,zhangsan 用户可以从任何终端登录本机,ppp 用户只能从 ttyS0 登录本机,
root 可以从 tty1-tty6 登录本机,而其他人不能从任何终端登录本机。
5.7 实 例 剖 析
5.7.1 环境介绍
本例中将使用基于以太网的同一个 IP 网络内的两台计算机,将这两台计算机分别命名为
A 和 B,其基本配置信息如下:
计算机 IP 地址 掩码
A 202.194.254.213 255.255.255.0
·114· Internet 应用协议实例剖析与服务器配置
B 202.194.254.211 255.255.255.0
两计算机均运行 Linux 系统,并在 A 计算机上运行 telnet 程序远程登录 B 计算机。
在 A 计算机上用 TCPDUMP 工具可获得相关的帧,因为此例的目的是剖析 TELNET 选
项协商的过程,因此截获帧的过程只持续到客户端看到服务器端发来的登录提示为止。
5.7.2 通信过程中的帧
5.7.3 帧剖析
6.1 WWW 简介
6.2 HTTP 协议
/index.html HTTP/1.1”就是一个请求行,这里的“GET”是请求方 空行
法, “/index.html”是被请求的资源标识,即 WWW 服务器根目录下
信息体
的 index.html 文件, “HTTP/1.1”表明本 HTTP 包遵循 HTTP1.1 规
图 6-1 HTTP 请求包的格式
范。除了 GET 方法以外, “POST” 、
“OPTIONS”、
“HEAD”等也是
请求方法中的一种,关于各种请求方法的区别请参阅 RFC2068。
头项表由多个头项行构成,这些头项用来辅助请求行向 WWW 服务器发送附加信息,例
如 以 “ Accept ” 为 关 键 字 的 头 项 行 向 服 务 器 描 述 自 己 可 以 接 受 哪 些 类 型 的 文 件 、 以
“Accept-Language”为关键字的头项行向服务器描述自己可以接受哪种语言等,下面是几种
常用的请求头项的关键字及其作用:
请求头项关键字 描述
Host 向服务器传递用户在地址栏中输入的地址
Accept 向服务器声明浏览器支持哪些类型的资源
Accept-Encoding 向服务器声明浏览器支持哪些编码方法
Accept-Language 向服务器声明浏览器支持哪些语言
User-Agent 向服务器传递浏览器的名称和版本信息
Connection 向接收方表达本次连接的属性
If-Modified-Since 向服务器表达有条件请求,若资源在指定时间点后有过修改,则
条件为真
If-Match 向服务器表达有条件请求,若指定的标记匹配,则条件为真(见
应答头项 Etag)
If-None-Match 向服务器表达有条件请求,若指定的标记不匹配,则条件为真(见
应答头项 Etag)
HTTP 应答包的构成如图 6-2 所示。
状态行由“HTTP 版本号+空格+状态码+空格+状态信息+回 状 态 行
403 禁止访问
404 文件未找到
405 不支持客户使用的请求方法
500 服务器内部错误
503 服务不可用
505 不支持客户使用的 HTTP 版本
完整的状态码定义请阅读 RFC2068。
HTTP 应答包的头项表用于表达无法在状态行中表达的附加信息,例如当状态行中的状
态码为“401”时,头项表中往往包含一个以关键字“WWW-Authenticate”引导的头项,用
于告诉客户端目前服务器方支持的客户验证方法。常用的应答头项的关键字和作用如下:
应答头项关键字 作用
Date 显示 WWW 服务器端当前时间
Server 向浏览器传递服务器的名称和版本信息
Last-Modified 服务器端资源的最后被修改时间
Etag 与信息体中的资源相对应的标记
Accept-Ranges 表明服务器是否支持浏览器请求资源的一部分
Content-Length 表达信息体的长度
Connection 向接收方表达本次连接的属性
Content-Type 表达信息体的类型
标题栏
菜单栏
工具栏
地址栏
主窗口
状态栏
工具栏中各个工具的作用如下:
① 后退,回到以前访问过的页面;
② 前进,功能与“后退”相反;
③ 停止,停止传输当前页内容;
④ 刷新,重新传输当前页;
⑤ 主页,回到默认的起始页;
⑥ 搜索,连接用户设置的默认搜索引擎;
⑦ 收藏,在显示区的左边显示出收藏夹的内容,把自己喜欢的站点添加进收藏夹,或对
它们进一步分类;
⑧ 历史,在显示区的左边显示曾经访问过的链接列表;
⑨ 邮件,打开一个有关邮件和新闻的下拉菜单,通过这个菜单可以进入阅读邮件和阅读
第6章 WWW 应用 ·123·
新闻的界面;
⑩ 编辑,用来设置字体的大小和所有内码,单击这个按钮会出现一个下拉式菜单;
打印,打印当前页。
除图 6-4 所示的工具栏样式外,通过配置还可以自定义自己喜爱的工具栏样式,具体操
作可以通过选择菜单“查看”→“工具栏”→“自定义”实现。
IE 浏览器的其他功能及详细用法可以从“帮助”菜单中获得。
6.4.4 配置虚拟主机
6.4.5 管理 log 文件
Apache 的主要日志文件是访问日志文件和错误日志文件,下面分别来分析这两个文件。
·126· Internet 应用协议实例剖析与服务器配置
1.访问日志文件 Access_log
该文件主要记录客户端的主机地址、访问的时间、客户端的请求和服务器的响应状态等
信息。默认情况下,Apache 采用通用日志格式 CLF 规范来写日志文件,CLF 日志文件内对
每个请求均有一个单独记录行,形式如下:
host ident anthuser date request status bytes url sign
若某部分没有有效内容,则以“-”代替。行中各部分内容的含义如下:
① host,客户端主机的名字或 IP 地址;
② ident,通过 identd 服务获得的客户标识;
③ anthuser,基于用户名认证时,此值为用户名;
④ date,请求的日期与时间;
⑤ request,客户端的请求行;
⑥ status,返回到客户端的 3 位数字的 HTTP 状态码;
⑦ bytes,除去 HTTP 头外,返回给客户端的字节数;
⑧ url,客户端在浏览器地址栏里面输入的 URL;
⑨ sign,客户端浏览器发送来的标识信息。
以下是该记录文件的一行范例:
10.0.0.5 - - [02/Mar/2003:08:43:41 +0800] "GET /icons/apache_pb.gif HTTP/1.1"
3042898 "http://test.sdie.edu.cn/" "Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)"
2.错误日志文件 Error_log
该文件主要记录 apache 关闭与启动的时间,以及存取文件发生错误的状况。每一个记录
行由时间、错误类型和错误信息组成,例如:
[Sun Mar 02 09:54:23 2003] [warn] child process 1616 still did not exit, sending a SIGTERM
[Sun Mar 02 09:57:31 2003] [error] [client 10.0.0.5] File does not exist: /var/www/html/a
[Sun Mar 02 09:54:23 2003] [notice] caught SIGTERM, shutting down
DirectoryIndex index.php
#令 index.php 为所在目录的默认资源。
(2)Perl.conf
LoadModule perl_module modules/mod_perl.so
#加载的 perl 的模块。
Alias /perl /var/www/perl
#定义 perl 目录别名。
目前,Internet 上有多种安全协议,网络模型的每一层都已提出了相应的协议,例如应用
层有安全电子交易(SET,Secure Electronic Transaction)协议、会话层有安全套接层(SSL,
Secure Socket Layer)协议等。
若要使用 SSL 来加强站点的安全性应采用以下几个步骤来设置 Apache。
(1)申请或生成证书。这里假设已经通过证书颁发机构获得了证书,它将包含一个证书
文件和一个密钥文件,假设它们的名字分别是 server.crt 和 server.key。欲了解证书的详细信
息,读者可以在 Linux 下使用 OpenSSL 软件组建一个自己的认证中心,了解证书生成的过程。
(2)将证书文件拷贝至 Apache 相应目录下
cp server.crt /etc/httpd/conf/ssl.crt/
cp server.key /etc/httpd/conf/ssl.key/
(3)修改 Apache 配置文件
在/etc/httpd/conf.d/ssl.conf 文件中应该有下面两行信息:
SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key
另外,在相应的虚拟主机的配置区中应该用下面的语句开启 SSL 功能:
SSLEngine on
在上述配置基础上运行 Apache, 则默认情况下基于 SSL 的 WWW 服务就已经运行于 TCP
443 端口了,此时用“https://”访问此主机,可以看到如下图所示的状态栏上带有上锁标记
的结果,双击锁标记可以看到证书的信息,如图 6-5 所示。
6.5 实 例 剖 析
6.5.1 环境介绍
本例中将使用基于以太网的同一个 IP 网络内的两台计算机,将这两台计算机分别命名为
A 和 B,A 和 B 的基本配置信息如下:
计算机 IP 地址 掩码
A 202.194.254.138 255.255.255.0
B 202.194.254.211 255.255.255.0
在 A 计算机上运行 WWW 浏览器软件访问 B 计算机上的 WWW 服务器进程,WWW 浏
览器软件是 Linux 操作系统下的 Lynx2.8.1,WWW 服务器软件是 Linux 操作系统下的
Apache1.3.6,为了使实验数据尽可能简短,在 WWW 服务器的虚拟根目录下创建了一个最简
单的默认静态网页 index.html,其内容如下:
<html>
hello!
</html>
当用户只给出 WWW 服务器的 IP 地址并令 WWW 浏览器向对方发送 HTTP 请求时,
WWW 服务器会把上面的文件回复给浏览器,此例将详细描述 WWW 浏览器与 WWW 服务
器之间建立 TCP 连接、发送 HTTP 请求、发送 HTTP 应答、结束 TCP 连接的完整过程。
6.5.2 通信过程中的帧
6.5.3 帧剖析
46 01 空选项
---------------------------------------------------------------------------------------
47 03 窗口大小度量选项
48 03 选项长度为 3Byte
49 00 窗口大小字段没有经过右移位
---------------------------------------------------------------------------------------
(2)B 发向 A 的 TCP 同步帧
字节偏移 内容 含义
00~05 0000 b491 8c6a 目的以太网地址(A 的以太网地址)
06~0b 0060 948a 73c9 源以太网地址(B 的以太网地址)
0c~0d 0800 表明所携带数据为 IP 包
*******************(以下为 IP 包的内容)*******************************
0e~0f 0100010100000000(展开为二进制,十六进制为 4500)
0100 IPv4(IP 版本)
0101 IP 包头长为 5 4=20Byte
00000000 未指定服务类型
10~11 003c IP 包总长度
12~13 d2bf 标识符
14~15 0100000000000000(展开为二进制,十六进制为 4000)
010 此包禁止被分段
000000000000 无效
16 40 生存时间
17 06 此 IP 包所携带数据为 TCP 包
18~19 d518 头部校验和
1A~1D cac2 fed3 源 IP 地址为 202.194.254.211
1e~21 cac2 fe8a 目的 IP 地址为 202.194.254.138
************(以下为 TCP 包的内容)*************************************
22~23 0050 源 TCP 端口号(WWW 服务器的周知端口号)
24~25 0413 目的 TCP 端口号
26~29 0563 0071 序列号
2a~2d 927a 4ac9 确认号
2e~2f 1010000000010010(展开为二进制,十六进制为 a012)
1010 TCP 头的长度为 0xa 4Byte
000000 保留字段
0 “紧急指针”字段无效
1 “确认号”字段有效
0 不要求接收方执行推送功能
0 发送方不要求此次连接复位
1 表示此 TCP 包用于初始化序列号字段
·134· Internet 应用协议实例剖析与服务器配置
0 结束位为 0 表示发送者不要求结束本次连接
30~31 7d78 窗口大小为 32120(十进制)Byte
32~33 369d TCP 校验和
34~35 0000 紧急指针
****************(以下为用横线隔开的多个 TCP 选项)****************
36 02 TCP 包最大长度选项
37 04 选项的长度为 4Byte
38~39 05b4 TCP 包的最大长度为 1460Byte
---------------------------------------------------------------------------------------
3a 04 发送方支持“选择性确认”
3b 02 选项的长度为 2Byte
---------------------------------------------------------------------------------------
3c 08 时间标签选项
3d 0a 选项长度为 10(十进制)Byte
3e~41 0719 e48d 发送方的时间标签值
42~45 0005 2dd7 接收方的时间标签值
---------------------------------------------------------------------------------------
46 01 空选项
---------------------------------------------------------------------------------------
47 03 窗口大小度量选项
47 03 选项长度为 3Byte
48 00 窗口大小字段没有经过右移位
---------------------------------------------------------------------------------------
(3)A 发向 B 的 TCP 确认帧
字节偏移 内容 含义
00~05 0060 948a 73c9 目的以太网地址(B 的以太网地址)
06~0b 0000 b491 8c6a 源以太网地址(A 的以太网地址)
0c~0d 0800 表明所携带数据为 IP 包
*****************(以下为 IP 包的内容)*********************************
0e~0f 0100010100000000(展开为二进制,十六进制为 4500)
0100 IPv4 (IP 版本)
0101 IP 包头长为 5 4=20Byte
00000000 未指定服务类型
10~11 0034 IP 包总长度
12~13 1945 标识符
14~15 0100000000000000(展开为二进制,十六进制为 4500)
010 此包禁止被分段
000000000000 无效
16 40 生存时间
第6章 WWW 应用 ·135·
17 06 此 IP 包所携带数据为 TCP 包
18~19 8e9b 头部校验和
1A~1D cac2 fe8a 源 IP 地址为 202.194.254.138
1e~21 cac2 fed3 目的 IP 地址为 202.194.254.211
************(以下为 TCP 包的内容)*************************************
22~23 0413 源 TCP 端口号
24~25 0050 目的 TCP 端口号(WWW 服务器的周知端口号)
26~29 927a 4ac9 序列号
2a~2d 0563 0072 确认号
2e~2f 1000000000010000(展开为二进制,十六进制为 8010)
1000 TCP 头的长度为 0x8 4Byte
000000 保留字段
0 “紧急指针”字段无效
1 “确认号”字段有效
0 不要求接收方执行推送功能
0 发送方不要求此次连接复位.
0 同步位为 0 表示此 TCP 包非同步包
0 结束位为 0 表示发送者不要求结束本次连接
30~31 7d78 窗口大小为 32120(十进制)Byte
32~33 6562 TCP 校验和
34~35 0000 紧急指针
****************(以下为用横线隔开的多个 TCP 选项)*************
36 01 空选项
---------------------------------------------------------------------------------------
37 01 空选项
---------------------------------------------------------------------------------------
38 08 时间标签选项
39 0a 选项长度为 10(十进制)字节
3a~3d 0005 2dd7 发送方的时间标签值
3e~41 0719 e48d 接收方的时间标签值
---------------------------------------------------------------------------------------
(4)A 发向 B 的 HTTP 请求帧
字节偏移 内容 含义
00~05 0060 948a 73c9 目的以太网地址(B 的以太网地址)
06~0b 0000 b491 8c6a 源以太网地址(A 的以太网地址)
0c~0d 0800 表明所携带数据为 IP 包
*********************(以下为 IP 包的内容)**********************
0e~0f 0100010100000000(展开为二进制,十六进制为 4500)
0100 IPv4 (IP 版本)
·136· Internet 应用协议实例剖析与服务器配置
***********(以下为 IP 包的内容)******************************
0e~0f 0100010100000000(展开为二进制,十六进制为 4500)
0100 IPv4 (IP 版本)
0101 IP 包头长为 5 4=20Byte
00000000 未指定服务类型
10~11 0034 IP 包总长度
12~13 d2c0 标识符
14~15 0100000000000000
010 此包禁止被分段
000000000000 无效
16 40 生存时间
17 06 此 IP 包所携带数据为 TCP 包
18~19 d51f 头部校验和
1A~1D cac2 fed3 源 IP 地址为 202.194.254.211
1e~21 cac2 fe8a 目的 IP 地址为 202.194.254.138
************(以下为 TCP 包的内容)*******************************
22~23 0050 源 TCP 端口号(WWW 服务器的周知端口号)
24~25 0413 目的 TCP 端口号
26~29 0563 0072 序列号
2a~2d 927a 4cfb 确认号
2e~2f 1000000000010000(展开为二进制,十六进制为 8010)
1000 TCP 头的长度为 0x8 4Byte
000000 保留字段
0 “紧急指针”字段无效
1 “确认号”字段有效
0 不要求接收方执行推送功能
0 发送方不要求此次连接复位
0 同步位为 0 表示此 TCP 包非同步包
0 结束位为 0 表示发送者不要求结束本次连接.
30~31 7c70 窗口大小为 31856(十进制)Byte
32~33 6436 TCP 校验和
34~35 0000 紧急指针
***************(以下为用横线隔开的多个 TCP 选项)***************
36 01 空选项
---------------------------------------------------------------------------------------
37 01 空选项
---------------------------------------------------------------------------------------
38 08 时间标签选项
39 0a 选项长度为 10(十进制)Byte
第6章 WWW 应用 ·139·
<html>
hello!
</html>
---------------------------------------------------------------------------------------
HTTP 响应包中各行的含义如下所述。
第 1 行内容为“HTTP/1.1 200 OK” ,是 HTTP 应答包的状态行,表明此 HTTP 包遵循
HTTP/1.1 规范,状态码 200 表示一切正常,状态信息为“OK” 。
第 2 行为头项表的第一项,表明 WWW 服务器端的当前时间是 2002 年 3 月 20 日 15 点
31 分 29 秒。
第 3 行是一个 Server 头项,用于表明 WWW 服务器端的软件名称和版本,此例中 WWW
服务器软件是 Apache1.3.6,运行于 RedHat Linux 操作系统之上。
第 4 行是一个 Last-Modified 头项, 它用于标识响应包中所包含的资源最后被修改的时间,
此例中信息体中的文档最后被修改时间是 2002 年 2 月 20 日 15 点 29 分 08 秒。
第 5 行是一个 ETag(Entity Tag,实体标记)头项。实体标记即 HTTP 包信息体标记,
它由 WWW 服务器产生,用于惟一地标识一个信息体,浏览器得到此 HTTP 应答包后,可以
将实体标记和得到的资源及名字都进行缓存,当用户下次又访问同样一个资源时,若在两次
访问之间,WWW 服务器上的这个资源并没有改变过,则浏览器就可以直接将缓存中的内容
显示给用户,否则浏览器需要重新向服务器请求此资源。为了得知服务器端的文档是否已经
第6章 WWW 应用 ·141·
发生了改变,浏览器可以向服务器发送一个头项中包含与被请求资源相对应的标记的请求,
服务器根据请求包中的标记可以判断出被请求的资源是否改变过,若资源未改变,则 WWW
服务器使用一个不包含信息体的应答包,并且应答包的状态行包含状态码 304(表示资源未
改变) ,若 WWW 服务器端的资源已经改变,则服务器将使用包含正常信息体的应答包。
第 6 行是一个 Accept-Ranges 头项, “Accept-Ranges: bytes”表明 WWW 服务器支持浏览
器通过相应的头项请求一个资源的一部分(Ranges) ,并且是以开始字节偏移和结束字节偏移
来表达这个部分。WWW 浏览器可以利用 first-byte-pos 和 last-byte-pos 头项分别表达开始字
节偏移和结束字节偏移。
第 7 行是一个 Content-Length 头项,用于表达此应答包中信息体的长度,此例中信息体
的长度是 22(十进制)Byte。
第 8 行是一个 Connection 头项。Connection 头项可用于协商一次文档传输之后,双方之
间是否继续保持 TCP 连接,若保持则使用“Connection: Keep-Alive”,否则使用“Connection:
close”。
第 9 行是一个 Content-Type 头项,用于表达信息体的类型,此例中信息体是 text/html
类型。
第 10 行是分隔头项表和信息体的空行。
第 11~13 行是信息体,它是一个简单的 HTML 文档,浏览器解释此文档后,会在显示
区域显示“hello!”字符串。
(7)A 发向 B 的 TCP 确认帧
字节偏移 内容 含义
00~05 0060 948a 73c9 目的以太网地址(B 的以太网地址)
06~0b 0000 b491 8c6a 源以太网地址(A 的以太网地址)
0c~0d 0800 表明所携带数据为 IP 包
************(以下为 IP 包的内容)***********************************
0e~0f 0100010100000000(展开为二进制,十六进制为 4500)
0100 IPv4 (IP 版本)
0101 IP 包头长为 5 4=20Byte
00000000 未指定服务类型
10~11 0034 IP 包总长度
12~13 1947 标识符
14~15 0100000000000000(展开为二进制,十六进制为 4000)
010 此包禁止被分段
000000000000 无效
16 40 生存时间
17 06 此 IP 包所携带数据为 TCP 包
18~19 8e99 头部校验和
1A~1D cac2 fe8a 源 IP 地址为 202.194.254.138
1e~21 cac2 fed3 目的 IP 地址为 202.194.254.211
************(以下为 TCP 包的内容)*********************************
·142· Internet 应用协议实例剖析与服务器配置
010 此包禁止被分段
000000000000 无效
16 40 生存时间
17 06 此 IP 包所携带数据为 TCP 包
18~19 d51d 头部校验和
1a~1d cac2 fed3 源 IP 地址为 202.194.254.211
1e~21 cac2 fe8a 目的 IP 地址为 202.194.254.138
************(以下为 TCP 包的内容)*********************************
22~23 0050 源 TCP 端口号(WWW 服务器的周知端口号)
24~25 0413 目的 TCP 端口号
26~29 0563 018d 序列号
2a~2d 927a 4cfb 确认号
2e~2f 1000000000010001(展开为二进制,十六进制是 8011)
1000 TCP 头的长度为 0x8 4Byte
000000 保留字段
0 “紧急指针”字段无效
1 “确认号”字段有效
0 不要求接收方执行推送功能
0 发送方不要求此次连接复位
0 同步位为 0 表示此 TCP 包非同步包
1 结束位为 1 表示发送者要求结束本次连接
30~31 7c70 窗口大小为 31856(十进制)Byte
32~33 631a TCP 校验和
34~35 0000 紧急指针
****************(以下是用横线隔开的多个 TCP 选项)****************
36 01 空选项
---------------------------------------------------------------------------------------
37 01 空选项
---------------------------------------------------------------------------------------
38 08 时间标签选项
39 0a 选项长度为 10(十进制)Byte
3a~3d 0719 e48e 发送方的时间标签值
3e~41 0005 2dd8 接收方的时间标签值
---------------------------------------------------------------------------------------
(9)A 发向 B 的 TCP 确认帧
字节偏移 内容 含义
00~05 0060 948a 73c9 目的以太网地址(B 的以太网地址)
06~0b 0000 b491 8c6a 源以太网地址(A 的以太网地址)
0c~0d 0800 表明所携带数据为 IP 包
·144· Internet 应用协议实例剖析与服务器配置
************(以下为 IP 包的内容)***********************************
0e~0f 0100010100000000(展开为二进制,十六进制是 4500)
0100 IPv4 (IP 版本)
0101 IP 包头长为 5 4=20Byte
00000000 未指定服务类型
10~11 0034 IP 包总长度
12~13 1948 标识符
14~15 0100000000000000(展开为二进制,十六进制是 4500)
010 此包禁止被分段
000000000000 无效
16 40 生存时间
17 06 此 IP 包所携带数据为 TCP 包
18~19 8e98 头部校验和
1a~1d cac2 fe8a 源 IP 地址为 202.194.254.138
1e~21 cac2 fed3 目的 IP 地址为 202.194.254.211
************(以下为 TCP 包的内容)*********************************
22~23 0413 源 TCP 端口号
24~25 0050 目的 TCP 端口号(WWW 服务器的周知端口号)
26~29 927a 4cfb 序列号
2a~2d 0563 018e 确认号
2e~2f 1000000000010000(展开为二进制,十六进制是 8010)
1000 TCP 头的长度为 0x8 4Byte
000000 保留字段
0 “紧急指针”字段无效
1 “确认号”字段有效
0 不要求接收方执行推送功能
0 发送方不要求此次连接复位
0 同步位为 0 表示此 TCP 包非同步包
0 结束位为 0 表示发送者不要求结束本次连接
30~31 7d78 窗口大小为 32120(十进制)Byte
32~33 6212 TCP 校验和
34~35 0000 紧急指针
****************(以下是用横线隔开的多个 TCP 选项)****************
36 01 空选项
---------------------------------------------------------------------------------------
37 01 空选项
---------------------------------------------------------------------------------------
38 08 时间标签选项
39 0a 选项长度为 10(十进制)字节
第6章 WWW 应用 ·145·
000000 保留字段
0 “紧急指针”字段无效
1 “确认号”字段有效
0 不要求接收方执行推送功能
0 发送方不要求此次连接复位
0 同步位为 0 表示此 TCP 包非同步包
0 结束位为 1 表示发送者不要求结束本次连接
30~31 7c70 窗口大小为 31856(十进制)Byte
32~33 6317 TCP 校验和
34~35 0000 紧急指针
****************(以下是用横线隔开的多个 TCP 选项)****************
36 01 空选项
---------------------------------------------------------------------------------------
37 01 空选项
---------------------------------------------------------------------------------------
38 08 时间标签选项
39 0a 选项长度为 10(十进制)Byte
3a~3d 0719 e48f 发送方的时间标签值
3e~41 0005 2dd9 接收方的时间标签值
---------------------------------------------------------------------------------------
6.5.4 校验和的计算
0 15 16 31
源 IP 地址(202.194.254.211)
目的 IP 地址(202.194.254.138)
7.1.1 FTP 模型
文件传输是实现资源共享的重要方式和有效手段之一。文件传输协议(FTP,File Transfer
Protocol)是 Internet 应用层协议,它是 Internet 上最主要的文件传输协议。现在运行的各种
操作系统大都配备了使用方式基本相同的命令行 FTP 客户端程序。在 Linux 上最常用的 FTP
服务器软件是免费的 wu-ftpd。
FTP 协议模型如图 7-1 所示。
用户接口 用户
FTP 命令
服务器 用户
PI PI
FTP 应答
服务器 用户
文件系统 文件系统
DTP DTP
数据连接
7.1.3 数据表示
数据是在主机的存储设备之间传送的。如果两个系统的数据存储方式不同,就需要对它
进行转换,例如在传送文本时,可能会有对 NVT-ASCII 的不同的本地表示的问题;在传送二
进制文件的时候,会有不同系统对字节长度规定不同的问题(有的系统是 7bit,有的系统可
能是 32bit),这也需要进行适当的处理。FTP 规定了以下 4 种主要的数据表示方法。
① ASCII 类型
这是所有 FTP 必须实现的默认类型,用于传送文本文件,若主机间使用 EBCDIC 传送更为方
便时,则不使用 ASCII 类型。使用 ASCII 类型时,发送方将内部表示转换为 8bit NVT-ASCII 格式,
接收方则进行相反的过程接收数据。根据 NVT 标准,要在行结束处使用<CRLF>序列。
② EBCDIC 类型
EBCDIC 和 ASCII 非常相像,仅在字符编码上有一些差别。当通信双方的本地编码都是
EBCDIC 时,用 EBCDIC 类型非常有效。
③ 图像类型
在此类型下,传送的数据被看作连续的位,发送方将数据顺序放入到 8bit 传输字节中传
送,接收方亦把收到的数据看成连续的比特流。
④ 本地类型
发送方用控制命令通知接收方要发送文件的逻辑字节长度,然后将逻辑字节顺序放入
8bit 传输字节中传送,若在文件尾出现逻辑字节和传输字节不对齐的情况时,则补零对齐,
接收方从传输字节流中分离出逻辑字节。
7.1.4 数据结构
和相关信息,每页都带页头发送。
7.1.5 FTP 命令
1.访问控制命令
(1)用户名(USER)
用法:USER name
参数 name 是标记用户的 NVT 串。用户名是访问服务器必须的,此命令通常是控制连接
后第一个发出的命令,大部分主机还会接着要求口令。服务器可以在任何时间接收新的 USER
命令以改变访问控制。
(2)口令(PASS)
用法:PASS password
参数 password 是标记用户口令的 NVT 串。此命令紧跟在 USER 命令之后,在大多站点
它是完成访问控制不可缺少的一步。因为口令信息非常重要,因此不能显示出来,服务器方
没有办法隐藏口令,所以这一任务由用户 FTP 进程完成。
(3)帐号(ACCT)
用法:ACCT account
参数 account 是标记用户帐号的 NVT 串。此命令不需要与 USER 相关,一些站点可能需
要帐号用于登录,另一些则用帐号限制用户的权限。在后一种情况下,此命令可在任何时候
发送。对 PASS 命令所作应答的不同可以用于区分服务器是否需要帐号信息:当登录需要帐
户信息时,对 PASS 命令的响应是“332” ;如果不需要帐户信息,对 PASS 的响应则为“230”
。
如果此后的某个命令需要帐户信息,服务器会为这个命令返回 332 或 532,这主要取决于此
命令是暂存了还是已经丢弃了。
(4)改变工作目录(CWD)
用法:CWD directory
此命令可使用户在不同的目录下工作而不用改变它的登录或帐户信息,且传输参数也不
变。参数 directory 是目录名。
(5)回到上一层目录(CDUP)
用法:CDUP
此命令使用户回到上一级目录,它的响应和 CWD 的响应相同。
(6)结构加载(SMNT)
用法:SMNT directory
此命令可使用户在不改变登录或帐户信息的情况下加载另一个文件系统数据结构,且传
输参数也不变。
(7)重新初始化(REIN)
用法:REIN
此命令将终止 USER,除了允许进行中的数据传输完成外,重置所有参数,并控制连接
打开。此时可以再次开始 USER 命令。
(8)退出登录(QUIT)
用法:QUIT
·152· Internet 应用协议实例剖析与服务器配置
此命令将终止 USER,如果没有数据正在传输,服务器关闭控制连接;如果有数据正在
传输,则等待传输完毕然后关闭控制连接。
2.传输参数命令
所有数据传输参数都有默认值。服务器程序必须知道这些默认值。
(1)数据端口(PORT)
用法:PORT h1,h2,h3,h4,p1,p2
PORT 命令用于指定数据连接的主机地址和 TCP 端口号。参数 h1、h2、h3、h4 指定了
一个 IP 地址,其中 h1 是 IP 地址的最高 8bit。参数 p1、p2 用来指定一个 TCP 端口号。这个
命令既可以被客户方使用,也可以被服务器方使用,取决于客户方是否使用了 PASV 命令。
(2)被动方式(PASV)
用法:PASV
客户方向服务器发送此命令要求服务器 DTP 在指定的数据端口侦听,进入被动接收的状
态。服务器在对此命令进行响应时应携带主机地址和端口号。
(3)表示类型(TYPE)
用法:TYPE type [para]
此命令用于指定数据表示类型,有些类型需要第 2 个参数,此时第 1 个参数由单个 NVT 字
符组成,第 2 个参数是十进制整数指定字节大小,参数间以空格分隔。NVT 字符及其意义如下:
A ASCII 类型 I Image 类型
E EBCDIC 类型 L <byte size> 本地字节大小
(4)数据结构(STRU)
用法:STRU structure
参数 structure 是一个 NVT 字符指定数据结构。其字符及意义如下:
F - 文件结构,这是默认值
R - 记录结构
P - 页结构
(5)传输模式(MODE)
用法:MODE mode
参数 mode 是一个 NVT 字符,指定传输模式,其字符及意义如下:
S - 流(默认值)
B- 块
C - 压缩
3.FTP 服务命令
FTP 服务命令用来定义用户请求的与文件传输或与文件系统操作有关的功能。此命令的
参数通常是路径名或文件名,推荐的默认值是最近指定的目录或文件名。除了下面特别指出
的若干命令外,命令的顺序通常没有限制,服务命令的响应通常在数据连接上传输。
(1)获得文件(RETR)
用法:RETR filename
此命令使服务器 DTP 拷贝指定路径内的文件到用户 DTP。服务器上文件的状态和内容
不受影响。
第7章 FTP 应用 ·153·
(2)保存文件(STOR)
用法:STOR filename
此命令使服务器 DTP 接收数据连接上传送过来的数据,并将数据保存在服务器的文件
中。如果文件已存在,原文件将被覆盖;如果文件不存在,则新建文件。
(3)惟一保存文件(STOU)
用法:STOU filename
此命令和 STOR 差不多,但要求在此目录下的文件名是惟一的,对此命令的响应必须包
括产生的文件名。
(4)附加文件(APPE)
用法:APPE filename
它和 STOR 的功能差不多,但是如果文件在指定路径内已存在,则把数据附加到原文件
尾部,如果不存在则新建文件。
(5)为分配存储空间(ALLO)
用法:ALLO size[ R size]
此命令用于在一些主机上为新传送的文件分配足够的存储空间,参数是十进制的逻辑字
节数。如果是记录或页结构,页或记录的最大大小也需要在第 2 个参数内以十进制指定。第
2 个参数是可选的,如果有它,它和第一个参数以 NVT 字符之间用空格分隔。此命令在 STOR
或 APPE 命令之前,对于不需要分配存储空间的计算机,它的作用等于 NOOP。
(6)重新开始(REST)
用法:REST restartpoint
参数 restartpoint 代表服务器要重新开始的那一点,此命令并不传送文件,而是令服务器
略过前面的数据直至指定点的数据,此命令后应该跟其他要求文件传输的 FTP 命令。
(7)重命名文件(RNFR)
用法:RNFR filename
这个命令指定要被改名的文件名,命令后面要跟有 RNTO 命令指定新的文件名。
(8)将文件重命名为(RNTO)
用法:RNTO filename
此命令和 RNFR 命令共同完成对文件的重命名。
(9)放弃(ABOR)
用法:ABOR
此命令通知服务器中止以前的 FTP 命令和与之相关的数据传送。如果先前的操作已经完
成,则没有动作,返回 226;如果没有完成,返回 426,然后再返回 226。执行此命令时,控
制连接不关闭,数据连接关闭。
(10)删除文件(DELE)
用法:DELE filename
此命令删除指定路径下的文件。
(11)删除目录(RMD)
用法:RMD dirname
此命令删除制定的目录。
·154· Internet 应用协议实例剖析与服务器配置
(12)创建目录(MKD)
用法:MKD dirname
此命令在指定路径下创建新目录。
(13)显示工作目录(PWD)
用法:PWD
服务器对此命令的响应是返回当前工作目录名。
(14)列表(LIST)
用法:LIST [pathname]
此命令要求服务器传送文件列表到用户 DTP,如果 pathname 指定一个目录或许多文件,返回
指定路径下的文件列表;如果路径名指定一个文件,将返回文件的当前信息;参数为空表示用户
当前的工作目录或默认目录。数据传输在 ASCII 或 EBCDIC 下进行,用户必须确认这一点。
(15)名字列表(NLST)
用法:NIST [pathname]
此命令可使服务器传送目录列表到用户,pathname 用来指定目录;参数为空则指当前目
录。服务器将返回文件名数据流(不包含名字以外的其他信息),以 ASCII 或 EBCDIC 形式
传送,并以<CRLF>或<NL>分隔。这里返回的信息可以供程序进行进一步处理使用。
(16)站点参数(SITE)
用法:SITE subopt
此命令可使服务器提供服务器系统信息,信息因系统不同而不同,subopt 在 HELP SITE
命令应答中给出。
(17)系统(SYST)
用法:SYST
此命令用于确定服务器上运行的操作系统。
(18)状态(STAT)
用法:STAT [pathname]
此命令用来返回控制连接状态。它可以在文件传送过程中发送,也可以在文件传送之间发送,
这时命令有参数,参数是路径名。如果指定部分路径,服务器以文件名或与参数相关的属性返回;
如没有参数,服务器返回服务器 FTP 进程的状态信息,包括传输参数的当前值和连接状态。
(19)帮助(HELP)
用法:HELP [command]
此命令用来查看帮助信息。若不带参数,则返回命令列表,若参数中指定了一个存在的
命令名,则返回该命令的用法和功能。
(20)等待(NOOP)
用法:NOOP
此命令不产生任何实际动作,仅使服务器返回 OK。
FTP 在控制连接上使用 TELNET 协议通信,特定的命令(如 ABOR,STAT)可以在数
据传输过程中在控制连接上传输。有些服务器不能同时监视数据和控制链路,此时就要采取
以下几个步骤来解决这个问题:
(1)用户系统将 TELNET 的“Interrupt Process(IP)
”信息插入 TELNET 流;
第7章 FTP 应用 ·155·
7.1.6 FTP 应答
FTP 命令的应答既是为了对数据传输请求和传输过程进行同步,也是为了让用户了解服
务器的状态。每个 FTP 命令必须至少有一个响应,如果是多个,则这些响应要易于区别。有
些命令是有顺序性的,因此其中任何一个命令的失败会导致操作从头开始。
FTP 响应由 3 个数字开始,后面是一些文本,其中数字带有足够的信息以使用户 PI 不用
检查文本就知道发生了什么,而文本信息与服务器相关,所以对应同样的数字信息,用户可
能得到不同的文本信息。数字和文本以空格间隔,文本后以 NVT 行结束符结束。文本可能
多于一行,这时文本必须在一个框架内,第一行内要有信息表示文本多于一行(在数字代码
后加上“-” ),最后一行也要有所标记(以同样的数字开始)。后面是空格,再加上 NVT 的行
结束符就可以了。下面是一个例子:
123 First line
Second line
234 A line beginning with numbers
123 The last line
其中的 3 位数字每位都有一定的意义,第 1 位数字用来确定响应是肯定的、否定的还是
不完全的。通过检查第 1 位,用户进程通常就能够知道大致要采取什么行动了。如果用户程
序希望了解出了什么问题,可以检查第 2 位、第 3 位用以表示其他信息。
第一位有 1、2、3、4、5 五个取值,含义如下:
① 1——确定预备应答,表明请求的操作正在被初始化;在进入下一个命令前等待另外
的应答。
② 2——确定完成应答,表明要求的操作已经完成,可以执行新命令。
③ 3——确定中间应答,表明命令已接受,但要求继续发送另外的命令。
④ 4——暂时否定完成应答,表明未接受命令,要求的操作未执行,但错误是临时的,
用户可以重试。用户应该返回命令序列的开始。
⑤ 5——永久否定完成应答,它与暂时否定完成应答的区别就在于错误是永久性的。
第 2 位有 0、1、2、3、4、5 六个取值,所代表的意义如下:
① 0——语法错误。
② 1——应答中包含所请求的信息。
③ 2——应答是关于控制和数据连接的。
④ 3——应答是关于认证和帐户登录过程。
⑤ 4——未使用。
⑥ 5——应答是关于文件系统的。
第 3 个数字是在第 2 个数字的基础上对应答内容的进一步细化。一般来说,实现时应该
尽量使用现有的代码,而不要随便添加新的意义不明确的代码。
下面是根据数字顺序列出的各个应答码及其意义。
·156· Internet 应用协议实例剖析与服务器配置
110:重传标记应答。在这种情况下文本是确定的,它必须是:MARK yyyy=mmmm,其
中 yyyy 是用户进程数据流标记,mmmm 是服务器标记。
120:服务在 nnn 分钟内准备好。
125:数据连接已打开,准备传送。
150:文件状态良好,打开数据连接。
200:命令成功。
202:命令未实现。
211:系统状态或系统帮助响应。
212:目录状态。
213:文件状态。
214:帮助信息,信息仅对用户有用。
215:名字系统类型。
220:对新用户服务准备好。
221:服务关闭控制连接,可以退出登录。
225:数据连接打开,无传输正在进行。
226:关闭数据连接,请求的文件操作成功。
227:进入被动模式。
230:用户登录。
250:请求的文件操作完成。
257:创建“PATHNAME”。
331:用户名正确,需要口令。
332:登录时需要帐户信息。
350:请求的文件操作需要进一步命令。
421:不能提供服务,关闭控制连接。
425:不能打开数据连接。
426:关闭连接,中止传输。
450:请求的文件操作未执行。
451:中止请求的操作,有本地错误。
452:未执行请求的操作,系统存储空间不足。
500:格式错误,命令不可识别。
501:参数语法错误。
502:命令未实现。
503:命令顺序错误。
504:此参数下的命令功能未实现。
530:未登录。
532:存储文件需要帐户信息。
550:未执行请求的操作。
551:请求操作中止,页类型未知。
522:请求的文件操作中止,存储分配溢出。
第7章 FTP 应用 ·157·
553:未执行请求的操作,文件名不合法。
Password:(此处输入口令,不回显)
230 User test logged in. Access restrictions apply.
ftp>
这样 test 用户就登录到 ftp.test.sdie.edu.cn 了。
登录 FTP 服务器以后就可以进行上传、下载等操作。下面简单介绍几个常用 FTP 用户接
口命令(要与 FTP 命令区分开) 。
(1)?
列出可以使用的命令。例如:
ftp> ?
Commands may be abbreviated. Commands are:
ftp> cd rfc
250 CWD command successful.
(5)prompt
在上传或下载文件时,开启或关闭交互模式(对每个文件的传输都要求确认的模式)。
用户登录后默认为 ON 状态。
(6)get 或 mget
从 FTP 服务器下载文件到本地主机,其中 get 用于一次下载一个文件,而 mget 可以使用
通配符一次下载多个文件,例如:
ftp> get rfc1033.txt
200 PORT command successful.
150 Opening ASCII mode data connection for rfc1033.txt (36034 bytes).
226 Transfer complete.
ftp: 37263 bytes received in 0.11Seconds 338.75Kbytes/sec.
ftp> prompt
Interactive mode Off .
ftp> mget *.txt
200 Type set to A.
200 PORT command successful.
150 Opening ASCII mode data connection for http.txt (34817 bytes).
226 Transfer complete.
ftp: 35850 bytes received in 0.16Seconds 224.06Kbytes/sec.
200 PORT command successful.
150 Opening ASCII mode data connection for perl.txt (814 bytes).
226 Transfer complete.
ftp: 836 bytes received in 0.06Seconds 13.93Kbytes/sec.
200 PORT command successful.
150 Opening ASCII mode data connection for php.txt (459 bytes).
226 Transfer complete.
ftp: 480 bytes received in 0.00Seconds 480000.00Kbytes/sec.
200 PORT command successful.
150 Opening ASCII mode data connection for rfc1033.txt (36034 bytes).
226 Transfer complete.
ftp: 37263 bytes received in 0.05Seconds 745.26Kbytes/sec.
(7)put 或 mput
与 get 和 mget 相反,put 和 mput 是从将本地的文件上传到 FTP 服务器。其中 put 一次
只能上传一个文件,而 mput 可以上传多个文件。
(8)ascii 或 binary
设置传输模式。一般传输文本文件以 ASCII 模式传输,图像文件或程序文件以 binary 模
式传输,默认是以 ASCII 方式传输。如果要转换为 binary 方式,则直接输入“binary”即可;
·160· Internet 应用协议实例剖析与服务器配置
7.2.2 CuteFtp
单击工具栏中的“站点管理器”按钮(第 1 个按钮)
,系统将打开站点管理器窗口,如图
7-3 所示。
图 7-3 站点管理器
意的是,在快速工具栏中连接的站点并不会自动添加到站点管理器中。
2.上传与下载文件
(1)上传文件
要上传文件,可以执行下列方法之一:
方法 1,在左窗口中单击文件,按住鼠标按钮,拖动文件到右窗口。
方法 2,在左窗口中用鼠标右键单击文件,从快捷菜单中选择“上传” 。
方法 3,在左窗口中双击文件。
方法 4,在左窗口中用鼠标左键单击文件,然后从“传输”菜单中选择“上传”。
方法 5,在左窗口中用鼠标左键单击文件,然后同时按下“Control”和“Page Up”键。
(2)下载文件
要下载文件,可使用下列方法之一:
方法 1,在右窗口中单击文件,按住鼠标按钮,拖动文件到左窗口。
方法 2,在右窗口中用鼠标右键单击文件,从快捷菜单中选择“下载” 。
方法 3,在右窗口中双击文件。
方法 4,在右窗口中用鼠标左键单击文件,然后从“传输”菜单中选择“下载”。
方法 5,在右窗口中用鼠标左键单击文件,然后同时按下“Control”和“PageDown”键。
第7章 FTP 应用 ·163·
传输中断时,用户可以重新连接并在传输中断处继续传输,此时只需重新进行传输文件
的操作即可。当 CuteFTP 发现此文件已部分下载或上传时,它会询问是要“续传、覆盖还是
跳过”。如果要替换现有文件,应选择“覆盖” ;如要完成被中断的传输任务,应选择“续传”;
如要取消操作,则选择“跳过”。
Wu-Ftpd 有 多 种 分 发 方 式 , 二 进 制 的 发 布 版 本 可 以 在 Wu-Ftpd 的 官 方 网 站
ftp://ftp.wu-ftpd.org/pub/wuftpd 处下载。rpm 格式的发布版本可以 RedHat 的网站上免费下载
或在 Linux 安装光盘中找到。找到该 rpm 包后直接运行如下命令即可进行安装:
#rpm –i wu-ftpd-2.6.2-8.i386.rpm
Connected to 10.0.1.5.
220 test FTP server (Version wu-2.6.2-8) ready.
Name (10.0.1.5:test): test
331 Password required for test.
Password:
530 Login incorrect.
Login failed.
ftp> user test
331 Password required for test.
Password:
530 Login incorrect.
Login failed.
ftp> user test
331 Password required for test.
Password:
530 Login incorrect.
Login failed.
ftp> user test
421 Service not available, remote server has closed connection
Login failed.
ftp>
从以上可以看出,第 4 次试图登录时,连接已经断开。
⑥ readme README* login
当用户登录时提示用户阅读以 README 开头的文件。
⑦ readme README* cwd=*
当用户切换到某目录时提示用户阅读该目录下以 README 开头的文件
⑧ message /welcome.msg login
当用户登录时显示 welcome.msg 文件的内容
⑨ message .message cwd=*
当用户切换到任意目录时显示该目录的.message 文件
在 message 的信息文件里可以使用以下参量:
%T——FTP 服务器的主机时间
%F——目前目录所在分区所剩的空间大小
%C——目前所在的工作目录
%E——FTP 服务器管理员的 E-mail 地址
%R——远程(客户端)的主机名称
%L——FTP 服务器的主机名称
%U——建立 FTP 连接的用户名
%M——允许建立连接的最大用户数目
第7章 FTP 应用 ·165·
%N——当前连接的用户数目
以下是一个 welcome.msg 文件的范例:
欢迎来自%R 的朋友! !!
您是本站的第%N 位用户
目前的本地时间是:%T
您目前所在的目录为:%C
如果您有任何问题,或对本站的意见、建议请联系系统管理员%E
登录 FTP 服务器的过程及显示信息如下:
[test@test test]$ ftp 10.0.1.5
Connected to 10.0.1.5.
220 test FTP server (Version wu-2.6.2-8) ready.
Name (10.0.1.5:test): test
331 Password required for test.
Password:
230-欢迎来自 clab.sdie.edu.cn 的朋友! !!
230-您是本站的第 3 位用户
230-目前的本地时间是:Thu Aug 14 12:46:36 2003
230-您目前所在的目录为:/
230-如果您有任何问题,或对本站的意见、建议请联系系统管理员 root@localhost
230-
230 User test logged in. Access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
⑩ compress yes all
tar yes all
在/etc/ftpconversions 定义了很多压缩程序,这里定义哪些人以及是否可以执行这些压缩
程序。
delete no anonymous
设定 anonymous 用户没有删除文件的权限。
overwrite no anonymous
设定 anonymous 用户没有覆盖文件的权限。
rename no anonymous
设定 anonymous 用户没有重命名文件的权限。
log transfers anonymous,guest,real inbound,outbound
记录 anonymous,guest,real 用户的上传、下载文件的动作。
(2)/etc/ftpusers
该文件用于设置哪些用户不能登录 FTP 服务器。缺省值是一些系统默认的帐号。如果想
限制某些用户通过 FTP 登录服务器,只要在这个文件里加入这些用户名即可。
·166· Internet 应用协议实例剖析与服务器配置
(3)/etc/ftphosts
该文件用来限制某些主机登录本 FTP 服务器。
① allow 可允许某些用户由特定地址登录(如果省略用户名称则针对所有用户) ,格式如
下:
allow <帐号名称> <主机地址范围>
例如,下面配置行允许 test 用户从地址段 202.194.240.0/20 登录:
allow test 202.194.240.0/20
② deny 可拒绝某些帐号的用户由特定地址登录(如果省略帐号名称则针对所有用户),
格式如下:
deny <账号名称> <主机地址范围>
例如,下面配置行拒绝所有用户从 202.194.253.245 登录:
deny 202.194.253.245
(4)/etc/ftpconversions
该文件用来设定当用户下载文件时所使用的压缩文件的压缩程序。FTP 服务器在传输文
件的同时,可以将正在传输的文件进行一系列处理(例如压缩、解压缩等),用户一般不必去
更改此文件的内容。下面是一个具体的 ftpconversions 文件:
:.Z:::/usr/bin/compress -d -c %s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS
#对以.Z 结尾的文件使用/usr/bin/compress -d –c 解压缩。
:::.Z:/usr/bin/compress -c %s:T_REG:O_COMPRESS:COMPRESS
#用/usr/bin/compress -c 将文件压缩为.Z 格式。
:.gz:::/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:GUNZIP
#对以.gz 结尾的文件使用/bin/gzip -cd 方式解压缩。
:::.gz:/bin/gzip -9 -c %s:T_REG:O_COMPRESS:GZIP
#用/bin/gzip -9 –c 将文件压缩为.gz 格式。
:::.tar:/bin/tar -c -f - %s:T_REG|T_DIR:O_TAR:TAR
#用 tar:/bin/tar -c –f 命令将文件用打包。
:::.tar.Z:/bin/tar -c -Z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS
#用/bin/tar -c -Z –f 命令将文件压缩为.tar.Z 格式。
:::.tar.gz:/bin/tar -c -z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP
#用/bin/tar -c -z –f 命令将文件压缩为.tar.gz 格式。
编 辑 文 件 /etc/xinetd.d/wu-ftpd , 把 该 文 件 的 disable 项 设 置 为 “ no ”, 然 后 运 行
/etc/rc.d/init.d/xinet restart 或重新启动操作系统即可启动 FTP 服务器。
若把该文件的 disable 项设置为“yes” ,然后运行 /etc/rc.d/init.d/xinet restart 或重新启动
操作系统则停止 FTP 服务器的运行。
(1)ftpcount
该程序用来统计当前连接的用户数目,并给出上限。例如:
[root@test test]# ftpcount
Service class all - 2 users (no maximum)
说明只有一类用户 all,当前人数是 2 人,没有上限。
(2)ftpwho
该程序用来显示每位用户的联机状态,它提供的信息比 ftpcount 更为详细。例如:
[root@test test]# ftpwho
Service class all:
12833 ? S 0:00 ftpd: clab.sdie.edu.cn: test: IDLE
12835 ? S 0:00 ftpd: 10.0.2.40: test: IDLE
- 2 users (no maximum)
以上信息显示了有哪些用户在何处登录。
(3)ftpshut
该程序用来关闭 FTP 服务,命令的格式如下:
ftpshut [-d <分钟>] [-l <分钟>] [<关闭时间>] [“关闭时的警告信息”]
其中:
-d <分钟>设置切断所有 FTP 连接的时间(默认在 FTP 服务器关闭前 5 分钟之内关闭所
有连接) ,-l <分钟>设置停止接受 FTP 登录的时间(默认在 FTP 服务器关闭前 10 分钟之内禁
止所有新的连接) ,<关闭时间>指定关闭 FTP 服务器的时间。
例如:
[root@test test]#ftpshut -d 5 -l 10 1800
以上命令表示:系统将在 18:00 关闭 FTP 服务器。在关闭 FTP 服务器之前 10 分钟不准
新的用户登录。在关闭 FTP 服务器之前 5 分钟把已经登录的用户断开连接。
FTP 服务器一旦关闭,所有的用户就不能再登录了。执行 ftpshut 默认会在/etc 目录下建
立一个名为 shutmsg 的文件。只要该文件存在,FTP 服务器就不能登录,删除该文件后才可
以恢复 FTP 服务器的功能。
7.4 实 例 剖 析
7.4.1 环境介绍
本例中将使用基于以太网的同一个 IP 网络内的两台计算机,将这两台计算机分别命名为
A 和 B,A 和 B 的基本配置信息如下:
计算机 IP 地址 掩码
A 202.194.254.213 255.255.255.0
B 202.194.254.211 255.255.255.0
B 计算机运行 Linux 系统,并运行 FTP 服务器 wu-ftpd 2.4.2,用户 ftpuser 对应的默认目
·168· Internet 应用协议实例剖析与服务器配置
7.4.2 通信过程中的帧
7.4.3 帧剖析
8.2 SMTP 协议
用户 SMTP
客户端 服务器端 文件
命令/响应
SMTP SMTP 系统
文件
邮件
系统
8.2.3 SMTP 命令
(10)EXPN string
此命令用于验证 string 给定的邮箱列表是否存在,也常被禁止使用。
(11)HELP
此命令用于查询服务器支持的命令
8.2.4 SMTP 应答
对 SMTP 协议的每一个命令,服务器方都会返回一个应答码,应答码的每一个数字都有
特定含义,其基本含义与 FTP 应答码的定义类似,常用 SMTP 应答码如下:
应答码 说明
500 命令无法识别
501 参数格式错误
502 命令没有实现
503 错误的命令顺序
504 命令参数没有实现
211 系统状态或系统帮助响应
214 帮助信息
220 <domain>服务就绪
221 <domain>服务正在关闭传输通道
421 <domain>服务不可用,关闭传输信道
250 要求的邮件操作完成
251 用户非本地,将转发向<forward-path>
450 要求的邮件操作未完成,邮箱不可用
550 要求的操作未完成,邮箱不可用
451 放弃要求的操作;处理过程中出错
551 用户非本地,请尝试<forward-path>
452 系统存储不足,要求的操作未执行
552 过量的存储分配,要求的操作未执行
553 邮箱名不可用,要求的操作未执行
354 开始邮件输入,以只包含“.”的行结束
554 操作失败
8.3 POP 协议
8.3.2 POP3 命令
请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数。
(5)UIDL [messagenum]
若不带参数,返回所有邮件的惟一标识符,若用参数 messagenum 指定了一个邮件编号,
则只返回指定邮件的信息。
(6)LIST [messagenum ]
此命令用来使服务器返回邮件数量和每个邮件的大小。
(7)RETR messagenum
此命令用来返回由参数 messagenum 标识的邮件的全部内容。
(8)DELE messagenum
此命令使服务器将由参数标识的邮件标记为删除,从此对此邮件的任何操作将返回错
误。此命令不真正删除邮件,只有执行 UPDATE 命令后才真正删除。
(9)RSET
此命令使服务器重置所有标记为删除的邮件,撤消 DELE 命令。
(10)TOP messagenum n
此命令使服务器返回由参数 messagenum 标识的邮件前 n 行内容,n 必须是正整数。
(11)NOOP
此命令要求服务器返回一个肯定的响应。
(12)QUIT
此命令用于与服务器断开连接。
8.3.3 POP3 应答
2 3361
3 32308
4 262
5 513
.
retr 1
+OK
Received: Sun, 10 Aug 2003 13:18:34 +0800
Message-ID: <260492714.00600@mymail.com>
Received: from unknown (HELO myhostname.com)
by smtp.mymail.com with SMTP; Sun, 10 Aug 2003 13:18:34 +0800
helo
i am zhang
.
图 8-2 建立新的用户账号
第8章 MAIL 应用 ·183·
图 8-3 邮件身份标记
(3)在邮件身份标识窗口中,输入发送者姓名,该姓名信息会出现在发出邮件的邮件头
中,用于标识发送者的身份。邮件地址是 ISP 提供的电子邮件地址。输入后单击“下一步”
进入指定邮件服务器窗口,如图 8-4 所示。
图 8-4 指定邮件服务器
应选中“SMTP 服务器需要身份验证”选项;如果在接收完邮件后,不希望邮件从服务器上
删除,则应选定“保留服务器备份”选项。设置以上选项后,单击“完成”按钮,即完成设
置,进入 Foxmail 的主窗口,如图 8-5 所示。
2.接收电子邮件
在图 8-5 所示的 Foxmail 主窗口中,单击工具栏中的“收取”工具按钮,即出现如图 8-6
所示的收取邮件窗口,开始从服务器上接收邮件。
图 8-6 收取邮件
邮件接收结束后,在“收件箱”旁边会显示蓝色的数字,表示收件箱中有多少封邮件
没有被查看。在邮件列表中,显示了邮件的优先等级、是否有附件、发件人、阅读状态、
邮件主题、日期、邮件大小等信息,其中加黑显示的邮件是未阅读的邮件。选中一个后,
在邮件列表的底部会显示该邮件的主题和内容。如果邮件内容是 HTML 格式,在主题的
右侧会显示一个放大镜样式的按钮,单击该按钮可以以 HTML 方式查阅信件,如图 8-7
所示。
直接双击邮件列表中邮件也可以打开邮件并显示该邮件的详细内容,如图 8-8 所示。
利用 Foxmail 窗口中的工具栏还可以进行如下操作:单击“回复”按钮可以直接回复发
件人,按“回复全部”可以回复所有发件人,单击“转发”可以将该邮件转发给另外的接收
者,使用“前一封” 、
“后一封”按钮可以在邮件间切换,使用“打印”按钮可以将该邮件打
第8章 MAIL 应用 ·185·
印,单击“删除”将该邮件放入“废件箱”中。
图 8-7 查看邮件内容
图 8-8 查看邮件内容
3.发送电子邮件
发送电子邮件时,可以选择“撰写” 、“回复”和“转发”3 种方式。单击相应按钮后,
将出现“写邮件”窗口,如图 8-9 所示。此时可在收件人栏中输入接收者的电子邮件地址(使
用分号分隔不同的收件人),在抄送栏中输入邮件要抄送者的地址(同样可以使用分号分隔不
同的收件人),在主题中输入该邮件的主题,在底部输入邮件的具体内容。
如果需要添加附件,需单击工具栏中的“附件”按钮,在弹出的窗口中选择需要附加的
文件,重复该过程可附加更多的文件。添加附件后,发送邮件窗口如图 8-10 所示,其中最后
一栏是已经添加的附件。
·186· Internet 应用协议实例剖析与服务器配置
图 8-9 写邮件
图 8-10 邮件附件
图 8-11 发送邮件
第8章 MAIL 应用 ·187·
如果不需要现在发送,可以单击“保存”,将邮件保存到发件箱,等候发送。对于还没
有编辑完的邮件,可以单击“草稿”按钮,将邮件保存为草稿,下一次编辑完成后再发送。
sendmail 主要有以下几个配置文件。
(1)/etc/mail/sendmail.cf 文件
Sendmail 的配置文件 sendmail.cf 的语法非常难读。可通过使用 m4 宏处理命令,由宏
文件 sendmail.mc 来生成复杂的配置文件 sendmail.cf,使配置变得简单。
/etc/mail/sendmail.mc 文件是原始宏文件。生成配置文件 sendmail.cf 的命令为:
m4 sendmail.mc > sendmail.cf
默认的配置文件仅仅允许在本机发送邮件,如果需要更强的功能,需要修改宏文件
sendmail.mc。
缺省的 sendmail.mc 文件内容如下:
divert(-1)
dnl This is the sendmail macro config file. If you make changes to this
dnl file,you need the sendmail-cf rpm installed and then have to
dnl generate a new /etc/sendmail.cf by running the following command:
dnl
dnl m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
dnl
include(`/usr/share/sendmail-cf/m4/cf.m4')
VERSIONID(`linux setup for Red Hat Linux')dnl
OSTYPE(`linux')
dnl Uncomment and edit the following line if your mail needs to be sent
dnl out through an external mail server:
·188· Internet 应用协议实例剖析与服务器配置
dnl define(`SMART_HOST',`smtp.your.provider')
define(`confDEF_USER_ID',``8:12'')dnl
undefine(`UUCP_RELAY')dnl
undefine(`BITNET_RELAY')dnl
define(`confAUTO_REBUILD')dnl
define(`confTO_CONNECT', `1m')dnl
define(`confTRY_NULL_MX_LIST',true)dnl
define(`confDONT_PROBE_INTERFACES',true)dnl
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl
define(`ALIAS_FILE', `/etc/aliases')dnl
dnl define(`STATUS_FILE', `/etc/mail/statistics')dnl
define(`UUCP_MAILER_MAX', `2000000')dnl
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
define(`confPRIVACY_FLAGS', authwarnings,novrfy,noexpn,restrictqrun')dnl
define(`confAUTH_OPTIONS', `A')dnl
dnl TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define(`confTO_QUEUEWARN', `4h')dnl
dnl define(`confTO_QUEUERETURN', `5d')dnl
dnl define(`confQUEUE_LA', `12')dnl
dnl define(`confREFUSE_LA', `18')dnl
dnl FEATURE(delay_checks)dnl
FEATURE(`no_default_msa',`dnl')dnl
FEATURE(`smrsh',`/usr/sbin/smrsh')dnl
FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable.db')dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(use_ct_file)dnl
dnl The '-t' option will retry delivery if e.g. the user runs over
dnl his quota.
FEATURE(local_procmail,`',`procmail -t -Y -a $h -d $u')dnl
FEATURE(`access_db',`hash -o /etc/mail/access.db')dnl
FEATURE(`blacklist_recipients')dnl
EXPOSED_USER(`root')dnl
dnl This changes sendmail to only listen on the loopback device
dnl 127.0.0.1 and not on any other network devices. Comment this out if
dnl you want to accept email over the network.
第8章 MAIL 应用 ·189·
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
dnl NOTE: binding both IPv4 and IPv6 daemon to the same port requires
dnl a kernel patch
dnl DAEMON_OPTIONS(`port=smtp,Addr=::1, Name=MTA-v6, Family=inet6')
dnl We strongly recommend to comment this one out if you want to protect
dnl yourself from spam. However, the laptop and users on computers that
dnl do not have 24x7 DNS do need this.
FEATURE(`accept_unresolvable_domains')dnl
dnl FEATURE(`relay_based_on_MX')dnl
MAILER(smtp)dnl
MAILER(procmail)dnl
Cwlocalhost.localdomain
配置行“DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')”使得 sendmail
仅在 127.0.0.1 这个自回环接口上侦听 SMPT 连接,若希望与外界通信应将此行改为注释或改
为“DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')”。对本配置文件的其他行这
里暂不作解释,在解释其他配置文件时,会用到并解释本文件的其他相关行。
(2)/etc/aliases 文件
sendmail 会检查收件人的名字是否有别名(alias)并可为每个帐号设置别名。例如,大
部分 Internet 站点都设有一管理员地址 Webmaster 以报告遇到的问题,然而大多数站点并没
有这一名字的实际帐号,而是利用别名把 Webmaster 的邮件转移到负责邮件管理的一个或几
个人。例如,在站点 sdie.edu.cn 上,用户 test 负责网站管理,可在别名文件/etc/aliases 中设
置下面一项内容:
Webmaster:test
这一行配置信息告诉 sendmail,寄向 Webmaster 的邮件将被改寄给用户名为 test 的用户。
需要指出的是,别名的右边可以指定一个非本地地址,但左边却不能。别名配置
test:test@sdu.edu.cn 是合法的,而 test@sdie.edu.cn:test@sdu.edu.cn 是不合法的。
别名可用于创建邮递列表(mailing list)。在上面的例子中,别名 Webmaster 实际上
就是一个本地邮件管理员的邮递列表。对于大型的或是经常改动的名单,可以利用“:
include”的别名形式指示 sendmail 从文件中来读取成员的名单。例如,如果别名文件包
含以下这行:
friends::include:/home/test/friends.aliases
并且文件/home/test/friends.aliases 包含 clab、zhangsan、lisi、wangwu,则其效果与下面
的别名配置相同:
friends:clab,zhangsan,lisi,wangwu
这一配置对于经常变动的邮递列表或那些由用户而非邮件管理员管理的邮递列表非常
方便。如果经常要求改变邮件别名,用户一般希望把它置于自己的控制之下。
用户还可以创建一个使 sendmail 向文件发送邮件的别名。下面是别名 root 的一个例子:
root:/dev/null
这个设置行令 sendmail 把 root 的邮件追加到被指定的文件/dev/null 中。由于文件/dev/null
·190· Internet 应用协议实例剖析与服务器配置
是 Linux 的一个“黑洞”文件,因此这一别名设置的作用其实是把邮件清除掉。
需要注意的是,要想使用/etc/aliases 必须在/etc/mail/sendmail.mc 中存在“define(`ALIAS_FILE',
,而且修改完/etc/aliases 后必须执行 newaliases 命令或重新启动 sendmail 才能使别
`/etc/aliases')”
名生效。
(3)/etc/mail/local-host-names 文件
此文件中存放应该被视为本地用户的域名信息,例如若文件内容为:
mail1.edu.cn
mail2.edu.cn
mail.com
则所有的发向 xxx@mail1.edu.cn、xxx@mail2.edu.cn、xxx@mail.com 的邮件均应该被视
为发给本机用户的邮件,其中“xxx”为用户名。
(4)/etc/mail/relay-domains 文件
默认情况下,sendmail 不为任何非本机用户转信,若希望为某些特定名字或 IP 地址的
主机转信,则可将这些名字或地址写入/etc/mail/relay-domains 文件中。例如下面是一个文
件实例:
10.0.2.3
10.0.1
10.1.3
10.2
此文件将允许地址为 10.0.2.3、10.0.1.*、10.1.3.*、10.2.*.*的主机利用本机转信。
8.6 实 例 剖 析
8.6.1 环境介绍
件发送至 B。
A2 计 算 机 运 行 Windows 系 统 , 并 运 行 Foxmail 。 在 Foxmail 中 将 邮 件 地 址
linteng@webmail.sdie.edu.cn 的 POP3 服务器设置为 202.194.240.72,用户名和口令分别
设置为“linteng”和“aaaaaa”,然后进行收邮件操作,即利用 POP3 协议从 B 计算机收
取邮件。
B 计算机运行 Linux 系统,并运行 sendmail 8.9.3。
8.6.2 通信过程的帧(SMTP)
0000040: 5851
(6)A1 发向 B 的 EHLO 命令帧(202.194.254.213.1131→202.194.240.72.25)
0000000: 00d0 b739 3700 0000 b491 e64d 0800 4500
0000010: 004a b8c2 4000 4006 fd47 cac2 fed5 cac2
0000020: f048 046b 0019 55a0 20c1 964d 4ec5 8018
0000030: 7d78 b804 0000 0101 080a 0822 9c80 0820
0000040: 5851 4548 4c4f 2061 6263 2e73 6469 652e
0000050: 6564 752e 636e 0d0a
(7)B 发向 A1 的 TCP 确认帧(202.194.240.72.25→202.194.254.213.1131)
0000000: 0000 b491 e64d 00d0 b739 3700 0800 4500
0000010: 0034 16f9 4000 3e06 a127 cac2 f048 cac2
0000020: fed5 0019 046b 964d 4ec5 55a0 20d7 8010
0000030: 16a0 7657 0000 0101 080a 0820 5851 0822
0000040: 9c80
(8)B→A1 对 EHLO 的应答帧(202.194.240.72.25→202.194.254.213.1131)
0000000: 0000 b491 e64d 00d0 b739 3700 0800 4500
0000010: 007e 16fa 4000 3e06 a0dc cac2 f048 cac2
0000020: fed5 0019 046b 964d 4ec5 55a0 20d7 8018
0000030: 16a0 ed14 0000 0101 080a 0820 5851 0822
0000040: 9c80 3235 302d 4155 5448 3d4c 4f47 494e
0000050: 2050 4c41 494e 0d0a 3235 302d 4155 5448
0000060: 204c 4f47 494e 2050 4c41 494e 0d0a 3235
0000070: 302d 5049 5045 4c49 4e49 4e47 0d0a 3235
0000080: 3020 3842 4954 4d49 4d45 0d0a
(9)A1 发向 B 的 MAIL 命令帧(202.194.254.213.1131→202.194.240.72.25)
0000000: 00d0 b739 3700 0000 b491 e64d 0800 4500
0000010: 0056 b8c3 4000 4006 fd3a cac2 fed5 cac2
0000020: f048 046b 0019 55a0 20d7 964d 4f0f 8018
0000030: 7d78 7a8a 0000 0101 080a 0822 9c80 0820
0000040: 5851 4d41 494c 2046 726f 6d3a 3c72 6f6f
0000050: 7440 6162 632e 7364 6965 2e65 6475 2e63
0000060: 6e3e 0d0a
(10)B→A1 对 MAIL 命令的应答帧(202.194.240.72.25→202.194.254.213.1131)
0000000: 0000 b491 e64d 00d0 b739 3700 0800 4500
0000010: 0047 16fb 4000 3e06 a112 cac2 f048 cac2
0000020: fed5 0019 046b 964d 4f0f 55a0 20f9 8018
0000030: 16a0 073c 0000 0101 080a 0820 5852 0822
0000040: 9c80 3235 3020 4f4b 2028 6579 6f75 206d
0000050: 7461 290d 0a
第8章 MAIL 应用 ·193·
8.6.3 帧剖析(SMTP)
250 8BITMIME
第 9 帧的第 42~63 Byte 为 A1 发向 B 的 MAIL 命令,其内容为:
“MAIL From:root@abc.sdie.edu.cn”
第 10 帧的第 42~54 Byte 为 B 发向 A1 的对 MAIL 命令的应答,其内容为:
“250 OK (eyou mta)”
第 12 帧的第 42~68 Byte 为 A1 发向 B 的 RCPT 命令,其内容为:
“RCPT To:linteng@webmail.sdie.edu.cn”
第 13 帧的第 42~54 Byte 为 B 发向 A1 的对 RCPT 命令的应答,其内容为:
“250 OK (eyou mta)”
第 15 帧的第 42~47 Byte 为 A1 发向 B 的 DATA 命令,其内容为:
“DATA”
第 16 帧的第 42~5a Byte 为 B 发向 A1 的对 DATA 命令的应答,其内容为:
“354 go ahead (eyou mta)”
第 18 帧的第 42~1b1 Byte 为 A1 发向 B 的邮件内容,其内容为:
Received: (from root@localhost)
by abc.sdie.edu.cn (8.9.3/8.9.3) id MAA01697
for linteng@webmail.sdie.edu.cn; Sat, 6 Sep 2003 12:12:59 GMT
Date: Sat, 6 Sep 2003 12:12:59 GMT
From: root <root@abc.sdie.edu.cn>
Message-Id: <200309061212.MAA01697@abc.sdie.edu.cn>
To: linteng@webmail.sdie.edu.cn
Subject: test for smtp
content begin
content....
content end
第 20 帧的第 42~44 Byte 为 A1 发向 B 的邮件结束行,其内容为:
“.”
第 22 帧的第 42~5f Byte 为 B 发向 A1 的邮件结束应答,其内容为:
“250 OK:has queued (eyou mta)”
第 24 帧的第 42~47 Byte 为 A1 发向 B 的 QUIT 命令,其内容为:
“QUIT”
第 25 帧的第 42~62 Byte 为 B 发向 A1 的 QUIT 命令应答,其内容为:
“221 close connection (eyou mta)”
第 26、27、28 和 29 四个帧完成结束 TCP 连接功能。
8.6.4 通信过程的帧(POP3)
8.6.5 帧剖析(POP3)
content begin
content....
content end
第 21 帧的第 36~3d Byte 为 A2 发向 B 的 DELE 命令,其内容为:
“DELE 1”
第 22 帧的第 36~3b Byte 为 B 发向 A2 的对 DELE 命令的应答,其内容为:
“+OK”
第 23 帧的第 36~3b Byte 为 A2 发向 B 的 QUIT 命令,其内容为:
·204· Internet 应用协议实例剖析与服务器配置
“QUIT”
第 24 帧的第 36~3b Byte 为 B 发向 A2 的对 QUIT 命令的应答,其内容为:
“+OK”
第 25、26、27 和 28 四个帧完成结束 TCP 连接功能。
第9章 PROXY 应用
9.1 PROXY 简介
代理服务器(Proxy Server)就是在网络上代理其他计算机访问某些网络服务的服务器,
本章讨论的代理是指应用层代理。
在 Internet 上,当客户端向服务器索取数据时,服务器会将所要求的数据直接传给客户
端,如果服务器连接在一个速度比较慢的网络上或同时访问服务器的用户太多,数据传输就
会需要很长的时间。在这种情况下,如果有很多用户都索取同一数据,那么每个人都要花很
长的时间传输同样的内容。
如果多个客户端共同使用一个代理,则客户端改由向代理服务器索取数据。如 果代
理服务器没有该数据,代理服务器就会代替客户端向远端的服务器索取此数据,再将数
据传给客户端,并存储在代理服务器上(因此代理服务器需要很大的磁盘空间)。以后
再有其他客户端索取此数据时,代理服务器就可以直接把该数据传给客户端,不必再去
远程索取了。
PROXY 系统由 PROXY 客户端和 PROXY 服务器组成。大部分应用层协议都可以很简单
地使用代理功能,例如对于 HTTP 协议,可以配置 WWW 浏览器使它把用户发出的所有请求
发向固定的 HTTP 代理服务器。当然,在使用配置了代理服务器的浏览器之前必须配置好相
应的 HTTP 代理服务器,使它能够根据配置信息向真正的 WWW 服务器发送请求并把返回结
果转给真正的客户。
图 9-2 局域网设置
rpm –i squid-2.4.STABLE7-4.i386.rpm
安装完成后,执行如下的命令即可启动 squid 代理服务器:
/etc/rc.d/init.d/squid start
squid 代理服务器的主要配置文件为/etc/squid/squid.conf,文件中包含有如下的内容:
# TAG: http_access
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
若允许任何客户使用 HTTP 代理,只需将最后一行改成下面的内容即可:
http_access allow all
下面是配置文件 squid.conf 中常用的一些配置项。
(1)设置连接端口
http_port 3128
squid 默认的 HTTP 代理端口是 3128,也可以指定其他端口号,比如 8080,但客户端也
要进行相应的修改。
(2)设置 squid 使用的内存
cache_mem 8MB
Squid 默认使用 8MB 内存作为缓存,根据硬件的配置情况,可以适当的增加此值。
(3)设置最大保存目标的大小
maximum_object_size 4096kB
当数据文件的大小超过设置值时,该数据将不被保存到磁盘上。
(4)设置存放缓存数据的目录
cache_dir ufs /var/spool/squid 100 16 256
默认情况下,缓存数据的类型是 ufs,存放缓存数据的目录为/var/spool/squid。此处的 100
是指使用的硬盘空间大小是 100MB,16 表示第 1 层子目录最多可以有 16 个,256 表示每个
第 1 层子目录下最多可以有 256 个第 2 层子目录。该配置项可以重复以设置多个目录空间来
缓存数据。
(5)设置记录文件及所在目录
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
其中,access.log 文件用于记录客户端的各项请求,cache.log 文件用于记录服务器的缓存
行为,store.log 文件用来记录数据的移入、移出以及保存时间等。
(6)设置数据保存时间
·208· Internet 应用协议实例剖析与服务器配置
reference_age 1 year
默认情况下,缓存中的数据最长可以保存一年,超过一年后数据将被删除。
(7)设置访问权限
此处的访问权限用来设置指定的主机和网络使用 squid 的权限,设置的方式为:先定义
访问控制列表 acl(access control list) ,然后设置权限。
① 定义访问控制列表
定义访问控制列表的格式为(斜体部分为用户输入信息) :acl aclname acltype string1 ...
或 acl aclname acltype "file" ...。其中,aclname 是访问控制列表的名称,在设置权限时,就以
这个名称来指定访问控制列表;acltype 是访问控制列表类型,例如如果要设置源 IP 地址,
就使用“src”,除了定义地址外,还可以定义时间、协议、端口号、浏览器和用户等。下面
是访问控制列表定义的实例:
acl all src 0.0.0.0/0.0.0.0
acl localhost src 127.0.0.1/255.255.255.255
acl myacl src 202.194.253.0/255.255.255.0
acl Safe_ports port 80
② 设置权限
下面是设置 HTTP 权限的几行实例:
http_access deny !Safe_ports
http_access allow localhost
http_access allow myacl
http_access deny all
上述配置行和访问控制列表结合起来将使服务器仅允许 IP 网络 202.194.253.0/255.255.255.0
内主机使用自己的 HTTP 代理服务。
(8)电子邮件通知
cache_mgr root
如果 Squid 服务出现错误,则会给指定的用户发送电子邮件。
需要注意的是,修改后的配置文件只有在保存并重新启动 squid 后才会生效。
9.4 实 例 剖 析
9.4.1 环境介绍
A B C
9.4.2 通信过程中的帧
9.4.3 帧剖析
<html>
Test for HTTP Proxy
</html>
第 12 帧的第 36~1b7 Byte 为应用层数据,其内容为 B 发向 A 的 HTTP 应答:
HTTP/1.0 200 OK
Server: Microsoft-IIS/5.0
Content-Location: http://202.194.254.200/Default.htm
Date: Thu, 20 Nov 2003 06:20:31 GMT
Content-Type: text/html
Accept-Ranges: bytes
Last-Modified: Thu, 20 Nov 2003 05:14:29 GMT
ETag: "90bcb02c25afc31:f13"
Content-Length: 38
Age: 48107
X-Cache: MISS from noname
Proxy-Connection: keep-alive
<html>
Test for HTTP Proxy
</html>
第 10 章 常用网络调试软件的使用
10.1.1 数据选择和过滤
10.1.2 数据输入和输出
tcpdump 提供了足够的参数来选择如何处理得到的数据,下面进行具体介绍。
(1)-n
·218· Internet 应用协议实例剖析与服务器配置
该参数用来说明不进行 IP 地址到主机名的转换。
如果不使用这一项,当系统可以查找到某一主机的名字时,tcpdump 会把 IP 地址转换为
名字显示,例如,在某主机上执行 tcpdump 命令后,显示如下结果:
17:45:46.527364 test.sdie.edu.cn.2882 > clab.sdie.edu.cn.telnet: P 1:4(3) ack 13 win 8748 (DF)
其中, “17:45:46.527364”是本机的系统时间, “test.sdie.edu.cn.2882 > clab.sdie.edu.cn.telnet”
表明该数据包是从主机 test.sdie.edu.cn 的 2882 端口发往主机 clab.sdie.edu.cn 的 telnet(23)端口,
“P”是 TCP 包中的标志信息 PUSH, “1:4(3)”是 TCP 相对序列号和字节数, “ack 13 ”表明对
对方的序列号 13 之前的数据进行确认, “win 8748”表明 IP 包窗口大小是 8748, “DF”代表 IP
包禁止分段标志。
而执行 tcpdump –n 命令后,显示结果改变为如下形式:
17:46:26.870453 10.0.0.5.2883 > 10.0.1.5.telnet: P 41:44(3) ack 112 win 8649 (DF)
(2)-nn
该参数用来说明不进行端口名称的转换。使用 –nn 参数后,上例中的信息将显示为:
17:50:25.679058 10.0.0.5.2888 > 10.0.1.5.23: P 38:41(3) ack 105 win 8656 (DF)
(3)-e
该参数用来显示链路层头信息,例如,在某主机上执行 tcpdump -n -e 的结果为:
11:32:46.905105 0:0:b4:91:e6:6a 0:d0:b7:37:55:0 0800 327: 202.194.254.211.8023 >
202.194.253.251.61830: P 1487:1760(273) ack 0 win 32120 (DF)
11:32:47.105340 0:d0:b7:37:55:0 0:0:b4:91:e6:6a 0800 64: 202.194.253.251.61830 >
202.194.254.211.8023: . ack 1760 win 16832 (DF)
这两条信息中都包含有链路层的头信息,其中第 1 条信息中的“0:0:b4:91:e6:6a”表示源
MAC 地址, “0:d0:b7:37:55:0”表示目的 MAC 地址, “0800”表示以太网帧中的“协议类型”
字段的值为 0800(封装的数据为 IP 包) 。
(4)-x
该参数表示去掉链路头之后,以十六进制显示包的内容。例如,在某主机上执行 tcpdump
-n -e -x 的结果为:
11:38:39.196232 0:d0:b7:37:55:0 0:0:b4:91:e6:6a 0800 64: 202.194.253.251.61830
202.194.254.211.8023: . ack 5730 win 16374 (DF)
4500 0028 1056 4000 7e06 5a25 cac2 fdfb
cac2 fed3 f186 1f57 d4ee c1c0 6088 98ad
5010 3ff6 3cc6 0000 0052 474f 7093 03da
d0ac
11:38:39.196283 0:0:b4:91:e6:6a 0:d0:b7:37:55:0 0800 627: 202.194.254.211.8023
202.194.253.251.61830: P 5730:6303(573) ack 0 win 32120 (DF)
4500 0265 5ed3 4000 4006 476b cac2 fed3
cac2 fdfb 1f57 f186 6088 98ad d4ee c1c0
5018 7d78 c554 0000 3131 3a33 383a 3338
2e39 3935 3933
对于第一条信息来说,从 4500~d0ac 即为 IP 包的内容。
第 10 章 常用网络调试软件的使用 ·219·
(5)-w
该参数表明要把截获的数据包信息存到文件中。例如,在某主机上执行 tcpdump -n -w
dump.bin,则结果信息会被写到文件 dump.bin 中。
(6)-r
该参数表明 tcpdump 从文件中而不是直接从网络接口获得数据包。例如,在某主机上执
行 tcpdump -n -r dump.bin,则 tcpdump 会从文件 dump.bin 中读取相应的分析数据包。
图 10-1 NetxRay 界面
图 10-2 新建过滤
图 10-3 设置过滤
图 10-4 设置高级过滤
设置过滤条件后,单击“确定”按钮,然后从“Capture”菜单中选择“Start”命令项,
并在另外一台联网的计算机上发出“ping 10.0.1.1”命令,之后 DashBoard 和 Capture 窗口中
第 10 章 常用网络调试软件的使用 ·221·
图 10-5 查看数据包
计算机是通过接口(Interface)连接网络的。如果是通过以太网卡连接,则网卡就是一
个接口,一个网卡可以绑定一个或多个 IP 地址。设置网络的一个很重要的步骤就是设置接口。
系统中常见的接口有:自回环(loopback)接口、以太网(Ethernet)接口和 PPP 接口等。在
Linux 上查看和设置网络接口一般是通过 ifconfig(Interface Config)命令来实现的。
10.3.1 查看接口信息
collisions:692 txqueuelen:100
RX bytes:3315373694 (3161.7 Mb) TX bytes:7416286 (7.0 Mb)
Interrupt:5 Base address:0x6000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:450 errors:0 dropped:0 overruns:0 frame:0
TX packets:450 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:40060 (39.1 Kb) TX bytes:40060 (39.1 Kb)
该例中显示了 eth0 和 lo 两个接口的信息,具体说明如下:
① eth0:系统的第 1 个以太网卡,如果有第 2 个,则名称是 eth1,依此类推。
② lo:系统上的自回环接口。每个系统默认情况下都有一个自回环接口,用来测试网络
功能或用于自身访问。lo 接口的固定 IP 地址为 127.0.0.1。
③ Link encap:链路封装类型。
④ Hwaddr:以太网卡的硬件地址,固化在网卡上。每个网卡的硬件地址都不相同。
⑤ inet addr:该接口的 IP 地址。
⑥ Bcast:广播地址。
⑦ UP:说明该接口处于激活状态。
⑧ MTU:Maximum Transfer Unit,用来设置该接口的最大传输单位。
⑨ Metric:表示该接口的路由距离值。Routed 等路由软件将使用这一个距离值。距离值
越小,所代表的路由优先级越高。
⑩ RX packets:接收的数据包的总数、错误数、遗失数、超负载丢失数和帧校验错的个数。
TX packets:传送的数据包的总数、错误数、遗失数、超负载丢失数和介质故障数。
Interrupt:接口卡的中断号。
Base address:接口卡的 I/O 地址。
10.3.2 设置接口
collisions:0 txqueuelen:0
RX bytes:40060 (39.1 Kb) TX bytes:40060 (39.1 Kb)
(2)ifconfig eth0 up
该命令用来启动 eth0 接口。执行命令后,再用 ifconfig 命令查看接口信息时,则显示全
部接口的信息,如下所示:
[root@localhost test]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:E0:4C:3A:48:4E
inet addr:10.0.1.5 Bcast:10.255.255.255 Mask:255.0.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3474970 errors:0 dropped:0 overruns:0 frame:0
TX packets:27901 errors:0 dropped:0 overruns:0 carrier:0
collisions:692 txqueuelen:100
RX bytes:3315373694 (3161.7 Mb) TX bytes:7416286 (7.0 Mb)
Interrupt:5 Base address:0x6000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:450 errors:0 dropped:0 overruns:0 frame:0
TX packets:450 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:40060 (39.1 Kb) TX bytes:40060 (39.1 Kb)
(3)ifconfig eth0<主机地址>
该命令用来设置 eth0 接口的 IP 地址,例如,用 ifconfig eth0 10.0.0.10 命令可以将当前计
算机的 IP 地址设为 10.0.0.10,这时若用 ifconfig eth0 命令查看 eth0 接口的信息,则显示新的
IP 地址,如下所示:
[root@localhost test]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:E0:4C:3A:48:4E
inet addr:10.0.0.10 Bcast:10.255.255.255 Mask:255.0.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3474970 errors:0 dropped:0 overruns:0 frame:0
TX packets:27901 errors:0 dropped:0 overruns:0 carrier:0
collisions:692 txqueuelen:100
RX bytes:3315373694 (3161.7 Mb) TX bytes:7416286 (7.0 Mb)
Interrupt:5 Base address:0x6000
设置好主机接口信息后,要想与其他子网上的主机进行通信,还必须设置路由信息。在
·224· Internet 应用协议实例剖析与服务器配置
10.4.1 查看路由信息
10.4.2 设置路由
route 命令既可以设置目的地址为主机地址的路由,也可以设置目的地址为网络地址的
路由。
1.设置目的地址为主机地址的路由
用来设置目的地址为主机的 route 命令的格式为:
route add –host 地址 [gw 网关] [metric cost] dev 接口
例如,下面的命令可设置目的地址为主机 20.0.0.1 的路由:
[root@localhost test]# route add -host 20.0.0.1 dev eth0 gw 10.0.0.254
此时再执行 route 命令,即可显示出新的路由信息,如下所示:
[root@localhost test]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Use Iface
20.0.0.1 10.0.0.254 255.255.255.255 UH 0 0 eth0
10.0.0.0 * 255.0.0.0 U 0 0 eth0
127.0.0.0 * 255.0.0.0 U 0 0 lo
default 10.0.0.1 0.0.0.0 UG 0 0 eth0
2.设置目的地址为网络地址的路由
用来设置目的地址为网络的 route 命令的格式为:
第 10 章 常用网络调试软件的使用 ·225·
route add –net 地址 [gw 网关] [metric cost] [netmask 掩码] dev 接口
例如:
[root@localhost test]# route add -net 10.10.10.0 netmask 255.255.255.0 dev eth0 gw
10.0.0.254
此时再执行 route 命令,即可显示出新的路由信息,如下所示:
[root@localhost test]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
20.0.0.1 10.0.0.254 255.255.255.255 UH 0 0 0 eth0
10.0.0.0 * 255.0.0.0 U 0 0 0 eth0
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
10.10.10.0 10.0.0.254 255.255.255.0 U 0 0 0 eth0
default 10.0.0.1 0.0.0.0 UG 0 0 0 eth0
3.设置默认路由
设置默认路由的 route 命令的格式为:
route add default gw 网关
例如,下名的命令将 IP 地址为 10.0.0.1 的主机设置为默认网关:
[root@localhost test]# route add default gw 10.0.0.1
10.4.3 删除路由
ping 命令通过检查网络中其他主机的应答信息,来确认网络的连通性,在网络出现故障
时可以通过显示的结果判断故障的基本类型,ping 命令的格式是:
ping [参数] 主机名/IP 地址
·226· Internet 应用协议实例剖析与服务器配置
-R 显示所经过的路由信息(注意,最多显示 9 步)
-t 若使用者不人为中断则不断发送 ICMP 信息
netstat 是一个监视网络状态的工具,可以观察网络活动的状况,常用来显示路由表、网
络接口及 TCP 连接等信息。
(1)查看路由表
用 netstat 命令查看路由表时需要使用-r 参数,例如:
[root@localhost test]# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
10.0.0.0 * 255.0.0.0 U 40 0 0 eth0
127.0.0.0 * 255.0.0.0 U 40 0 0 lo
default 10.0.0.1 0.0.0.0 UG 40 0 0 eth0
在显示的路由表项中,大部分字段已在 route 命令中介绍过,其他几个字段的含义如下:
① MSS,该接口可传送的最大数据段大小(Maximum Segment Size) 。
② irtt,irtt 是初始环程时间(Initial Round Trip Time)。在按照 TCP 协议将数据从源计算
机 A 传到目的计算机 B 时,B 计算机在收到一个数据包后会回传确认信息给 A 计算机,而 A
计算机收到确认后就知道 B 计算机确实收到了数据。如果 A 计算机经过一段等待时间后还没
有收到 B 计算机的确认,则会重新传送数据。这个等待时间就是环程时间。该时间太长会浪
费时间,太短会传送太多不必要数据。
③ Window,TCP 窗口大小(Windows Size) 。
④ Iface,接口(Interface) 。
(2)查看接口
用 netstat 命令查看接口信息时需要使用-i 参数,例如:
[root@localhost test]# netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 3478547 0 0 0 29991 0 0 0 BM RU
lo 16436 0 450 0 0 0 450 0 0 0 LR U
其中,有些字段在前面部分介绍过,其他几个字段的含义如下:
① RX-OK、TX-OK,为收到、发送的正确的数据包的数目。
② RX-ERR、TX-ERR,为收到、发送的错误的数据包的数目。
③ RX-DRP、TX-DRP,为收到、发送的丢弃的数据包的数目。
④ RX-OVR、TX-OVR,为收到、发送的超负载丢失的数据包的数目。
(3)查看 TCP 连接
用 netstat 命令查看当前的 TCP 连接状况时需要使用-t 参数,例如:
[root@localhost test]# netstat -t
Active Internet connections (w/o servers)
·228· Internet 应用协议实例剖析与服务器配置
当本机与其他主机通信时,traceroute 可以用来检测数据包所通过的路径中包含哪些网关
及其迟延时间。如果本机与某网络的连接出现故障,该命令还可以跟踪到发生问题的大概位
置。若在 traceroute 命令中使用-n 参数,则显示信息时不将 IP 地址将不转换为名字,例如:
[root@localhost test]# traceroute www.sdu.edu.cn -n
traceroute to www.sdu.edu.cn (202.194.15.22), 30 hops max, 38 Byte packets
1 10.0.0.1 0.240 ms 0.178 ms 0.174 ms
2 202.194.252.254 0.750 ms 0.667 ms 1.951 ms
3 202.194.240.69 4.139 ms 5.015 ms 4.953 ms
4 202.194.96.61 0.974 ms 0.965 ms 0.973 ms
5 202.112.53.221 0.824 ms 0.826 ms 0.820 ms
6 202.194.96.194 0.754 ms 0.737 ms 0.731 ms
7 ***
8 202.194.15.22 1.162 ms 0.887 ms 0.872 ms
该例说明,从本机到达目的主机 www.sdie.edu.cn 共经过了 8 步,其中第 7 步中的“* * *”
表示该步经过的网关没有响应。再如下例:
[root@localhost test]# traceroute www.redhat.com -n
traceroute to www.redhat.com (66.187.232.50), 30 hops max, 38 Byte packets
1 202.194.240.69 3.696 ms 5.040 ms 4.663 ms
2 202.194.96.61 0.568 ms 0.544 ms 0.539 ms
3 202.112.53.221 0.434 ms 0.396 ms 0.638 ms
4 202.112.46.229 11.536 ms 11.385 ms 11.439 ms
5 202.112.36.225 28.234 ms 28.523 ms 28.407 ms
6 202.112.61.197 28.452 ms 28.284 ms 28.590 ms
7 203.222.39.185 67.029 ms 66.618 ms 66.864 ms
第 10 章 常用网络调试软件的使用 ·229·