分享

TCP/IP详解(2)链路层,第二章笔记整理

 笔录收藏 2012-09-10

一:链路层有时也叫数据链路层或网络接口层。通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他传输媒介)的物理接口细节。

链路层主要有三个目的:

(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。
下面的规则描述了S L I P协议定义的帧格式:
1) IP数据报以一个称作E N D(0 x c 0)的特殊字符结束。同时,为了防止数据报到来之前的线路噪声被当成数据报内容,大多数实现在数据报的开始处也传一个 E N D字符(如果有线路噪声,那么E N D字符将结束这份错误的报文。这样当前的报文得以正确地传输,而前一个错误报文交给上层后,会发现其内容毫无意义而被丢弃)。
2) 如果I P报文中某个字符为 E N D,那么就要连续传输两个字节 0 x d b和0 x d c来取代它。0 x d b这个特殊字符被称作S L I P的E S C字符,但是它的值与A S C I I码的E S C字符(0 x 1 b)不同。
3) 如果I P报文中某个字符为S L I P的E S C字符,那么就要连续传输两个字节 0 x d b和0 x d d来取代它。

 

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连接,并且知道其中每个连接的首部中的某些字段一般不会发生变化。对于那些发生变化的字段,大多数只是一些小的数字和的改变。这些被压缩的首部大大地缩短了交互响应时间。
现在大多数的S L I P产品都支持C S L I P。作者所在的子网(参见封面内页)中有两条
SLIP链路,它们均是CSLIP链路。

 

五: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用户多。随着产品
越来越多,产家也开始逐渐支持PPP,因此最终PPP应该取代SLIP。

 

六:环路接口

平时我们用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)点对点协议
  它是用于串行接口的两台计算机的通信协议,是为通过电话线连接计算机和服务器而彼此通信而制定的协议。网络服务提供商可以提供您点对点连接,这样提供商的服务器就可以响应您的请求,将您的请求接收并发送到网络上,然后将网络上的响应送回。PPP是使用IP协议,有时它被认为是TCP/IP协议族的一员。PPP协议可用于不同介质上包括双绞线,光纤和卫星传输的全双工协议,它使用HDLC进行包的装入。PPP协议既可以处理同步通信也可以处理异步通信,可以允许多个用户共享一个线路,又可发进行SLIP协议所没有的差错控制。
TCP/IP(Transmission Control Protocol/Internet Protocol)传输控制协议/Internet协议
   TCP/IP协议起源于美国国防高级研究计划局。提供可靠数据传输的协议称为传输控制协议TCP,好比货物装箱单,保证数据在传输过程中不会丢失;提供无连接数据报服务的协议称为网络协议IP,好比收发货人的地址和姓名,保证数据到达指定的地点。TCP/IP协议是互联网上广泛使用的一种协议,使用TCP/IP协议的因特网等网络提供的主要服务有:电子邮件、文件传送、远程登录、网络文件系统、电视会议系统和万维网。它是Interent的基础,它提供了在广域网内的路由功能,而且使Internet上的不同主机可以互联。从概念上,它可以映射到四层:网络接口层,这一层负责在线路上传输帧并从线路上接收帧;Internet层,这一层中包括了IP协议,IP协议生成Internet数据报,进行必要的路由算法,IP协议实际上可以分为四部分:ARP,ICMP,IGMP和IP;再上向就是传输层,这一层负责管理计算机间的会话,这一层包括两个协议TCP和UDP,由应用程序的要求不同可以使用不同的协议进行通信;最后一层是应用层,就是我们熟悉的FTP,DNS,TELNET等。熟悉TCP/IP是熟悉Internet的必由之路。

UDP(User Datagram Protocol)用户数据报协议
  它是定义用来在互连网络环境中提供包交换的计算机通信的协议,此协议默认认为网路协议(IP)是其下层协议。UDP是TCP的另外一种方法,象TCP一样,UDP使用IP协议来获得数据单元(叫做数据报),不象TCP的是,它不提供包(数据报)的分组和组装服务。而且,它还不提供对包的排序,这意味着,程序程序必须自己确定信息是否完全地正确地到达目的地。如果网络程序要加快处理速度,那使用UPD就比TCP要好。UDP提供两种不由IP层提供的服务,它提供端口号来区别不同用户的请求,而且可以提供奇偶校验。在OSI模式中,UDP和TCP一样处于第四层,传输层。

可以说PPP是一种连接方式,TCP、UDP是传送数据的方式

 

