﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-I believe I can make a miracle-随笔分类-TCP/IP学习笔记</title><link>http://www.cnitblog.com/wujian-IT/category/6423.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 09 Oct 2011 06:42:38 GMT</lastBuildDate><pubDate>Sun, 09 Oct 2011 06:42:38 GMT</pubDate><ttl>60</ttl><item><title>TCP/IP学习笔记1，2，3章（协议篇）</title><link>http://www.cnitblog.com/wujian-IT/archive/2007/10/25/35342.html</link><dc:creator>吴剑</dc:creator><author>吴剑</author><pubDate>Thu, 25 Oct 2007 11:43:00 GMT</pubDate><guid>http://www.cnitblog.com/wujian-IT/archive/2007/10/25/35342.html</guid><wfw:comment>http://www.cnitblog.com/wujian-IT/comments/35342.html</wfw:comment><comments>http://www.cnitblog.com/wujian-IT/archive/2007/10/25/35342.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/wujian-IT/comments/commentRss/35342.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/wujian-IT/services/trackbacks/35342.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="MARGIN: 0in 0in 0pt">1<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、概述</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">1) <span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">链路层，有时也称作数据链路层或网络接口层，</span>(<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">硬件接口，</span>ARP,RARP)</p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">2) <span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网络层，有时也称作互联网层，</span>(IP, ICMP, IGMP)I C M P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">协议的附属协议</span>,I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">层用它来与其他主机或路由器交换错误报文和其他重要信息。</span>P i n g<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>Tr a c e r o u t e<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">它们都使用了</span>I C M P</p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">3) <span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">运输层主要为两台主机上的应用程序提供端到端的通信。</span>(TCP, UDP)</p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">4) <span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应用层负责处理特定的应用程序细节。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">&nbsp;<o:p></o:p></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一个互连网就是一组通过相同协议族互连在一起的网络。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">&nbsp;<o:p></o:p></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">构造互连网最简单的方法是把两个或多个网络通过路由器进行连接。它是一种特殊的用</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">于网络互连的硬件盒。路由器的好处是为不同类型的物理网络提供连接：以太网、令牌环网、</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">点对点的链接和</span>F D D I<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（光纤分布式数据接口）等等。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">&nbsp;<o:p></o:p></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">连接网络的另一个途径是使用网桥。网桥是在链路层上对网络进行互连，而路由器则是</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在网络层上对网络进行互连。网桥使得多个局域网（</span> L A N<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）组合在一起，这样对上层来说就好像是一个局域网。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><v:shapetype id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id=_x0000_i1025 style="WIDTH: 353.25pt; HEIGHT: 198pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:/DOCUME~1/WU93D5~1.JIA/LOCALS~1/Temp/msoclip1/01/clip_image001.png"></v:imagedata></v:shape></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><v:shape id=_x0000_i1026 style="WIDTH: 192.75pt; HEIGHT: 123.75pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:/DOCUME~1/WU93D5~1.JIA/LOCALS~1/Temp/msoclip1/01/clip_image003.png"></v:imagedata></v:shape></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有三类</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址：单播地址（目的为单个主机）、广播地址（目的端为给定网络上的所有主</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">机）以及多播地址（目的端为同一组内的所有主机）。在</span>T C P / I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">领域中，域名系统（</span>D N S<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）是一个分布的数据库，由它来提供</span> I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址和主机名之间的映射信息。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">T C P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">传给</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的数据单元称作</span> T C P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">报文段或简称为</span>T C P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">段（</span>T C P</p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">s e g m e n t<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）。</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">传给网络接口层的数据单元称作</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据报</span>(IP datagram)<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。通过以太网传输的比特流称作帧</span>(Fr a m e )<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><v:shape id=_x0000_i1027 style="WIDTH: 414.75pt; HEIGHT: 303pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:/DOCUME~1/WU93D5~1.JIA/LOCALS~1/Temp/msoclip1/01/clip_image005.png"></v:imagedata></v:shape></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">由于</span>T C P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>U D P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>I C M P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>I G M P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">都要向</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">传送数据，因此</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">必须在</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">生成的</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">首部中加入某种标识，以表明数据属于哪一层。为此，</span> I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在首部中存入一个长度为</span>8 b i t<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的数值，称作协议域。</span>1<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示为</span>I C M P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">协议，</span>2<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示为</span>I G M P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">协议，</span>6<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示为</span>T C P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">协议，</span>1 7<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示为</span>U D P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">协议。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类似地，许多应用程序都可以使用</span> T C P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或</span>U D P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来传送数据。运输层协议在生成报文首部时要存入一个应用程序的标识符。</span> T C P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>U D P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">都用一个</span>1 6 b i t<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的端口号来表示不同的应用程序。</span>T C P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>U D P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">把源端口号和目的端口号分别存入报文首部中。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网络接口分别要发送和接收</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>A R P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>R A R P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据，因此也必须在以太网的帧首部中加入某种形式的标识，以指明生成数据的网络层协议。为此，以太网的帧首部也有一个</span> 16 bit<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的帧类型域。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><v:shape id=_x0000_i1028 style="WIDTH: 414.75pt; HEIGHT: 264pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:/DOCUME~1/WU93D5~1.JIA/LOCALS~1/Temp/msoclip1/01/clip_image007.png"></v:imagedata></v:shape></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为协议</span>I C M P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>I G M P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">定位一直是一件很棘手的事情。在图</span>1 - 4<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中，把它们与</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">放在</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">同一层上，那是因为事实上它们是</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的附属协议。但是在这里，我们又把它们放在</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">层</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的上面，这是因为</span>ICMP<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>IGMP<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">报文都被封装在</span>IP<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据报中。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对于</span>A R P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>R A R P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，我们也遇到类似的难题。在这里把它们放在以太网设备驱动程</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">序的上方，这是因为它们和</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据报一样，都有各自的以太网数据帧类型。但在图</span>2 - 4</p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中，我们又把</span>A R P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">作为以太网设备驱动程序的一部分，放在</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">层的下面，其原因在逻</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">辑上是合理的。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">&nbsp;<o:p></o:p></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">2<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、链路层</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span>T C P / I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">协议族中，链路层主要有三个目的：（</span>1<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）为</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模块发送和接收</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据报；（</span>2<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）为</span>A R P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模块发送</span>A R P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">请求和接收</span>A R P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应答；（</span>3<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）为</span>R A R P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发送</span>R A R P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">请求和接收</span>R A R P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应答。</span>T C P / I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">支持多种不同的链路层协议，这取决于网络所使用的硬件，如以太网、令牌环网、</span>F D D I<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（光纤分布式数据接口）及</span>R S-2 3 2<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">串行线路等。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以太网和</span>IEEE 802<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">封装：</span><span lang=ZH-CN> </span><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当今</span> T C P / I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">采用的主要的局域网技术。它采用一种称作</span> C S M A / C D<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的媒体接入方法，其意思是带冲突检测的载波侦听多路接入（</span>Carrier Sense, Multiple Access with Collision Detection<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）。它的速率为</span>10 Mb/s<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，地址为</span>48 bit<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>I E E E<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（电子电气工程师协会）</span> 8 0 2<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">委员会公布了一个稍有不同的标准集。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">S L I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的全称是</span>Serial Line IP<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。它是一种在串行线路上对</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据报进行封装的简单形式</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">P P P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，点对点协议修改了</span>S L I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">协议中的所有缺陷。</span>P P P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">包括以下三个部分：</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">1) <span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在串行链路上封装</span> I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据报的方法。</span> P P P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">既支持数据为</span>8<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">位和无奇偶检验的异步模式大多数计算机上都普遍存在的串行接口），还支持面向比特的同步链接。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">2) <span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">建立、配置及测试数据链路的链路控制协议（</span> L C P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span>Link Control Protocol<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）。它允许通</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方进行协商，以确定不同的选项。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">3) <span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">针对不同网络层协议的网络控制协议（</span> N C P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span>Network Control Protocol<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）体系。当前定义的网络层有</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>O S I<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网络层、</span>D E C n e t<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以及</span>A p p l e Ta l k<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。例如，</span>IP NCP<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">允许双方商定是报文首部进行压缩，类似于</span>C S L I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（缩写词</span>N C P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">也可用在</span>T C P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的前面）。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><v:shape id=_x0000_i1029 style="WIDTH: 414.75pt; HEIGHT: 373.5pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:/DOCUME~1/WU93D5~1.JIA/LOCALS~1/Temp/msoclip1/01/clip_image009.png"></v:imagedata></v:shape></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">&nbsp;<o:p></o:p></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><v:shape id=_x0000_i1030 style="WIDTH: 387pt; HEIGHT: 203.25pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:/DOCUME~1/WU93D5~1.JIA/LOCALS~1/Temp/msoclip1/01/clip_image011.png"></v:imagedata></v:shape></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">大多数的产品都支持环回接口（</span>Loopback Interface<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），以允许运行在同一台主机上的客户</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序和服务器程序通过</span> T C P / I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行通信。一旦传输层检测到目的端地址是环回地址时，应该可以省略部分传输层和所有网络层的逻辑操作。但是大多数的产品还是照样完成传输层和网络层的所有过程，只是当</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据报离开网络层时把它返回给自己。正因为不经过链路层，所以这种数据包不会出现在网络上。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以太网和</span>8 0 2 . 3<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对数据帧的长度都有一个限制，其最大值分别是</span>1 5 0 0<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>1 4 9 2<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">字节。链路层的这个特性称作</span>MTU<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">字节网络</span>M T U<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，最大传输单元。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">T C P / I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">成功的原因之一是它几乎能在任何数据链路技术上运行。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">&nbsp;<o:p></o:p></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">3<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是</span>T C P / I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">协议族中最为核心的协议。所有的</span>T C P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>U D P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>I C M P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">及</span>I G M P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据都以</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据报格式传输。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不可靠（</span>u n r e l i a b l e<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）的意思是它不能保证</span> I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据报能成功地到达目的地。</span> I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">仅提供最好的传输服务。如果发生某种错误时，如某个路由器暂时用完了缓冲区，</span> I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有一个简单的错误处理算法：丢弃该数据报，然后发送</span> I C M P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">消息报给信源端。任何要求的可靠性必须由上层来提供（如</span>T C P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">无连接（</span>c o n n e c t i o n l e s s<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）这个术语的意思是</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。这也说明，</span> I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据报可以不按发送顺序接收。如果一信源向相同的信宿发送两个连续的数据报（先是</span> A<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，然后是</span>B<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），每个数据报都是独立地进行路由选择，可能选择不同的路线，因此</span>B<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可能在</span>A<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">到达之前先到达。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><v:shape id=_x0000_i1031 style="WIDTH: 393pt; HEIGHT: 281.25pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:/DOCUME~1/WU93D5~1.JIA/LOCALS~1/Temp/msoclip1/01/clip_image013.png"></v:imagedata></v:shape></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为了计算一份数据报的</span> I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">检验和，首先把检验和字段置为</span> 0<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。然后，对首部中每个</span> 16 bit</p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行二进制反码求和（整个首部看成是由一串</span> 16 bit<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的字组成），结果存在检验和字段中。当收到一份</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据报后，同样对首部中每个</span>16 bit<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和，因此，如果首部在传输过程中没有发生任何差错，那么接收方计算的结果应该为全</span> 1<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。如果结果不是全</span>1<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（即检验和错误），那么</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就丢弃收到的数据报。但是不生成差错报文，由上层去发现丢失的数据报并进行重传。</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">路由选择是简单的，特别对于主机来说。如果目的主机与源主机直接相连（如点对点链路）或都在一个共享网络上（以太网或令牌环网），那么</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据报就直接送到目的主机上。否则，主机把数据报发往一默认的路由器上，由路由器来转发该数据报。大多数的主机都是采用这种简单机制。即</span> I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">层既可以配置成路由器的功能，也可以配置成主机的功能。当今的大多数多用户系统，包括几乎所有的</span> U n i x<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系统，都可以配置成一个路由器。我们可以为它指定主机和路由器都可以使用的简单路由算法。本质上的区别在于主机从不把数据报从一个接口转发到另一个接口，而路由器则要转发数据报。内含路由器功能的主机应该从不转发数据报，除非它被设置成那样。在</span> 9 . 4<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">小节中，我们将进一步讨论配置的有关问题。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在一般的体制中，</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以从</span>T C P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>U D P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>I C M P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>I G M P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">接收数据报（即在本地生成的数据报）并进行发送，或者从一个网络接口接收数据报（待转发的数据报）并进行发送。</span> I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">层在内存中有一个路由表。当收到一份数据报并进行发送时，它都要对该表搜索一次。当数据报来自某个网络接口时，</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">首先检查目的</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址是否为本机的</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址之一或者</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">广播地址。如果确实是这样，数据报就被送到由</span> I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">首部协议字段所指定的协议模块进行处理。如果数据报的目的不是这些地址，那么（</span> 1<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）如果</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">层被设置为路由器的功能，那么就对数据报进行转发（也就是说，像下面对待发出的数据报一样处理）；否则（</span> 2<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）数据报被丢弃。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">路由表中的每一项都包含下面这些信息：</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">* <span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目的</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址。它既可以是一个完整的主机地址，也可以是一个网络地址，由该表目中的标志字段来指定（如下所述）。主机地址有一个非</span>0<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的主机号（见图</span>1 - 5<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），以指定某一特定的主机，而网络地址中的主机号为</span>0<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，以指定网络中的所有主机（如以太网，令牌环网）。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">* <span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下一站（或下一跳）路由器（</span> next-hop router<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）的</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址，或者有直接连接的网络</span> I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址。下一站路由器是指一个在直接相连网络上的路由器，通过它可以转发数据报。下</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一站路由器不是最终的目的，但是它可以把传送给它的数据报转发到最终目的。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">*<span style="mso-spacerun: yes">&nbsp; </span><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标志。其中一个标志指明目的</span> I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址是网络地址还是主机地址，另一个标志指明下一</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">站路由器是否为真正的下一站路由器，还是一个直接相连的接口（我们将在</span> 9 . 2<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">节中</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">详细介绍这些标志）。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为数据报的传输指定一个网络接口。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">&nbsp;<o:p></o:p></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">路由选择是逐跳地（</span>h o p - b y - h o p <span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）进行的。从这个路由表信息可以看出，</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">并不知道到</span><span lang=ZH-CN> </span><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">达任何目的的完整路径（当然，除了那些与主机直接相连的目的）。所有的</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">路由选择只为数</span><span lang=ZH-CN> </span><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">据报传输提供下一站路由器的</span> I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址。它假定下一站路由器比发送数据报的主机更接近目的，</span><span lang=ZH-CN> </span><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">而且下一站路由器与该主机是直接相连的。</span> </p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">路由选择主要完成以下这些功能：</span> </p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>1) <span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">搜索路由表，寻找能与目的</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址完全匹配的表目（网络号和主机号都要匹配）。如果找到，则把报文发送给该表目指定的下一站路由器或直接连接的网络接口（取决于标</span> </p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">志字段的值）。</span> </p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>2) <span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">搜索路由表，寻找能与目的网络号相匹配的表目。如果找到，则把报文发送给该表目指定的下一站路由器或直接连接的网络接口（取决于标志字段的值）。目的网络上的所有主机都可以通过这个表目来处置。例如，一个以太网上的所有主机都是通过这种表目进行寻径的。这种搜索网络的匹配方法必须考虑可能的子网掩码。关于这一点我们在下一节中进行</span> </p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">讨论。</span> </p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 21.75pt">3) <span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">搜索路由表，寻找标为&#8220;默认（</span> d e f a u l t <span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）&#8221;的表目。如果找到，则把报文发送给该表目指定的下一站路由器。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 21.75pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果上面这些步骤都没有成功，那么该数据报就不能被传送。如果不能传送的数据报来自本机，那么一般会向生成数据报的应用程序返回一个&#8220;主机不可达&#8221;或&#8220;网络不可达&#8221;的错误。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><v:shape id=_x0000_i1032 style="WIDTH: 414.75pt; HEIGHT: 67.5pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:/DOCUME~1/WU93D5~1.JIA/LOCALS~1/Temp/msoclip1/01/clip_image015.png"></v:imagedata></v:shape></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><v:shape id=_x0000_i1033 style="WIDTH: 414.75pt; HEIGHT: 118.5pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:/DOCUME~1/WU93D5~1.JIA/LOCALS~1/Temp/msoclip1/01/clip_image017.png"></v:imagedata></v:shape></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">&nbsp;<o:p></o:p></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">给定</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址和子网掩码以后，主机就可以确定</span> I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据报的目的是：</span>(1)<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">本子网上的主机；</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">(2)<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">本网络中其他子网中的主机；</span>( 3)<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">其他网络上的主机。如果知道本机的</span> I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址，那么就知道它是否为</span>A<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类、</span>B<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类或</span>C<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类地址</span>(<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">从</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址的高位可以得知</span>)<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，也就知道网络号和子网号之间的分界线。而根据子网掩码就可知道子网号与主机号之间的分界线。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt">&nbsp;<o:p></o:p></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">举例</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">假设我们的主机地址是</span>1 4 0 . 2 5 2 . 1 . 1<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（一个</span>B<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类地址），而子网掩码为</span>2 5 5 . 2 5 5 . 2 5 5 . 0<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（其中</span>8b i t<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为子网号，</span>8 bit<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为主机号）。</span>* <span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果目的</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址是</span>1 4 0 . 2 5 2 . 4 . 5<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，那么我们就知道</span>B<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类网络号是相同的（</span>1 4 0 . 2 5 2<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），但是子网号是不同的（</span>1<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>4<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）。用子网掩码在两个</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址之间的比较如图</span>3 - 8<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所示。</span>* <span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果目的</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址是</span>1 4 0 . 2 5 2 . 1 . 2 2<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，那么</span>B<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类网络号还是一样的（</span>1 4 0 . 2 5 2<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），而且子网号也是一样的（</span>1<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），但是主机号是不同的。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果目的</span>I P<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址是</span>1 9 2 . 4 3 . 2 3 5 . 6<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（一个</span>C<span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类地址），那么网络号是不同的，因而进一步的比较就不用再进行了。</span></p>
<p class=MsoNormal style="MARGIN: 0in 0in 0pt"><v:shape id=_x0000_i1034 style="WIDTH: 417pt; HEIGHT: 135.75pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:/DOCUME~1/WU93D5~1.JIA/LOCALS~1/Temp/msoclip1/01/clip_image019.png"></v:imagedata></v:shape></p>
<img src ="http://www.cnitblog.com/wujian-IT/aggbug/35342.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/wujian-IT/" target="_blank">吴剑</a> 2007-10-25 19:43 <a href="http://www.cnitblog.com/wujian-IT/archive/2007/10/25/35342.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TCP/IP学习笔记6，7，8章（协议篇）</title><link>http://www.cnitblog.com/wujian-IT/archive/2007/10/24/35298.html</link><dc:creator>吴剑</dc:creator><author>吴剑</author><pubDate>Wed, 24 Oct 2007 15:09:00 GMT</pubDate><guid>http://www.cnitblog.com/wujian-IT/archive/2007/10/24/35298.html</guid><wfw:comment>http://www.cnitblog.com/wujian-IT/comments/35298.html</wfw:comment><comments>http://www.cnitblog.com/wujian-IT/archive/2007/10/24/35298.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/wujian-IT/comments/commentRss/35298.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/wujian-IT/services/trackbacks/35298.html</trackback:ping><description><![CDATA[<p>6、ICMP: Internet控制报文协议</p>
<p>I C M P报文通常被I P层或更高层协议（ T C P或U D P）使用。I C M P报文是在I P数据报内部被传输的</p>
<p><!--[if gte vml 1]>
<![endif]--><!--[if !vml]--><img src="file:///C:/DOCUME%7E1/ADMINI%7E1/LOCALS%7E1/Temp/msohtml1/01/clip_image002.jpg" v:shapes="_x0000_i1025" height="137" width="344"><!--[endif]--></p>
<p><!--[if gte vml 1]>
<![endif]--><!--[if !vml]--><img src="file:///C:/DOCUME%7E1/ADMINI%7E1/LOCALS%7E1/Temp/msohtml1/01/clip_image004.jpg" v:shapes="_x0000_i1026" height="180" width="480"><!--[endif]--></p>
<p>ICMP不同类型由报文中的类型字段和代码字段来共同决定。可以确定I C M P报文是一份查询报文还是一份差错报文。因为对I C M P差错报</p>
<p>文有时需要作特殊处理，因此我们需要对它们进行区分。例如，在对I C M P差错报文进行响应</p>
<p>时，永远不会生成另一份I C M P差错报文（如果没有这个限制规则，可能会遇到一个差错产生</p>
<p>另一个差错的情况，而差错再产生差错，这样会无休止地循环下去）。当发送一份I C M P差错报文时，报文始终包含I P的首部和产生I C M P差错报文的I P数据报的前8个字节。这样，接收I C M P差错报文的模块就会把它与某个特定的协议（根据I P数据报首部中的协议字段来判断）和用户进程（根据包含在I P数据报前8个字节中的T C P或U D P报文首部中的T C P或U D P端口号来判断）联系起来。</p>
<p>&nbsp;</p>
<p>7、ping程序</p>
<p>发送回显请求的p i n g程序为客户，而称被p i n g的主机为服务器。大多数的T C P / I P</p>
<p>实现都在内核中直接支持P i n g服务器—这种服务器不是一个用户进程（在第6章中描述的两</p>
<p>种I C M P查询服务，地址掩码和时间戳请求，也都是直接在内核中进行处理的）</p>
<p>I C M P回显请求和回显应答报文如图7 - 1所示。</p>
<p><!--[if gte vml 1]>
<![endif]--><!--[if !vml]--><img src="file:///C:/DOCUME%7E1/ADMINI%7E1/LOCALS%7E1/Temp/msohtml1/01/clip_image006.jpg" v:shapes="_x0000_i1027" height="216" width="554"><!--[endif]--></p>
<p>对于其他类型的I C M P查询报文，服务器必须响应标识符和序列号字段。另外，客户发送</p>
<p>的选项数据必须回显，假设客户对这些信息都会感兴趣。</p>
<p>U n i x系统在实现p i n g程序时是把I C M P报文中的标识符字段置成发送进程的I D号。这样</p>
<p>即使在同一台主机上同时运行了多个p i n g程序实例， p i n g程序也可以识别出返回的信息。序列号从0开始，每发送一次新的回显请求就加1。p i n g程序打印出返回的每个分组的序列号，允许我们查看是否有分组丢失、失序或重复。I P是一种最好的数据报传递服务，因此</p>
<p>这三个条件都有可能发生。</p>
<p>敲入p i n g命令，几秒钟过后会在第1行打印出I P地址， D N S就是利用这段时间来确定主机</p>
<p>名所对应的I P地址。通常，第1个往返时间值要比其他的大。这是由于目的端的硬件地址不在A R P高速缓存中的缘故。在发送第一个回显请求之前要发送一个A R P请求并接收A R P应答，这需要花费几毫秒的时间。</p>
<p>IP首部最长为6 0个字节, 固定长度为2 0字节，R R选项用去3个字节（下面我们再讨论），这样只剩下3 7个字节（ 6 0-2 0-3）来存放I P地址清单，也就是说只能存放9个I P地址。I P数据报中的R R选项的一般格式如图所示。</p>
<p><!--[if gte vml 1]>
<![endif]--><!--[if !vml]--><img src="file:///C:/DOCUME%7E1/ADMINI%7E1/LOCALS%7E1/Temp/msohtml1/01/clip_image008.jpg" v:shapes="_x0000_i1028" height="146" width="554"><!--[endif]--></p>
<p>c o d e是一个字节，指明I P选项的类型。对于R R选项来说，它的值为7。l e n是R R选项总字</p>
<p>节长度，在这种情况下为3 9（尽管可以为R R选项设置比最大长度小的长度，但是p
i n g程序</p>
<p>总是提供3 9字节的选项字段，最多可以记录9个I P地址。由于I P首部中留给选项的空间有限，</p>
<p>它一般情况都设置成最大长度）。</p>
<p>p t r称作指针字段。它是一个基于1的指针，指向存放下一个I P地址的位置。它的最小值为</p>
<p>4，指向存放第一个I P地址的位置。随着每个I P地址存入清单， p t r的值分别为8，1 2，1 6，最</p>
<p>大到3 6。当记录下9个I P地址后，p t r的值为4 0，表示清单已满。</p>
<p>I P时间戳选项与记录路由选项类似。</p>
<p><!--[if gte vml 1]>
<![endif]--><!--[if !vml]--><img src="file:///C:/DOCUME%7E1/ADMINI%7E1/LOCALS%7E1/Temp/msohtml1/01/clip_image010.jpg" v:shapes="_x0000_i1029" height="123" width="554"><!--[endif]--></p>
<p>8、Traceroute程序</p>
<p>在7 . 3节中，我们描述了I P记录路由选项（ R R）。为什么不使用这个选项而另外开发一个</p>
<p>新的应用程序？有三个方面的原因。首先，原先并不是所有的路由器都支持记录路由选项，</p>
<p>因此该选项在某些路径上不能使用（ Tr a c e r o u t e程序不需要中间路由器具备任何特殊的或可选的功能）。</p>
<p>其次，记录路由一般是单向的选项。发送端设置了该选项，那么接收端不得不从收到的I P</p>
<p>首部中提取出所有的信息，然后全部返回给发送端。在7 . 3节中，我们看到大多数P i n g服务器的实现（内核中的I C M P回显应答功能）把接收到的R R清单返回，但是这样使得记录下来的I P地址翻了一番（一来一回）。这样做会受到一些限制，这一点我们在下一段讨论（
Tr a c e r o u t e程序只需要目的端运行一个U D P模块—其他不需要任何特殊的服务器应用程序）。</p>
<p>最后一个原因也是最主要的原因是， I P首部中留给选项的空间有限，不能存放当前大多</p>
<p>数的路径。在I P首部选项字段中最多只能存放9个I P地址。在原先的A R PA N E T中这是足够的，</p>
<p>但是对现在来说是远远不够的。</p>
<p>Tr a c e r o u t e程序使用I C M P报文和I P首部中的T T L字段（生存周期）。每个处理数据报的路由器都需要把T T L的值减1或减去数据报在路由器中停留的秒数。由于大多数的路由器转发数据报的时延都小于1秒钟，因此T T L最终成为一个跳站的计数器，所经过的每个路由器都将其值减1。T T L字段的目的是防止数据报在选路时无休止地在网络中流动。</p>
<p>当路由器收到一份I P数据报，如果其T T L字段是0或1，则路由器不转发该数据报（接收到</p>
<p>这种数据报的目的主机可以将它交给应用程序，这是因为不需要转发该数据报。但是在通常</p>
<p>情况下，系统不应该接收T T L字段为0的数据报）。相反，路由器将该数据报丢弃，并给信源</p>
<p>机发一份I C M P&#8220;超时&#8221;信息。Tr a c e r o u t e程序的关键在于包含这份I C M P信息的I P报文的信源地址是该路由器的I P地址。</p>
<p>我们现在可以猜想一下Tr a c e r o u t e程序的操作过程。它发送一份T T L字段为1的I P数据报给</p>
<p>目的主机。处理这份数据报的第一个路由器将T T L值减1，丢弃该数据报，并发回一份超时</p>
<p>I C M P报文。这样就得到了该路径中的第一个路由器的地址。然后Tr a c e r o u t e程序发送一份</p>
<p>T T L值为2的数据报，这样我们就可以得到第二个路由器的地址。继续这个过程直至该数据报</p>
<p>到达目的主机。但是目的主机哪怕接收到T T L值为1的I P数据报，也不会丢弃该数据报并产生</p>
<p>一份超时I C M P报文，这是因为数据报已经到达其最终目的地。那么我们该如何判断是否已经</p>
<p>到达目的主机了呢？</p>
<p>Tr a c e r o u t e程序发送一份U D P数据报给目的主机，但它选择一个不可能的值作为U D P端口</p>
<p>号（大于30 000），使目的主机的任何一个应用程序都不可能使用该端口。因为，当该数据报</p>
<p>到达时，将使目的主机的U D P模块产生一份&#8220;端口不可达&#8221;错误（见6 . 5节）的I C M P报文。</p>
<p>这样，Tr a c e r o u t e程序所要做的就是区分接收到的I C M P报文是超时还是端口不可达，以判断什么时候结束。</p>
<br><img src ="http://www.cnitblog.com/wujian-IT/aggbug/35298.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/wujian-IT/" target="_blank">吴剑</a> 2007-10-24 23:09 <a href="http://www.cnitblog.com/wujian-IT/archive/2007/10/24/35298.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>