欢迎光临
免费的PDF电子书下载网站

TCP/IP协议原理与应用(第5版) PDF下载

编辑推荐

深入剖析TCP/IP协议。 ;

内容简介

TCP/IP是支持互联网运行的一套协议的总称,TCP和IP是该协议族中的两个核心协议。本书深入介绍了TCP/IP的模型、协议、服务以及标准。本书采用理论与实践相结合的方法,利用各种网络工具(如Wireshark),通过捕获网络上的真实数据包,并把数据包的内部结构以可视化的形式详细分解,让读者能够以直观的方式了解TCP/IP的精髓。此外,通过每章末尾的习题、动手项目和案例项目,深化读者对关键概念的理解,掌握常见网络管理和监视工具的运用。

作者简介

暂无

TCP/IP协议原理与应用(第5版) PDF下载

目录

目录

第1章  ;TCP/IP导引 11.1  ;什么是TCP/IP 11.2  ;TCP/IP的起源和历史 21.2.1  ;TCP/IP的设计目标 21.2.2  ;TCP/IP大事年表 21.2.3  ;谁“拥有”Internet 31.2.4  ;管理TCP/IP的标准化组织 41.2.5  ;IPv4与IPv6 41.3  ;TCP/IP标准和RFC 51.4  ;OSI网络参考模型概览 61.4.1  ;网络分层 61.4.2  ;ISO/OSI网络参考模型 71.4.3  ;协议层如何工作 81.5  ;TCP/IP网络模型 121.5.1  ;TCP/IP网络访问层 121.5.2  ;TCP/IP网络访问层协议 131.5.3  ;TCP/IP互联网层的功能 141.5.4  ;TCP/IP互联网层协议 141.5.5  ;TCP/IP传输层的功能 151.5.6  ;TCP/IP传输层协议 151.5.7  ;TCP/IP应用层 161.6  ;TCP/IP协议、服务、套接字与端口 171.6.1  ;TCP/IP协议号 171.6.2  ;TCP/IP端口号 181.6.3  ;TCP/IP套接字 191.7  ;TCP/IP中的数据封装 191.8  ;关于协议分析 201.8.1  ;协议分析的有用规则 201.8.2  ;协议分析器的要素 201.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寻址及其他 382.1  ;IP寻址基础 382.2  ;IPv4寻址 402.2.1  ;IPv4地址类 402.2.2  ;网络、广播、多播及其他特殊IP地址 412.2.3  ;广播数据包结构 422.2.4  ;IPv4网络与子网掩码 442.2.5  ;IPv4子网与超网 452.2.6  ;IPv4的无类域间路由 472.2.7  ;公用和专用IPv4地址 482.2.8  ;管理对IPv4地址的访问 492.3  ;获得公用IP地址 502.4  ;IPv4寻址模式 502.4.1  ;网络空间 512.4.2  ;主机空间 522.5  ;正在耗尽的IPv4地址空间 532.6  ;IPv6概述 552.7  ;IPv6寻址 562.7.1  ;地址格式与表示法 562.7.2  ;网络与主机部分 572.7.3  ;作用域标识符 572.7.4  ;接口标识符 572.7.5  ;URL中的原始IPv6地址 592.7.6  ;地址类型 592.7.7  ;地址分配 632.8  ;IPv6寻址与子网划分的因素 642.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数据包结构: 首部与有效载荷 783.1  ;IP数据包与数据包结构 783.2  ;IPv4首部字段及其功能 783.2.1  ;版本字段 793.2.2  ;首部长度字段 793.2.3  ;TOS字段的功能:差分服务和拥塞控制 793.2.4  ;总长度字段 833.2.5  ;标识符字段 833.2.6  ;标志字段 843.2.7  ;分段偏移量字段 843.2.8  ;生存时间字段 843.2.9  ;协议字段 853.2.10  ;首部校验和字段 853.2.11  ;源地址字段 863.2.12  ;目的地址字段 863.2.13  ;可选字段 863.2.14  ;填充字段 863.3  ;IPv6首部字段及其功能 873.3.1  ;版本字段 873.3.2  ;流量类型字段 873.3.3  ;数据流标签字段 883.3.4  ;有效载荷长度字段 883.3.5  ;下一个首部字段的作用 883.3.6  ;Internet 组管理协议 893.3.7  ;跳限制字段 893.3.8  ;源地址字段 893.3.9  ;目的地址字段 893.4  ;IPv6扩展首部 893.4.1  ;扩展首部的顺序 903.4.2  ;逐跳选项扩展首部 913.4.3  ;目的地选项扩展首部 913.4.4  ;路由扩展首部 923.4.5  ;分段扩展首部 923.4.6  ;认证扩展首部 933.4.7  ;封装安全有效载荷扩展首部和尾部 943.4.8  ;超大包 953.4.9  ;服务质量 953.4.10  ;路由器警告与逐跳选项 963.5  ;IPv6 MTU与数据包处理 973.6  ;IPv6的上层协议校验和 983.7  ;IPv6首部结构与IPv4首部结构 1003.7.1  ;IPv4与IPv6首部比较 1003.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中的数据链路层与网络层协议 1134.1  数据链路协议 1144.2  点到点协议 1154.3  帧的类型与大小 1174.3.1  以太网帧类型 1174.3.2  Ethernet Ⅱ帧结构 1174.4  IP环境中的硬件地址 1204.4.1  地址解析协议与网络发现协议 1204.4.2  ARP协议的特性与处理 1214.4.3  NDP协议的特征与处理 1284.5  理解IP协议 1294.5.1  发送IP数据报 1304.5.2  路由解析过程 1314.5.3  IPv4与IPv6有何不同 1334.6  IP数据包的生存周期 1344.7  分段与重组 1354.8  服务交付选项 1374.9  优先级 1374.10  服务类型 1374.11  理解IP路由 1394.11.1  在路由表中如何存放记录 1404.11.2  路由协议和被路由协议 1414.11.3  为路由协议分组 1414.12  路由特性 1454.12.1  路由汇聚 1454.12.2  IPv4路由机制 1454.13  IPv6路由的考虑因素 1494.13.1  IPv6路由机制 1494.13.2  IPv6中的多播侦听器发现 1544.14  路由协议 1594.14.1  IPv4路由协议 1594.14.2  IPv6路由协议 1664.15  管理内部网的路由 1724.16  广域网上的路由 1734.16.1  几个小型办公室 1734.16.2  辐射型结构 1734.16.3  多协议 1734.16.4  移动用户 1744.16.5  移动IP 1744.16.6  本地区移动性 1744.17  往返于Internet的路由 1754.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控制消息协议 1885.1  ICMP基础 1885.2  ICMPv4 1905.2.1  RFC 792概览 1905.2.2  ICMPv4的首部 1905.2.3  ICMPv4消息的类型 1945.2.4  可变的ICMP结构和功能 1985.3  ICMPv6 2065.3.1  ICMPv6概述 2065.3.2  ICMPv6消息的类型 2065.3.3  ICMPv6首部 2085.4  ICMPv6错误消息 2085.4.1  目的地不可达消息 2085.4.2  数据包太大消息 2095.4.3  超时消息 2105.4.4  参数问题消息 2105.5  ICMPv6信息消息 2115.5.1  Echo请求与Echo应答消息 2115.5.2  路由器公告与路由器请求消息 2125.5.3  邻居请求与邻居公告消息 2135.5.4  重定向消息 2145.5.5  路由器重编号消息 2155.5.6  ICMPv4与ICMPv6消息的简单比较 2165.6  路径MTU发现 2165.7  ICMP测试和故障诊断顺序 2185.7.1  使用ping进行可连接性测试 2185.7.2  使用Traceroute进行路径发现 2195.7.3  使用Pathping进行路径发现 2205.7.4  使用ICMP的路径MTU发现 2205.7.5  ICMP的路由序列 2235.7.6  ICMPv4的安全问题 2265.7.7  ICMPv6的安全问题 2285.8  解码ICMP数据包 2285.8.1  ICMPv4 2285.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中的邻居发现 2396.1  理解邻居发现 2396.2  IPv6邻居发现协议与IPv4协议的比较 2406.3  邻居发现消息的格式 2416.3.1  路由器请求消息 2416.3.2  路由器公告消息 2426.3.3  邻居请求消息 2456.3.4  邻居公告消息 2466.3.5  重定向消息 2486.4  邻居发现选项的格式 2506.4.1  源链路层地址与目标链路层地址选项 2506.4.2  前缀信息选项 2526.4.3  重定向首部选项 2546.4.4  MTU选项 2556.4.5  公告时间间隔选项 2566.4.6  宿主智能体信息选项 2566.4.7  路由信息选项 2576.5  概念主机模型 2576.5.1  在主机上存储邻居数据 2586.5.2  概念发送算法 2586.6  邻居发现过程 2606.6.1  地址解析 2606.6.2  邻居不可达检测 2616.6.3  重复地址检测 2626.6.4  路由器发现 2636.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地址自动配置 2787.1  理解自动寻址 2797.2  动态主机配置协议介绍 2797.2.1  DHCP的工作原理 2807.2.2  租用的作用 2817.2.3  DHCP软件部件 2817.2.4  DHCP租用类型 2827.2.5  DHCP租用的更多信息 2837.3  IPv4自动配置 2837.3.1  自动专用IP寻址(APIPA) 2847.3.2  DHCP 2847.4  IPv6自动配置 2997.4.1  IPv6自动配置的类型 2997.4.2  IPv6自动配置的地址的功能状态 3037.4.3  结点网卡标识符 3047.4.4  DHCPv6 3077.4.5  IPv6自动配置过程 3167.5  Microsoft Windows 2012 R2的DHCP范围 3197.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网络中的名称解析 3338.1  理解名称解析的基础 3338.2  网络名称解析协议 3348.2.1  LLMNR 3348.2.2  DNS 3358.2.3  DNS数据库结构 3378.2.4  DNS名称空间 3388.2.5  DNS数据库记录 3398.2.6  委托DNS授权 3408.2.7  DNS服务器的类型 3408.3  域名服务器的工作原理 3428.3.1  递归查询 3428.3.2  迭代或非递归查询 3438.4  DNS缓存的重要性 3448.5  DNS配置文件和资源记录格式 3458.5.1  授权开始记录 3458.5.2  地址和别名记录 3468.5.3  将地址映射为名称 3488.6  IPv6网络中的名称解析 3498.6.1  IPv6中的DNS 3508.6.2  源地址与目的地址选择 3528.6.3  源地址选择算法 3538.6.4  目的地址选择算法 3568.6.5  使用地址选择 3578.7  Windows操作系统对名称解析的支持 3598.7.1  DNS解析器 3598.7.2  DNS服务器服务 3608.7.3  DNS动态更新 3628.7.4  源地址与目的地址选择 3638.7.5  LLMNR支持 3648.7.6  使用ipv6-literal.net名称 3668.7.7  对等体名称解析协议 3668.8  解决名称解析问题与失败的故障 3688.8.1  故障的常见原因 3698.8.2  解决DNS问题的工具 3708.8.3  netstat 3708.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传输层协议 3869.1  理解UDP与TCP 3869.1.1  IPv4与IPv6上的UDP 3879.1.2  IPv4与IPv6上的TCP 3899.2  UDP 3909.2.1  UDP首部字段和功能 3919.2.2  UDP端口号与进程 3949.2.3  UDP与IPv6 3959.3  TCP 3969.3.1  TCP与IPv4 3969.3.2  TCP与IPv6 4119.4  UDP、TCP与IPv6扩展首部 4129.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 42210.1  IPv4与IPv6如何相互作用 42210.1.1  双重栈技术 42310.1.2  通过IPv4云的隧道技术 42310.1.3  采用IPv6的进展 42410.1.4  转换到IPv6的实际问题 42410.1.5  互操作性 42410.1.6  网络元素 42510.1.7  软件 42510.1.8  从Windows的角度看IPv6转换 42610.1.9  可用性 42710.1.10  下一步的工作 42710.2  IPv4/IPv6混合网络与网络结点 42810.2.1  基本的混合网络模型 42810.2.2  嵌套的混合网络模型 42910.2.3  真实的混合网络模型 42910.3  IPv6转换地址 43010.4  IPv4/IPv6转换机制 43110.5  双重IP层体系结构 43210.6  双重栈体系结构 43310.6.1  双重体系结构与隧道技术 43410.6.2  IPv6-over-IPv4隧道技术 43410.6.3  DNS基础设施 43510.7  IPv4与IPv6混合的隧道配置 43610.7.1  路由器到路由器的隧道配置 43610.7.2  主机到路由器与路由器到主机的隧道配置 43710.7.3  主机到主机的隧道配置 43810.7.4  隧道技术的类型 43810.8  ISATAP隧道技术 43910.8.1  ISATAP概述 43910.8.2  ISATAP的组件 44010.8.3  ISATAP结点的路由器发现 44110.8.4  ISATAP寻址与路由 44110.8.5  ISATAP的通信 44310.8.6  配置一台ISATAP路由器 44410.9  6to4隧道技术 44610.9.1  6to4概述 44610.9.2  6to4的组件 44710.9.3  6to4寻址与路由 44810.9.4  6to4通信 44810.9.5  ISATAP与6to4一起使用 44910.10  Teredo隧道技术 45010.10.1  Teredo概述 45010.10.2  Teredo的组件 45010.10.3  Teredo寻址与路由 45110.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 46311.1  理解IPv6部署 46311.2  规划IPv6部署 46411.2.1  成功准则 46511.2.2  体系结构的决策 46511.2.3  迁移与转换技术 47211.2.4  要完成的任务 47611.3  部署和使用IPv6 48111.3.1  构建一个IPv6测试/示范网络 48111.3.2  开始迁移应用程序 48211.3.3  把只支持IPv4的主机升级到支持IPv4/IPv6 48311.3.4  使用6to4创建一个隧道式的IPv6环境 48511.3.5  使用ISATAP创建一个隧道式的IPv6环境 48711.4  探讨一些网络管理任务 489本章小结 490习题 491动手项目 493动手项目11-1:探索路由服务器 493动手项目11-2:探索IPv6配置 497案例项目 497案例项目11-1:创建一个测试实验网络 497案例项目11-2:创建一个迁移规划 497第12章  构建安全的TCP/IP环境 49812.1  理解网络安全性基础 49912.2  IP安全的原则 50012.3  常见的TCP/IP攻击、探测与入侵 50112.3.1  主要术语 50112.3.2  TCP/IP的主要弱点 50212.3.3  灵活性与安全性 50312.4  与IP有关的常见攻击类型 50312.5  哪些IP服务最易受攻击 50412.6  IP攻击的各个阶段 50612.6.1  侦探与发现 50612.6.2  攻击阶段 50812.6.3  掩盖阶段 50812.7  详论常见攻击与入侵点 50812.7.1  病毒、间谍软件与类似安全威胁 50812.7.2  拒绝服务攻击 50912.7.3  分布式拒绝服务攻击 50912.7.4  缓冲区溢出或过载 51012.7.5  欺骗 51012.7.6  TCP会话劫持 51012.7.7  网络嗅探 51112.8  维护IP安全性 51212.8.1  应用安全补丁与修复 51212.8.2  知道要堵住哪些端口 51312.8.3  使用IPSec 51412.8.4  保护网络外设 51512.8.5  实现防火墙 51712.8.6  在IP安全中IDS与IPS的作用 51912.9  蜜罐与蜜网 52012.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  XTCP/IP协议原理与应用(第5版)
XI目录