TCP/IP成功的原因之一是它几乎能在任何数据链路计数上运行。

***********************************************************************************************************************************************************************************************************************************

[置顶] TCP/IP详解(3)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数据包

  1. 如果IP数据包的TTL(生命周期)以到,则该IP数据包就被抛弃。
  2. 搜索路由表,优先搜索匹配主机,如果能找到和IP地址完全一致的目标主机,则将该包发向目标主机
  3. 搜索路由表,如果匹配主机失败,则匹配同子网的路由器,这需要“子网掩码(1.3.)”的协助。如果找到路由器,则将该包发向路由器。
  4. 搜索路由表,如果匹配同子网路由器失败,则匹配同网号(第一章有讲解)路由器,如果找到路由器,则将该包发向路由器。
  5. 搜索陆游表,如果以上都失败了,就搜索默认路由,如果默认路由存在,则发包
  6. 如果都失败了,就丢掉这个包。

这再一次证明了,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

 

小结:

如果目的主机在直接相连的网络上,那么就把数据报直接传给目的主机,否则传给默认路由器。在进行路由选择决策时,主机和路由器都使用路由表。在表中有三种类型的路由:特定主机型、特定网络型和默认路由型。路由表中的表目具有一定的优先级。在选择路由时,主机路由优先于网络路由,最后在没有其他可选路由存在时才选择默认路由。
I P路由选择是通过逐跳来实现的。数据报在各站的传输过程中目的 I P地址始终不变,但是封装和目的链路层地址在每一站都可以改变。大多数的主机和许多路由器对于非本地网络的数据报都使用默认的下一站路由器。

 

两个小题:

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类网络(这个并不是虚拟的)。


*************************************************************************************************************************

*************************************************************************************************************

[置顶] TCP/IP详解(4,5)ARP和RARP,第四,五章笔记整理

1  ARP协议概述  
  IP数据包常通过以太网发送,但是以太网设备并不识别32IP地址,它们是以48位以太网地址传输以太网数据包的。因此,IP驱动器必须把IP目的地址转换成以太网网目的地址。在这两种地址之间存在着某种静态的或算法的映射,常常需要查看一张表。地址解析协议(Address Resolution ProtocolARP)就是用来确定这些映射关系的协议,位于TCP/IP协议栈中的低层,是 TCP/IP设计者利用以太网的广播性质设计出来的,主要特性和优点是它的位址对应关系是动态的﹐以查询的方式来获得 IP地址和MAC地址的对应。


2  ARP工作原理  
  2.1 ARP工作过程 
  1) 首先﹐每一台主机都会在 ARP Cache中建立一个 ARP表格﹐用来记录 IP地址和MAC地址的对应关系。这个 Table的每一条信息会根据自身的存活时间递减而最终消失﹐以确保信息的真实性。

  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报文格式
  ARP报文被封装在以太网帧头部中传输,如图2所示,是ARP协议报文头部格式。

 

2.4 ARP高速缓存

    ARP高效运行的关键是由于每个主机上都有一个ARP高速缓存,这个高速缓存放了最近Internet地址到硬件地址之间的映射记录,高速缓存中每一项的生存时间一般为20分钟,起始时间从被创建时开始算起。我们可以通过arp -a或show arp来显示高速缓存中所有的内容

注意:ARP不能通过IP路由器发送广播,所以不能用来确定远程网络设备的MAC地址。对于目标主机位于远程网络的情况,IP利用ARP确定默认网关(路由器)的MAC地址,并将数据包发到默认网关,由路由器按它自己的方式转发数据包。

 

3 反向ARP  
  反向ARPReverse ARPRARP)用于把物理地址(MAC地址)转换到对应的 IP 地址。例如,在无盘工作站启动的时候,因为无法从自身的操作系统获得自己的IP地址配置信息。这时,无盘工作站可发送广播请求获得自己的IP地址信息,而RARP服务器则响应IP请求消息-为无盘工作站分配1个未用的IP地址(通过发送RARP应答包)。  
  RARP在很大程度上已被BOOTPDHCP所替代,后面这两种协议对RARP的改进是可以提供除了IP地址外的其它更多的信息,如默认网关、DNS服务器IP地址等信息。 

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  
  代理ARP(PROXY ARP)也被称作混杂ARP(Promiscuous ARP)(RFC 925、1027)一般被像路由器这样的设备使用--用来代替处于另一个网段的主机回答本网段主机的ARP请求。 
  下面是代理ARP的应用之一,如图5所示,主机PC1(192.168.20.66/24)需要向主机PC2(192.168.20.20/24)发送报文,因为主机PC1不知道子网的存在且和目标主机PC2在同一主网络网段,所以主机PC1将发送ARP请求广播报文请求192.168.20.20的MAC地址。这时,路由器将识别出报文的目标地址属于另一个子网(注意,路由器的接口IP地址配置的是28位的掩码),因此向请求主机回复自己的硬件地址(0004.dd9e.cca0)。之后,PC1将发往PC2的数据包都发往MAC地址0004.dd9e.cca0(路由器的接口E0/0),由路由器将数据包转发到目标主机PC2。(接下来路由器将为PC2做同样的代理发送数据包的工作)。这种ARP使得子网化网络拓扑对于主机来说时透明的(或者可以说是路由器以一个不真实的PC2的MAC地址欺骗了源主机PC1)。

 

