第1章 TCP/IP导引 1
1.1 什么是TCP/IP 1
1.2 TCP/IP的起源和历史 2
1.2.1 TCP/IP的设计目标 2
1.2.2 TCP/IP大事年表 2
1.2.3 谁“拥有”Internet 3
1.2.4 管理TCP/IP的标准化组织 4
1.2.5 IPv4与IPv6 4
1.3 TCP/IP标准和RFC 5
1.4 OSI网络参考模型概览 6
1.4.1 网络分层 6
1.4.2 ISO/OSI网络参考模型 7
1.4.3 协议层如何工作 8
1.5 TCP/IP网络模型 12
1.5.1 TCP/IP网络访问层 12
1.5.2 TCP/IP网络访问层协议 13
1.5.3 TCP/IP互联网层的功能 14
1.5.4 TCP/IP互联网层协议 14
1.5.5 TCP/IP传输层的功能 15
1.5.6 TCP/IP传输层协议 15
1.5.7 TCP/IP应用层 16
1.6 TCP/IP协议、服务、套接字与端口 17
1.6.1 TCP/IP协议号 17
1.6.2 TCP/IP端口号 18
1.6.3 TCP/IP套接字 19
1.7 TCP/IP中的数据封装 19
1.8 关于协议分析 20
1.8.1 协议分析的有用规则 20
1.8.2 协议分析器的要素 20
1.8.3 将协议分析器安装在网络上 24
本章小结 25
习题 26
动手项目 28
动手项目1-1:安装Wireshark 29
动手项目1-2:捕获基本数据包,查看基本数据包和统计信息 30
动手项目1-3:选择一个过滤器并捕获数据包 35
动手项目1-4:创建一个显示过滤器 35
动手项目1-5:查看一个完整的数据包解码 36
案例项目 36
案例项目1-1:解决小型网络中的网络连接问题 36
案例项目1-2:讨论升级到IPv6的理由 37
案例项目1-3:确定正在使用的是哪种IP协议 37
案例项目1-4:解释协议错误或广播数据流的后果 37
案例项目1-5:学习Internet的历史 37
第2章 IP寻址及其他 38
2.1 IP寻址基础 38
2.2 IPv4寻址 40
2.2.1 IPv4地址类 40
2.2.2 网络、广播、多播及其他特殊IP地址 41
2.2.3 广播数据包结构 42
2.2.4 IPv4网络与子网掩码 44
2.2.5 IPv4子网与超网 45
2.2.6 IPv4的无类域间路由 47
2.2.7 公用和专用IPv4地址 48
2.2.8 管理对IPv4地址的访问 49
2.3 获得公用IP地址 50
2.4 IPv4寻址模式 50
2.4.1 网络空间 51
2.4.2 主机空间 52
2.5 正在耗尽的IPv4地址空间 53
2.6 IPv6概述 55
2.7 IPv6寻址 56
2.7.1 地址格式与表示法 56
2.7.2 网络与主机部分 57
2.7.3 作用域标识符 57
2.7.4 接口标识符 57
2.7.5 URL中的原始IPv6地址 59
2.7.6 地址类型 59
2.7.7 地址分配 63
2.8 IPv6寻址与子网划分的因素 64
2.9 从IPv4转换到IPv6 65
本章小结 67
习题 68
动手项目 70
动手项目2-1:熟悉IPv6反向代理 70
动手项目2-2:计算域的IPv6反向代理 70
动手项目2-3:根据所需的IPv4子网数量,计算子网掩码 71
动手项目2-4:使用在线教程学习子网划分 71
动手项目2-5:使用子网计算器,确定某个IP地址的主机地址范围、广播地址以及其他相关值 72
动手项目2-6:查看与IPv6寻址有关的RFC文档 73
动手项目2-7:找出Windows计算机的IPv6地址 73
动手项目2-8:找出Mac计算机的IPv6地址 74
动手项目2-9:找出Linux计算机的IPv6地址 74
动手项目2-10:访问和使用Windows计算机的ARP表 75
动手项目2-11:访问和使用Linux计算机的ARP表 76
案例项目 77
案例项目2-1:设计一个公司网络 77
案例项目2-2:为单个站点实现一个网络 77
案例项目2-3:设计一个IPv6地址空间 77
第3章 基本的IP数据包结构: 首部与有效载荷 78
3.1 IP数据包与数据包结构 78
3.2 IPv4首部字段及其功能 78
3.2.1 版本字段 79
3.2.2 首部长度字段 79
3.2.3 TOS字段的功能:差分服务和拥塞控制 79
3.2.4 总长度字段 83
3.2.5 标识符字段 83
3.2.6 标志字段 84
3.2.7 分段偏移量字段 84
3.2.8 生存时间字段 84
3.2.9 协议字段 85
3.2.10 首部校验和字段 85
3.2.11 源地址字段 86
3.2.12 目的地址字段 86
3.2.13 可选字段 86
3.2.14 填充字段 86
3.3 IPv6首部字段及其功能 87
3.3.1 版本字段 87
3.3.2 流量类型字段 87
3.3.3 数据流标签字段 88
3.3.4 有效载荷长度字段 88
3.3.5 下一个首部字段的作用 88
3.3.6 Internet组管理协议 89
3.3.7 跳限制字段 89
3.3.8 源地址字段 89
3.3.9 目的地址字段 89
3.4 IPv6扩展首部 89
3.4.1 扩展首部的顺序 90
3.4.2 逐跳选项扩展首部 91
3.4.3 目的地选项扩展首部 91
3.4.4 路由扩展首部 92
3.4.5 分段扩展首部 92
3.4.6 认证扩展首部 93
3.4.7 封装安全有效载荷扩展首部和尾部 94
3.4.8 超大包 95
3.4.9 服务质量 95
3.4.10 路由器警告与逐跳选项 96
3.5 IPv6 MTU与数据包处理 97
3.6 IPv6的上层协议校验和 98
3.7 IPv6首部结构与IPv4首部结构 100
3.7.1 IPv4与IPv6首部比较 100
3.7.2 从IPv4转换到IPv6的小结 101
本章小结 102
习题 104
动手项目 107
动手项目3-1:使用Wireshark软件查看IPv4数据包首部 107
动手项目3-2:使用Wireshark软件查看IPv6数据包首部 108
动手项目3-3:在Wireshark软件中查看IPv6上层协议 110
案例项目 111
案例项目3-1:Wireshark与消息分析器 111
案例项目3-2:解释校验和错误 111
案例项目3-3:查看IPv6的下一个首部字段 112
第4章 TCP/IP中的数据链路层与网络层协议 113
4.1 数据链路协议 114
4.2 点到点协议 115
4.3 帧的类型与大小 117
4.3.1 以太网帧类型 117
4.3.2 Ethernet Ⅱ帧结构 117
4.4 IP环境中的硬件地址 120
4.4.1 地址解析协议与网络发现协议 120
4.4.2 ARP协议的特性与处理 121
4.4.3 NDP协议的特征与处理 128
4.5 理解IP协议 129
4.5.1 发送IP数据报 130
4.5.2 路由解析过程 131
4.5.3 IPv4与IPv6有何不同 133
4.6 IP数据包的生存周期 134
4.7 分段与重组 135
4.8 服务交付选项 137
4.9 优先级 137
4.10 服务类型 137
4.11 理解IP路由 139
4.11.1 在路由表中如何存放记录 140
4.11.2 路由协议和被路由协议 141
4.11.3 为路由协议分组 141
4.12 路由特性 145
4.12.1 路由汇聚 145
4.12.2 IPv4路由机制 145
4.13 IPv6路由的考虑因素 149
4.13.1 IPv6路由机制 149
4.13.2 IPv6中的多播侦听器发现 154
4.14 路由协议 159
4.14.1 IPv4路由协议 159
4.14.2 IPv6路由协议 166
4.15 管理内部网的路由 172
4.16 广域网上的路由 173
4.16.1 几个小型办公室 173
4.16.2 辐射型结构 173
4.16.3 多协议 173
4.16.4 移动用户 174
4.16.5 移动IP 174
4.16.6 本地区移动性 174
4.17 往返于Internet的路由 175
4.18 保护路由器和路由行为的安全 175
本章小结 176
习题 179
动手项目 182
动手项目4-1:管理本地ARP缓冲区 182
动手项目4-2:读取本地IPv4路由表 183
动手项目4-3:读取本地IPv6路由表和邻居缓冲区 183
动手项目4-4:用Wireshark软件查看IPv4和IPv6路由协议 183
案例项目 187
案例项目4-1:查看跟踪文件 187
案例项目4-2:基于跳限制值来确定IPv6数据报传输的距离 187
案例项目4-3:TCP/IP网络的QoS 187
第5章 Internet控制消息协议 188
5.1 ICMP基础 188
5.2 ICMPv4 190
5.2.1 RFC792概览 190
5.2.2 ICMPv4的首部 190
5.2.3 ICMPv4消息的类型 194
5.2.4 可变的ICMP结构和功能 198
5.3 ICMPv6 206
5.3.1 ICMPv6概述 206
5.3.2 ICMPv6消息的类型 206
5.3.3 ICMPv6首部 208
5.4 ICMPv6错误消息 208
5.4.1 目的地不可达消息 208
5.4.2 数据包太大消息 209
5.4.3 超时消息 210
5.4.4 参数问题消息 210
5.5 ICMPv6信息消息 211
5.5.1 Echo请求与Echo应答消息 211
5.5.2 路由器公告与路由器请求消息 212
5.5.3 邻居请求与邻居公告消息 213
5.5.4 重定向消息 214
5.5.5 路由器重编号消息 215
5.5.6 ICMPv4与ICMPv6消息的简单比较 216
5.6 路径MTU发现 216
5.7 ICMP测试和故障诊断顺序 218
5.7.1 使用ping进行可连接性测试 218
5.7.2 使用Traceroute进行路径发现 219
5.7.3 使用Pathping进行路径发现 220
5.7.4 使用ICMP的路径MTU发现 220
5.7.5 ICMP的路由序列 223
5.7.6 ICMPv4的安全问题 226
5.7.7 ICMPv6的安全问题 228
5.8 解码ICMP数据包 228
5.8.1 ICMPv4 228
5.8.2 ICMPv6 230
本章小结 231
习题 232
动手项目 234
动手项目5-1:在网络上使用ICMPv4 Echo请求消息ping另一个设备 234
动手项目5-2:为你的数据流构建一个过滤器 234
动手项目5-3:捕获ICMPv6 Echo请求与Echo应答数据包 235
动手项目5-4:捕获ICMPv6邻居请求与邻居公告消息 236
案例项目 238
案例项目5-1:确定默认网关设置 238
案例项目5-2:ICMPv6安全性问题 238
案例项目5-3:测试路径MTU发现 238
案例项目5-4:研究一下Jon Postel 238
第6章 IPv6中的邻居发现 239
6.1 理解邻居发现 239
6.2 IPv6邻居发现协议与IPv4协议的比较 240
6.3 邻居发现消息的格式 241
6.3.1 路由器请求消息 241
6.3.2 路由器公告消息 242
6.3.3 邻居请求消息 245
6.3.4 邻居公告消息 246
6.3.5 重定向消息 248
6.4 邻居发现选项的格式 250
6.4.1 源链路层地址与目标链路层地址选项 250
6.4.2 前缀信息选项 252
6.4.3 重定向首部选项 254
6.4.4 MTU选项 255
6.4.5 公告时间间隔选项 256
6.4.6 宿主智能体信息选项 256
6.4.7 路由信息选项 257
6.5 概念主机模型 257
6.5.1 在主机上存储邻居数据 258
6.5.2 概念发送算法 258
6.6 邻居发现过程 260
6.6.1 地址解析 260
6.6.2 邻居不可达检测 261
6.6.3 重复地址检测 262
6.6.4 路由器发现 263
6.6.5 重定向 265
本章小结 267
习题 268
动手项目 271
动手项目6-1:查看ICMPv6邻居发现消息 271
动手项目6-2:创建一个过滤器,查看特定主机的邻居公告消息 272
动手项目6-3:创建一个过滤器,查看邻居公告消息,该消息是对邻居请求重复地址检测消息的应答消息 273
动手项目6-4:创建一个过滤器,查看设置了M和O标志的路由器公告消息 274
动手项目6-5:创建一个过滤器,查看具有前缀信息的路由器公告消息 275
案例项目 276
案例项目6-1:理解邻居请求和邻居公告消息 276
案例项目6-2:排除网络问题 276
案例项目6-3:描述初始的IPv6主机通信 277
第7章 IP地址自动配置 278
7.1 理解自动寻址 279
7.2 动态主机配置协议介绍 279
7.2.1 DHCP的工作原理 280
7.2.2 租用的作用 281
7.2.3 DHCP软件部件 281
7.2.4 DHCP租用类型 282
7.2.5 DHCP租用的更多信息 283
7.3 IPv4自动配置 283
7.3.1 自动专用IP寻址(APIPA) 284
7.3.2 DHCP 284
7.4 IPv6自动配置 299
7.4.1 IPv6自动配置的类型 299
7.4.2 IPv6自动配置的地址的功能状态 303
7.4.3 结点网卡标识符 304
7.4.4 DHCPv6 307
7.4.5 IPv6自动配置过程 316
7.5 Microsoft Windows 2012 R2的DHCP范围 319
7.6 创建一个简单的DHCP服务器 319
本章小结 325
习题 326
动手项目 328
动手项目7-1:查看DHCP启动序列 329
动手项目7-2:查看DHCP更新、重新绑定和重新初始化序列 329
动手项目7-3:查看DHCPv6启动序列 330
动手项目7-4:查看和管理DHCP 与 DHCPv6租借信息 330
案例项目 331
案例项目7-1:DHCP设计与实现 331
案例项目7-2:静态与动态IPv4地址问题 332
案例项目7-3:解决DHCP地址问题 332
案例项目7-4:DHCPv6设计与实现 332
第8章 IP网络中的名称解析 333
8.1 理解名称解析的基础 333
8.2 网络名称解析协议 334
8.2.1 LLMNR 334
8.2.2 DNS 335
8.2.3 DNS数据库结构 337
8.2.4 DNS名称空间 338
8.2.5 DNS数据库记录 339
8.2.6 委托DNS授权 340
8.2.7 DNS服务器的类型 340
8.3 域名服务器的工作原理 342
8.3.1 递归查询 342
8.3.2 迭代或非递归查询 343
8.4 DNS缓存的重要性 344
8.5 DNS配置文件和资源记录格式 345
8.5.1 授权开始记录 345
8.5.2 地址和别名记录 346
8.5.3 将地址映射为名称 348
8.6 IPv6网络中的名称解析 349
8.6.1 IPv6中的DNS 350
8.6.2 源地址与目的地址选择 352
8.6.3 源地址选择算法 353
8.6.4 目的地址选择算法 356
8.6.5 使用地址选择 357
8.7 Windows操作系统对名称解析的支持 359
8.7.1 DNS解析器 359
8.7.2 DNS服务器服务 360
8.7.3 DNS动态更新 362
8.7.4 源地址与目的地址选择 363
8.7.5 LLMNR支持 364
8.7.6 使用ipv6-1iteral.net名称 366
8.7.7 对等体名称解析协议 366
8.8 解决名称解析问题与失败的故障 368
8.8.1 故障的常见原因 369
8.8.2 解决DNS问题的工具 370
8.8.3 netstat 370
8.8.4 nslookup 371
本章小结 374
习题 375
动手项目 377
动手项目8-1:作用于DNS解析器缓存 377
动手项目8-2:设置Windows计算机来使用DNS动态更新 379
动手项目8-3:把IPv6地址转换为一个ipv6-literal.net名称 380
动手项目8-4:捕获并查看你的DNS数据流 380
动手项目8-5:找出Linux计算机的DNS解析器 381
动手项目8-6:使用dig工具来进行DNS查询任务 382
案例项目 385
案例项目8-1:收集IPv6地址数据以配置名称服务器 385
案例项目8-2:请解释一下只用于缓存的服务器的使用 385
案例项目8-3:理解在网络基础设施中所需要的最少DNS服务器数量 385
第9章 TCP/IP传输层协议 386
9.1 理解UDP与TCP 386
9.1.1 IPv4与IPv6上的UDP 387
9.1.2 IPv4与IPv6上的TCP 389
9.2 UDP 390
9.2.1 UDP首部字段和功能 391
9.2.2 UDP端口号与进程 394
9.2.3 UDP与IPv6 395
9.3 TCP 396
9.3.1 TCP与IPv4 396
9.3.2 TCP与IPv6 411
9.4 UDP、TCP与IPv6扩展首部 412
9.5 在TCP和UDP之间做出选择 413
本章小结 414
习题 415
动手项目 417
动手项目9-1:查看UDP首部结构 417
动手项目9-2:查看IPv4与IPv6的TCP首部 418
动手项目9-3:查看TCP握手进程 419
案例项目 420
案例项目9-1:使用Wireshark软件清查网络 420
案例项目9-2:发现动态端口号 420
案例项目9-3:TCP窗口大小问题 420
案例项目9-4:理解重复ACK 421
第10章 从IPv4转换到IPv6 422
10.1 IPv4与IPv6如何相互作用 422
10.1.1 双重栈技术 423
10.1.2 通过IPv4云的隧道技术 423
10.1.3 采用IPv6的进展 424
10.1.4 转换到IPv6的实际问题 424
10.1.5 互操作性 424
10.1.6 网络元素 425
10.1.7 软件 425
10.1.8 从Windows的角度看IPv6转换 426
10.1.9 可用性 427
10.1.10 下一步的工作 427
10.2 IPv4/IPv6混合网络与网络结点 428
10.2.1 基本的混合网络模型 428
10.2.2 嵌套的混合网络模型 429
10.2.3 真实的混合网络模型 429
10.3 IPv6转换地址 430
10.4 IPv4/IPv6转换机制 431
10.5 双重IP层体系结构 432
10.6 双重栈体系结构 433
10.6.1 双重体系结构与隧道技术 434
10.6.2 IPv6-over-IPv4隧道技术 434
10.6.3 DNS基础设施 435
10.7 IPv4与IPv6混合的隧道配置 436
10.7.1 路由器到路由器的隧道配置 436
10.7.2 主机到路由器与路由器到主机的隧道配置 437
10.7.3 主机到主机的隧道配置 438
10.7.4 隧道技术的类型 438
10.8 ISATAP隧道技术 439
10.8.1 ISATAP概述 439
10.8.2 ISATAP的组件 440
10.8.3 ISATAP结点的路由器发现 441
10.8.4 ISATAP寻址与路由 441
10.8.5 ISATAP的通信 443
10.8.6 配置一台ISATAP路由器 444
10.9 6to4隧道技术 446
10.9.1 6to4概述 446
10.9.2 6to4的组件 447
10.9.3 6to4寻址与路由 448
10.9.4 6to4通信 448
10.9.5 ISATAP与6to4一起使用 449
10.10 Teredo隧道技术 450
10.10.1 Teredo概述 450
10.10.2 Teredo的组件 450
10.10.3 Teredo寻址与路由 451
10.10.4 Teredo的处理过程 452
本章小结 454
习题 456
动手项目 458
动手项目10-1:查看ISATAP网络中的数据流 458
动手项目10-2:查看6to4捕获文件 460
动手项目10-3:查看一个Teredo捕获文件和路由器请求数据包 461
案例项目 462
案例项目10-1:准备一个网络,进行IPv4-to-IPv6转换技术部署 462
案例项目10-2:配置要使用Teredo的Windows 7客户端 462
案例项目10-3:绘制ISATAP封装首部 462
第11章 部署IPv6 463
11.1 理解IPv6部署 463
11.2 规划IPv6部署 464
11.2.1 成功准则 465
11.2.2 体系结构的决策 465
11.2.3 迁移与转换技术 472
11.2.4 要完成的任务 476
11.3 部署和使用IPv6 481
11.3.1 构建一个IPv6测试/示范网络 481
11.3.2 开始迁移应用程序 482
11.3.3 把只支持IPv4的主机升级到支持IPv4/IPv6 483
11.3.4 使用6to4创建一个隧道式的IPv6环境 485
11.3.5 使用ISATAP创建一个隧道式的IPv6环境 487
11.4 探讨一些网络管理任务 489
本章小结 490
习题 491
动手项目 493
动手项目11-1:探索路由服务器 493
动手项目11-2:探索IPv6配置 497
案例项目 497
案例项目11-1:创建一个测试实验网络 497
案例项目11-2:创建一个迁移规划 497
第12章 构建安全的TCP/IP环境 498
12.1 理解网络安全性基础 499
12.2 IP安全的原则 500
12.3 常见的TCP/IP攻击、探测与入侵 501
12.3.1 主要术语 501
12.3.2 TCP/IP的主要弱点 502
12.3.3 灵活性与安全性 503
12.4 与IP有关的常见攻击类型 503
12.5 哪些IP服务最易受攻击 504
12.6 IP攻击的各个阶段 506
12.6.1 侦探与发现 506
12.6.2 攻击阶段 508
12.6.3 掩盖阶段 508
12.7 详论常见攻击与入侵点 508
12.7.1 病毒、间谍软件与类似安全威胁 508
12.7.2 拒绝服务攻击 509
12.7.3 分布式拒绝服务攻击 509
12.7.4 缓冲区溢出或过载 510
12.7.5 欺骗 510
12.7.6 TCP会话劫持 510
12.7.7 网络嗅探 511
12.8 维护IP安全性 512
12.8.1 应用安全补丁与修复 512
12.8.2 知道要堵住哪些端口 513
12.8.3 使用IPSec 514
12.8.4 保护网络外设 515
12.8.5 实现防火墙 517
12.8.6 在IP安全中IDS与IPS的作用 519
12.9 蜜罐与蜜网 520
12.10 实行安全意识培训 520
本章小结 520
习题 521
动手项目 523
动手项目12-1:在Wireshark中查看本地扫描 523
动手项目12-2:在Wireshark中查看端口扫描 524
动手项目12-3:在Wireshark中堵住端口 524
动手项目12-4:在Wireshark中查看数据流来自的端口号 525
动手项目12-5:在Wireshark中查看基于IPv4的特定类型端口扫描 525
动手项目12-6:在Wireshark中查看基于IPv6的特定类型端口扫描 526
案例项目 527
案例项目12-1:防火墙过滤器 527
案例项目12-2:防火墙研究、规划与实现 527
附录 学生与教师在线资源 528
术语表 530