前沿


前言
   欢迎阅读本书第5版!TCP/IP为Transmission Control Protocol/Internet Protocol(传输控制协议/网际协议)的缩写,它定义了一组宽泛的、使得Internet能像我们今天所看到的那样发挥功能的协议和服务。在介绍TCP/IP的过程中,本书提供了丰富的实际示例和大量的动手项目,不仅强化了关键概念,并传授重要监视和管理工具的用法。本书还包含了丰富的协议跟踪或解码案例,它们将帮助你理解网络上的TCP/IP看起来是什么样、它是如何工作的。  本书深入介绍了TCP/IP的所有重要模型、协议、服务以及标准,它们决定了TCP/IP在现代网络上的行为。在本书的每一章都给出了一些主要问题,以强调本章要介绍的概念,帮助读者掌握与TCP/IP的交互。本书除了有丰富的习题,还有大量详尽的动手项目,它们提供了在网络上安装、配置、使用和管理TCP/IP的第一手经验。最后,为了把每一章所介绍的概念应用到现实中,本书还给出了很多案例项目,这些项目提出了一些问题,并要求读者针对现实网络面临的各种情形给出创造性的解决方案。读者对象  本书旨在满足有志于深入学习TCP/IP网络的个人以及从事信息系统管理的专业人士。这些材料经过专门设计,让读者在管理基于TCP/IP的网络基础设施上——或者仅仅使用它的协议套件,或者与其他协议套件一起使     用——发挥主要作用。学完整本书的读者应该能够精细地认识、分析以及诊断和解决各种TCP/IP网络问题和现象。本书内容  第1章首先概述了TCP/IP,然后介绍了名为RFC的标准文档的结构和起源,这些文档描述和控制了TCP/IP协议、服务以及事件。接着,考察了用于组网的开放系统互连(Open System Interconnection,OSI)参考模型,该模型由国际标准化组织(International Organization for Standardization,ISO)实行了标准化,本章也将这个标准模型与TCP/IP支撑模型进行了比较。然后,简要介绍了TCP/IP协议、服务、套接字和端口,最后概述了协议分析。Wireshark是一种协议分析器,它可以捕获网络数据包(包括TCP/IP),对数据包进行解码,并可以显示其内容,该工具在本书后面部分
