




免费预览已结束,剩余25页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
页眉 TCP/IP基础:DNSDHCPICMP和ARP协议DNS 的来由如果您为您的机器设定过 internet 连线那么您一定接触过 DNS 了但 DNS 又是什么东东呢说穿了DNS 是用来帮助记忆网路位址的完全是为了迁就人类的记忆思维而设的。DNS 的全称是 Domain Name System(或 Service) 当您连上一个网址在URL打上 的时候可以说就是使用了 DNS 的服务了。但如果您知道这个 的 IP 位址直接输入 01 也同样可以到达这个网址。其实电脑使用的只是 IP 位址而已(最终也是 0 和 1 啦)这个 只是让人们容易记忆而设的。因为我们人类对一些比较有意义的文字记忆(如)比记忆那些毫无头绪的号码(如01)往往容易得多。DNS 的作用就是为我们在文字和 IP 之间担当了翻译而免除了强记号码的痛苦。假如您的电话有名字记忆功能您只需知道对方的名字就可以拨号给友人了我们可以说这电话也具备如 DNS 的功能了呢但是我们在网路中使用的 DNS 系统就是这么简单吗非也复杂得很呢下面就让我们一起去探索一下 DNS 的奥秘在早期的 IP 网路世界里面每台电脑都只用 IP 位址来表示不久人们就发现这样很难记忆于是一些 Unix 的管理者就建立一个 HOSTS 对应表将 IP 和主机名字对应起来这样用户只需输入电脑名字就可以代替 IP 来进行沟通了。如果你安装了 Linux 系统在 /etc 下面就可以找到这个 hosts 档案在 NT 的系统里你也可以在 winntsystem32driversetc 下面找到它。不过这个 HOSTS 档是要由管理者手工维护的最大的问题是无法适用于大型网路而且更新也是件非常头痛的事情。这就是 DNS 大派用场的时候了。DNS 的结构DNS 是一个分层级的分散式名称对应系统有点像电脑的目录树结构在最顶端的是一个“root”然后其下分为好几个基本类别名称如comorgedu 等再下面是组织名称如IBMMicrosoftintel 等继而是主机名称如wwwmailftp 等。因为当初 internet 是从美国发展起的所以当时并没有国域名称但随着后来 internet 的蓬勃发展DNS 也加进了诸如 twhkcn 等国域名称。所以一个完整的 dns 名称就好象是这样的.tw而整个名称对应的就是一个(或多个) IP 位址了。在早期的设计下root 下面只有六个组织类别不过自从组织类别名称开放以后各种各样五花八门的名称也相继涌现出来了但无论如何取名的规则最好尽量适合网站性质。除了原来的类别资料由美国本土的 NIC(Network Information Center) 管理之外其它在国域以下的类别分别由该国的 NIC 管理(比方说台湾的 DNS 将授权给 twnic 来管理)。这样的结构看起来就像这样在结构中各组织的 DNS 经过申请后由该组织或其委托主机管理(通常当您申请注册一个 domain 域名称的时候都要指定两台 DNS 主机负责该域名的 DNS 管理)。DNS 的运作在我们设定 IP 网路环境的时候都要告诉每台主机关于 DNS 伺服器的位址(我们可以手动的在每一台主机上面设置也可以使用 DHCP 来指定)。但这设定的义意何在呢?从前面的介绍我们或可知道:其目的就是请 DNS 帮忙解析主机名称与 IP 位址啦。在这个设定过程中,DNS 被称为 resolver (也就是负责解析的 DNS Server),而被设定主机,则只是单纯的 DNS Client 了,也就是提出解析请求的主机。下面让我们看看 DNS 是怎样运作的1. 当被询问到有关本域名之内的主机名称的时候DNS 伺服器会直接做出回答2. 客户端向伺服器提出查询项目3. 当被询问到有关本域名之内的主机名称的时候DNS 伺服器会直接做出回答4. 如果所查询的主机名称属于其它域名的话会检查快取记忆体(Cache)看看有没有相关资料5. 如果没有发现则会转向 root 伺服器查询6. 然后 root 伺服器会将该域名之下一层授权(authoritative)伺服器的位址告知(可能会超过一台)7. 本地伺服器然后会向其中的一台伺服器查询并将这些伺服器名单存到记忆体中以备将来之需(省却再向 root 查询的步骤)8. 远方伺服器回应查询9. 若该回应并非最后一层的答案,则继续往下一层查询,直到获的客户端所查询的结果为止10. 将查询结果回应给客户端并同时将结果储存一个备份在自己的快取记忆里面11. 如果在存放时间尚未过时之前再接到相同的查询则以存放于快取记忆里面的资料来做回应。从这个过程我们可以看出没有任何一台 DNS 主机会包含所有域名的 DNS 资料资料都是分散在全部的 DNS 伺服器中而 NIC 只需知道各 DNS 伺服器位址就可以了。为了更好地理解一下 DNS 的运作让我们用下图看看查询 .tw 这台主机位址的过程在这个例子中.tw 台主机的 DNS 对应资料是由负责 .tw 这个域名的 DNS 伺服器管理的。(在 DNS 术语中我们称一个域名为“zone”这个 zone 可以是您从 NIC 申请回来的域名也可以是从该域名之下延伸出来的“sub-zone”)。在这台 DNS 伺服器上面必须有一个关于 .tw 这个 zone 的档案而这档案里面必须有一笔关于 www 的记录(任何主机都是以“记录”来表示,称为 Resource Record)。这个记录可以为一个 IP 位址也可以以别名形式来对应一台主机名称但无论如何所对应的主机名称最终是要被一个 IP 位址所对应着就是了。同时DNS 还能提供“反查询”(reverse lookup) 功能也就是以 IP 来查询主机名称。网路上面的许多服务如FTP, SMTP等等都需要到这个功能。其实DNS 服务本身就必须要使用反查询功能而且在设定上也必须要为每个网路建立起 reverse zone。虽然有些人发觉即使没有 reverse zone 也可以使用到 DNS 服务但其中弊端却不容易被察觉到在这个(中文)网页.tw/Basic/WhenToUse-Rev.html 上面您可以看到忽略 revers zone 所致一些问题。DNS 的名称记录事实上DNS 不仅仅是用来解释位址用的而且还可以回答更多关于网路和主机的其它信息其中很重要的一个功能就是可以供邮件系统进行路由。这些资料通常会以不同的“记录”名称出现在DNS的资料档案中。下面让我们参考一个 Linux 的 DNS 档案看看这些记录是如何表示的; Zone file for siyongc.domain; Then full zone file;$TTL 86400IN SOA RedHat52.siyongc.domain. netman.siyongc.domain. (1999092801 ; serial8H ; refresh2H ; retry1W ; expire1D ) ; minimun;IN TXT A test domain, created by NetmanIN NS RedHat52IN NS debian.homeIN MX 10 redhat52.siyongc.domain.IN MX 20 debian.home;localhost IN A gw IN A 7IN HINFO Redhat MASQIN TXT The masquerade gateway to internetredhat52 IN A 7IN MX 10 redhat52IN MX 20 debian.homeIN HINFO Dell PII 266 Linux RedHatwww IN CNAME redhat52mail IN CNAME redhat52ftp IN CNAME redhat52news IN CNAME redhat52smtp IN CNAME redhat52pii266 IN A 5IN MX 10 redhat52.siyongc.domain.IN MX 20 debian.home.slware36 IN A 8IN MX 10 redhat52.siyongc.domain.IN MX 20 debian.home.rhroute IN A IN MX 10 redhat52.siyongc.domain.IN MX 20 debian.home.home IN ns debian.home.siyongc.domain.debian.home IN A 01我们姑且不理会开头那几行的意思那是给 DNS 系统本身使用的(我将会在“学习 Linux”文章里面再详细讨论)这里我们只是看看几个记录名称而已分擔 DNS 工作由於 DNS 的重要性日益顯著,為提高其容錯能力及查詢效能,我們在架設某一單一 zone 的時侯,常以多台伺服器來負責該 zone 的服務。其中,我們必需指定一台 Primary(master) DNS 伺服器,它是架設在某一個網域下被主要授權並控制所有名稱記錄的主控伺服器管轄著該網域的所有記錄資料這些記錄資料只有 primary(master) 可以修改。但如果在一個比較大型的網路中DNS 伺服器就會變得很繁忙所以您可以設定多個 DNS 來分擔 master 的工作但您或許不願意到每一個 DNS 伺服器去更新資料吧而且就算您願意這樣做也容易出現錯誤或資料不同步的情形。這樣您可以設定其它的伺服器為 secondary (slave) DNS 來複製 master 上面的記錄資料這樣其它的電腦可以被分派到不同的 DNS 做查詢既可以分擔 master 的工作而且資料也可以自動進行同步工作。為確保資料的一致性,master 每次更新過資料後會以 notify 機制主動通知 slave 前來同步。此外,您可以設定 DNS 資料同步的時間間隔在 dns 檔案中的 Refresh 設定就是了。经过了前面的学习,相信您不再认为设定与管理 TCP/IP 网路是件轻松的事情。要成功的将您的网路用 TCP/IP 连接起来,您就得为每台电脑设定 IP、mask、gateway、等等繁琐的事情。要是您想管理好一个比较大的网路或是电脑节点经常改变(如手提电脑或拨接)这样的工作可以说是非常令人讨厌的而且出错的机会也比较多。要是,万一日后要进行 IP 重新规划其工作量也是相当惊人的。面对这些情形DHCP 可以说您的菩萨了它不但救苦救难而且神通广大。什么是 DHCP?DHCP 是 Dynamic Host Configuration Protocol 之缩写它的前身是 BOOTP。BOOTP 原本是用于无磁碟主机连接的网路上面的网路主机使用 BOOT ROM 而不是磁碟起动并连接上网路BOOTP 则可以自动地为那些主机设定 TCP/IP 环境。但 BOOTP 有一个缺点:您在设定前须事先获得客户端的硬体位址,而且,与 IP 的对应是静态的。换而言之,BOOTP 非常缺乏 动态性 ,若在有限的 IP 资源环境中,BOOTP 的一对一对应会造成非常可观的浪费。DHCP 可以说是 BOOTP 的增强版本它分为两个部份一个是伺服器端而另一个是客户端。所有的 IP 网路设定资料都由 DHCP 伺服器集中管理并负责处理客户端的 DHCP 要求而客户端则会使用从伺服器分配下来的IP环境资料。比较起 BOOTP ,DHCP 透过 租约 的概念,有效且动态的分配客户端的 TCP/IP 设定,而且,作为兼容考量,DHCP 也完全照顾了 BOOTP Client 的需求。DHCP 的分配形式首先必须至少有一台 DHCP 工作在网路上面它会监听网路的 DHCP 请求并与客户端搓商 TCP/IP 的设定环境。它提供两种 IP 定位方式Automatic Allocation自动分配其情形是一旦 DHCP 客户端第一次成功的从 DHCP 伺服器端租用到 IP 位址之后就永远使用这个位址。Dynamic Allocation动态分配当 DHCP 第一次从 HDCP 伺服器端租用到 IP 位址之后并非永久的使用该位址只要租约到期客户端就得释放(release)这个 IP 位址以给其它工作站使用。当然客户端可以比其它主机更优先的延续(renew)租约或是租用其它的 IP 位址。动态分配显然比自动分配更加灵活尤其是当您的实际 IP 位址不足的时候例如您是一家 ISP 只能提供 200 个IP位址用来给拨接客户但并不意味着您的客户最多只能有 200 个。因为要知道您的客户们不可能全部同一时间上网的除了他们各自的行为习惯的不同也有可能是电话线路的限制。这样您就可以将这 200 个位址轮流的租用给拨接上来的客户使用了。这也是为什么当您查看 IP 位址的时候会因每次拨接而不同的原因了(除非您申请的是一个固定 IP 通常的 ISP 都可以满足这样的要求这或许要另外收费)。当然ISP 不一定使用 DHCP 来分配位址但这个概念和使用 IP Pool 的原理是一样的。DHCP 除了能动态的设定 IP 位址之外还可以将一些 IP 保留下来给一些特殊用途的机器使用它可以按照硬体位址来固定的分配 IP 位址这样可以给您更大的设计空间。同时DHCP 还可以帮客户端指定 routernetmaskDNS ServerWINS Server等等项目您在客户端上面除了将 DHCP 选项打勾之外几乎无需做任何的 IP 环境设定。DHCP 的工作原理视乎客户端是否第一次登录网路DHCP 的工作形式会有所不同。第一次登录的时候1. 寻找 Server。当 DHCP 客户端第一次登录网路的时候也就是客户发现本机上没有任何 IP 资料设定它会向网路发出一个 DHCPDISCOVER 封包。因为客户端还不知道自己属于哪一个网路所以封包的来源位址会为 而目的位址则为 55 然后再附上 Dhcpdiscover 的信息向网路进行广播。在 Windows 的预设情形下,Dhcpdiscover 的等待时间预设为 1 秒也就是当客户端将第一个 Dhcpdiscover 封包送出去之后在 1 秒之内没有得到回应的话就会进行第二次 Dhcpdiscover 广播。若一直得不到回应的情况下客户端一共会有四次 Dhcpdiscover 广播(包括第一次在内)除了第一次会等待 1 秒之外其余三次的等待时间分别是 91316 秒。如果都没有得到 DHCP 伺服器的回应客户端则会显示错误信息宣告 Dhcpdiscover 的失败。之后基于使用者的选择系统会继续在 5 分钟之后再重复一次 Dhcpdiscover 的过程。2. 提供 IP 租用位址。当 DHCP 伺服器监听到客户端发出的 Dhcpdiscover 广播后它会从那些还没有租出的位址范围内选择最前面的的空置 IP ,连同其它 TCP/IP 设定,回应给客户端一个 DHCPOFFER 封包。由于客户端在开始的时候还没有 IP 位址所以在其 Dhcpdiscover 封包内会带有其 MAC 位址信息并且有一个 XID 编号来辨别该封包DHCP 伺服器回应的 Dhcpoffer 封包则会根据这些资料传递给要求租约的客户。根据伺服器端的设定Dhcpoffer 封包会包含一个租约期限的信息。3. 接受 IP 租约。如果客户端收到网路上多台 DHCP 伺服器的回应只会挑选其中一个 Dhcpoffer 而已(通常是最先抵达的那个)并且会向网路发送一个Dhcprequest广播封包告诉所有 DHCP 伺服器它将指定接受哪一台伺服器提供的 IP 位址。同时客户端还会向网路发送一个 ARP 封包查询网路上面有没有其它机器使用该 IP 位址如果发现该 IP 已经被占用客户端则会送出一个 DHCPDECLINE 封包给 DHCP 伺服器拒绝接受其 Dhcpoffer 并重新发送 Dhcpdiscover 信息。事实上并不是所有 DHCP 客户端都会无条件接受 DHCP 伺服器的 offer 尤其这些主机安装有其它 TCP/IP 相关的客户软体。客户端也可以用 Dhcprequest 向伺服器提出 DHCP 选择而这些选择会以不同的号码填写在 DHCP Option Field 里面换一句话说在 DHCP 伺服器上面的设定未必是客户端全都接受客户端可以保留自己的一些 TCP/IP 设定。而主动权永远在客户端这边。4.租约确认。当 DHCP 伺服器接收到客户端的 Dhcprequest 之后会向客户端发出一个 DHCPACK 回应以确认 IP 租约的正式生效也就结束了一个完整的 DHCP 工作过程。如上的工作流程如下图:DHCP 发放流程第一次登录之后一旦 DHCP 客户端成功地从伺服器哪里取得 DHCP 租约之后除非其租约已经失效并且 IP 位址也重新设定回 否则就无需再发送 Dhcpdiscover 信息了而会直接使用已经租用到的 IP 位址向之前之 DHCP 伺服器发出 Dhcprequest 信息DHCP 伺服器会尽量让客户端使用原来的 IP 位址如果没问题的话直接回应 Dhcpack 来确认则可。如果该位址已经失效或已经被其它机器使用了伺服器则会回应一个 DHCPNACK 封包给客户端要求其从新执行 Dhcpdiscover。至于 IP 的租约期限却是非常考究的并非如我们租房子那样简单 以 NT 为例子DHCP 工作站除了在开机的时候发出 dhcprequest 请求之外在租约期限一半的时候也会发出 dhcprequest 如果此时得不到 DHCP 伺服器的确认的话工作站还可以继续使用该 IP 然后在剩下的租约期限的再一半的时候(即租约的75%)还得不到确认的话那么工作站就不能拥有这个 IP 了。至于为什么不是到租约期限完全结束才放弃 IP 呢对不起小弟也是不学无术之人没有去深究了只知道要回答 MCSE 题目的时候您一定要记得 NT 是这么工作的就是了。要是您想退租,可以随时送出 DHCPLEREASE 命令解约就算您的租约在前一秒钟才获得的。跨网路的 DHCP 运作从前面描述的过程中,我们不难发现:DHCDISCOVER 是以广播方式进行的,其情形只能在同一网路之内进行因为 router 是不会将广播传送出去的。但如果 DHCP 伺服器安设在其它的网路上面呢由于 DHCP 客户端还没有 IP 环境设定所以也不知道 Router 位址而且有些 Router 也不会将 DHCP 广播封包传递出去因此这情形下 DHCPDISCOVER 是永远没办法抵达 DHCP 伺服器那端的,当然也不会发生 OFFER 及其他动作了。要解决这个问题,我们可以用 DHCP Agent (或 DHCP Proxy )主机来接管客户的 DHCP 请求然后将此请求传递给真正的 DHCP 伺服器然后将伺服器的回复传给客户。这里Proxy 主机必须自己具有路由能力,且能将双方的封包互传对方。若不使用 Proxy,您也可以在每一个网路之中安装 DHCP 伺服器但这样的话一来设备成本会增加而且管理上面也比较分散。当然啰如果在一个十分大型的网路中这样的均衡式架构还是可取的。端视您的实际情况而定了。DHCP 封包格式以下为各栏位的简要说明:OP若是 client 送给 server 的封包,设为 1 ,反向为 2 。HTYPE硬体类别,Ethernet 为 1 。HLEN硬体位址长度, Ethernet 为 6 。HOPS若封包需经过 router 传送,每站加 1 ,若在同一网内,为 0 。TRANSACTION IDDHCPREQUEST 时产生的数值,以作 DHCPREPLY 时的依据。SECONDSClient 端启动时间(秒)。FLAGS从 0 到 15 共 16 bits ,最左一 bit 为 1 时表示 server 将以广播方式传送封包给 client ,其余尚未使用。ciaddr要是 client 端想继续使用之前取得之 IP 位址,则列于这里。yiaddr从 server 送回 client 之 DHCPOFFER 与 DHCPACK 封包中,此栏填写分配给 client 的 IP 位址。siaddr若 client 需要透过网路开机,从 server 送出之 DHCPOFFER、DHCPACK、DHCPNACK 封包中,此栏填写开机程式码所在.在整个 TCP/IP 协定家族中,对 使用者 来说,ICMP 恐怕是易忽略的协定了。关于前面所讨论的协定,真要能发挥工作的前提条件是:假设一切都没问题 。然而,在当今如此复杂的网路环境中,前述条件恐怕是没办法保证的:设定可能有误、线路有可能会断、设备可能挂点、router 可能负载太高、 . 等等又等等的状况,都是我们没办法确保的。那么,我们必需有一套机制来侦测或通知各种各样可能发生的状况,这就是 ICMP 协定的目的了。之所以说 ICMP 最容易被忽略,是因为,大部份的情况下,ICMP 只给底层的网路设备参考且被解决了。真要劳架使用者执行的话,恐怕不多,最具代表的,算是 ping 与 traceroute 这两个工具了。下面,让我们一起揭开 ICMP 的神秘面纱.ICMP 协定之内容ICMP 的全称是 Internet Control Message Protocol 。从技术教度来说,ICMP 就是一个 错误侦测与回报机制,其目的就是让我们能够检测网路的连线状况也能确保连线的准确性其功能主要有 侦测远端主机是否存在。 建立及维护路由资料。 重导资料传送路径。 资料流量控制。ICMP 在沟通之中,主要是透过不同的类别( Type )与代码( Code ) 让机器来识别不同的连线状况。常用的类别如下表所列ICMP 是个非常有用的协定尤其是当我们要对网路连接状况进行判断的时候。下面让我们看看常用的 ICMP 实例,以更好了解 ICMP 的功能与作用。关于 PING当关于这个命令应该很多人都用过了吧它就是用来测试两台主机是否能够顺利连线的最简单的工具在整个 TCP/IP 协定家族中,对 使用者 来说,ICMP 恐怕是易忽略的协定了。下面,让我们一起揭开 ICMP 的神秘面纱.在 Linux 使用 ping 命令如果您不使用 -c N 参数来指定送出多少个 ICMP 封包的话ping 命令会一直持续下去直到您按 Ctrl + C 为止。从上面的命令结果我们可以确定连线是否成功之外还可以根据它的 time 来判断当前的连线速度数值越低速度越快在命令结束的两行还有一个总结如果发现您的 packet loss 很严重的话那就要检察您的线路品质或是上游的服务品质了最后一行是 round-trip (来回)时间的最小值平均值最大值它们的时间单位都是微秒 (ms)。不过那个 mdev 是什么意思我也不知道如果运用得当ping 可以帮我们判断出许多状况。例如我们要看一下跟远方的机器是否连接得上先可以 ping 一下对方的机器名称如果连接不上的话我们可以 ping 对方的 ip 如果 ip 可以 ping 得到那么很可能是 dns 不工作了那么我们可以检查本身主机的 dns 伺服器是否指定正确、以及 dns 伺服器是否设定正确。如果连 IP 都 ping 不了那么很可能是 IP 设定的问题了也可能是网路的连线问题。检查的步骤也有很多种下面是方法之一1. ping 对方的 router (如过您知道其位址的话)假如 ping 得上那可能是对方机器和其相连网路的问题2. 如果 ping 不到对方的 router 那么可以 ping 自己的 router。如果 ping 得上那么好可能是 router 和 router 之间的问题3. 如果自己的 router 也 ping 不到那么可能是自己的机器和 router 之间的问题我们可以 ping 一下自己的 IP 。如果自己的 IP 可以 ping 得到那么可能是连线的问题我们可以检查一下网线、hub、等设备看看有没有损毁的状况。4. 同时我们也可以 pin g一下网路上面其它的机器也可以用其它机器 ping 一下 router 来判别一下问题来自自己机器、还是网路、还是 router、等等。5. 如果自己的 IP 都 ping 不到那么可能是网路卡坏掉了或没有正确设定可以看看设备资源有没有冲突也可以看看设备有没有被系统启动。6. 如果看来都没问题那么可以 ping 一下回圈位址 如果连这个都 ping 不了的话这台机器的 IP 功能根本就没被启动那么您就要先检查一下网路功能有没有选择、IP 协定有没有被绑定( bind )、等基本网路设定了。从上面的过程中我们不难看出 ping 这个命令真是非常有用的。然而,我们能 ping 一台机器的时候我们就可以确定连线是成功的但如果不能 ping 的话未必是连不上哦。嗯怎么说呢且听我道来使用 ping 命令的时候事实上是送出一个 echo-request( type 8 ) 的 ICMP 封包如果对方的机器能接收到这个请求而且愿意作出回应则送回一个 echo-reply( type 0 ) 的 ICMP 封包当这个回应能顺利抵达的时候那就完成一个 ping 的动作。很显然如果这个 echo-request 不能到达对方的机器或是对方回应的 echo-reply 不能顺利送回来那 ping 就失败。这情形在许多有防火墙的环境中都会碰到如果防火墙随便将 request 和 reply 拦下来就会导致 ping 失败但并不代表其它连线不能建立。另外就算没有防火墙作怪对方也可以将机器设定为不回应任何 echo-request 封包若在 Linux 上,只要用下面命令就可以了echo 1 /proc/sys/net/ipv4/icmp_echo_ignore_all如果您不想别人 ping 您的机器也可以如法泡制。但真的当您需要用 ping 命令来测试网路连线的时候就做不到了有利有弊啦。关于 TRACEROUTE除了用 ping 命令来检查连线之外还有另外一个非常厉害的工具我们可以使用的就是 traceroute 命令了(在 Windows 上面则称为 tracert 命令) 透过 traceroute 命令我们可以找出通往目的地的所有经过的路由节点并以数字将路由顺序标识出来。若是您觉得回应很慢,那可加上 -n 参数节点名称将会以 IP 位址显示因为不需要进行名称解析回应速度当然会快一些。从上面的 traceroute 结果我们可以看到每一个节点都返回 3 个 round-trip 时间作参考。这样您就能够判断整个连线路由中交通瓶颈所在的位置在哪里。您或许奇怪 traceroute 是如何揪出所有路由节点的呢且听我细说您是否有留意到 ping 命令的结果有一个 TTL 值通常来说Time To Live 都是以时间为单位的但是在路由上面却是以跳站数目为单位的。为了防止一个封包无限期呆在网路上路由每一个封包都会被赋予一个 TTL 值告诉它最多能经过多少个跳站。当封包被一个路由节点处理之后它原来的 TTL 值就会被扣掉 1 这样如果封包的 TTL 降到 0 的时候路由器就会丢弃这个封包并且同时向来源地送出一个 time_exceeded( type 11 ) 的 ICMP 封包以告知其封包的命运。找到灵感了吗聪明的 traceroute 程式设计者正是利用了 ICMP 这个特殊功能来找出每一个路由节点的1. 首先traceroute 命令会向目标位址送出 UDP 侦测封包(在 Linux 中,可用 -I 改为 ICMP 封包)但将第一个送出的封包之 TTL 设为 1 。这样第一个路由节点在处理这个封包的时候减掉 1 ,并发现 TTL 为 0 于是就不处理这个封包并同时送回一个 ICMP 封包。这样发送端就知道第一个路由节点在哪里了。2. 当接得到第一个 ICMP 返回的时候程式会检查返回主机是否就是目标主机如果不是则再送出第二个封包但 TTL 比上次增加 1 。3. 这样第一路由节点接到的封包之 TTL 就不是 0 那么处理完毕后送给下一个节点同时将 TTL 扣除 1 。这样,当下一个站收到这个封包,再扣掉 TTL 为 0 也会送回 ICMP 封包这样程式就知道第二个路由节点在哪里了。4. 然后重复上一个动作直到找到目标主机为止或是封包的最大 TTL (通常为 30) 都用光为止但您可以用 -m 参数来指定最大的 TTL 值。怎样聪明吧_但是在实作中未必是所有路由设备都会或愿意送回 ICMP 封包的。碰到这样的情况您就会看到第 8 个跳站的情形了(以星号显示)。假如 traceroute 最后的结果一直维持着 * 符号那可能是因为 ICMP 被对方的防火墙拦下来的结果。这样的话您可能无法完成防火墙后的路由追踪了。从上面的例子来观察由第 6 个跳站开始明显降慢下来而根据名称看来应该就是 ISP 连出 backbond 的节点。假如您发现从内部网路到自己的 router 之间的连线都很快过了 router 之后就很慢如果不是专线的线路出现了问题那很可能到了要升级专线的时候了或是这时候刚好碰到有人大量使用频宽假如速度过了 router 连到对方的机房还很快然后就开始降下来那您要好好审查一下当初和 ISP 签订的合约上关于频宽的保证问题是如何说的但如果您发现连线到国外的网站而速度是从进入对方国家之后才降下来的那就没什么办法好想了。其实 ICMP 协定还有许多实在上面的例子这里不一一介绍了。能灵活运用 ICMP 协定对我们了解和测试网路情况非常有帮助。ICMP 封包格式由于 ICMP 的类别翻多,且各自又有各自的代码,因此,ICMP 并没有一个统一的封包格式以供全部 ICMP 讯息使用,不同的 ICMP 类别分别有不同的封包栏位。以 echo-request 与 echo-reply 为例,它们的 ICMP 封包内容如下:因此,只要网路之间能支援 IP ,那就可透过 ICMP 进行错误侦测与回报。ICMP 协定之 RFC 文件RFC-792RFC-896RFC-950RFC-956RFC-957RFC-1016RFC-1122RFC-1305习题1. 请问为何要有 ICMP ?其功能是甚么?2. 请列举常见的 ICMP TYPE 有哪些。3. 请列举 Distination Unreachable 的 ICMP CODE 有哪些。4. 请描述 ping 是如何严格来说,TCP/IP 协定家族并没有定义 TCP/IP 专属的 网路硬体规格。硬体的范围实在太过广泛了标准非常多当今大部份的低层网路硬体标准都是由 IEEE 制定的,但也有许多标准是厂商专属的。要让 TCP/IP 协定能够顺利与不同类型的硬体进行沟通那么就需要建立起一些标准协定来让大家共同参考。以我们最常用的乙太网(Ethernet)为例我们无需理会厂商如何设计网路界面的驱动程式一旦它能够被系统接纳网路储存层(Datalink)就能使用网路界面在实体网路上传送和接收资料了。IP 位址和实体位址对应之困扰在网路基础课程中我们知道乙太网上面使用的传送方式叫 CSMA/CD (Carrier-Sensing Multiple Access with Collision Detection)虽然讯框会在整个网段(segment)中用广播的方式传递而且所有节点都会收到讯框然而只有目的位址符合自己实体位址的讯框才会被接收下来。因此,不管上层协定是哪一种(可以是 TCP/IP 也可以是其它),在底层的传送若是使用 Ethernet 的话,就得使用 MAC (Media Access Control) 实体位址。若要查询到当前系统目前所有界面的实体位址,我们可在 Linux 系统里面输入 ifconfig 命令eth0 Link encap:EthernetHWaddr 00:A0:0C:11:EA:11inet addr:34 Bcast:59 Mask:24UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:100 Interrupt:3 Base address:0x300eth1Link encap:EthernetHWaddr 00:80:C7:47:8C:9Ainet addr:7 Bcast:55 Mask:UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1RX packets:12303 errors:0 dropped:0 overruns:0 frame:0TX packets:12694 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:100 Interrupt:10 Base address:0x2e0从上面的命令结果中可发现:关于每一个界面的第一行资讯最后的部份就是该界面的实体位址。讯框在实体网路上面传送的过程中IP 位址(或曰罗辑位址)一点都派不上用场。但问题是:当我们使用 TCP/IP 的时侯,上层的协定都是以 IP 位址为传送依据的。那么这时候我们就必须有一套方法来对应 IP 位址和实体位址了。在此一过程中关键点是如果将 IP 位址对与实体位址做对应。有些使用简单实体位址的网路(如 proNET-10 )其实体位址只占一个 byte 的长度而且允许使用者在配置网路卡的是选择自己的实体位址。在这样的网路上进行 IP 位址和实体位址的对应是比较简单的我们可以把实体位址设为和 IP 位址设为一样。例如假设某一个节点的 IP 位址为 7那么我们可以将该实体位址设为 17。 这样在 proNET 就可以轻易的根据 IP 位址来得到实体位址。这样的对应非常简单而且要维护起来也很容易在新机器假如网路的时候并不需要修改或重编已存的资料。然而我们知道在乙太网上每一个实体界面都有一个 48bit(6byte) 的 MAC 位址而 IP (v4)使用的位址则为 32bit(4byte)每各位址格式都只提供相应的层级协定使用彼此是不能互换使用的。这时候我们就无法用简单的数学关系来做 IP 位址和实体位址的对应了。IP 位址和实体位址的对应方法建立表格首先我们想到的最简单方法是在每一台机器上建立一个 IP 位址和实体位址的对应表格( table )。不过这个方法还是没办法解决如下的情形 网路上的节点数量多如恒河沙数要想将全部节点的对应关系列入表格之中几近不可能任务。 如果某一个节点产生异动情形(例如更换网卡)那么如果让所有表格正确做出相应修改也是个头痛的问题。 对某无磁碟工作站来说因为没有本机的储存设备将无非建立表格。写入高阶程式除了建立表格我们还可以将实际的网路位址写死在高阶网路程式里面。不过和前一个方法一样如果遇到硬体位址变更等异动动情形那么程式也需要重新编译过才行。显然上述两个方法都不怎么高明。ARP 协定这里我们要介绍的是 Address Resolution Protocol (ARP)。 ARP 是 TCP/IP 设计者利用乙太网的广播性质设计出来的位址解释协定。它的主要特性和优点是它的位址对应关系是动态的它以查询的方式来获得 IP 位址和实体位址的对应。它的工作原理非常简单1. 首先每一台主机都会在 ARP 快取缓冲区 (ARP Cache)中建立一个 ARP 表格用来记录 IP 位址和实体位址的对应关系。这个 Table 的每一笔资料会根据自身的存活时间递减而最终消失以确保资料的真实性。2. 当发送主机有一个封包要传送给目的主机的时候并且获得目的主机的 IP 位址那发送主机会先检查自己的 ARP 表格中有没有该 IP 位址的实体位址对应。如果有就直接使用此位址来传送框包如果没有则向网路发出一个 ARP Request 广播封包查询目的主机的实体位址。这个封包会包含发送端的 IP 位址和实体位址资料。3. 这时网路上所有的主机都会收到这个广播封包会检查封包的 IP 栏位是否和自己的 IP 位址一致。如果不是则忽略如果是则会先将发送端的实体位址和 IP 资料更新到自己的 ARP 表格去如果已经有该 IP 的对应则用新资料覆盖原来的然后再回应一个 ARP Reply 封包给对方告知发送主机关于自己
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 铁合金湿法冶炼工基础知识考核试卷及答案
- 商品房买卖合同条款解读指南
- 小学数学多媒体课件设计与运用
- 一年级数学测试题及知识点归纳
- 培训讲师开场白技巧与范例
- 中考物理试题集及详细解析
- 基于项目的探究式教学设计案例
- 农业基地植保合作合同示范文本
- 挖掘机安全操作规程与管理措施
- 电力用户故障管理办法
- 2025工会基础知识考试题库及参考答案
- 2025年安徽省宿州市辅警协警笔试笔试测试卷(含答案)
- 六年级上册语文1-8单元习作范文
- 2024广西公需课高质量共建“一带一路”谱写人类命运共同体新篇章答案
- 2025年国家法律职业资格考试《客观题卷一》模拟题及答案
- 冷板液冷标准化及技术优化白皮书
- 2025四川成都新都投资集团有限公司招聘23人笔试历年参考题库附带答案详解
- 中班健康《我会用伞》
- DG-TJ08-2461-2024 旧住房更新改造查勘标准
- 消化道早癌筛查健康宣教科普
- 事故隐患内部报告奖励制度培训
评论
0/150
提交评论