5 无故ARP(免费ARP)  
  无故(Gratuitous ARP,GARP)ARP也称为无为ARP。主机有时会使用自己的IP地址作为目标地址发送ARP请求。这种ARP请求称为无故ARP,GARP,主要有两个用途:  
  (1)检查重复地址(如果收到ARP响应表明存在重复地址)。  
  (2)用于通告一个新的数据链路标识。当一个设备收到一个arp请求时,发现arp缓冲区中已有发送者的IP地址,则更新此IP地址的MAC地址条目。

 

6. 应用举例

这里进行的操作是在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-addressARP映射项的IP地址,为点分十进制格式。 ether-addressARP映射项的以太网MAC地址,格式为XX-XX-XX-XX-XX-XX,其中XX为十六进制数。temp表示增加的映射项为临时,有效时间为20ms,否则将在路由器工作时间内永远有效(可选)。如果配置静态映射项时没有指定temp选项,则缺省为永远有效。

需要注意arp静态条目与动态条目的区别。在不同的系统中,手工设置的arp静态条目是有区别的。在linuxwin2000中,静态条目不会因为伪造的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: ip
地址 192.168.0.2 硬件地址 BB:BB:BB:BB:BB:BB
C: ip
地址 192.168.0.3 硬件地址 CC:CC:CC:CC:CC:CC

一个位于主机B的入侵者想非法进入主机A,可是这台主机上安装有防火墙。通过收集资料他知道这台主机A的防火墙只对主机C有信任关系(开放23端口(telnet))。而他必须要使用telnet来进入主机A,这个时候他应该如何处理呢?

我们这样考虑,入侵者必须让主机A相信主机B就是主机C,如果主机A和主机C之间的信任关系是建立在ip地址之上的。如果单单把主机Bip地址改的和主机C的一样,那是不能工作的,至少不能可靠地工作。如果你告诉以太网卡设备驱动程序,自己IP192.168.0.3,那么这只是一种纯粹的竞争关系,并不能达到目标。我们可以先研究C这台机器,如果我们能让这台机器暂时当掉,竞争关系就可以解除,这个还是有可能实现的。在机器C当掉的同时,将机器Bip地址改为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.3MAC地址为BB:BB:BB:BB:BB:BB的包给主机A,要求主机A更新自己的arp转换表

4)        主机更新了arp表中关于主机Cip-->mac对应关系

5)        防火墙失效了,入侵的ip变成合法的mac地址,可以telnet

上面就是一个ARP的欺骗过程,这是在同网段发生的情况,但是,提醒注意的是,在BC处于不同网段的时候,上面的方法是不起作用的.

 

7.2 不同网段的ARP欺骗

所示AC位于同一网段而主机B位于另一网段,三台机器的ip地址和硬件地址如下:

A: ip地址 192.168.0.1硬件地址 AA:AA:AA:AA:AA:AA
B: ip
地址 192.168.1.2硬件地址
BB:BB:BB:BB:BB:BB
C: ip
地址 192.168.0.3硬件地址 CC:CC:CC:CC:CC:CC

在这种下,位于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:BBARP响应包。

5)        现在每台主机都知道了,一个新的MAC地址对应192.0.0.3,一个ARP欺骗完成了,但是,每台主机都只会在局域网中找这个地址而根本就不会把发送给192.0.0.3ip包丢给路由。于是他还得构造一个ICMP的重定向广播。

6)        自己定制一个ICMP重定向包告诉网络中的主机:到192.0.0.3的路由最短路径不是局域网,而是路由,请主机重定向你们的路由路径,把所有到192.0.0.3ip包丢给路由。

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报文.