将发挥重要作用。  第2章介绍管理唯一IP地址(包括32位IPv4和128位IPv6地址)所涉及的错综复杂关系。以解剖数字IPv4地址作为开端,这一章考察了IPv4地址类,特别是广播与多播地址、子网与超网等特殊情况,并且阐述了为什么会存在无类IPv4地址、公用与专有IPv4地址以及IPv4寻址模式。这一章的其余部分介绍了IPv6,包括地址格式与表示方法、地址形式与类型,以及地址分配。此外,还介绍了寻址模式和子网划分因素,以及讨论如何管理从IPv4到IPv6地址的转换。  第3章介绍IP数据包(IPv4和IPv6)的主要组成部分:首部描述了用于数据包路由、转发和过滤等的信息,有效载荷包含了数据包要传输的数据。本章介绍了IPv4和IPv6首部的结构,并进行了详细阐述,此外还介绍了IPv6扩展首部,以及传输与数据包处理控制的使用。本章最后把IPv4与IPv6的首部结构进行了对比,以阐述IPv6进行了哪些重新设计和修改。  第4章描述了运行在OSI参考模型的数据链路层和网络层上的TCP/IP协议,讨论了一般意义上的数据链路层协议,考察了IP帧类型,并议论了IP环境中的硬件地址,以及支持其使用的各种协议——特别是IPv4的ARP和RARP,以及IPv6的NDP(Neighbor Discovery Protocol,邻居发现协议)。本章还涵盖了网络层的最重要TCP/IP协议——网际协议以及IPv4和IPv6的路由协议、路由机制与路由特点,包括RIPv1与RIPv2、OSPF、EIGRP和BGP,并介绍了针对IPv4和IPv6协议和行为要考虑的因素。  第5章介绍了TCP/IP的关键网络层协议:其任务是将有关IP流量的状态和出错消息传递给其发送者以及传递给“其他感兴趣设备”,例如路由器或交换机。本章首先介绍了ICMPv4和ICMPv6的结构和功能,然后考察了ICMP测试和故障诊断方法、安全问题、ICMP消息类型和代码,最后介绍了ICMP和解码ICMP数据包的完整测试和故障诊断方法。  第6章介绍NDP,以阐述在IPv6网络上邻居发现是如何工作的,内容包括NDP与IPv4相关协议的对比,各种NDP消息格式与选项,以及IPv6网络上的整个邻居发现过程。  第7章介绍使用在IPv4和IPv6网络上的各种自动寻址模式和机制,包括动态主机配置协议(Dynamic Host Configuration Protocol,DHCP),以及用于IPv4的自动配置机制(APIPA和DHCP)和用于IPv6的自动配置机制(主机/网卡地址确定、无状态与有状态地址自动配置,以及DHCPv6)。  第8章介绍用于把人类可读的网络名称和地址符号解析为机器可理解的网络地址的主要服务,内容包括名称解析基础,以及各种网络名称解析协议。本章详细介绍了IPv4和IPv6名称解析与域名服务(Domain Name Service,DNS),以及Windows操作系统支持的名称解析,包括设置、配置、故障诊断和相关实用工具等内容。  第9章介绍运行在OSI参考模型传输层上的两个关键协议——重型的、健壮的、可靠的传输控制协议(TCP),以及轻型但速度更快的用户数据报协议(UDP)。本章详细介绍了TCP,尤其是其数据包结构和功能(包括TCP的IPv6扩展首部),并简要介绍了UDP。本章最后介绍了这两个协议的常见用法。  第10章介绍当在同一个网络上IPv4与IPv6共存时,需要处理的问题和应用的技术,在可预见的将来,很多网络肯定将面临这种情况。本章介绍了IPv4与IPv6进行交互的方式,阐述了IPv4/IPv6混合网络和结点类型,探讨了使从IPv4到IPv6的转变尽可能简单的地址转换与交换机制。本章还详细介绍了信道机制和协议,包括ISATAP、6to4和Teredo。  第11章介绍了Internet专业人员最感兴趣的领域,也就是在现代的TCP/IP网络上理解、规划、部署和使用IPv6。本章内容包括评估潜在的软件和硬件更改、寻址模式与自动寻址,以及针对不同类别或类型的网络服务的优先级模式。  第12章介绍了网络安全基础,特别强调了IP安全问题。本章还介绍了一些关键主题,包括外围安全、基础设施安全以及主机设备安全。  本书最后给出了一个附录A,介绍了本书配套网站上提供的所需软件和跟踪文件。在线内容  本书配套网站还提供了如下内容(不止这些):* 本书提到过的重要RFC列表,以及有关IPv6的RFC。
 RFC是一个动态的文档集,因此,任何时候列出的列表,都只是体现当时的情况。关于最新的文档和标准,请访问在线RFC。* 用于Windows桌面或Windows服务器环境下的与TCP/IP有关的命令行实用工具  列表。* 在本书图表中使用到的Windows桌面或Windows服务器的注册表设置。新增内容* 针对Windows 10、Windows Server 2012和Wireshark v2.0.0,本书内容进行了全面更新。* 增加了Mac OS X和Ubuntu Linux操作系统下的示例。* 改进了分析问题、研究问题,更新了实验内容,帮助读者巩固以前所学知识。* 本书配套网站上新增的其他内容。本书特点  为了确保有成功的学习体验,本书包含了下述教学特点。* 本章内容:本书中的每一章都以该章必须掌握的关键观念的列表作为开始。这个列表提供了该章内容的快速参考以及有用的学习辅助。* 图示及表格:大量服务器屏幕和部件的图示以可视化的形式展示了常见设置步骤、理论与概念,帮助读者学习。此外,许多表格提供了实践和理论的细节和对比,可用于快速浏览主题。本书还包含了来自IPv4和IPv6的大量协议跟踪。由于这两种协议在格式上不同,因此,它们的跟踪文件也稍微有所不同,但它们或多或少都提供了一些相同的信息,只有一些微小的差别。* 章末材料:每一章的末尾包含了下述特点来巩固本章介绍的材料。* 本章小结:提供了一个符号列表,给出了简明但完整的本章小结。* 习题:一系列习题,测试对该章最重要概念的掌握。* 动手项目:动手实践项目帮助应用该章学习的知识。* 案例项目:案例带你见识现实世界的场景。* 学生和教师在线资源:在本书配套网站上,提供了一些压缩文件,包含完成本书的动手项目所需的跟踪(数据)文件和软件(Wireshark for Windows、Bitcricket IP Subnet Calculator)。此外,还有关于简易网络工具和实用程序的文档说明。使用本书的学生和教师资源可访问www.cengage.com。致谢  衷心感谢Course Technology公司提供机会修订这本涵盖IPv6的教材。我们衷心感谢他们的耐心和宽容,特别是我们的产品经理Kristin McNary,产品经理助理Amy Savino,内容开发人员Natalie Pashoukos,内容项目经理Brook Baker,以及负责书稿质量保证的技术编辑Mark Mirrotto。感谢优秀的开发编辑Kent Williams,其深入和细致入微的工作使这些材料成了现在看到的这种优雅形式。  也衷心地感谢协助将本书变为成果的幕后作者团队经理Kim Lindros,他以主人翁的责任感加入到了本项目的管理中。  James Pyles:感谢给我机会为本书第5版进行更新。特别感谢Ed Tittel和Kim Lindros邀请我参加进这个项目。我也非常感谢Jeffrey L. Carrell,使得我很高兴坐下来学习神秘的IPv6。还要感谢Mary Kyle优秀的管理技巧和无尽的耐心,感谢Tom Lancaster对本书无价的奉献。感谢我的妻子Lin的大力支持。  Jeffrey L. Carrell:有了上帝的帮助,任何事情都有可能。感谢我的妻子,也是我最好的朋友Cynthia的关爱、鼓励和忍耐,真心感谢在我的生命中有你。感谢我们的朋友和同事,为我提供素材和鼓励。感谢Ed Tittel为我提供这个机会、鼓舞和指导。这是一个巨大、令人兴奋又令人生畏的项目。感谢Kim Lindros和Mary Kyle,他们推动我们不断前进。没有你们,我不可能完成本书。最后,感谢James Pyles和Tom Lancaster,他们对本书内容进行了更新,并补充了很多新内容,没有你们,也不可能完成本书。  Ed Tittel:感谢James Pyles和Tom Lancaster帮助我们提供新内容和练习。同样,再次感谢Kim Lindros和Mary Kyle,他们使得本书比预计的容易完成得多。最后,感谢我亲爱的妻子Dina和儿子Gregory,他们给我带来了无数的快乐和幸福。  欢迎读者通过E-mail给我们发送有关本书的评论、问题和建议:  tcpip5e@guidetotcpip.com

免费在线读

第3章

