一:链路层有时也叫数据链路层或网络接口层。通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他传输媒介)的物理接口细节。 链路层主要有三个目的: (1)为I P模块发送和接收I P数据报; (2)为A R P模块发送A R P请求和接收A R P应答; (3)为R A R P发送R A R P请求和接收R A R P应答。 T C P / I P支持多种不同的链路层协议,这取决于网络所使用的硬件,如以太网、令牌环网、F D D I(光纤分布式数据接口)及R S-2 3 2串行线路等。 下面主要讲解: 两个串行接口链路层协议( S L I P和P P P) ,以及大多数实现都包含的环回( l o o p b a c k)驱动程序。
二:以太网和IEEE802封装
三:SLIP串行线路IP S L I P的全称是Serial Line IP。它是一种在串行线路上对I
P数据报进行封装的简单形式,在RFC 1055[Romkey 1988]中有详细描述。S L I P适用于家庭中每台计算机几乎都有的 R S - 2 3
2串行端口和高速调制解调器接入I n t e r n e t。
SLIP的缺点: 1每一段必须知道堆放的IP地址。没有办法把本端的IP地址通知给另一端 2数据帧中没有类型字段 3SLIP没有在数据帧中加上校验和(类似于以太网中的CRC字段) 尽管存在这些缺点,SLIP仍然是一种广泛使用的协议。
四:压缩的SLIP 由于串行线路的速率通常较低( 19200 b/s或更低) ,而且通信经常是交互式的(如 Te l n e t和R l o g i n,二者都使用T C P) ,因此在S L I P线路上有许多小的T C P分组进行交换。为了传送1个字节的数据需要2 0个字节的I P首部和2 0个字节的T C P首部,总数超过4 0个字节(1 9 . 2节描述了R l o g i n会话过程中,当敲入一个简单命令时这些小报文传输的详细情况) 。 既然承认这些性能上的缺陷,于是人们提出一个被称作 C S L I P(即压缩S
L I P)的新协议,它在RFC 1144[Jacobson 1990a]中被详细描述。C S L I P一般能把上面的4 0个字节压缩到3或5个字节。它能在C
S L I P的每一端维持多达1 6个T C
P连接,并且知道其中每个连接的首部中的某些字段一般不会发生变化。对于那些发生变化的字段,大多数只是一些小的数字和的改变。这些被压缩的首部大大地缩短了交互响应时间。
五:PPP点对点协议
总的来说,P P P比S L I P具有下面这些优点: (1) PPP支持在单根串行线路上运行多种协议,不只是I P协议; (2) 每一帧都有循环冗余检验; (3) 通信双方可以进行I P地址的动态协商(使用I P网络控制协议); (4) 与C S L I P类似,对T C P和I P报文首部进行压缩; (5)
链路控制协议可以对多个数据链路选项进行设置。为这些优点付出的代价是在每一帧的首部增加
3个字节,当建立链路时要发送几帧协商数据,以及更为复杂的实现。 尽管P P P比S L I P有更多的优点,但是现在的S L I
P用户仍然比P P P用户多。随着产品
六:环路接口 平时我们用127.0.0.1来尝试自己的机器服务器好使不好使。走的就是这个loopback接口。对于环回接口,有如下三点值得注意: 1传给环回地址(一般是127.0.0.1)的任何数据均作为I P输入。 2传给广播地址或多播地址的数据报复制一份传给环回接口,然后送到以太网上。这是 因为广播传送和多播传送的定义包含主机本身。 3任何传给该主机IP地址的数据均送到环回接口。
七:最大传输单元MTU 如果I P层有一个数据报要传,而且数据的长度比链路层的 M T U还大,那么I P层就需要进行分片(f r a g m e n t a t i o n) ,把数据报分成若干片,这样每一片都小于 M T U 在Windows下的注册表可以找到相关的MTU大小。
MTU对SLIP和CSLIP链路的传输延的计算,这里就不讲了。 PPP(Point to Point
Protocol)点对点协议
TCP/IP成功的原因之一是它几乎能在任何数据链路计数上运行。 ***********************************************************************************************************************************************************************************************************************************
IP是TCP/IP协议族中最为核心的协议,所有的TCP,UDP,ICMP和IGMP数据都以IP数据报格式传输。要注意的是,IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达以后的处理机制--这被认为是上层协议--TCP或UDP要做的事情。所以这也就出现了TCP是一个可靠的协议,而UDP就没有那么可靠的区别。 二.IP首部: IP数据报格式如下,普通的IP首部长为20个字节,除非含有选项字段 四个字节的32bit,首先是0-7bit,8-15,16-23,24-31 服务类型TOS,其中3位是优先权字段(已经忽略),4bit的TOS分别代表最小延时,最大吞吐量,最高可靠性和最小费用。 Te l n e t和R l o g i
n这两个交互应用要求最小的传输时延,因为人们主要用它们来传输少量的交互数据。另一方面, F T P文件传输则要求有最大的吞吐量。最高可靠性被指明给网络管理(S
N M P)和路由选择协议。用户网络新闻( Usenet news, NNTP)是唯一要求最小费用的应用。 ICMP,IGMP,UDP,TCP在它们格子的首部中均含有同时覆盖首部和数据检验和码。 I C M P、I G M P、U D P和T C
P都采用相同的检验和算法,尽管T C P和U D P除了本身的首部和数据外,在I P首部中还包含不同的字段。在RFC中有关于如何计算I n t e r n e
t检验和的实现技术。由于路由器经常只修改 T T L字段(减1) ,因此当路由器转发一份报文时可以增加它的检验和,而不需要对 I P整个首部进行重新计算。 R
F C为此给出了一个很有效的方法。 三IP路由选择: 当一个IP数据包准备好了的时候,IP数据包(或者说是路由器)是如何将数据包送到目的地的呢?它是怎么选择一个合适的路径来"送货"的呢? 最特殊的情况是目的主机和主机直连,那么主机根本不用寻找路由,直接把数据传递过去就可以了。至于是怎么直接传递的,这就要靠ARP协议了,后面会讲到。 稍微一般一点的情况是,主机通过若干个路由器(router)和目的主机连接。那么路由器就要通过ip包的信息来为ip包寻找到一个合适的目标来进行传递,比如合适的主机,或者合适的路由。路由器或者主机将会用如下的方式来处理某一个IP数据包 这再一次证明了,ip包是不可靠的。因为它不保证送达。 路由表中的每一项都包含下面这些信息。 1目的IP地址 2下一站路由器 3标志是网络地址还是主机地址,标志下一站路由器是否为真正的下一站路由器 4为数据报的传输指定一个网络接口 四.子网寻址: IP地址的定义是网络号+主机号。但是现在所有的主机都要求子网编址,也就是说,把主机号在细分成子网号+主机号。最终一个IP地址就成为
网络号码+子网号+主机号 五.子网掩码: C类地址的子网掩码是255.255.255.0 B类地址的子网掩码是255.255.0.0 ...以此类推 子网掩码转化为二进制,为一的代表网络位,以零的代表主机位 IP AND 子网掩码=网络号 IP AND 子网掩码取非=主机号 2的主机号位(0的部分)=主机数 下面是两个具体的例子: a.欲将B类IP地址168.195.0.0划分成27个子网 解1)27化成二进制=11011
2)该二进制为5位数,所以N=5
3)将B类地址的子网掩码的255.255.0.0的主机地址前5位置1,得到255.255.248.0.即为划分27个子网的B类IP地址168.195.0.0的子网掩码 b.欲将IP地址168.195.0.0划分为若干子网,每个子网有700台主机 解1)700化为二进制=1010111100
2)该二进制位数=10,即N=10
3)将B类地址的子网掩码255.255.0.0的后面10位变成0,得255.255.252.0,即为划分成主机700台的B类IP地址168.195.0.0的子网掩码 六.两个命名 1ipconfig/all(windows),ifconfig(linux) 2netstat 小结: 如果目的主机在直接相连的网络上,那么就把数据报直接传给目的主机,否则传给默认路由器。在进行路由选择决策时,主机和路由器都使用路由表。在表中有三种类型的路由:特定主机型、特定网络型和默认路由型。路由表中的表目具有一定的优先级。在选择路由时,主机路由优先于网络路由,最后在没有其他可选路由存在时才选择默认路由。 两个小题: 202.105.192.0/24没有划分子网,C类IP地址,子网掩码为255.255.255.0,/24为掩码位数 问题:分配给某校园网的地址块是202.105.192.0/18,该校园网包含多少个C类网络? 解,因为次IP是C类IP地址,且掩码位数不为24,则划分了子网。 1.IP地址=网络号+子网号+主机号 2.网络号和子网号全是1,主机号全是0 3.因为子网掩码位数代表的全是1 4.所以子网位数=子网掩码位数(24)-子网掩码位数(18)=6 5.所以包含了2的6次方-2个网络,除去一个全0和全1的情况。 补充: 属于同一个网段的两台主机进行通信是不需要通过路由器的,除了一种情况,使用了VLAN,虚拟局域网。 以C类IP地址为例:C类IP地址的子网掩码为255.255.255.0 IP地址=网络号+主机号------》IP地址=网络号+网络ID+主机ID这个时候就是划分了子网,使用VLAN,这个时候的,两台主机通信的时候,是要通过路由器的。 当掩码为24的时候,没有划分子网。 当掩码为26的时候,划分了2的2次方,划分了4个子网,此时主机数为2的6次方-2台 当掩码为22的时候,划分了C类网络,划分了2的2次方,即4个C类网络(这个并不是虚拟的)。 ************************************************************************************************************************* *************************************************************************************************************
1 ARP协议概述 2)
当发送主机有一个封包要传送给目的主机并且获得目的主机的 IP
地址的时候﹐发送主机会先检查自己的
ARP表格中有没有与该
IP地址对应的MAC地址。如果有﹐就直接使用此地址来传送封包﹔如果没有﹐则向网络发出一个 ARP Request广播封包﹐查询目的主机的MAC地址。这个封包会包含发送端的 IP地址和MAC地址信息。 3)
这时﹐网络上所有的主机都会收到这个广播封包﹐会检查封包的
IP 栏位是否和自己的 IP
地址一致。如果不是则忽略﹔如果是则会先将发送端的MAC地址和 IP资料更新到自己的 ARP表格去﹐如果已经有该 IP的对应﹐则用新的信息覆盖原来的﹔然后再回应一个 ARP Reply封包给对方﹐告知发送主机关于自己的MAC地址﹔ 4)当发送端接到 ARP Reply之后﹐也会更新自己的 ARP表格﹔然后就可以用此记录进行传送了。 5)
如果发送端没有得到 ARP Reply
﹐则宣告查询失败。 如图1所示,描述了ARP广播过程。
2.2
ARP 的查询过程 前面说的 ARP表格﹐只有在 TCP/IP协议被载入内核之后才会建立﹐如果
TCP/IP协议被卸载或关闭机器﹐那么表格就会被清空﹔到下次协议载入或开机的时候再重新建立﹐而同时会向网络发出一个
ARP广播﹐告诉其它机器它的当前地址﹐以便所有机器都能保持最正确的资料。 然而﹐ARP cache
的大小是有所限制的﹐如果超过了界限﹐那么越长时间没被使用过渡资料就必须清理掉﹐以腾出空间来储存更新的资料。所以﹐当机器收到 ARP equest
封包时﹐如果查询对象不是自己﹐则不会根据发送端位址资料来更新自己的 ARP 表格﹐而是完全忽略该封包。同时﹐每笔存在 cache
中的资料﹐都不是永久保存的﹕每笔资料再更新的时候﹐都会被赋予一个存活倒数计时值﹐如果在倒数时间到达的时候﹐该资料就会被清掉。然而﹐如果该资料在倒数时间到达之前被使用过﹐则计时值会被重新赋予。 当然了﹐ARP尚有一套机制来处理当 ARP表格资料不符合实际地址资料的状况(例如﹐在当前连接尚未结束前﹐收到目的端的地址资料更新消息)﹔或是目的主机太忙碌而未能回答 ARP请求等状况。 2.3 ARP报文格式 2.4 ARP高速缓存
ARP高效运行的关键是由于每个主机上都有一个ARP高速缓存,这个高速缓存放了最近Internet地址到硬件地址之间的映射记录,高速缓存中每一项的生存时间一般为20分钟,起始时间从被创建时开始算起。我们可以通过arp
-a或show arp来显示高速缓存中所有的内容 注意:ARP不能通过IP路由器发送广播,所以不能用来确定远程网络设备的MAC地址。对于目标主机位于远程网络的情况,IP利用ARP确定默认网关(路由器)的MAC地址,并将数据包发到默认网关,由路由器按它自己的方式转发数据包。 3 反向ARP RARP的查询过程 首先是查询主机向网络送出一个 RARP Request广播封包﹐向别的主机查询自己的 IP。在时候﹐网络上的 RARP服务器就会将发送端的 IP 地址用 RARP
Reply封包回应给查询者。这样查询主机就获得自己的
IP地址了。 不过与ARP不同的是﹐查询主机将 RARP Request封包发送之后﹐可能得到的 RARP Reply会不止一个。因为网络上可能存在不止一台 RARP服务器(基于备份和分担考量﹐极有可能如此设计)﹐那么﹐所有收到 RARP请求的服务器都会尝试向查询主机作出 RARP Reply 回应。如果这样的话﹐网络上将充斥这种 RARP回应﹐做成额外的负荷。这时候﹐我们有两种方法来解决RARP的回应问题。 第一种方法﹐为每一个做 RARP 请求的主机分配一主服务器﹐正常来说﹐只有主服务器才回做出 RARP 回应﹐其它主机只是记录下接收到 RARP
请求的时间而已。假如主服务器不能顺利作出回应﹐那么查询主机在等待逾时再次用广播方式发送 RARP
请求﹐其它非主服务器假如在接到第一个请求后很短时间内再收到相同请求的话﹐才会作出回应动作。 第二种方法也很类似﹕正常来说﹐主服务器当收到 RARP 请求之后﹐会直接作出回应﹔为避免所有非主服务器同时传回 RARP
响应﹐每台非主服务器都会随机等待一段时间再作出回应。如果主服务器未能作出回应的话﹐查询主机会延迟一段时间才会进行第二次请求﹐以确保这段时间内获得非主服务器的回应。当然﹐设计者可以精心的设计延迟时间至一个合理的间隔。 4 代理ARP 5 无故ARP(免费ARP) 这里进行的操作是在linux系统下进行的,Windows环境基本相同,可以在命令窗口下输入arp直接进行查询. 基本命令 arp -a [
ip-address ]:表示显示ARP映射表。如果在arp -a命令中没有指定IP地址,则缺省显示全部ARP映射表。 arp -d ip-address
: 表示删除ARP映射项。 arp -s ip-address
ether-address [ temp ] :表示增加ARP映射项。ip-address为ARP映射项的IP地址,为点分十进制格式。 ether-address为ARP映射项的以太网MAC地址,格式为XX-XX-XX-XX-XX-XX,其中XX为十六进制数。temp表示增加的映射项为临时,有效时间为20ms,否则将在路由器工作时间内永远有效(可选)。如果配置静态映射项时没有指定temp选项,则缺省为永远有效。 需要注意arp静态条目与动态条目的区别。在不同的系统中,手工设置的arp静态条目是有区别的。在linux和win2000中,静态条目不会因为伪造的arp响应包而改变,而动态条目会改变。而在win98中,手工设置的静态条目会因为收到伪造的arp响应包而改变. 一般情况下,ARP映射表由动态ARP协议维护,在特殊情况下,才需要手工配置。另外ARP映射表只用于局域网内,对于广域网的地址解析,有其它的配置或获取方法(如帧中继的逆向地址解析)。 clear
arp-cache:清空ARP映射表。在某些情况下,需要清空并更新ARP映射表,这时可以用arp -d逐条删除,也可以用clear arp-cache命令一次清空。 show arp
:显示ARP映射表。 7. ARP欺骗 在实现TCP/IP协议的网络环境下,一个ip包走到哪里,要怎么走是靠路由表定义,但是,当ip包到达该网络后,哪台机器响应这个ip包却是靠该ip包中所包含的硬件mac地址来识别。也就是说,只有机器的硬件mac地址和该ip包中的硬件mac地址相同的机器才会应答这个ip包,因为在网络中,每一台主机都会有发送ip包的时候,所以,在每台主机的内存中,都有一个 arp--> 硬件mac 的转换表。通常主机在发送一个ip包之前,它要到该转换表中寻找和ip包对应的硬件mac地址,如果没有找到,该主机就发送一个ARP广播包,于是,主机刷新自己的ARP缓存。然后发出该ip包。 了解这些常识后,现在就可以谈在以太网络中如何实现ARP欺骗了. 7.1同一网段的ARP欺骗 如图所示,三台主机 A:
ip地址
192.168.0.1硬件地址 AA:AA:AA:AA:AA:AA 一个位于主机B的入侵者想非法进入主机A,可是这台主机上安装有防火墙。通过收集资料他知道这台主机A的防火墙只对主机C有信任关系(开放23端口(telnet))。而他必须要使用telnet来进入主机A,这个时候他应该如何处理呢? 我们这样考虑,入侵者必须让主机A相信主机B就是主机C,如果主机A和主机C之间的信任关系是建立在ip地址之上的。如果单单把主机B的ip地址改的和主机C的一样,那是不能工作的,至少不能可靠地工作。如果你告诉以太网卡设备驱动程序,自己IP是192.168.0.3,那么这只是一种纯粹的竞争关系,并不能达到目标。我们可以先研究C这台机器,如果我们能让这台机器暂时当掉,竞争关系就可以解除,这个还是有可能实现的。在机器C当掉的同时,将机器B的ip地址改为192.168.0.3,这样就可以成功的通过23端口telnet到机器A上面,而成功的绕过防火墙的限制. 上面的这种想法在这种情况下是无效的,如果主机A和主机C之间的信任关系是建立在硬件地址的基础上。这个时候还需要用ARP欺骗的手段让主机A把自己的ARP缓存中的关于192.168.0.3映射的硬件地址改为主机B的硬件地址. 我们可以人为的制造一个arp_reply的响应包,发送给想要欺骗的主机,这是可以实现的,因为协议并没有规定必须在接收到arp_echo后才可以发送响应包.这样的工具很多,我们也可以直接用snifferpro抓一个arp响应包,然后进行修改.也人为地制造这个包。可以指定ARP包中的源IP、目标IP、源MAC地址、目标MAC地址. 这样你就可以通过虚假的ARP响应包来修改主机A上的动态ARP缓存达到欺骗的目的 下面是具体的步骤: 他先研究192.0.0.3这台主机,发现这台主机的漏洞。 1)
根据发现的漏洞使主机C当掉,暂时停止工作。 2)
这段时间里,入侵者把自己的ip改成192.0.0.3 3)
他用工具发一个源ip地址为192.168.0.3源MAC地址为BB:BB:BB:BB:BB:BB的包给主机A,要求主机A更新自己的arp转换表 4)
主机更新了arp表中关于主机C的ip-->mac对应关系 5)
防火墙失效了,入侵的ip变成合法的mac地址,可以telnet了 上面就是一个ARP的欺骗过程,这是在同网段发生的情况,但是,提醒注意的是,在B和C处于不同网段的时候,上面的方法是不起作用的. 7.2
不同网段的ARP欺骗 图所示A、C位于同一网段而主机B位于另一网段,三台机器的ip地址和硬件地址如下: A: ip地址
192.168.0.1硬件地址 AA:AA:AA:AA:AA:AA 在这种下,位于192.168.1网段的主机B如何冒充主机C欺骗主机A呢?显然用上面的办法的话,即使欺骗成功,那么由主机B和主机A之间也无法建立telnet会话,因为路由器不会把主机A发给主机B的包向外转发,路由器会发现地址在192.168.0.这个网段之内. 现在就涉及到另外一种欺骗方式―ICMP重定向。把ARP欺骗和ICMP重定向结合在一起就可以基本实现跨网段欺骗的目的. ICMP重定向报文是ICMP控制报文中的一种。在特定的情况下,当路由器检测到一台机器使用非优化路由的时候,它会向该主机发送一个ICMP重定向报文,请求主机改变路由。路由器也会把初始数据报向它的目的地转发. 我们可以利用ICMP重定向报文达到欺骗的目的. 下面是结合ARP欺骗和ICMP重定向进行攻击的步骤: 1)
为了使自己发出的非法ip包能在网络上能够存活长久一点,开始修改ip包的生存时间ttl为下面的过程中可能带来的问题做准备。把ttl改成255. (ttl定义一个ip包如果在网络上到不了主机后,在网络上能存活的时间,改长一点在本例中有利于做充足的广播) 2)
下载一个可以自由制作各种包的工具(例如hping2) 3)
然后和上面一样,寻找主机C的漏洞按照这个漏洞当掉主机C。 4)
在该网络的主机找不到原来的192.0.0.3后,将更新自己的ARP对应表。于是他发送一个原ip地址为192.168.0.3硬件地址为BB:BB:BB:BB:BB:BB的ARP响应包。 5)
现在每台主机都知道了,一个新的MAC地址对应192.0.0.3,一个ARP欺骗完成了,但是,每台主机都只会在局域网中找这个地址而根本就不会把发送给192.0.0.3的ip包丢给路由。于是他还得构造一个ICMP的重定向广播。 6)
自己定制一个ICMP重定向包告诉网络中的主机:到192.0.0.3的路由最短路径不是局域网,而是路由,请主机重定向你们的路由路径,把所有到192.0.0.3的ip包丢给路由。 7)
主机A接受这个合理的ICMP重定向,于是修改自己的路由路径,把对192.0.0.3的通讯都丢给路由器. 8)
入侵者终于可以.在路由外收到来自路由内的主机的ip包了,他可以开始telnet到主机的23口 其实上面的想法只是一种理想化的情况,主机许可接收的ICMP重定向包其实有很多的限制条件,这些条件使ICMP重定向变的非常困难. TCP/IP协议实现中关于主机接收ICMP重定向报文主要有下面几条限制: 1)
新路由必须直达 2)
重定向包必须来自屈枉目标的当前路由 3)
重定向包不能通知主机用自己作路由 4) 被改变的路由必须是一条间接路由 由于有这些限制,所以ICMP欺骗实际上很难实现。 7.3
ARP欺骗的防御 知道了ARP欺骗的方法和危害,我们给出一些初步的防御方法: 1)
不要把安全信任关心建立在ip地址或者mac地址的基础上(RARP同样存在欺骗问题),理想的关系应该是ip+mac; 2)
设置静态的mac->ip映射,不要让主机刷新设置好的arp转换表. 3)
停止使用arp,将arp作为永久条目保存在对应表中.linux下可以用ifconfig –arp使得网卡驱动停用arp. 4)
使用代理网关发送上行数据. 5)
修改系统配置拒收ICMP重定向报文. 在linux下可以通过在防火墙上拒绝ICMP重定向报文或者是修改内核选项重新编译内核来拒绝接收ICMP重定向报文. 在win2000下可以通过防火墙和IP策略拒绝接收ICMP报文. ******************************************************* ******************************************************* ******************************************************* ******************************************************* 一.ICMP的由来 三.ICMP报文的组成 四.不产生ICMP报文的情况 尽管在大多数情况下,错误的包传送应该给出ICMP报文,但是在特殊情况下,是不产生ICMP错误报文的。如下 虽然里面的一些规定现在还不是很明白,但是所有的这一切规定,都是为了防止产生ICMP报文的无限传播而定义的。 ICMP协议大致分为两类,一种是查询报文,一种是差错报文。其中查询报文有以下几种用途: 五.ICMP的两级封装 每个ICMP报文都放在IP数据报的数据部分中通过互联网传递,而IP数据报本身放在帧的数据部分中通过物联网传递 六.ICMP报文类型
ping可以说是ICMP的最著名的应用,当我们某一个网站上不去的时候。通常会ping一下这个网站。ping会回显出一些有用的信息。一般的信息如下: ping这个单词源自声纳定位,而这个程序的作用也确实如此,它利用ICMP协议包来侦测另一个主机是否可达。原理是用类型码为0的ICMP发请
求,受到请求的主机则用类型码为8的ICMP回应。ping程序来计算间隔时间,并计算有多少个包被送达。用户就可以判断网络大致的情况。我们可以看到,
ping给出来了传送的时间和TTL的数据。我给的例子不太好,因为走的路由少,有兴趣地可以ping一下国外的网站比如sf.net,就可以观察到一些
丢包的现象,而程序运行的时间也会更加的长。 Traceroute是用来侦测主机到目的主机之间所经路由情况的重要工具,也是最便利的工具。前面说到,尽管ping工具也可以进行侦测,但是,因为ip头的限制,ping不能完全的记录下所经过的路由器。所以Traceroute正好就填补了这个缺憾。 Traceroute的原理是非常非常的有意思,它受到目的主机的IP后,首先给目的主机发送一个TTL=1(还记得TTL是什么吗?)的UDP(后面就
知道UDP是什么了)数据包,而经过的第一个路由器收到这个数据包以后,就自动把TTL减1,而TTL变为0以后,路由器就把这个包给抛弃了,并同时产生
一个主机不可达的ICMP数据报给主机。主机收到这个数据报以后再发一个TTL=2的UDP数据报给目的主机,然后刺激第二个路由器给主机发ICMP数据
报。如此往复直到到达目的主机。这样,traceroute就拿到了所有的路由器ip。从而避开了ip头只能记录有限路由IP的问题。 有人要问,我怎么知道UDP到没到达目的主机呢?这就涉及一个技巧的问题,TCP和UDP协议有一个端口号定义,而普通的网络程序只监控少数的几个号码较
小的端口,比如说80,比如说23,等等。而traceroute发送的是端口号>30000(真变态)的UDP报,所以到达目的主机的时候,目的
主机只能发送一个端口不可达的ICMP数据报给主机。主机接到这个报告以后就知道,主机到了,所以,说Traceroute是一个骗子一点也不为过:) Traceroute程序里面提供了一些很有用的选项,甚至包含了IP选路的选项,请察看man文档来了解这些,这里就不赘述了。 |
|