*******************************************************

*******************************************************

*******************************************************

*******************************************************

 

[置顶] TCP/IP详解(6,7,8)ICMP,Ping,Traceroute,第六七八章笔记整理

一.ICMP的由来

IP提供的尽力数据报通信服务无连接服务,而并不能解决网络低层的数据报丢失、重复、延迟或乱序等问题,TCP在IP基础建立有连接服务解决以上问题,不能解决网络故障或其它网络原因无法传输的包的问题。
所以,ICMP设计的本意就是希望对IP包无法传输时提供报告,这些差错报告帮助了发送方了解为什么无法传递,网络发生了什么问题,确定应用程序后续操作。
注意:IP中有关于差错检测的机制——用于检测传输错误的头部检验和
 
二.ICMP的作用

 

三.ICMP报文的组成

 

四.不产生ICMP报文的情况

尽管在大多数情况下,错误的包传送应该给出ICMP报文,但是在特殊情况下,是不产生ICMP错误报文的。如下

  1. ICMP差错报文不会产生ICMP差错报文(出IMCP查询报文)(防止IMCP的无限产生和传送)
  2. 目的地址是广播地址或多播地址的IP数据报。
  3. 作为链路层广播的数据报。
  4. 不是IP分片的第一片。
  5. 源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地 址或多播地址。

虽然里面的一些规定现在还不是很明白,但是所有的这一切规定,都是为了防止产生ICMP报文的无限传播而定义的。

ICMP协议大致分为两类,一种是查询报文,一种是差错报文。其中查询报文有以下几种用途:

  1. ping查询(不要告诉我你不知道ping程序)
  2. 子网掩码查询(用于无盘工作站在初始化自身的时候初始化子网掩码)
  3. 时间戳查询(可以用来同步时间)

五.ICMP的两级封装

 每个ICMP报文都放在IP数据报的数据部分中通过互联网传递,而IP数据报本身放在帧的数据部分中通过物联网传递

 

六.ICMP报文类型

ICMP定义了五种常用差错报文和六种查询报文类型,以及使用代码表达某种类型下面不同情况的细分
 
七.ICMP的应用
a.ping

ping可以说是ICMP的最著名的应用,当我们某一个网站上不去的时候。通常会ping一下这个网站。ping会回显出一些有用的信息。一般的信息如下:

ping这个单词源自声纳定位,而这个程序的作用也确实如此,它利用ICMP协议包来侦测另一个主机是否可达。原理是用类型码为0的ICMP发请 求,受到请求的主机则用类型码为8的ICMP回应。ping程序来计算间隔时间,并计算有多少个包被送达。用户就可以判断网络大致的情况。我们可以看到, ping给出来了传送的时间和TTL的数据。我给的例子不太好,因为走的路由少,有兴趣地可以ping一下国外的网站比如sf.net,就可以观察到一些 丢包的现象,而程序运行的时间也会更加的长。
ping还给我们一个看主机到目的主机的路由的机会。这是因为,ICMP的ping请求数据报在每经过一个路由器的时候,路由器都会把自己的ip放到该数 据报中。而目的主机则会把这个ip列表复制到回应icmp数据包中发回给主机。但是,无论如何,ip头所能纪录的路由列表是非常的有限。如果要观察路由, 我们还是需要使用更好的工具,就是要讲到的Traceroute(windows下面的名字叫做tracert)。

 

b.Traceroute

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文档来了解这些,这里就不赘述了。

 

Traceroute实现有两种方法:
一种:发生一个ICMP回应请求报文;目的主机将会产生一个ICMP回应答复报文。Microsoft实现(tracert)中采用该方法。
       当回应请求到达目的主机时,ICMP就产生一个答复报文,它的
      源地址等于收到的请求报文中的目的IP地址。
另一种:发生一个数据报给一个不存在的应用进程;目的主机将会产生一个ICMP目的不可达报文。大多数UNIX版本的traceroute程序采用该方法。
            Traceroute程序发送一份UDP数据报给目的主机,但它选择一个不可能的值作为UDP端口号(大于30000),使目的主机的任何一个应用程序都不可能使用该端口。因为,当该数据报到达时,将使目的主机的UDP模块产生一份“端口不可达”错误的ICMP报文。这样,Traceroute程序所要做的就是区分接收到的ICMP报文是超时还是端口不可达,以判断什么时候结束。

*******************************************  
*******************************************  
*******************************************  
*******************************************  
*******************************************  
*******************************************  
*******************************************  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多