图书简介:
第一部分 网 络 基 础
第1章 协议和分层
1.1 本书中的网络
1.1.1 网络设备的远程访问
1.1.2 传输文件到路由器
1.1.3 命令行界面和图形用户界面
1.1.4 Ethereal和数据包的捕获
1.1.5 第一次探索网络
1.2 协议
1.2.1 标准和组织
1.2.2 征求意见稿和互联网工程任务组
1.3 互联网的管理
1.4 分层
1.4.1 简单组网
1.4.2 协议分层
1.5 TCP/IP协议族
1.5.1 TCP/IP参考模型分层
1.5.2 协议和接口
1.5.3 封装
1.6 TCP/IP分层
1.6.1 物理层
1.6.2 数据链路层
1.6.3 网络层
1.6.4 传输层
1.6.5 应用层
1.6.6 会话支持
1.6.7 内部表示转换
1.6.8 TCP/IP中的应用程序
1.7 TCP/IP协议族
1.8 留给读者的问题
第2章 TCP/IP协议和设备
2.1 网络的协议栈
2.2 分层、 协议、 端口和套接字
2.3 TCP/IP协议栈
2.4 客户端服务器模型
2.5 TCP/IP协议层和客户端服务器
2.6 IP层
2.7 传输层
2.7.1 传输控制协议
2.7.2 用户数据报协议
2.8 应用层
2.9 网桥、 路由器和交换机
2.9.1 局域网分段
2.9.2 网桥
2.9.3 路由器
2.9.4 局域网交换机
2.9.5 虚拟局域网
2.9.6 VLAN帧标签
2.10留给读者的问题
第3章 网络链路技术
3.1 示例网络的连接
3.1.1 显示以太网流量
3.1.2 显示SONET链路
3.1.3 显示DSL链路
3.1.4 显示无线链路
3.1.5 帧和链路层
3.2 数据链路层
3.3 以太网的演进
3.3.1 Ethernet II和IEEE 802.3帧
3.3.2 MAC地址
3.4 数字用户线(DSL)的演进
3.4.1 点到点协议(PPP)和数字用户线(DSL)
3.4.2 PPP成帧
3.4.3 DSL封装
3.4.4 DSL构成
3.5 同步光纤网络(SONET)的演进
3.5.1 网络错误的说明
3.5.2 基于SONET/SDH的分组封装
3.6 无线局域网和IEEE 802.11
3.6.1 WiFi
3.6.2 IEEE 802.11 MAC层协议
3.6.3 IEEE 802.11帧
3.7 留给读者的问题
第二部分 核 心 协 议
第4章 IPv4和IPv6寻址
4.1 IP寻址
4.2 网络/主机边界
4.3 IPv4地址
4.3.1 IPv4私有地址
4.3.2 理解IPv4地址
4.4 IPv6地址
4.4.1 IPv6地址的特征
4.4.2 IPv6地址类型和表示方法
4.4.3 IPv6地址前缀
4.5 子网划分和超网划分
4.5.1 IPv4中的子网划分
4.5.2 子网划分基础
4.5.3 CIDR和VLSM
4.6 IPv6寻址细节
4.6.1 IP地址分配
4.7 留给读者的问题
第5章 地址解析协议
5.1 ARP和局域网
5.2 ARP报文
5.3 ARP操作案例
5.4 ARP的变种
5.4.1 代理ARP协议
5.4.2 反向地址解析协议
5.4.3 广域网的ARP协议
5.5 ARP和IPv6
5.5.1 邻居发现协议
5.5.2 ND地址解析
5.6 留给读者的问题
第6章 IPv4和IPv6头部
6.1 分组头部和地址
6.2 IPv4分组头部
6.3 分片和IPv4
6.3.1 分片和最大传输单元
6.3.2 分片和重组
6.3.3 路径MTU的确定
6.4 一个分片的例子
6.4.1 IPv4的局限
6.4.2 IPv6头部结构
6.5 IPv4头部和IPv6头部的比较
6.5.1 IPv6头部改动
6.6 IPv6和分片
6.7 留给读者的问题
第7章 网际控制报文协议
7.1 ICMP和ping
7.2 ICMP消息格式
7.2.1 ICMP消息字段
7.2.2 ICMP类型字段和代码字段
7.3 ICMP消息的发送
7.3.1 必须发送ICMP的情况
7.3.2 不能发送ICMP的情况
7.4 ping
7.5 traceroute
7.6 路径MTU
7.7 ICMPv6
7.7.1 基本的ICMPv6消息
7.7.2 邻居发现和自动配置
7.7.3 路由和邻居发现
7.7.4 接口地址
7.7.5 邻居请求和宣告
7.8 留给读者的问题
第8章 路由
8.1 路由器和路由表
8.2 主机和路由表
8.3 直接和间接交付
8.3.1 路由选择
8.3.2 没有路由的直接交付
8.3.3 间接交付和路由器
8.4 留给读者的问题
第9章 IP分组转发
9.1 路由器架构
9.1.1 基本的路由架构
9.1.2 另一种路由器架构
9.2 路由器访问
9.2.1 控制台端口
9.2.2 辅助端口
9.2.3 网络
9.3 转发表查找
9.4 双栈、 隧道和IPv6
9.4.1 双协议栈
9.4.2 隧道
9.5 隧道机制
9.6 为过渡所做的考虑
9.7 留给读者的问题
第10章 用户数据报协议
10.1 UDP端口和套接字
10.2 UDP用来做什么
10.3 UDP包头
10.4 IPv4和IPv6的注意事项
10.5 端口号
10.5.1 熟知端口
10.5.2 套接字
10.6 UDP操作
10.7 UDP溢出
10.8 留给读者的问题
第11章 传输控制协议
11.1 TCP与连接
11.2 TCP头部
11.3 TCP的机制
11.4 连接和三次握手
11.4.1 连接建立
11.4.2 数据传输
11.4.3 关闭连接
11.5 流量控制
11.5.1 TCP的窗口
11.5.2 流量控制和拥塞控制
11.6 性能算法
11.7 TCP和FTP
11.8 留给读者的问题
第12章 多路复用和套接字
12.1 层和应用
12.2 套接字接口
12.2.1 套接字库
12.2.2 TCP流服务调用
12.3 套接字接口: 是好还是坏
12.3.1 原始套接字的“威胁”
12.3.2 套接字库(不同操作系统)
12.4 Windows套接字接口
12.4.1 TCP/IP和Windows
12.4.2 Windows的套接字
12.5 基于Linux的套接字
12.6 留给读者的问题
第三部分 路由和路由协议
第13章 路由和对等节点
13.1 网络层路由和交换
13.2 面向连接的和无连接的网络
13.2.1 服务质量
13.3 主机路由表
13.3.1 路由表和FreeBSD
13.3.2 路由表和RedHat Linux
13.3.3 路由和Windows XP
13.4 互联网和自治域系统
13.5 当今的互联网
13.6 路由策略的作用
13.7 对等节点
13.8 选择一个对等节点
13.9 留给读者的问题
第14章 内部网关协议: RIP,OSPF和ISIS
14.1 内部路由协议
14.2 3个主要的IGP
14.3 路由信息协议
14.3.1 距离向量路由协议
14.3.2 链路断开
14.3.3 距离向量的问题
14.3.4 RIPv1
14.3.5 RIPv2
14.3.6 为IPv6设计的RIPng
14.4 关于IGRP和EIGRP的介绍
14.4.1 开放最短路径优先
14.4.2 链路状态与最短路径
14.4.3 OSPF可以做什么
14.4.4 OSPF路由器类型及区域
14.4.5 OSPF指定路由器和备份指定路由器
14.4.6 OSPF数据报文
14.4.7 用于IPv6的OSPFv3
14.5 中间系统到中间系统
14.5.1 ISIS的吸引力
14.5.2 ISIS与OSPF
14.5.3 OSPF与ISIS的相似之处
14.5.4 OSPF与ISIS的区别
14.5.5 用于IPv6的ISIS
14.6 留给读者的问题
第15章 边界网关协议
15.1 BGP作为路由协议
15.1.1 配置BGP
15.1.2 路由策略的能力
15.2 BGP与互联网
15.2.1 EGP与早期互联网
15.2.2 BGP的产生
15.3 BGP作为一种路径向量协议
15.4 IBGP与EBGP
15.4.1 IGP下一跳与BGP下一跳
15.4.2 BGP与内部网关协议
15.5 其他BGP协议
15.6 BGP属性
15.7 BGP与路由策略
15.7.1 BGP扩张
15.8 BGP消息类型
15.9 BGP消息格式
15.9.1 打开消息
15.9.2 更新消息
15.9.3 通知消息
15.10留给读者的问题
第16章 组播
16.1 初识IPv4组播传输协议
16.2 组播术语
16.3 密集型组播和稀疏型组播
16.4 关于组播的一些特殊标记
16.5 组播概念
16.5.1 逆向路径转发
16.5.2 RPF表
16.5.3 填充RPF表
16.5.4 最短路径树
16.5.5 汇聚点和汇聚点共享树
16.6 组播协议
16.6.1 组播主机和路由器
16.6.2 组播组成员协议
16.6.3 组播路由协议
16.6.4 任意源组播和SSM
16.6.5 组播源发现协议
16.6.6 帧和组播
16.6.7 IPv4组播地址
16.6.8 IPv6组播地址
16.6.9 PIMSM
16.6.10资源预留协议和PGM
16.6.11组播路由协议
16.6.12IPv6组播
16.7 留给读者的问题
第17章 MPLS和IP交换
17.1 融合什么
17.1.1 快速分组交换
17.1.2 帧中继
17.1.3 异步传输模式
17.1.4 为什么还是走到了TCP/IP的局面
17.2 MPLS
17.2.1 MPLS术语
17.2.2 信令和MPLS
17.2.3 标签栈
17.2.4 MPLS和VPN
17.2.5 MPLS表
17.3 用静态LSP配置MPLS
17.3.1 入口路由器
17.3.2 转接路由器
17.3.3 出口路由器
17.3.4 traceroute和LSP
17.4 留给读者的问题
第三部分 应 用 层
第18章 动态主机配置协议
18.1 DHCP和地址分配
18.1.1 DHCP服务器配置
18.1.2 路由器中继代理配置
18.1.3 在LAN2上获取地址
18.1.4 在网络上使用DHCP
18.2 BOOTP
18.2.1 BOOTP的实现
18.2.2 BOOTP消息
18.2.3 BOOTP中继代理
18.2.4 BOOTP“厂商特定区”选项
18.3 简单文件传输协议
18.3.1 TFTP消息
18.3.2 TFTP下载
18.3.3 DHCP
18.3.4 DHCP操作
18.3.5 DHCP消息类型选项
18.4 DHCP和路由器
18.4.1 DHCPv6
18.4.2 DHCPv6和路由宣告
18.4.3 DHCPv6操作
18.5 留给读者的问题
第19章 域名系统
19.1 DNS基础
19.1.1 DNS体系结构
19.1.2 根域名服务器
19.1.3 根服务器的操作
19.1.4 根服务器详情
19.2 理论上的DNS: 域名服务器、 数据库、 解析器
19.2.1 增加一个新的主机
19.2.2 递归和迭代请求
19.2.3 委派及查询
19.2.4 胶水记录
19.3 实践中的DNS: 资源记录和消息格式
19.3.1 DNS消息头
19.3.2 DNSSec
19.3.3 DNS工具: nslookup、 dig和host
19.4 DNS实例
19.5 留给读者的问题
第20章 文件传输协议
20.1 综述
20.1.1 PORT和PASV
20.2 FTP和GUIS
20.2.1 FTP基础
20.2.2 FTP命令与应答码
20.2.3 FTP数据传输
20.2.4 被动模式和端口
20.2.5 文件传输类型
20.2.6 FTP出错
20.3 FTP命令
20.3.1 变种技术
20.3.2 关于NFS
20.4 留给读者的问题
第21章 简单邮件传输协议和邮件
21.1 电子邮件的架构
21.1.1 如今的邮件发送
21.1.2 电子邮件的演进简史
21.1.3 SMTP认证
21.1.4 简单邮件传输协议
21.2 多用途互联网邮件扩展
21.2.1 MIME媒体类型
21.2.2 MIME编码
21.2.3 MIME消息的样例
21.3 使用POP3访问电子邮件
21.4 电子邮件及其头部
21.5 家庭办公室的邮件
21.6 留给读者的问题
第22章 超文本传输协议
22.1 HTTP的实现
22.1.1 统一资源
22.1.2 URI(统一资源标识符)
22.1.3 URL(统一资源定位符)
22.1.4 URN(统一资源名称)
22.2 HTTP
22.2.1 HTTP的演进
22.2.2 HTTP模型
22.2.3 HTTP消息
22.3 TRAILERS和动态Web页面
22.3.1 HTTP请求和应答
22.3.2 HTTP方法
22.3.3 HTTP状态码
22.3.4 HTTP头部
22.3.5 一般头部
22.3.6 请求头部
22.3.7 应答头部
22.3.8 实体头部
22.3.9 cookie
22.4 留给读者的问题
第23章 安全套接字与SSL
23.1 SSL与网站
23.1.1 安全锁
23.1.2 安全套接字层
23.2 隐私性、完整性以及认证
23.2.1 隐私性
23.2.2 完整性
23.2.3 认证
23.3 公钥加密
23.3.1 在客户端用便携式计算器加密
23.3.2 例子
23.3.3 用便携式计算器在服务器上解码
23.4 公钥与对称加密
23.5 SSL协议
23.5.1 SSL协议栈
23.5.2 SSL会话建立
23.5.3 SSL数据传输
23.5.4 SSL实现
23.5.5 SSL的不足与争议
23.5.6 TLS 1.1的注意事项
23.5.7 SSL与证书
23.6 留给读者的问题
第五部分 网 络 管 理
第24章 简单网络管理协议
24.1 SNMP功能
24.2 SNMP模型
24.2.1 MIB库和SMI
24.2.2 SMI
24.2.3 MIB
24.2.4 RMON
24.2.5 私有MIB
24.3 SNMP操作
24.3.1 SNMPv2增强
24.3.2 SNMPv3
24.4 留给读者的问题
第六部分 安 全
第25章 Secure Shell(远程访问)
25.1 使用SSH
25.1.1 SSH基础
25.1.2 SSH功能
25.1.3 SSH架构
25.1.4 SSH密钥
25.1.5 SSH协议的操作
25.1.6 传输层协议
25.1.7 认证协议
25.1.8 连接协议
25.1.9 文件传输协议
25.2 SSH的使用
25.3 留给读者的问题
第26章 基于MPLS的虚拟专用网
26.1 PPTP的隐私性
26.1.1 VPN的种类
26.1.2 安全性和VPN
26.1.3 VPN和协议
26.1.4 PPTP协议
26.1.5 L2TP协议
26.1.6 PPTP和L2TP的对比
26.2 基于MPLS的VPN的类型
26.2.1 三层VPN(L3VPN)
26.2.2 二层VPN(L2VPN)
26.3 VPLS: 基于MPLS的L2VPN
26.3.1 每个路由器的VPLS配置
26.4 配置真的起作用吗
26.5 留给读者的问题
第27章 网络地址转换
27.1 使用NAT
27.1.1 NAT的优点和缺点
27.1.2 4种类型的NAT
27.2 实施NAT
27.3 留给读者的问题
第28章 防火墙
28.1 防火墙的工作
28.1.1 一种路由器数据包过滤器
28.1.2 路由器上的状态检测
28.2 防火墙的类型
28.2.1 数据包过滤
28.2.2 应用代理
28.2.3 状态检测
28.2.4 DMZ
28.3 留给读者的问题
第29章 IP安全
29.1 IPSec的使用
29.1.1 CE0
29.1.2 CE6
29.2 IPSec简介
29.2.1 IPSec的RFC
29.2.2 IPSec的实现
29.2.3 IPSec传输与隧道模式
29.3 安全关联及其他
29.3.1 安全策略
29.3.2 认证头部
29.3.3 封装安全载荷
29.3.4 互联网密钥交换
29.4 留给读者的问题
第七部分 媒 体
第30章 IP语音
30.1 VoIP的使用
30.1.1 VoIP的优势
30.1.2 什么是“语音”
30.1.3 时延问题
30.1.4 语音分组化
30.2 VoIP协议
30.2.1 VoIP传输的RTP协议
30.2.2 信令
30.2.3 H.323国际标准
30.2.4 SIP协议,互联网标准
30.2.5 MGCP以及Megaco/H.248
30.3 多种技术的融合
30.4 留给读者的问题
缩略语
参考文献
展开
译者序
学习计算机网络技术,特别需要理论与实践相结合。在各种TCP/IP的论著中,能将理论与实践相结合的,最著名的就是W. Richard Stevens的《TCP/IP详解》。这套书共三卷,结合网络配置、数据截图等方式讲解了网络互联的基本概念和机制,网络协议的细节和实现,以及应用层的设计原则和技术。对于从事计算机网络的教师以及科研人员,这套书是必读的。
本书则是对《TCP/IP详解》的改进。作者通过与Juniper网络公司的合作,搭建了一个真实的、接近生产规模级的网络,该网络包含了通过SONET链路连接的六个路由器、两个以太局域网、两对Windows客户端和服务器、一对Linux主机和一对FreeBSD主机,这是一般计算机网络科研人员难以做到的。本书中每章的内容都基于同样的网络拓扑和IP地址进行阐述,随着技术的不断深入,逐渐完成对路由器、客户端以及服务器的配置,生动、灵活地给读者展示了每种技术在实际网络中的效果,这是纯粹的理论知识介绍的书籍所无法包含的。
本书涵盖了TCP/IP网络中的大部分热门技术,与经典的TCP/IP书籍一样,采用了由下而上的方法介绍协议栈,概念清楚、准确,讲解详细,例子很多。作者在书中所介绍的协议或技术均在作者搭建的真实网络中进行了实验验证,详细给出了网络配置过程以及数据交互的截图,并针对每章的内容留有一定数量的思考题。
对于学习和了解计算机网络的本科生和研究生,本书可以作为他们的教材和教学参考书。对于那些从事网络工程和技术服务的技术人员,如网络管理员、运维人员、工程师、系统设计师和管理者,以及其他需要了解网络知识的技术人员(如芯片设计者、电信工程师、软件工程师等),本书也是一本很好的理论和实践相结合的参考读物。
参加本书翻译的有: 黄小红、闫屾、张沛、赵钦、苑婷婷、牟澄、卢军强。全书由马严教授审校。
我们曾经期望按照中文习惯来叙述本书的内容,但是限于精力和水平,最后未能完全做到这一点,翻译中也难免有不妥或错误之处,敬请读者谅解和指正。
序
世纪交替之际,网络融合已经成为行业发展趋势。通过将数据、语音、视频、虚拟专用网(VPN)以及其他服务融合到一套共享的基础设施中,除了能够减少投资,带来巨大的经济利益以外,更能够降低运维成本,使得互联网提供商不必针对某种服务而运维特定的设备和系统。网络融合的基本原则是使用一套相同的基础设施支持多样化的服务,即通过一个通用的封装协议,满足不同服务的传输需求——互联网协议(Internet Protocol)就是这样的协议。
一切基于IP
网络行业发展日新月异。10年乃至更短的时间就足可以使一个新兴的前沿技术由萌发走向凋亡(如ATM、帧中继、令牌环或FDDI等)。然而,自20世纪60年代早期有了最初的想法,TCP/IP奇迹般地走过了35年的历史,并逐步发展壮大,至今仍在不断演进、前行。
这个由Vint Cerf与Bob Kahn在1973年提出的协议已经经历了(且将继续经历)数百次的改进和一次版本的重大升级,然而其核心功能与之在20世纪80年代中期时的状态几乎无异。在一个优胜劣汰极为残酷的技术行业里,TCP/IP的高龄强有力地证明了其过人之处。
目前为止,并没有任何明显迹象表明IP技术将要退出历史舞台。与此相反,越来越多基于IP的新应用、新设备和新服务不断涌现,而IP协议的新版本——IPv6协议,因其可以为未来网络发展提供足够的地址空间,网络升级过渡的必要性也日渐凸显。虽然写本序时IPv6尚处于部署的早期阶段,但可能读者将来某一天阅读本书时,IPv6已成为大多数人所知道的唯一IP版本。
TCP/IP逐步统治网络行业的故事早已在业内广为流传。Cerf、kahn、Jon Postel 等人以及其他对TCP/IP早期发展做出贡献的人同样是ARPANET(现代互联网的前身)的创始成员。在协议栈被集成到UNIX系统后,TCP/IP受到了开发者的追捧和欢迎,这为之奠定了雄厚的基础,使得其有更多的机会扎根于早期尚处在襁褓阶段的网络工业中。
早期,TCP/IP被认可的程度并不理想。以政府部门和电信公司为代表的组织机构对于工作组那套“先让它试试,看看到底能怎样”的不正式的标准化过程感到难以接受,这些严谨的组织更愿意使用那些通过严格标准过程所产出的协议。毕竟在当时谁也无法相信,一群满腔热血的学生竟然最终促成了如今的互联网工程任务组(IETF)。因此,国际标准化组织(ISO)被任命来开发一个“成熟的”网络协议族,这一协议族最终发展成为后来的开放系统互连(OSI)。
ISO擅长设计复杂而详尽的技术标准,并且只有当标准处于完成、可生产的状态下才进行发布,这种做法需要消耗大量的时间。OSI主张先使用TCP/IP作为临时的解决方案,待到ISO标准委员会完成全部工作之后再做打算。然而,等OSI做好准备时,TCP/IP早已被广泛部署、验证和熟知,极少有网络运营商愿意将业务迁移到新协议上。
OSI之所以保留到今天,主要是因为ISIS协议和那无所不在的OSI参考模型,而TCP/IP协议则成为了全球性的通信传输协议标准。
图解网络
我是一个注重图形表达的人。我欣赏很多同事通过口头详述即可构建网络场景的能力,而我则更擅长使用图形的方式来完成对其的阐述与理解。
1994年,W. Richard Stevens发布了《TCP/IP详解》的第一卷,它马上成为了我最喜欢的书籍之一,同时也排在了我给学生推荐的参考书目清单的首位。Stevens使用图表、配置以及数据截图来讲授TCP/IP协议栈,这使得该书不仅仅是一本成功的教科书,更是一本全面的案例研究。本书的可视化效果非常好,读者完全不必坐在协议分析器前就能观察数据包的来回传输。
尽管Stevens的著作在阐释单独的TCP/IP组件的行为方面已经非常出色,但它并没有诠释这些组件在一个大型的真实网络中是如何交互的。
Walt Goralski着重对此做出了改进。本书同样使用了由下而上的方法(Stevens的原话)来讲授协议栈:每一章都建立在前面章节的基础上,向读者展示协议是如何工作的。通过运行Juniper网络,读者不仅能够看到实验室级别的设备交互,还能看到当今生产级规模的网络场景,进而领略作者在真实、可视的自然状态下对TCP/IP协议的探索与研究。
本书必将成为IP网络实际应用的经典书籍之一,会是学生必读书目列表的基石之一,受到专业人士的喜爱。
Jeff Doyle
Westminster,Colorado
前言
这并不是一本教你如何使用互联网的著作,而是告诉读者互联网是如何成为对用户有用的网络的。互联网是一个公共的、全球性的网络,基于TCP/IP协议,故其通常又称为互联网协议族。网络协议就是一系列为了完成某些功能所必须遵守的规则。TCP/IP 实际上是传输控制协议(TCP)和互联网协议(IP)两个协议的合成,这两个协议可以使信息在网络之间进行传输,是互联网早期最先使用的两个协议。TCP/IP是现代网络的核心与灵魂,本书则使用图解的方式介绍了它们的工作流程。通过跟踪数据在各种互联网连接中的传输过程,读者可以观察到现今的网络是如何在TCP/IP的支撑下完成工作的。
读者对象
本书主要介绍通用网络技术,尤其是互联网技术。我并不肯定丝毫网络知识经验都没有的人可以理解整本书籍的内容。但是,任何只要在线收发过邮件、浏览过网页、下载过电影或歌曲,与世界各地的亲友聊过天的人,在理解本书内容时都不会感到过于困难。
在每章的末尾都留有思考题,这使得本书可以作为高中学生或者计算机科学和电子工程院系的大学生研修第一门计算机网络课程的教科书。同时,它又不仅仅是一本教科书,对于那些初涉电信行业或致力于入职以互联网为其业务计划重要组成部分的公司(这样的公司越来越多)的读者而言,本书具有同样的宝贵价值。
书中只有一章用到了C语言的代码,并且它仅仅是为了给读者提供一些必要信息,所有高中阶段没有纳入的数学内容在本书中都没有被提及。书中没有微积分、没有概率论,没有随机过程等等内容,一切内容简单易懂。一些必须用到数学功底的内容,比如公钥加密内容中使用的“便携式计算机”以及DiffieHellman密钥分配案例等,作者都认真地进行了设计,使得数学内容变得尽可能简单。
本书独一无二的特点
本书的过人之处在于你很难在其他同类书籍中找到有关TCP/IP的如下内容:
1. 书中每一章的每个案例都基于相同定义的网络拓扑和网络地址;
2. 同等对待IPv4和IPv6协议,同步介绍两种互联网协议涉及的所有概念;
3. 除TCP/IP协议外,本书还讲解了路由协议以及TCP/IP的上层应用;
4. 书中讨论的网络模型基于真实的网络运营商和企业级的以太网;
5. 既讲解利用协议所能实现的服务和功能,又讲解功能背后的协议原理;
6. 涵盖了诸如MPLS、IPSec等一般讲解TCP/IP书籍中所不涉及的话题。
那么,本书采用此种方式阐述的初衷为何呢?我观察到,即使是生活在如今互联网发达的时代里,仍然很少有人研究整个网络,更鲜有将路由器、TCP/IP、互联网和大量相关主题融会贯通的案例。看上去讲了不少,学了很多,但是当考虑与这些议题相关的复杂原理时你就会发现,泛在的计算机“扫盲教学”和基本编程语言课程真正所覆盖的内容少之又少。
当我写这本书并将它打印出来放在我工作的地方时,一名芯片设计师发现了它,并饶有兴趣地开始阅读。当我回来取打印稿时,他正着迷于某些章节,并当场表示对于本书的获取意愿。通过与他的交谈,我意识到成千上万的人进入了互联网行业,其中很多人都来自其他学科和领域。随着互联网的发展,社会对于数字通信结构的依赖仍在继续,越来越多的人需要这样的综述来了解现今的网络是如何运转的。仅靠本书中零星的网络知识肯定无法满足读者的求知欲和好奇心。我希望每一位读者都能寻找到一种方法,增长对于某个感兴趣领域的知识。这本书包含了数百个网络议题,而每个议题都是错综复杂的,全都详加阐述则需要很多篇幅。举个例子,有二三十本书都描述了MPLS的原理及其演进技术,而本书的相关章节却只有二三十页。希望本书能够通过“图解”的方式来介绍现代网络的工作方式,并能帮助想了解MPLS的人找到那二三十本书,进而了解网络整体的面貌和运行原理。
像很多人一样,我学习网络知识,包括路由器和TCP/IP,主要是来源于书籍和别人口传面授,其中所缺少的内容则通过网络实践来弥补。我所看过的书籍都非常好,介绍了这项或那项技术是如何工作的,但是我常常无法看到真正工作时的场景。这本书则是知行合一,尝试给读者一个机会去观察真实的、运行中的、具有合适大小和规模的、可实际操作的网络环境,去了解各项任务是如何完成的,以探究屏幕背后的工作原理。毕竟,了解访问网站时发生了什么是一码事,而看到其背后具体的动作是另一码事。
本书的目的是让读者看到当其访问网站、写邮件、下载歌曲或通过互联网在电话中交谈时,网络中究竟发生了什么,使读者通过观察而了解现代网络的工作方式。
本书中学不到什么
列出书中不会涉及的内容看上去挺奇怪,但这总比读者通读全书后才发现并没有想找的东西要好。下面列出了本书不包括的内容。
本书并没有提到广受关注与使用的点对点协议(用于在全网分布式地部署服务器),没有提及聊天室或聊天服务使用的协议,也没有探索音乐和视频的下载服务。换句话说,书中不包括YouTube,IRC,iTunes或eBay的内容。
这些议题当然很有趣,也很重要,但限于篇幅,我们只能专注最重要的部分。
图解网络
在学习过程中,过于简单的实验性网络设置往往会阻挠读者进一步深入了解知识本质,他们渴望一个更复杂的、真实的、安全的网络环境,进而深入地探索TCP/IP协议、分层和应用,而不用担心他们所看到的仅仅局限于一个实验室环境,或担心某些实验可能导致整个网络瘫痪。
整个网络的客户端、服务器和路由器被少部分人在晚上或者周末时间整体操控的时代早已过去。现在的网络无时无刻不在工作,尤其是现在这个时代,在地球上的一半用户正在睡觉时,地球上的另一半用户可能处于上网的“黄金时间”。
过去,在我遇到新功能或程序并且告诉自己: “但愿有机会上手试试,看看它到底会有怎样的效果”时,会有各种阻力妨碍我。如今,在经历了近40年的网络实践工作之后,我才刚到达了终于可以坦言“我想去试试……”的境界,而此时也终于没人来告诉我“这个不能做”了。
我所就职的公司Juniper Networks Inc.鼎力支持了这本书籍的撰写,使得我不仅可以讨论TCP/IP协议或协议运行的案例,更能通过一系列客户端、服务器、路由器和连接(包括公共互联网)来图解网络中每一部分的深层原理。公司拥有足够的路由器和链路,并提供了所有可能需要的UNIX和Windows主机(反思之,事实上这些设备对于介绍网络来讲略有冗余,在大部分的章节里只用到少数路由器而已)。为了便于操作,我们没有把XP的主机升级到Vista(当时Vista刚刚出现不久),同时保留了当时比较流行的IE6。
基于Juniper Networks Inc.的帮助,我们构建了本书中需要的网络。虽然它花费了一点额外的时间,但物有所值。网络里包含了通过SONET链路连接的六个路由器、两个以太局域网、两对Windows XP的客户端和服务器(家庭和专业版)、一对红帽Linux主机(RH 9内核2.4.208)以及一对FreeBSD(4.10版)的主机。
图P.1展示了我们搭建的网络,该网络将出现在本书的每一章,用图解方式来说明所讨论的网络概念。
阅读方式
本书要求从开始到结束逐章按顺序进行阅读。这样的要求似乎很有趣,因为现在很多技术类书籍并不需要像读小说或传记那样的方式进行阅读。读者更倾向于在这些书中去找寻特定的目标,然后从特定的地方开始阅读。当然,这是读者的自由,但我们仍然建议采用逐章阅读的顺序。
如果不能像冒险故事那样扣人心弦,我仍然希望书中的故事如解谜一般环环紧扣。本书首先在第1章为读者提供了分层协议的介绍,之后直至结尾,讲述了一个以逻辑方式组织的自下而上贯穿整个互联网协议族的精彩故事。所以,如果时间足够,请你从头读到尾,因为每章的内容都依赖于前一章的知识基础。如果对网络概念还不了解,或刚刚开始了解,建议采用这种连续的方法阅读。对于那些职场老手,当然用哪种方式阅读都可以,但请记住所有的重点在本书中都是同等重要的。从中间开阅读时,读者可能会对某个议题所包含的内容产生疑惑,此时则需要从前面的章节中寻找答案。
开始阅读时通常会发现,每一章的结构都基本相同。前面的章节可能会和后面的章节格式不同,因为前面的章节要求对协议、应用或概念进行探索。而后面的章节则逐步开始图解和剖析协议是如何工作的。在某些情况下,书中讨论的内容不仅包含我们所搭建的网络,还将涉及整个全球互联网。需要注意的是,每章中网络配置的细节或多或少会有所变化,特别是那些涉及路由器的配置,这些变化在发生时会有详细的说明。
本书配套网站是www.elsevierdirect.com/companions/9780123745415,从中可以找到书中采集的许多文件,从而能够自行探索相关协议。
源代码
第3章讲解网络技术时使用了Aeropeek提供的无线网络采集的案例。第12章讲解套接字时使用了Michael J. Donahoo和Kenneth. L. Calerts所著的TCP/IP Sockets in C(Morgan Kaufmann,2001)中的案例程序。感谢这两个团队允许我使用其资料。
致谢
我要感谢每个领域的负责人利用他们的时间阅读和审查选定的章节。他们的建议使这本书变得更好,书中任何遗留的错误都算我的。
我要感谢Juniper Networks Inc.的同事们,他们耗费大量的时间和精力搭建了这个网络,他们也为这本书提供了巨大的帮助。首先要感谢的是Scott Kriens,他帮忙构建了一个适合创新和探索的网络环境。谢谢你,Scott!
其次还要感谢June Loy,Aviva Garrent,Michael Tallon,Partick Ames,Jason Lloyed,Mark Whittiker,Kent Ketell以及Jeremy Pruitt。
最后,我还想要感谢本书的主要技术评阅专家,Joel Jaeggli和Robin Primentel,感谢他们的认真审查、仔细修改并提出了很多建议。
主要技术评阅专家
Joel Jaeggli在诺基亚安全和移动连接小组工作。他的工作包括运营nokia.net(AS 14277)研究网络和支持诺基亚安全业务的战略规划。他之前在俄勒冈大学工作,参与了很多项目,包括网络创业资源中心、俄勒冈州路由视图项目、Beyond BGP项目和俄勒冈州的视频实验室。他活跃于多个工业界相关团体,包括IETF(工作组主席)和NANOG项目(两届程序委员会成员)。Joel经常作为一个指导者或者讲演者参与以互联网服务和安全为主题的地区性及国际网络会议。
Robin Primental目前是Facebook的网络工程师,负责维护网络,使网络可随Facebook的用户和应用程序的增长而增长。此前,Robin在谷歌和雅虎的产品网络团队工作。Robin也花了6年在Teradyne担任过网络、安全和UNIX底层结构工程师的工作。在他开始其计算机网络职业生涯之前,Robin曾在益华电脑系统设计和英特尔公司工作。在芯片部门工作时,Robin专门从事硅芯片布局和路由、VHDL行为逻辑验证以及片上存储器的门级逻辑验证。
展开