基本的IP数据包结构:首部与有效载荷本章内容:* 理解组成IPv4的各个字段及其特性。* 理解组成IPv6的各个字段及其特性。* 解释IPv6扩展首部的作用,以及每个首部的功能。* 描述在IPv6中MTU发现是如何工作的,它是如何通过路由器来替代IPv4数据包的分段的。* 描述IPv6数据包中的上层校验和是如何工作的,包括伪首部的使用。* 描述IPv4与IPv6数据包结构的主要区别,为什么说这些区别是很重要的。    本章介绍IPv4和IPv6数据包结构,包括各种首部字段,这些字段是怎样使得IP数据包完成复杂功能的,即使得信息可以在不同网络环境(包括Internet)之间传输的。通过对IPv4与IPv6首部的比较,可以明白在每种版本的IP中,数据包结构是如何操作的,每种数据包的功能有何不同。3.1  IP数据包与数据包结构  网际协议(IP)的主要作用是在网络上的设备之间传输和传递数据。要完成该任务,信息被封装成“单元”(称为数据包或数据报)。每个数据包含有要正传输信息的一部分,在从源地址到目的地址的传输过程中,数据包可以穿越多个不同的路由器。  为了使数据包能完成所需的功能,以确保正确的路由以及安全传输到目的地,每个数据包(包括实际的数据)都含有一个首部结构,该首部由一些特殊的字段构成。IPv4与IPv6数据包在其结构上差别很大,但它们都必须完成相同的基本任务,即确保由初始网络结点发送的数据,能可靠地传输到接收结点。在本章的后面将学习IPv4数据包的结构,还将学习IPv6数据包(这是下一代的IP数据包)首部的详细内容。3.2  IPv4首部字段及其功能  所有IPv4首部都具有相同的结构,如图3-1所示。每个数据包含有一个首部,后跟一个数据字段。首部长度为20~60字节,数据包的总长度最多可以有65 535个字节。但是,大多数网络不能处理最大长度的数据包,因此,很多数据包是一个适度的长度,即576个字节。
图3-1  IPv4首部结构  在IPv4首部中,有14个可能的字段。其中13个是必需的,第14个字段不仅是可选的,而且也是命名为“可选项”。每个字段的值是以多个4字节的形式来给出的。由于IPv4首部可以包含不同数量的选项,每个选项的长度也不一样,因此,首部的长度也是可变的。在IPv4首部中,字节序也称为“大端”(Big Endian),这意味着最重要的字节位于不重要的字节之前。同样,在每个字节中,排在前面的是最重要的位(称为最高位(Most Significant Bit,MSB)或MSB 0位号,因为最高位的编号为0)。因此,像版本字段就出现在首部第一个字节的4个最高(最左)位中。  下面详细阐述首部的字段及其功能。有关这些字段的更详细信息,请参阅下述各节以及RFC 791。RFC 791是1981年9月为IP制定的规范说明。3.2.1  版本字段  在IP首部中的第一个字段是版本(Version)字段。在图3-1中,该字段的值为4,表明是IP的版本4或IPv4。3.2.2  首部长度字段  首部长度(Header Length)字段,也称为Internet首部长度(Internet Header Length,IHL)字段。该字段只表示IP首部的长度。这个字段是必需的,因为如前所述,IP首部支持可选字段,因此其长度是可变的。  IHL包含一个对数据的偏移量,因此是一个32位的值。IHL的最小值为5,如RFC 791中所定义的。它得到的是5×32=160位的长度,即等于20个字节。IHL是一个4位的字段,因此它能表示的最大值为16-1=15。IHL的最大长度为15×32=480位,或60个     字节。  
由于可选字段很少使用,因此,IP首部的大小通常是20个字节。  3.2.3  TOS字段的功能:差分服务和拥塞控制  RFC 2474推荐了一份完整的对TOS字段值和功能的重定义。TOS字段最可能的设置是默认值00000000。此外,RFC 2474、RFC 2475和RFC 3168把TOS的8个字段划分为两个不同的功能:差分服务(流量的优化)和拥塞通知。差分服务  RFC 2474定义了一种用于网络流量差分服务的方法,它使用了字节的高六位,这个字节组成了以前的三位优先级(Precedence)字段和TOS(服务类型)字段,如图3-2所示。  使用特殊标记——差分服务代码点(DSCP)标识    符——终端设备(结点)或边界设备(路由器)能够给出流量的优先等级,并依据这个等级值排队和转发流量。支持差分服务(Differentiated Service,DS)技术的路由器会依据DSCP标识符来处理流量。  DSCP值可以基于路由器感知的数据流或基于包含在数据包内部的某些特殊值来指定(例如,VoIP流量与E-mail流量)。  某些DSCP值已经在RFC 2597(“Assured Forwarding PHB Group”)和RFC 2598(“An Expedited Forwarding PHB”)中指定。表3-1描述了定义在这两个RFC中的基本DSCP值。在这两个RFC中,这些值称为确保转发(Assured Forwarding,AF)类,并采用丢弃概率分类(Drop Probability Classification)进行分离,丢弃概率分类依据网络上高拥塞期间更高优先级流量要求进行处理时路由器可能丢弃数据流量的相似性将DSCP流量类型分组。AF数值分配指明数据包会确保以特定方式、特定优先级进行处理。沿着路径的每一跳(路由器)都做出优化决策。在RFC 2597和2598中讨论的术语逐跳行为(Per-Hop-Behavior,PHB),指明路由器(跳)对每一个数据包的处理单独做出决策。表3-1  DSCP值
类1类2类3类4无类
DSCP 10DSCP 18DSCP 26DSCP 34

AF11AF21AF31AF41
低丢弃优先级001010010010011010100010

DSCP 12DSCP 20DSCP 28DSCP 36

AF12AF22AF32AF42
中丢弃优先级001100010100011100100100

DSCP 14DSCP 22DSCP 30DSCP 38

AF13AF23AF33AF43
高丢弃优先级001110 010110 011110 100110

DSCP 46加速转发 

 101110    但是,不用记住这个表,就可以把PHB的AF值转换成DSCP,以及把DSCP值转换成AF。从AF转换成DSCP的公式是AFxy = (8*x) (2*y)。例如,如果AF为31,那么AF31 = (8*3) (2*1) = DSCP 26。  从DSCP转换成AFxy的公式更复杂些:即为x/8,其中x为DSCP值,y = remainder/2或者是x/8,(remainder/2)。因此,DSCP 26 = 26/8 = 3,余数为2。2/2 = 1,因此AF = 31。  由于PHB与每个路由器是如何配置的有关,因此,端到端的流量传输行为是不可预知的,如果数据流量在到达目的地之前,要穿过DS域,那么情况会更加糟糕。这使得要保证某种特定的服务质量(QoS)或服务级别协议(Service Level Agreement,SLA)是非常困难的。把某个数据包标注为特定的SLA是一种美好的希望而不只是一个已完成的动作,因为所提供的服务级别与提供者以及沿途穿过的路由器有关。  在源到目的地的通信路径中,每台路由器以及每个服务提供者都配置为可以管理多种类型的网络通信,且都具有不同的QoS需求。那些不允许延时、抖动或数据包丢失的网络通信(如VoIP),可能不能在通信路径中的每台路由器上进行优化,从而出现不连续的      处理。  RFC 5280更新了RFC 3280和RFC 2474中使用的一些有关差分服务(DS)和DSP的术语。  DS字段定义为(第一个)IPv4 TOS八位字节的6个MSB,或(第一个)IPv6数据类型八位字节。DSCP是在DS字段中的一个编码值,每个DS结点都必须用于选择PHB,且应用于结点所转发的每个数据包中。  RFC 3248为RFC 2598给出了另一种版本的延时界限(Delay Bound)。加速转发逐跳行为设计团队对该标准提出了重新表述:延时界限逐跳行为(DB PHB)。假定数据流在没有超过设定速率的情况下,延时界限转发对数据包通过每跳时的延时给出了更加严格的界限。数据流在离开源地址,以及当它进入差分服务(DS)域时,必须进行严格管理,对该数据流进行延时限制。  当数据流标注了延时界限时,由跳转设备给出延时界限行为,但如果到达该设备的数据流超过它所能管理的能力时,该设备将会宕机。这意味着,当数据流穿过后继跳转设备时,尽管最初对它进入DB域进行了延时限制或“定形”,并不能保证它保持一定的延时界限。DB PHB的定义就跳转设备如何获得DB行为没有给出特别的建议。它只是给出了一些参数,标识了传递DB行为的操作范围。  当数据包到达的速率超过协商好的速率时,路由器丢弃数据包的处理过程有一个安全应用。DS域要求控制其边界,以防止拒绝服务(Denial of Service,DoS)攻击。如果两个相互连接的DS域没有协商好的DB数据速率,那么,从一个域进入另一个域的所有数据流都标注为0,并被丢弃。但是,发生这种情况的概率比较小,因为域间的数据流速率都必须协商好,上流域必须以协商好的速率来控制DB数据包。如果发生过载情况,可能是发生了服务攻击的信号。  RFC 3248是作为一个信息文档发布的,并不是为了要实现成一个Internet标准。有关DB PHB的完整信息,请访问www.ietf.org,并查找“RFC 3248”。  加速转发(Expedited Forwarding,EF)对应于DSCP 46,它被认为是一种优质服务连接,提供了端点之间的“虚拟租用线路”服务。如果源设备发送一个DSCP字段包含值101110的数据包,支持DS功能的路由器必须加速该数据包的转发,并且不修改DSCP字段的值以降低其优先级。  在当前上下文中,实时应用(Real-Time Application,RTA)是指那些以很少的延时或几乎没有延时,在连续的时间帧内进行工作的应用。一个服务能否定义为RTA,取决于应用服务在特定硬件平台上运行时所要求的最大时间。这就是最坏情况的运行时间(Worst-Case Execution Time,WCET)。  IP语音(Voice over IP,VoIP)使用IP来支持语音通信,是一种RTA,能从DSCP EF处理中获取极大好处。VoIP不能容忍任何种类的延时(延时会导致回音和通话重叠)。事实上,任何时间敏感的数据流都适宜于使用DSCP进行特殊处理。  为了让差分服务功能得到完全和正确的支持,厂商必须支持服务、端点以及中间点(路由器),网络管理员必须配置端点和中间路由器,适宜地分配和操作DSCP值。  其他的RTA数据流类型包括:* 在线聊天。* 社区存储解决方案。* 即时通信(Instant Messaging,IM)。* 在线游戏。* 流媒体。* 视频会议。* 一些电子商务事务处理。  但是,E-mail和Web浏览数据流仍然允许一定程度的延时。  为了能完全或部分地支持差分服务功能,提供商必须让端点和中间点(路由器)支持该服务,网络管理员必须把端点和中间路由器配置为可以恰当地分配和处理DSCP值。显式拥塞通告  显式拥塞通告(Explicit Congestion Notification,ECN)设计为用来向设备提供一种在路由器开始丢弃数据包之前,链路发生拥塞时相互通知的方法。为了利用这项技术,拥塞链路的两端(发送结点或路由器,接收结点或路由器)都必须支持ECN。  丢弃一个数据包就能够极大地影响网络吞吐量。通过警告接收方链路上发生了拥塞,希望接收方降低其流量速率来适应拥塞链路,ECN是减缓丢包所带来的负面影响的一种尝试。理想情况下,ECN将减少拥塞网络上的丢包数量,从而导致更好的整体性能。  当一个数据包在具有ECN功能的路由器之间发送时,该数据包通常标注为ECT(0)或ECT(1),表示是具有ECN功能的传输。如果数据包穿过两个路由器之间的队列并发生了拥塞,那么接收端路由器就可能修改拥塞通告(或EC)码,而不是丢弃该数据包。ECN/CE要求在IP首部中使用2位。这2位的组合提供了几种可能的解释,如图3-3所示。  与TCP/IP首部的许多字段不同,必须考察这2位的组合值,以此解释ECN值。例如,如果ECN/CE位设置成01或10,发送路由器指明它支持ECN——这是一个ECT(ECN-Capable Transport,具备ECN功能的传输)。如果ECN/CE位的值被设置成00,那么发送方不是ECT。如果ECN/CE位的值被设置成11,那么发送方是ECT,并且链路上发生了拥塞。
图3-3  ECN和CE位的解释
可以预期的是,在ECN/CE值01和10之间存在某些差异,但这里,两者被同等处理。ECN定义在RFC 3168中。  
Wireshark只能把ECT(0)解码为“具有ECT功能的传输”,但不能正确解码ECT(1)和CE。  3.2.4  总长度字段  这个字段定义了IP首部和任何有效数据的总长度(不包括任何数据链路填充值)。在     图3-4所示的示例中,总长度为60字节。IP首部为前20个字节,数据包其余的长度为40字节。
图3-4  字段的总长度为60字节3.2.5  标识符字段  每一个独立数据包都在发送时给定了一个唯一的ID(标识符)值。如果数据包必须被分段,以便适应支持较小数据包长度的网络,那么相同的ID号放置在每一个分段中。这就有助于识别构成相同一组数据各个部分的分段。  RFC 6864更新了IPv4 ID字段及其用处。ID字段最初是用于分段与重组的,随后又   开发了其他用处,包括使用该字段从拥塞的路由器中检测和删除重复数据报。ID字段还用于一些诊断工具中,用于在一条网络路径的不同地方,统一数据报的度量。一个数据报的ID必须是唯一的,以便能支持分段与重组,但并不是所有数据报都会分段或允许分段。RFC 6864丢弃了非分段的使用,在最大数据报生命周期(Maximum Datagram Lifetime,MDL)和源地址/目的地址/协议元组内,允许ID重复(即对该数据报来说不是唯一的)。为此,MDL是一个数据报可能存在的最长时间。3.2.6  标志字段  标志(Flag)字段为3位长,位值的分配如表3-2所示。表3-2  标志字段的值位   置字 段 定 义值/解释位0保留设置为0位1不分段位0=可以分段;1=不分段位2更多分段位0=最后一个分段;1=后面将后更多分段抵达    通常情况下允许分段。但是,出于某些原因,应用程序可以决定不允许分段。如果是这样的话,它将不分段(Don’t Fragment)位设置为1。  如果允许分段,当数据包穿越支持较小的最大传输单元(MTU)的网络时,它就必须被分段,不分段位被设置为0。当数据包被拆分成多个分段时(例如三个分段),第一个和第二个分段的更多分段(More Fragments)位设置为1。最后一个分段的更多分段位被设置为0,指明它是这组分段数据中的最后一段。  分段是件好事情吗?有时候是这样。只有当某个MTU被路径中的最小链路MTU支持时,数据包才能成功到达目的地。根据下一个链路所支持的MTU,IPv4路由器可以在一跳到下一跳中连续对数据流分段,而在IPv6中,源结点使用PMTU发现来确定路径中的最小链路MTU,然后设置其数据包的MTU以匹配该链路。  
在IPv6和IPv4中,PMTU发现过程很常见。有关PMTU发现的更多信息,请参见后面的“IPv6 MTU与数据包处理”一节。  3.2.7  分段偏移量字段  如果数据包被分段,分段偏移量(Fragment Offset)字段说明了在把各个分段重组成一个数据包时(在目标主机上完成),当前数据分段中的数据应该放在什么地方。  这个字段给出了以八个字节为单位的偏移值。例如,第一个分段的偏移值可以是0,并包含了1400字节的数据(不包括任何首部)。第二个分段的偏移值应该为175(175×8=1400)。  只有在数据包被分段时才使用这个字段。3.2.8  生存时间字段  在网络术语中,数据包的生存时间(Time To Live,TTL)是指数据包还能穿越的剩余距离。尽管是以秒为单位进行定义的,但TTL值被实现为在被路由器丢弃之前,数据包能穿越的跳数。因此,生存时间字段表示的是数据包以其方式到达目的地将要穿过的跳数。典型的TTL起始值为32、64和128。最大的TTL值为255。实际的TTL值可以大于也可以小于起始值。  网络一跳的持续时间与多种因素有关,包括给定链路的长度、网络数据流所用的网络计算速度。例如,高速光纤链路上的一跳可能非常长,但远小于1s。而地球同步卫星链路的一跳则从来不会少于4s。3.2.9  协议字段  首部应该有一个定义后面跟着什么的字段。例如,在TCP/IP数据包中,Ethernet首部应该有一个协议标识符字段(Type或Ether Type字段)来指明随后跟着的内容是什么IP。同样,IP首部也有一个协议(Protocol)字段来指明随后跟着什么内容。协议字段的常见值如表3-3所示。表3-3  常用协议字段值编    号描    述1Internet控制消息协议(ICMP)2Internet组管理协议(IGMP)6传输控制协议(TCP)8外部网关协议(EGP)9任何专用内部网关,例如Cisco的IGRP17用户数据报协议(UDP)45域内路由选择协议(IDRP)58Internet控制消息协议版本6(ICMPv6)88Cisco EIGRP89开放式最短路径优先(OSPF)92多播传输协议(MTP)115第二层隧道协议(L2TP)    253和254用于实验,134~254的值未分配,255被IANA保留。要了解最新的协议字段值列表,请访问www.iana.org/assignments/protocol-numbers。3.2.10  首部校验和字段  首部校验和(IP Header Checksum)字段提供了对IP首部内容进行出错检测的功能——它并没有覆盖整个数据包的内容,在其计算中也不包括其自身的校验和字段。  这是一种除了数据链路出错检测机制(例如以太网的CRC)之外的出错检测机制(Error-Detection Mechanism)。对于穿越路由器的数据包要求这种额外的检测机制。例如,当以太数据包抵达路由器时,路由器进行数据链路CRC检查,确保该数据包在沿途没有被破坏。在数据包通过CRC检测并被认为是好的数据包之后,路由器拆除数据链路首部,留下未封装的网络层数据包。如果该数据包没有任何内置的出错检测机制,某个存在错误的路由器就能够修改数据,之后加上新的数据链路首部(带有对无效数据包计算的新CRC值),并发送该数据包。要求使用这一网络层出错检查机制来检测和挫败路由器对数据包的损坏。  
Wireshark软件有时候会在校验和计算之前捕获数据包。校验和计算可以由网络驱动器、协议驱动器,甚至是网络硬件来完成。当网络驱动器把“责任”交给硬件时,现在的网络硬件可以完成高级的IP校验和计算。这就是“校验和卸载”,结果是,Wireshark可以捕获校验和。当数据包离开网络硬件时,它实际上已经包含了有效的校验和。  3.2.11  源地址字段  这是发送数据包的IP主机的IP地址。在某些情况下,例如在动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)引导过程中,IP主机或许并不知道自己的IP地址,因此这个字段可以使用0.0.0.0。这个字段不能包含多播或广播地址。因为源地址必须是发源于具有特定IP地址的特定网卡。3.2.12  目的地址字段  这个字段能够包含单播、多播或广播地址。这是数据包最终目的地的地址。3.2.13  可选字段  IP首部可以通过几个选项进行扩展(尽管这些选项并不经常使用)。如果首部使用选项进行扩展,这些选项必须在4字节边界上结束,原因在于Internet首部长度(IHL)字段以4字节边界为单位定义首部长度。  表3-4仅仅列出了部分选项。要了解完整列表,请访问www.iana.org。表3-4  选项字段的值编    号名    称编    号名    称0选项列表结束3松散源路由1无操作4时间戳2安全性5扩展安全性    正像你猜测到的那样,IP首部选项主要用于提供额外的路由控制(或者记录单个数据包在发送方到接收方之间经历的路由)。因此,当测试或调试代码或特定连接时,这些选项有用,但它们几乎不用于其他方面。可选字段可以是0、1或其他,从而使得其长度是可变的。3.2.14  填充字段  填充字段使得首部长度为32位的倍数,如果IPv4的首部长度不是32位的倍数,就用0进行填充。这使得IPv4的首部长度总是32位的倍数。
3.3  IPv6首部字段及其功能  IPv6数据包的作用基本上与IPv4是相同的:确保数据或应用信息成功地在网络上从源结点传输到目的地结点。数据包含有寻址字段和路由字段,使得传输成为可能。IPv6首部也在IPv4的基础上增加了改进内容,例如,加强支持扩展字段和可选字段。其他加强包括允许更高效的数据包转发,以及用于特定数据流的数据包标签。尤其令人感兴趣的是,IPv6首部被设计为使得今后引入新可选项更加容易,使IPv6首部随着网络技术的发展变得更加先进。  有关IPv6的说明(包括首部格式)可参见RFC 1883,该文档随后被RFC 2460废弃。固定长度的IPv6首部构成了IPv6数据包的前40个八字节(即320位)。图3-5显示了IPv6首部结构。3.3.1  版本字段  这是4位的IP版本号,它总为6(即位序0110)。3.3.2  流量类型字段  8位的流量类型字段,被源网络主机和转发路由器用来区分IPv6数据包的类型和优先级。流量类型字段的一般需求是,网络结点的IPv6服务接口必须为上层协议提供一种方法,以便为来自该协议的任何数据包中的流量类型位提供一个值,默认值为0。任何上层协议都“明白”,该字段中这些位的这个值在被目的结点接收时,可能与源结点发送时是不同的。  如果是源结点或目的结点,或是转发IPv6数据包的结点,而且支持特定的流量类型位,那么这些结点就可以修改这些位值,否则,结点将忽略流量类型字段的这些位,因为它们并不支持。该字段的结构如图3-6所示。
图3-5  IPv6首部结构图3-6  流量类型的结构  流量类型字段的第一个位表明该流量是否延时敏感。如果该位设置为1,就认为该流量是时间敏感的。例如,交互数据交换,以及语音和视频通信,要求低延时的连接。这样,携带这些类型的有效载荷的数据包,通常把流量类型字段的第一个位设置为1。  优先级字段类似于IPv4首部的优先级字段,允许应用程序根据流量的优先级来区分流量类型。相应地,路由器也可以根据优先级位来确定如何安排流量通过路由器和队列系统时的优先级。  流量类型的最后4位现在被保留。有关流量类型值的定义的更多信息,可以参考位于网站http://datatracker.ietf.org/wg/diffserv/charter/中差分服务工作组信息。
3.3.3  数据流标签字段  数据流(Flow)是一个数据包集,源结点要求这些数据包被中间路由器进行特殊处理。源主机使用这个20位长的数据流标签字段来要求IPv6路由器对这个数据包进行特殊处理,例如实时应用或无怠职QoS。在编写RFC 2460 时,它还只是试验性的。RFC 3697则是关于数据流标签说明的建议标准,为该字段定义了最低要求。  建议的数据流标签说明指出,数据流标签的值为0表示数据包不是任何数据流的一部分。数据包分类器使用数据流标签、源地址和目的地址字段来确定一个数据包的数据流(如果它是某个数据流的一部分)。在源地址和目的地址之间,不能修改数据流标签的值。不支持数据流标签的网络结点,在转发和接收数据包时,必须忽略该字段。3.3.4  有效载荷长度字段  16位的有效载荷长度字段描述了有效载荷的大小(以八字节为单位),包括所有扩展首部。当逐跳选项扩展首部含有超大包选项时,该长度为0。3.3.5  下一个首部字段的作用  下一个首部字段为8位,指明了紧跟在IPv6首部(尤其是扩展首部)后面的那个首部的首部类型,使用的值与IPv4协议字段的相同。它是IPv6首部格式中新增的一个重要字段。当IPv6数据包使用扩展首部时,该字段指向第一个扩展首部。该扩展首部中自己的下一个首部字段含有表示下一个扩展首部的标识符,以此类推,直到最后一个扩展首部。最后一个扩展首部含有一个指向封装后的高级协议的引用。图3-7阐述了这个演变过程,本章后面的图3-8显示了扩展首部的特殊顺序。
图3-7  下一个首部字段的演变过程  表3-5给出了下一个首部字段的最常用值。记住,该表并不是完整的。表3-5  下一个首部字段的值十 进 制 值十六进制值扩展首部或协议名000逐跳选项扩展首部101ICMPv4202IGMPv4404IP-in-IP 封装???????????????????????????????????????????续表??十 进 制 值十六进制值扩展首部或协议名606TCP808EGP1711UDP4129IPv6432B路由扩展首部442C分段扩展首部5032封装安全协议扩展首部5133认证扩展首部603C目的地选项扩展首部  3.3.6  Internet 组管理协议  Internet组管理协议(Internet Group Management Protocol,IGMP)是主机与相邻路由器所用的一种网络协议。IGMPv3(版本3)定义在RFC 3376中,描述了如何使用这种协议,在IPv4网络中用来报告从一个多播路由器到另一个多播路由器之间的IP多播组关系。IGMPv3具有源地址过滤功能,这使得网络结点可以只接收从某个源地址发往特定多播地址的信息。详细信息请参见RFC 3376和RFC 4604。3.3.7  跳限制字段  被网络结点每转发一次,8位跳限制字段中的值就减去1,如果该字段中的值减为0了,那么该IPv6数据包就被丢弃。跳限制字段可容纳的最大值为255,这也就意味着这是最大的可能跳数。3.3.8  源地址字段  源地址字段含有数据包的128位源地址。IPv6的寻址结构在ADDR-ARCH RFC草案版本4.4中进行了描述(可以在http://tools.ietf.org/html/drat-ietf-ipv6-addr-arch-v4-04中阅读该草案)。也可以参考RFC 5952,它是关于IPv6文本表示的推荐,还可以参考RFC 6053,它是关于IPv4/IPv6转换的IPv6寻址的建议标准。3.3.9  目的地址字段  目的地址字段含有数据包的128位接收端地址。如果路由扩展首部还可用,那么这可能就不是该数据包的最终接收端(参见ADDR-RCH RFC版本4.4)。3.4  IPv6扩展首部  扩展首部(Extension Header)使得可以在IPv6数据包中实现其他一些功能。这些字段只用于特殊目的。这可以使得IPv6数据包保持得比较小且为流线型的,只拥有那些特殊目的所需的字段。  每个扩展字段是由特定的下一个首部值来标识的,最常见的值如表3-5所示。IPv6数据包可以根据需要携带0个或多个扩展首部。  一旦IPv6数据包被发送出去,网络路径上的任何结点都不会查看任何扩展首部,直到该数据包到达了目的地址(如果是多播,则是到达多个目的地址)。该地址位于数据包首部的目的地址字段中。一旦到达了目的结点,将对下一个首部字段进行处理,并查看第一个扩展首部。如果第一个扩展首部指向的是第二个首部,那么就接着处理第二个首部,以此类推,直到到达上层协议。如果没有扩展首部存在,那么当处理下一个首部字段时,就将立即查看上层协议。  扩展首部是按要求的顺序严格处理的(下一节将介绍),这样可以防止目的结点扫描该数据包时,目的结点不会先查找特定类型的扩展首部,从而使得该首部先于其他首部而处理。3.4.1  扩展首部的顺序  在RFC 2460中,IPv6说明推荐了扩展首部的顺序:  (1)逐跳选项扩展首部。  (2)目的地选项扩展首部。  (3)路由扩展首部。  (4)分段扩展首部。  (5)认证扩展首部。  (6)封装安全有效载荷(ESP)扩展首部。  (7)目的地选项扩展首部。  然后,数据包可以包含上层首部,例如用户数据报协议(UDP)、传输控制协议(TCP)或Internet控制消息协议(ICMP)。当前定义的扩展首部,是通过基本IPv6首部中的下一个首部字段,在基本IPv6首部后面把扩展首部“连接”起来的。图3-8显示了扩展首部集。
图3-8  以太网中连接的首部
在查看IPv6首部时,你可以看看它们是否遵循OSI参考模型(如     图1-1所示,该图是竖直方向显示的,图3-8则是水平显示的)。    在任何给定的数据包中,每个扩展首部只能出现一次(目的地选项扩展首部除外,它可以出现两次,一次位于路由扩展首部的前面,一次位于上层首部的前面)。尽管在某个数据包不太可能同时出现上述所列出的全部扩展首部,但还是要注意,图3-8中出现这些类型的首部,的确是遵循了前面介绍的顺序(因此,数据链路首部位于IPv6首部之前,IPv6首部位于路由扩展首部之前,而路由扩展首部则位于认证扩展首部之前,依此类推)。  下面章节将考察定义在IPv6说明中的各种扩展首部。3.4.2  逐跳选项扩展首部  如图3-9所示,逐跳选项扩展首部的结构在首部的定义和功能上实现了最大的灵活性。为该首部定义的唯一两个字段是下一个首部字段和扩展首部长度字段。下一个首部字段指向下一个首部值。扩展首部长度字段表明了逐跳选项扩展首部的长度,包括所有扩展和选项首部所需的最少8字节。除了这个需求外,该首部没有预设长度。
图3-9  逐跳选项扩展首部  逐跳选项扩展首部设计为携带的信息可影响传输路径中的路由器。例如,如果要求内部网络中的一个多播传输提供某些特殊路由指令,那么就可以在逐跳选项扩展首部中携带这些指令。传输路径中的中间路由器可以按定义查看该首部。逐跳选项扩展首部的建议使用包括路由警告和超大包有效载荷选项,详见本章后面的介绍。3.4.3  目的地选项扩展首部  目的地选项扩展首部提供了一种扩展IPv6首部以支持数据包处理和优先的方法。如果目的地选项扩展首部出现在数据包的前面部分中,则不会对它进行加密,但是,如果出现在ESP扩展首部之后,则使用一个加密处理来发送它。该扩展首部还为未来使用者或基于标准的通信留出了空间。选项类型号码必须经IANA注册,并在特定的RFC文档中进行了文档说明。  目的地选项扩展首部是唯一一个可以出现在多个地方的首部。它可以出现在路由扩展首部的前面,也可以是位于实际的更高层协议数据之前的最后一个首部(例如,在任意ESP或认证首部之后)。如果目的地选项扩展首部出现在数据包的前面部分中,那么它主要用作中间目的地址。到目前为止,这种定义的唯一使用是在路由扩展首部的连接中。当目的地选项扩展首部出现在ESP扩展首部之后时,只能由最终的目的地查看。  如图3-10所示,目的地选项扩展首部使用与逐跳选项扩展首部相同的格式。
图3-10  目的地选项扩展首部  3.4.4  路由扩展首部  路由扩展首部为IPv6支持严格或宽松的源路由。该首部包含用于中间地址的字段,通过这些地址,IPv6数据包被转发。路由扩展首部的格式如图3-11所示。
图3-11  路由扩展首部  该首部的第一个1字节字段表明了跟在路由扩展首部后面的下一个首部。扩展首部长度字段定义了该首部的长度,包括所有扩展和选项首部所需的最少8字节。除了这个需求之外,该首部没有预设长度。  尽管设计路由扩展首部时是为了能在多种情况下使用,但现在只定义了一个选项:路由类型=0的路由选项。该选项就像在办公室里使用一个路由纸片一样使用路由扩展首部。发送方计算好希望数据包在传输路径中要访问的所有路由器,并把它们的地址以一个有序列表的形式放置在逐跳选项扩展首部中,其中最后一个目的地路由器在该列表的最末端。  然后,发送方把要访问的第一个路由器的地址放置到IPv6首部的目的地址字段中。转发数据包的中间路由器通常不会查看任何首部中的内容。当数据包到达第一个目的地(第一个路由器)时,该路由器查看数据包,并得到其首部。如果所有都是正确的,该路由器把路由列表中的下一个路由器放置到目的地址字段中,并把它自己的地址放置到该列表的底部。继续这个处理过程,直到数据包到达了最终的目的地。在这样一个列表中,最多可以有255个路由器。剩余的分段字段定义了数据包在到达最终目的地之前,还必须访问的剩余路由段数。  
出于对安全性的考虑,类型为0的路由首部已经弃用了。任何IPv6结点,如果接收的数据包,其目的地址含有类型为0的路由首部,将不会往下运行,如RFC 2460所述,而是把它看作是一个含有未知路由首部类型值的数据包来处理,详见RFC 5095。  3.4.5  分段扩展首部  正如本章前面所述,IPv6不支持转发路由分段。所有数据包都看作是设置了一个隐式的不分段位。PMTU发现处理用于提供具有传输路径所能支持的最大分段。  
关于PMTU发现的更多信息,请参见本章后面的相关内容。    如果传输设备需要发送比PMTU更大的数据包,就使用IPv6分段扩展首部。分段扩展首部的格式如图3-12所示。
图3-12  分段扩展首部  除标志字段的使用之外,分段扩展首部的字段与IPv4分段字段几乎相同。IPv6有一个标志字段:更多分段(图3-12中的M字段)。最后一个分段数据包的标志字段设置为0,其余分段数据包的标志字段都设置为1。  源结点可能会把数据包分段,以满足PMTU发现所创建的到目的地的网络路径中最小MTU的需要。在被源结点分段之前的数据包称为“原始数据包”,它由两个分段组成:不可分段部分和可分段部分。不可分段部分由IPv6数据包首部和所有其他扩展首部(包括路由扩展首部或逐跳选项扩展首部)构成。可分段部分就是数据包的其余部分,包括所有只能被目的地结点处理的扩展首部,以及上层首部和数据。  原始数据包的可分段部分可以分成多个分段,每个分段的长度为8个八字节。可能出现例外的最后一个分段,它不必遵循这个标准。每个分段由3部分组成:不可分段部分、分段首部和分段,如图3-13所示。
图3-13  分段数据包  在每个分段中,不可分段的有效载荷长度从原始数据包的大小改为该分段数据包的长度,减去IPv6首部的长度。最后一个首部的下一个首部字段的值改为44。  分段首部含有下一个首部值,标识了原始首部中可分段部分的第一个首部。它还含有一个分段偏移量,标识的是该分段的偏移量(以8位为单位)。该值与原始数据包中可分段部分的起始位置有关。第一个分段的分段偏移量设置为值0。最后一个分段的M标志也设置为值0,其他分段的M标志则设置为值1。分段首部中最后一个元素是标识符值,它是为原始数据包生成的。  分段长度设置为可以适应传输路径中的最小MTU,以确保它可以到达目的地结点。3.4.6  认证扩展首部  认证扩展首部设计为标识数据包的真正来源,以防止地址欺骗和连接窃取。该首部还提供了一个完整性检验,确保数据包的各个部分在传输中不被修改(在路由扩展首部上不会进行认证计算)。此外,认证扩展首部还能在一定程度上抵御重放攻击(Replay Attack)。经过配置后,终端设备可以拒绝接收没有经过正确认证的数据包。  认证扩展首部的格式如图3-14所示。

图3-14  认证扩展首部  认证扩展首部以1字节的下一个首部开始,该字段表示的是扩展首部链中的下一个    首部。  1字节的有效载荷字段表示的是位于安全参数索引(SPI)后面的4字节词的数量。在接收方,保留字段中的所有位应全设置为0。SPI字段含有的值,指向安全参数索引或安全参数表,或者指向安全认证(SA)。SPI总是一个指向安全认证的指针。  序号字段用于确保接收方能识别网络上的原有数据包。  认证数据字段的内容是基于对有效载荷数据的加密校验和、基本IPv6的一些字段以及由已认证设备共享的密文的计算结果。3.4.7  封装安全有效载荷扩展首部和尾部  由认证扩展首部定义的认证过程并不会对数据加密,也不会保护数据以防止嗅探攻击(Sniffing Attack)。数据仍然是其原来的传输格式。应使用封装安全有效载荷扩展首部来对数据进行加密。该首部必须是IP首部链中的最后一个,它表示的是加密数据的开始。  封装安全有效载荷扩展首部的格式如图3-15所示。
图3-15  封装安全有效载荷扩展首部  封装安全有效载荷扩展首部后跟一个认证校验和,以防止攻击者破坏或裁减已加密数据。已加密参数的确切格式,与所使用的特定加密算法有关。    AH、ESP与IPSec  IP安全性(IP Security,IPSec),是基于IP网络的一组附加安全协议,提供了访问控制、无连接完整性、数据初始认证、防止重放攻击等。认证首部(Authentication Header,AH)和封装安全协议(Encapsulating Security Protocol,ESP)是IPSec协议族的一部分。AH标示了数据包的真正来源,防止地址欺骗和连接窃取,还可提供完整性检验,以及在一定程度上防止重放攻击。ESP提供了基于IPSec的加密服务。  在IPv4中,AH可以保护IP数据报的IP有效载荷和所有首部字段,但有一个例外,由于这些字段是未认证的,因此这些字段在传输过程中可能会被修改。这些字段是DSCP/TOS、ECN、标志、分段偏移量、首部校验和以及生存时间。  在IPv6中,AH保护认证扩展首部本身,目的地选项扩展首部位于AH、IP有效载荷和固定IPv6首部后面。AH还保护AH之前的扩展首部(DSP、ECN、数据流标签和跳限制除外)。在第12章将学习关于网络安全的更多内容。  3.4.8  超大包  RFC 2675为IPv6数据报建议了另一种类型的特殊服务:即称为超大包(Jumbogram)的巨大数据报。标准IPv6数据报首部的有效载荷字段为2字节长,允许数据报携带64 KB数据。超大包使用逐跳选项扩展首部,增加了一个32字节的数据报长度字段。这使得数据包可以携带大于64 KB的数据,最多可达40亿字节。对普通的Internet数据链路来说,这么大的数据包是有点可笑的。在主干网和高容量网络中,其链路MTU可以是65?575~      4 294 967 295个八字节,携带少量巨大的数据包,比携带大量的较小数据包有更好的可操作性。超大包允许这些数据链路携带这种大型数据包,而不会损坏IPv6光纤。对于那些没有连接到这种大容量MTU链路上的IPv6网络结点,就不需要实现甚至是理解这个选项。超大包有效载荷选项由跟在IPv6首部后面的逐跳选项扩展首部携带。该选项的格式如图3-16所示。  选项类型字段和选项数据长度字段都为8位值。超大包有效载荷长度字段为32位值,这等于IPv6数据包的长度(以八字节为单位)减去该首部(逐跳选项扩展首部和其他扩展首部除外)。该长度必须大于65 535。  要使用超大包有效载荷选项,IPv6首部中的有效载荷长度字段必须为0。在下面情况下,能理解超大包有效载荷选项的网络结点,将把数据包作为一个超大包来处理:  (1)数据包首部的有效载荷长度字段设置为0。  (2)下一个首部字段设置为0,这意味着后面跟的是逐跳选项扩展首部。  (3)链路层分帧表明,在IPv6首部的前面有其他的八字节存在。  然后,网络结点将处理逐跳选项扩展首部,以确定超大包有效载荷的实际长度。
超大包有效载荷选项与分段扩展首部是不一致的,因此它们不能在同一个数据包中使用。    通常,上层协议使用有效载荷长度字段来计算校验和伪首部中的上层数据包长度字段的值。当使用超大包有效载荷选项时,上层协议必须使用超大包有效载荷选长度字段来进行该计算。3.4.9  服务质量  服务质量(Quality of Service,QoS)是指网络能为特定类型的网络数据流量提供更好服务的能力。这是由IETF的差分服务工作组负责处理的。差分服务就是服务质量的全部。这个概念很简单:它应可以选择比默认服务级别更好的内容。这必须在某些时间和地点,确保对某些用户的传输、加速传输、非常大带宽的临时分配、低反应时间、最小传输成本(可能是以快速传输为代价)或其他任意几个特定值。资源预留协议(Resource ReSerVation Protocol,RSVP)就是为提高对Internet上的动态资源分配的更正式方法而进行的早期         尝试。  差分工作组的最新草案建议了两种针对服务质量的基本方法:逐跳行为(Per-Hop Behavior,PHB)和逐域行为(Per-Domain Behavior,PDB)。正如其名,逐跳行为可应用于传输路径上支持所需服务级别的路由器,它们也可以理解数据包所要求的信令。逐域行为可以到达给定域内的所有跳。对服务质量的决策是在这些域的边缘做出的。成功该域的数据流是以一定的服务质量来进行处理的。在PDB中的域可能并不是指实际的IP子网,而是以某种统一方法提供质量服务的一组路由器。  多年来,服务质量在IPv4中是以某种形式来实现的,但从没有被广泛使用。这其中有很多原因,而不只是由于旧有“默认质量”的Internet服务的爆炸式增长所造成的。但是,在很多大型Internet运营商的主干网中,服务质量得到了推动,这就要求IPv6在部署成实用网络之前,在服务质量方面应达到比较成熟。3.4.10  路由器警告与逐跳选项  IPv6意识到了当前对差分服务质量的较低要求,并采取了积极对策,它也在以平稳的方式为逐步适应而做准备。IPv6首部删除了与服务质量有关的所有字段(在IPv4首部中携带了这些字段)。IPv6允许以灵活的方式使用选项首部(例如逐跳选项扩展首部、路由扩展首部和目的地选项扩展首部),从而实现当前和今后的服务质量需求。通过从基本IPv6首部中删除这些字段(基本IPv6首部是每个路由器必须查看的),IPv6提高了Internet上对默认质量服务的处理速度。通过使所创建的首部在Internet传输时,被传输路径上的所有跳或部分选定的跳才处理它,IPv6就可以创建各种能被服务质量协议使用的工具,以获得对逐跳行为和逐域行为的精确控制。  RFC 2711在逐跳选项扩展首部中定义了路由器警告选项。路由器警告选项告诉中间路由器去查看数据包以获得重要信息。如果该选项不存在,路由器就假定对那些不是直接发送给它们的数据包所含有的内容不感兴趣,应正常地将它们转发。含有RSVP指令的IPv6数据包必须使用在逐跳选项扩展首部中使用路由器警告选项。路由器警告选项如图3-17所示。  路由器警告选项的第一个字节是选项类型字段。注意,选项类型字段的前3位全设置为0。前2个0表示,“如果你不理解这个选项,忽略它,继续处理该首部的其余内容”。这3个0的最后一个表示,“路由器不能修改该选项中的数据”。选项类型字段的其余5个字节等于5(即二进制值00101)表示该选项是逐跳       选项。  该选项的第二个字节是选项数据长度字段。路由器警告选项的“有效载荷”只有2个八字节长,因此,该字段设置为2(表示为8位的二进制数,就是00000010,如图3-17所示)。  在RFC 2711中只为路由器警告选项定义了3种可能的值,如表3-6所示。  其他位留给Internet编号分配机构(IANA)进行分配。
表3-6  IPv6路由器警告选项的可能值值含    义0数据报含有一个多播侦听者发现消息1数据报含有一个RSVP消息2数据报含有一个主动网络消息  3.5  IPv6 MTU与数据包处理  从第1章可知,MTU就是在网络路径上所能传输的最大数据包。如果要发送给定量的信息,那么数据包越大,所需要的数据包数量就越少。MTU不能比在网络上所有结点中能成功传输的数据包更大。换句话说,要发送的数据包中的最大MTU,不能超过网络链路中的最小MTU。
第4章将学习数据包的组装、路由、分段和重装,本节的内容是该章内容的基础。    RFC 1981定义了一种称为路径MTU(Path MTU,PMTU)发现的机制,IPv6用于发现任意网络路径中的MTU。IPv6结点运行PMTU发现来了解哪些网络路径具有比最小链路MTU更大的值。网络路径发现,且MTU数据包大小设置好后,数据包仍然可以通过不同的路径来进行路由,数据包可能还会遇到无法管理该MTU大小的网络结点。当某个结点遇到一个太大的数据包而无法转发时,它将丢弃该数据包,并给源结点发送回一个ICMPv6数据包太大(ICMPv6 Packet Too Big)消息。当源结点接收到该消息时,它将调整MTU大小,然后重新传输数据。该结点可能接收到大量的数据包太大消息,直到所有数据包都成功穿过了该网络路径。最小MTU大小为1280字节。图3-18显示了基本的PMTU发现过程。源结点发现网络路径中的最小链路MTU,然后在传输之前,按PMTU设置数据包MTU的大小。
图3-18  源结点使用PMTU发现来确定网络路径中的最小链路MTU  在任意给定的时间点,PMTU发现为网络中从源结点到目的地结点之间的任意路径创建PMTU。网络条件的改变,将使路由拓扑也发生改变,从而使得源结点知道预期的PMTU路径已不再可用了。发送给源结点的数据包太大消息可以告诉源结点,PMTU减少了,源结点将相应地修改MTU大小。  PMTU发现还可以确定PMTU是否增大了,或者说是否可以容纳更大的PMTU。源结点通过定期地增加MTU大小来实现这点。如果这些数据包被成功接收,那么这个发现过

TCP/IP协议原理与应用(第5版) pdf下载声明

本pdf资料下载仅供个人学习和研究使用,不能用于商业用途,请在下载后24小时内删除。如果喜欢,请购买正版

pdf下载地址

版权归出版社和作者所有,下载链接已删除。如果喜欢,请购买正版!

链接地址:TCP/IP协议原理与应用(第5版)