设为首页收藏本站

番薯窝-网络爱好者交流社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

用新浪微博连接

一步搞定

搜索
查看: 873|回复: 0

CCNA入门基础-认识网络

[复制链接]
发表于 2015-7-30 21:14:06 | 显示全部楼层 |阅读模式

      CCNA入门基础-认识网络

计算机网络是用通信线路和通信设备将分布在不同地点的多台自治计算机系统互相连接起来,按照共同的网络协议,共享硬件、软件,最终实现资源共享的系统

OSI七层模型是一种框架性的设计方法 ,建立七层模型的主要目的是为解决异种网络互连时所遇到的兼容性问题,帮助不同类型的主机实现数据传输。它的最大优点是将服务、接口和协议这三个概念明确地区分开来,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的。服务说明某一层为上一层提供一些什么功能,接口说明上一层如何使用下层的服务,而协议体现如何实现本层的服务;这样各层之间具有很强的独立性,而且下层可以为上层服务,互连网络中各实体采用什么样的协议是没有限制的,只要向上提供相同的服务并且不改变相邻层的接口就可以了

OSI网络七层模型
数据单元
功能
主机层(应用程序和操作系统)
DATA
第七:应用层
用户通过友好的应用程序与应用层沟通,产生网络通信请求。 其实就是调用协议如: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等
第六:表示层
负责数据的编码、翻译、压缩、解压缩、加密、解密,将数据翻译为相对应的编码格式,然后展现到应用程序中
第五:会话层
会话层用于为通信双方制定通信方式,并创建、注销会话(双方通信)。保证不同应用间的数据区分,其实就是不同的应用进程
Segments数据段
第四:传输层
在网络的各个节点之间提供可靠(TCP)或不可靠(UDP)传输数据。每个应用程序在发送数据报之前必须与操作系统协商以获得协议端口和相应的端口号。
传输媒体介质(路由器、交换机、线缆)
Packet/Datagram(数据包/报文)
第三:网络层
在不同网络相互通信时基于路由表进行路由决策和转发报文。其实就是IP寻路,逐跳转发,它是不可靠的传输。(路由器负责转发)
(Frame)帧
第二:数据链路层
它控制网络层与物理层之间的通信。是在不可靠的物理线路上进行数据的可靠传递。为了保证传输,从网络层接收到的数据被分割成特定的可被物理层传输的帧。帧是用来移动数据的结构包,它不仅包括原始数据,还包括发送方和接收方的物理地址以及检错和控制信息。其中的地址确定了帧将发送到何处,而纠错和控制信息则确保帧无差错到达。 如果在传送数据时,接收点检测到所传数据中有差错,就要通知发送方重发这一帧 (交换机负责转发)
(Bit)比特
第一:物理层
提供可靠物理链路连接(网线、光纤),负责传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。(线缆)

OSI的七层模型同时体现主机与主机之间通信的协定,其实就是一个封装与解封装的过程。只有经过封装的数据才能经过网络传输和被接收。也就是说应用层数据通过协议栈发到网络时,每层协议都要加上协议的首部。主机传递数据包时封装的过程,主机接收数据包是一个解封装的过程,从物理层依次解封装至表示层,表示层把数据编码、解密然后交给会话层,会话层根据不同的通信,将数据交给不同的应用层,最后应用层通过友好的应用程序显示给用户。数据封装(Data Encapsulation)是指将协议数据单元(PDU)封装在一组协议头和尾中的过程。在 OSI 7层参考模型中,每层主要负责与其它机器上的对等层进行通信。该过程是在“协议数据单元”(PDU)中实现的,其中每层的 PDU 一般由本层的协议头、协议尾和数据封装构成,应用层

现在有两种不同格式的封装,它们分别是:

  • 以太网封装
  • IEEE802.3/802.2分为IEEE802.3/802.2 LLC和IEEE802.3/802.2SNAP封装

IEEE 正式的802.3标准,它是由以太网版本 V2发展而来。它将以太网版本V2帧头的协议类型字段替换为帧长度字段(取值为0000-05dc;十进制的1500 );并加入802.2 LLC头用以标志上层协议,LLC头中包含DSAP,SSAP以及Crontrol字段;为了区别802.3数据帧中所封装的数据类型, IEEE引入了802.2SAP。它工作在数据链路层的LLC(逻辑链路控制)子层。通过在802.3帧的数据字段中划分出被称为服务访问点(SAP)的新区域来解决识别上层协议的问题,这就是802.2SAP。LLC标准包括两个服务访问点,源服务访问点(SSAP)和目标服务访问点(DSAP)。每个SAP只有1字节长,而其中仅保留了6比特用于标识上层协议,所能标识的协议数有限。因此,又开发出另外一种解决方案,在802.2SAP的基础上又新添加了一个SAP 值用以标志上层应用,但是每个SAP字段只有8bits长,而且其中仅保留了6比特用于标识上层协议,因此所能标识的协议数有限(不超过32种);并且 IEEE拒绝为某些重要的协议比如ARP协议定义SAP值(奇怪的是同时他们却定义了IP 的SAP值);因此802.3/802.2 LLC的使用有很大局限性. 交换机之间的BPDU(桥协议数据单元)数据包则是IEEE802.3/LLC的帧

IEEE为保证在 802.2 LLC上支持更多的上层协议同时更好的支持IP协议而发布的标准,又引入了802.3/802.2 SNAP标准,它带有LLC头,但是扩展了LLC属性,新添加了一个2Bytes的协议类型域(同时将SAP的值置为AA),从而使其可以标识更多的上层协议类型;另外添加了一个3Bytes的OUI字段用于代表不同的组织。VTP协议如802.1Q和Cisco的CDP等则是采用IEEE802.3SNAP的帧

以太网帧封装过程:

(这个1500byte就是我们的MTU,注意少于46byte要垫片,即用0填充)

解封装过程:

以太网(Ethernet II)型封装与802.3封装区别:

从上面可以看出,两种封装都是采用48bit(6字节)的MAC地址。不同的是802.3中增加了长度值、DSAP(目标服务访问点)为AA、SSAP(源服务访问点)为AA、Ctrl为3、org code为厂商ID等几个字段。

以太网帧中的各个首部信息:

以太网首部:包括目的MAC,源MAC,还有一个帧类型域表示上层的协议类型,IP:0x0800 | ARP:0x0806 | PPPOE: 0x88630x8864

 IP首部:

  • 版本号(Version):长度4比特。标识目前采用的IP协议的版本号。一般的值为0100(IPv4),0110(IPv6)
  • IP包头长度(Header Length):长度4比特。这个字段的作用是为了描述IP包头的长度,因为在IP包头中有变长的可选部分。该部分占4个bit位,单位为32bit(4个字节),即本区域值= IP头部长度(单位为bit)/(8*4),因此,一个IP包头的长度最长为“1111”,即15*4=60个字节。IP包头最小长度为20字节。
  • 服务类型(Type of Service):长度8比特。把前六位定义成DSCP应用于流分类,后两位保留,数值越大表示优先级越高;同时还把前三位定义为IP优先级,优先级取值越大数据越重要

000 普通 (Routine)

 001 优先的 (Priority)

 010 立即的发送 (Immediate)

 011 闪电式的 (Flash)

 100 比闪电还闪电式的 (Flash Override)

 101 CRI/TIC/ECP(找不到这个词的翻译)

110 网间控制 (Internetwork Control)

111 网络控制 (Network Control)

000 000 Default(BE)  默认   

aaa 000 ClassSelector(CS)         

 101 110 Expedited Forwarding(EF)  加快转发

  aaa bb0 AssuredForwarding(AF)

4)IP包总长(Total Length):长度16比特。 以字节为单位计算的IP包的长度 (包括头部和数据),所以IP包最大长度65535字节。

5)标识符(Identifier):长度16比特。该字段和Flags和FragmentOffest字段联合使用,对较大的上层数据包进行分段(fragment)操作。路由器将一个包拆分后,所有拆分开的小包被标记相同的值,以便目的端设备能够区分哪个包属于被拆分开的包的一部分。

6)标记(Flags):长度3比特。该字段第一位不使用。第二位是DF(Don't Fragment)位,只有DF=0时才允许分片,DF位设为1时表明路由器不能对该上层数据包分片。如果一个上层数据包无法在不分段的情况下进行转发,则路由器会丢弃该上层数据包并返回一个ICMP错误信息。第三位是MF(MoreFragments)位,MF=1表示后面还有分片,MF=0时表示自己是最后一个分片

7)片偏移(Fragment Offset):长度13比特。表示该IP包在该组分片包中位置,接收端靠此来组装还原IP包。

8)生存时间(TTL):长度8比特。当IP包进行传送时,先会对该字段赋予某个特定的值。当IP包经过每一个沿途的路由器的时候,每个沿途的路由器会将IP包的TTL值减少1。如果TTL减少为0,则该IP包会被丢弃。这个字段可以防止由于路由环路而导致IP包在网络中不停被转发。

9)协议(Protocol):长度8比特。叫协议域用于表示上层的协议,ICMP:1 | IGMP:2| TCP: 6 | UDP: 17 | GRE : 47 | ESP : 50 | AH:51 |OSPF:89

10)头部校验(Header Checksum):长度16位。用来做IP头部的正确性检测,但不包含数据部分。 因为每个路由器要改变TTL的值,所以路由器会为每个通过的数据包重新计算这个值。

起源和目标地址(Source and Destination Addresses):这两个地段都是32比特。标识了这个IP包的起源和目标地址。要注意除非使用NAT,否则整个传输的过程中,这两个地址不会改变。

11)可选项(Options):这是一个可变长的字段。该字段属于可选项,主要用于测试,由起源设备根据需要改写。可选项目包含以下内容:

松散源路由(Loose source routing):给出一连串路由器接口的IP地址。IP包必须沿着这些IP地址传送,但是允许在相继的两个IP地址之间跳过多个路由器。

严格源路由(Strict source routing):给出一连串路由器接口的IP地址。IP包必须沿着这些IP地址传送,如果下一跳不在IP地址表中则表示发生错误。

路由记录(Record route):当IP包离开每个路由器的时候记录路由器的出站接口的IP地址。

时间戳(Timestamps):当IP包离开每个路由器的时候记录时间。

12)填充(Padding):因为IP包头长度(Header Length)部分的单位为32bit,所以IP包头的长度必须为32bit的整数倍。因此,在可选项后面,IP协议会填充若干个0,以达到32bit的整数倍。

TCP/UDP首部:

  • Source Port是源端口16位,DestinationPort是目的端口16位,用端口号表示不同应用层序。常用端口号:FTP:20 21| SSH:22 |Telnet:23 |SMTP :25 | POP3 : 110 |HTTP:80 |HTTPS:443 |IKE:500 | Tacacs + :49 |Radius :16451646 1812 1813
  • 序号(Sequence Number):是发送数据包中的第一个字节的序列号,32位
  • 确认号(Acknowledgment Number):是确认序列号,32位
  • 首部长度:该字段的值是TCP首部(包括选项)长度除以4
  • 保留位:暂时不使用
  • 标记位:URG表示Urgent Pointer紧急字段;ACK表示AcknowledgmentNumber确认字段;PSH表示Push传送功能确认;RST表示复位TCP连接;SYN表示SYN报文(在建立TCP连接的时候使用);FIN表示没有数据需要发送了(在关闭TCP连接的时候使用)
  • 窗口大少:表示接收缓冲区的空闲空间,16位,用来告诉TCP连接对端自己能够接收的最大数据长度
  • Checksum:是校验和,16位。
  • Urgent Pointers:是紧急指针,16位,只有URG标志位被设置时该字段才有意义,表示紧急数据相对序列号(Sequence Number字段的值)的偏移。
  • 可选项

IP协议:

IP是TCP/IP协议族中最为核心的技术,所有的TCP、UDP、ICMP、IGMP数据都已IP数据包格式传输。它提供不可靠的、无连接传输服务。它不能保证IP数据报能够成功的到达目的地,它仅提供最好的传输服务,如果在传输过程中发生某种错误,IP有一种简单的处理方法就是掉弃该报文,然后发送ICMP(ICMP在IP模块中实现)消息给信源端。所以任何要求可靠性的必须有上层TCP来提供。还有IP并不维护任何后续数据包的状态信息,每个数据包的处理是独立的,IP数据包可以不按顺序接受。IP实现两个基本功能:寻址和分段。IP可以根据数据报报头中包括的目的地址将数据报传送到目的地址,在此过程中IP负责选择传送的道路,这种选择道路称为路由功能。如果有些网络内只能传送小数据报,IP可以将数据报重新组装并在报头域内注明。

TCP/UDP协议:

  • UDP协议的全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议,也就是说通信前不必与对方先建立连接,不管对方状态就直接发送,无需对方确认。它工作在在OSI模型中的第四层的传输层。UDP不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。比如实时流量(语音和视频)、DNS查询、TFTP就是使用UDP工作
  • TCP (Transmission ControlProtocol)和UDP(UserDatagram Protocol)协议属于传输层协议,它是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次握手才能建立起来。TCP提供IP环境下的数据可靠传输、可靠性、有效流控、全双工操作和多路复用当应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,TCP则把数据流分割成适当长度的报文段,最大传输段大小(MSS)通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)限制。之后TCP把数据包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。在数据正确性与合法性上,TCP用一个校验和函数来检验数据是否有错误,在发送和接收时都要计算校验和;同时可以使用md5认证对数据进行加密。在流量控制上,采用滑动窗口协议,协议中规定,对于窗口内未经确认的分组需要重传。在拥塞控制上,采用广受好评的TCP拥塞控制算法(也称AIMD算法)。该算法主要包括三个主要部分:1)加性增、乘性减;2)慢启动;3)对超时事件做出反应。

MTU与IP分片:

在以太网和802.3封装当中对数据包的长度都有一个限制其最大值分别是1500和1492字节,而且另外以太网和802.3的数据包(MTU)最少MTU也不一样分别为38和46byte,如果数据包不足够大就要垫片,用0填充,数据链路层的这个特性叫做MTU,也叫最大传输单元。注意在点到点的链路层(SLIP和PPP)的MTU并非指网络媒体的物理特性,它只是一个逻辑限制用于提供足够快的相应时间,还有在两台通信主机路径中最小的MTU被称作路径MTU,路径MTU在两个方向上不一定相同。MTU仅在出方向计算。

如果一个IP层的数据包要发出去,而且数据长度比链路层的MTU值还大,那么IP层就需要进行分片(Fragmentation),把数据包分成若干片,这样每一片都小于MTU,然后再发送出去,接收方根据每个IP包的标识符和片偏移把分片的数据包进行重组装,分片和重组装对于传输层是透明的,分片可以发生在原始发送端主机,也可以发生在网络中间设备路由器上,如果对数据包分片的是中间路由器而不是终端主机,那么起始端系统就无法知道数据包是如何被分片的,而且分片会影响效率,所以要避免分片。注意一个分片丢失,整个数据包都要重传。MTU会影响我们的传输,所以在不同的封装中都需要改变MTU值,比如PPPoe、VPN等。分片时除最后一片分片外,其他分片中的数据部分(除去IP首部)必须是8字节的整数倍。分片时IP首部复制到个分片中,但是端口号在UDP首部,只能在第一片中发现。

TCP/IP的传送方式:

  • 单播(unicast) 对特定的主机进行数据传送。例如给某一个主机发送IP数据包。这时候,数据链路层给出的数据头里面是非常具体的目的MAC(网卡的物理地址,不是FF-FF-FF-FF-FF-FF这样的地址)。
  • 广播是主机针对某一个网络上的所有主机发送数据包。广播分为二层广播和三层广播,二层广播是在数据链路层的广播,它所用的MAC地址FF-FF-FF-FF-FF-FF,它的广播范围是本网络内的所有主机,例如我们的ARP协议就是二层广播,二层广播不能通过路由器。三层广播就是在网络层的广播,地址为255.255.255.255,它的范围是同一IP子网内的设备,由于第三层的数据必须通过第二层的封装再发送,所以三层广播必然通过二层广播来实现,注意子网广播也不能通过路由器。
  • 多播(multicast)也叫组播就是给一组特定的主机(多播组)发送数据,这样,数据的播发范围会小一些(实际上播发的范围一点也没有变小),多播的MAC地址是最高字节的低位为一,例如01-00-00-00-00-00。多播组的地址是D类IP,规定是224.0.0.0-239.255.255.255。虽然多播比较特殊,但是多播的数据还是要通过数据链路层进行MAC地址绑定然后进行发送。多播MAC地址是针对多播IP地址经过转换而来的,算是一种虚拟的MAC地址;之所以出现这个,是因为TCP/IP层之下的链路层是基于MAC地址来传输数据的。多播因为既不是点对点的传输,又不是广播,所以需要一个特殊的MAC地址,才能使得其可以像单播那样工作。


ICMP协议:

   ICMP协议经常被认为是IP层的一个组成部分。它传递差错报文及其它需要注意的信息,它通常被用于IP层或更高层协议。ICMP报文把差错报文返回给用户进程。它是在IP数据包内部被传输的。ICMP报文既是差错报文,也是查询报文。ICMP的所有报文前4个字节(8位类型、8位代码、16位校验和)都是一样的,剩下的类型字段可以有15个不同值,用于描述不同的类型的ICMP报文。ICMP的检验和字段覆盖整个ICMP报文与IP首部一样,而且ICMP校验还校验数据部分,ICMP校验是必须的。当发送一份ICMP差错报文时,报文始终包含IP首部和产生的ICMP差错报文的IP数据报前8个字节,这样接受ICMP差错报文的模块就会把它与某个特定的协议(根据IP首部的协议类型字段判断)和应用进程(根据IP数据报前8个字节中的TCP/UDP报文首部中的TCP或UDP端口号判断)关联起来。ICMP的不同报文类型由报文中的类型字段和代码字段来共同决定



比较重要的:

  主机不可达(3  1)

  管理强制不可达(3  13)

  需要分片但设置了DF位(3  4)

  端口不可达(3   3)

  源站路由失败(3   5)


下面各种情况都不会导致产生ICMP差错报文:
    1) ICMP差错报文(但是,ICMP查询报文可能会产生ICMP差错报文)。
    2) 目的地址是广播地址或多播地址(D类地址)的IP数据报。
    3) 作为链路层广播的数据报。
    4) 不是IP分片的第一片
    5) 源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地址或多播地



路由器属于网络层设备,它主要负责进行路由决策和数据转发。

路由器转发数据是根据路由表决定的,路由表可以是手工配置或者是通过动态路由协议学习产生(RIP、EIGRP、OSPF、IS-IS、BGP)。当路由器收到一个IP报文的时候,将IP报文中的目的地址和路由表项中的子网掩码进行"逻辑与"操作,得到一个网络地址,然后拿此网络地址与路由项中的网络地址做比较,如果一致就认为匹配,否则认为不匹配则掉弃该报文。如果路由项匹配,则路由器查看所匹配的路由项的下一跳地址是否在直连的链路上。如果在直连的链路上,则根据此下一跳转发;如果不在直连的链路上,如果所匹配的路由项的下一跳地址不在直连链路上,路由器还需要对路由表进行迭代查找,找出最终的下一跳。路由迭代的过程就是通过路由的下一跳信息来找到直连出接口的过程,确定了下一跳地址后,路由器将此报文送往对应的接口,接口进行相应的地址解析,解析出对应的链路层地址后,对IP报文进行数据封装并转发。路由匹配时有一个原则:当路由表中存在多个路由项可以同时匹配目的IP地址时,路由查找进程会选择其中掩码最长的路由项进行转发,掩码越长表明其代表的网络范围越小,匹配的程度就越精确,这就是所谓的最长匹配原则。如果在路由表中没有路由项能够匹配IP报文的目的IP地址,则丢弃该IP报文。但是如果在路由表中有缺省路由存在,则路由器将按照缺省路由来转发IP报文。缺省路由又称为默认路由,其目的地址和子网掩码均为0.0.0.0。因0.0.0.0与任何IP地址"逻辑与"得到的结果均为0.0.0.0,所以缺省路由能匹配所有的IP地址,但因为它的掩码长度最短(为0),根据路由的最长匹配原则,只有在没有其他任何路由匹配IP报文的情况下,系统才会按照缺省路由转发。缺省路由可以通过手工配置得到,也可以通过某些路由协议(如OSPF的STUB区域和NSSA区域)动态生成注意如果路由表中路由项数量越多,所需查找及匹配的次数就越多,所以很多路由器都会有相应的算法来优化查找速度,加快转发。路由器不会转发广播数据包,路由器的一个接口就是一个广播域。


交换机属于数据链路层设备,它负责帧的转发。

1.交换机根据收到数据帧中的源MAC地址与收到该帧的接口建立映射关系,并将其写入CAM表中也叫MAC地址表,这个就是交换机的学习过程每隔一段时间学习一次。请区分主机和路由器中的ARP缓存表,ARP缓存表是IP与MAC地址的映射。   

2.当交换机收到数据帧后,将数据帧中的目的MAC地址同已建立的MAC地址表进行比较,以决定由哪个接口进行转发。   

3.如果数据帧中的目的MAC地址不在MAC地址表中,则向所有接口转发。这一过程称为泛洪(flood)。  

4.如果收到的帧是广播帧和组播帧,它就会向所有的接口转发。比如ARP请求。默认情况下(同一个vlan虚拟局域网)交换机所有端口在同一个广播域。一个接口就是一个冲突域


ARP协议

  在局域网中实际传输的是"帧",帧里面必须要包含目标主机的MAC地址,如果只知道目标的IP地址,是无法完成数据包的传输的,因为以太网设备并不识别32位IP地址,他们只识别48位的以太网地址即网卡的物理MAC地址。因此必须把IP目的地址转换成以太网目的地址。此时就要借助ARP协议(AddressResolution Protocol,地址解析协议),它是一个位于TCP/IP协议栈中的低层协议,负责将某个IP地址解析成对应的MAC地址(三层到二层关系).主机通过发送ARP广播(MAC为FF:FF:FF:FF:FF:FF)消息,寻找IP地址到实际MAC地址的映射.当ARP找到了目的主机MAC地址后,它会将该IP地址和找到的MAC地址建立映射关系,并放入本机ARP缓存表,该表用于保存此网络中各个电脑的IP地址和MAC地址的对照关系,用于下次请求时直接查询ARP缓存以节约资源。完成了IP与MAC的映射关系后,就可以将IP包封装成以太网帧进行传送。ARP缓存表中的映射关系可以是动态的学习(基于ARP应答),也可以是静态的手工建立的。ARP缓存表对于动态数据采用了老化机制,存在与之相关的超时值。在超过指定的时间后,将从缓存中删除它们。动态ARP缓存条目不超过10分钟就会被删除(起始时间从某个ARP缓存条目被创建时开始算起),而静态 ARP 缓存条目是永久性的。注意ARP是一个数据链路层(二层)协议,属于二层的广播,它的广播范围仅限于本地网络,它是不能跨越路由器的,因此如果目标IP地址不是本地网络,此时就需要路由器(网关)去路由转发数据包,而路由器就会根据路由表和ARP缓存表对数据包进行重封装转发给下一跳。注意:在点对点网络中不需要ARP,比如PPP、HDLC、Frame relay

另外一种就是免费ARP报文是一种特殊的ARP报文,该报文中携带的发送端IP地址和目标IP地址都是本机IP地址,报文源MAC地址是本机MAC地址,报文的目的MAC地址是广播地址。设备通过对外发送免费ARP报文来实现以下功能:

  • 确定其它设备的IP地址是否与本机的IP地址冲突。当其它设备收到免费ARP报文后,如果发现报文中的IP地址和自己的IP地址相同,则给发送免费ARP报文的设备返回一个ARP应答,告知该设备IP地址冲突。
  • 设备改变了硬件地址,通过发送免费ARP报文通知其它设备更新ARP表项。

还有一种是代理ARP它ARP协议的一个变种。 对于没有配置缺省网关的计算机要和其他网络中的计算机实现通信,网关收到源计算机的 ARP 请求会使用自己的 MAC 地址与目标计算机的 IP地址对源计算机进行应答。代理ARP就是将一个主机作为对另一个主机ARP进行应答。它能使得在不影响路由表的情况下添加一个新的路由器,使得子网对该主机来说变得更透明化。当然它会带来巨大的风险,除了ARP欺骗,和某个网段内的ARP增加,最重要的就是无法对网络拓扑进行网络概括。代理ARP的使用一般是使用在没有配置默认网关和路由策略的网络上的。




目的MAC地址    6                 请求时是广播地址ff-ff-ff-ff-ff-ff,应答时是具体的目的地址

源MAC地址      6

硬件类型             2                      0x1            以太网类型值
上层协议类型       2                     0x0800         上层协议为IP协议
MAC地址长度      1                     0x6             以太网MAC地址长度为 6
IP地址长度          1                      0x4            IP地址长度为 4
操作码                 2                                     0x1表示ARP请求包,0x2表示应答包
发送方MAC         6        
发送方IP             4        
接收方MAC        6        
接收方IP             4        
填充数据            18                           因为物理帧最小长度为64字节,前面的42字节再加上4个CRC校验字节,还差18个字节


注意ARP的请求是广播包,但是ARP的应答是单播的




主机与主机在网络中的通信过程:

1)主机A与主机B相同网络通信:

   当主机A向主机B发送数据时,主机A先拿主机B的IP地址与自己网卡接口所配置的子网掩码进行“与”运算,得出来的结果是一个网络号,然后拿网络号与自己所在的网络号进行比较是否相同,判断出主机B和自己属于同一个网络。然后主机A检查本地ARP缓存表,看是否有与主机B的IP地址对应的MAC地址映射(192.168.1.12  b-b-b-b-b-b),此时会发生两种情况:

  • 如果有,主机A就在ARP缓存表中把主机B的IP对应的MAC地址读出来,完成帧的封装并发出去。当交换机SW1从接口1收到此数据帧时,先查看自己的MAC地址表中是否有与此帧中的源MAC对应的接口映射关系,如果有,相同就跳过,不同就更新;如果没有,就在MAC地址表中建立映射关系(a-a-a-a-a-a  1)。接着查看MAC地址表是否有与此帧中目的MAC地址对应的接口映射关系,如果有,就从对应的接口发出去;如果没有,就泛洪此数据帧,此时除接口1外的所有接口都会收到此数据帧,也就是说除主机A外,其他主机都会收到此帧,但是此帧只有主机B会回应,其他主机会直接把该帧丢掉,因为此帧中的目的MAC地址是b-b-b-b-b-b,不是它们自己的MAC地址。当主机B收到此帧后,发现目的MAC地址是自己,就会拆开此帧,并检查自己的ARP缓存表中是否有此帧中源IP与源MAC地址的映射,如果有就跳过,如果没有就在ARP缓存表中建立映射(192.168.1.11  a-a-a-a-a-a).然后根据数据包的上层协议和刚才建立的ARP映射,回包给主机A。当SW1交换机从接口2收到主机B的数据帧后,检查MAC地址表中是否有与此帧的源MAC对应的接口映射关系,如果有,相同就跳过,不同就更新。如果没有,就在MAC地址表中建立接口映射关系(b-b-b-b-b-b  2)。接着再检查MAC地址表中是否有与该帧中的目的MAC对应的接口映射关系,此时发现MAC地址条目(a-a-a-a-a-a  1), 交换机SW1直接把该帧从接口1发送出去。主机A收到主机B返回的帧,完成通信。注意现在两台主机彼此知道了对方的MAC地址,两端通信的帧封装可以直接完成,而且交换机也已经有了两台主机的MAC与接口的映射关系,数据可以直接转发到对应的接口。
  • 如果没有,主机A就会使用ARP协议,发送ARP广播(源MAC:a-a-a-a-a-a,目的MAC:ff-ff-ff-ff-ff-ff)请求目的IP(192.168.1.12)的MAC地址,当交换机SW1从接口1收到发过来的广播帧后,先检查以太网帧头,看自己的MAC地址表是否有与此帧中的源MAC地址对应的接口映射条目,如果有,相同就跳过,不同就更新;如果没有,就在MAC地址表中建立接口映射关系(a-a-a-a-a-a  1)用于以后转发数据。当完成源MAC地址检查后,开始检查帧中的目的MAC地址,发现目的MAC是ff-ff-ff-ff-ff-ff,它是一个二层广播MAC,所以默认情况交换机会把此帧广播到所有接口上,此时链接到此交换机的所有主机都会收到此广播帧。但是除主机B之外的所有主机不会回应此ARP广播请求,因为他们拆开帧之后,发现数据包中IP头部的目的IP地址不是自己,他们就会把包丢掉。而主机B拆开帧之后,发现数据包中IP头部的目的IP就是自己,此时它就会先查看本地ARP表中是否有此帧中的源MAC地址和源IP的映射关系,如果有,就跳过;如果没有,就在本地arp缓存表中建立映射关系(192.168.1.11  a-a-a-a-a-a),然后发送ARP回应包给主机A,回应时就会用到刚刚建立的ARP缓存条目完成帧封装并发送出去。此时交换机SW1从接口2收到主机B发过来的帧,交换机又会先检查自己的MAC地址表中是否有与此帧中源MAC地址建立对应的接口映射关系,如果有,相同就跳过,不同就更新;如果没有,就在MAC地址表中建立映射关系(b-b-b-b-b-b  2)。接着交换机查看自己的MAC地址表中是否有与此帧中目的MAC地址对应的接口映射关系,发现有(a-a-a-a-a-a  1),交换机SW1马上把帧从接口1发送出去。主机A收到此帧时,拆开后发现它是一个ARP回应包,就会把帧中的源MAC和源IP地址读取出来,并在本地ARP缓存表中建立映射关系(192.168.1.12  b-b-b-b-b-b)。这样两台主机知道了把彼此的MAC地址,此时之间的通信可以可以直接完成帧的封装,并把数据包发送出去。而且交换机也已经建立了两台主机MAC和接口的关系,可以把帧直接转发到相应的接口

2)主机A与主机C不同网络通信:

  当主机A向主机C发送数据时,主机A先拿主机C的IP地址与自己网卡接口所配置的子网掩码进行“与”运算,得出来的结果是一个网络号,然后拿网络号与自己所在的网络号进行比较是否相同,判断出主机C和自己不在同一个网络,此时主机A就要把数据包发送给路由器R2,让R2转发数据包到主机C.首先主机A从网卡接口配置中读取网关地址(192.168.1.254),然后检查本地ARP还缓存表中是否有与192.168.1.254对应得MAC地址映射(192.168.1.254  1-1-1-1-1-1),这里分两种情况:

  • 如果有,主机A就在ARP缓存表中把网关的IP对应的MAC地址读出来作为目的MAC地址,目的IP依然是30.30.30.30,完成帧的封装并发出去。交换机SW1从接口1收到此帧后,先检查MAC地址表中是有与此帧源MAC地址对应的接口映射,如果有,相同就跳过,不同就更新;如果没有就建立对应的接口映射关系(a-a-a-a-a-a  1).接着交换机检查MAC地址表是否有与该帧目的MAC地址对应的接口映射关系,如果有,就从对应的接口发出去;如果没有,就泛洪此数据帧,此时除接口1外的所有接口都会收到此数据帧,也就是说除主机A外,其他主机都会收到此帧,但是此帧只有路由器R2会回应,其他主机会直接把该帧丢掉,因为此帧中的目的MAC地址是1-1-1-1-1-1,不是它们自己的MAC地址。当路由器R2收到此帧后,发现目的MAC地址是自己,就会拆开此帧,并检查自己的ARP缓存表中是否有此帧中源IP与源MAC地址的映射,如果有就跳过,如果没有就在ARP缓存表中建立映射(192.168.1.11  a-a-a-a-a-a).接着路由器R2看到数据帧里IP首部的目的IP(30.30.30.30)不是自己的接口IP,它就会将IP报文中的目的地址和路由表项中的子网掩码进行"逻辑与"操作,得到一个网络地址,然后拿此网络地址与路由项中的网络地址做比较,如果一致就认为匹配,否则认为不匹配则掉弃该报文。它发现有一条”30.30.30.0/24   fa0/1“的直连路由条目匹配,它就会把数据包转发到Fa0/1接口,并查找ARP缓存表中是否有与数据包中的目的IP对应的MAC映射(30.30.30.30  c-c-c-c-c-c),如果没有,就在fa0/1接口发ARP广播包,请求IP(30.30.30.30)的MAC地址,当主机C收到此广播后,拆除二层头部,发现IP首部的目的IP就是自己,它就会回应ARP请求,同时主机C还会检查本地ARP表中是否有与此帧源MAC和源IP地址的映射,如果有就跳过,如果没有就建立映射(30.30.30.254 3-3-3-3-3-3),然后根据arp缓存表完成arp回应包封装并发出去,路由器R2收到该arp回应后,取出源MAC和源IP在ARP缓存表中建立映射关系(30.30.30.30 c-c-c-c-c-c)。如果有的话就不需要ARP广播,直接取出目标IP对应的MAC地址作为目标MAC,并用fa0/1接口的MAC做源MAC,对数据包进行帧的重封装,然后从fa/1发送出去。主机C收到该帧后,此时主机C不会取出该帧的源MAC和源IP建立ARP映射,因为此数据包是夸网络回来的,而ARP只对本地网络有效. 当主机C发送数据给主机A时,主机C将主机A的IP地址与自己网卡接口所配置的子网掩码进行“与”运算,得出来的结果是一个网络号,然后拿网络号与自己所在的网络号进行比较是否相同,判断出主机A和自己不在同一个网络,此时主机C就要把数据包(目的IP:192.168.1.11目的MAC:3-3-3-3-3-3)发送给路由器R2,.当路由器R2收到此帧后,发现目的MAC地址是自己,就会拆开此帧,并检查自己的ARP缓存表中是否有此帧中源IP与源MAC地址的映射,如果有就跳过,如果没有就在ARP缓存表中建立映射(30.30.30.30  c-c-c-c-c-c).接着路由器R2查看数据帧里IP首部的目的IP(192.168.1.11)不是自己的接口IP,它就会将IP报文中的目的地址和路由表项中的子网掩码进行"逻辑与"操作,得到一个网络地址,然后拿此网络地址与路由项中的网络地址做比较,如果一致就认为匹配,否则认为不匹配则掉弃该报文。它发现有一条”192.168.1.0/24   fa0/0“的直连路由条目匹配,它就会把数据包转发到Fa0/0口,并查找ARP缓存表中是否有与数据包中的目的IP对应的MAC映射,发现有(192.168.1.11  a-a-a-a-a-a)条目,就会用对应的MAC地址封装为目的MAC,并用Fa0/0接口的MAC作为源MAC对数据包进行重封装,然后从fa0/0接口发出去。交换机SW1从接口3收到路由器R2的帧,查看MAC地址表中是否有与该帧目的MAC地址对应的接口映射,发现有(a-a-a-a-a-a  1),直接将该帧从接口1发出去,主机A就收到了主机C返回的数据。
  • 如果没有,主机A就使用ARP协议,发送ARP(MAC:ff-ff-ff-ff-ff-ff)广播请求192.168.1.254的MAC地址,交换机从1接口收到此广播帧,先检查自己的MAC地址表是否有与此帧的源MAC对应的接口映射,如果有,相同就跳过,不同就更新;如果没有,就建立接口映射关系(a-a-a-a-a-a  1),然后把此广播帧广播到交换机所有接口。也就是说所有主机都会收到此帧,但是此帧只有路由器R2会回应,其他主机会直接把该帧丢掉,因为此帧中的目的IP地址是192.168.1.254,不是它们自己的MAC地址。当路由器R2收到此帧后,发现目的IP地址是自己,就会先检查自己的ARP缓存表中是否有此帧中源IP与源MAC地址的映射,如果有就跳过,如果没有就在ARP缓存表中建立映射(192.168.1.11  a-a-a-a-a-a)。然后R2根据ARP缓存,完成帧封装主机A的ARP请求,换机SW1收到帧后,检查自己的MAC地址表是否有与此帧中的源MAC地址对应的接口映射关系,如果有,相同就跳过,不同就更新;如果没有,就建立对应的接口映射关系(1-1-1-1-1-1  1);接着检查MAC地址表中是否有与此帧中的目的MAC地址对应的接口映射,发现(a-a-a-a-a-a   1),交换机把该帧从接口1发送出去。当主机A收到该帧后,取出该帧中的源MAC地址和源IP地址建立ARP映射。然后主机A就在ARP缓存表中把路由器R2的IP对应的MAC地址读出来作为目的MAC地址,目的IP依然是主机C:30.30.30.30,完成帧的封装并发出去。当路由器R2收到此帧后,发现目的MAC地址是自己,就会拆开此帧,并检查自己的ARP缓存表中是否有此帧中源IP与源MAC地址的映射,如果有就跳过,如果没有就在ARP缓存表中建立映射(192.168.1.11  a-a-a-a-a-a).接着路由器R2看到数据帧里IP首部的目的IP(30.30.30.30)不是自己的接口IP,它就会将IP报文中的目的地址和路由表项中的子网掩码进行"逻辑与"操作,得到一个网络地址,然后拿此网络地址与路由项中的网络地址做比较,如果一致就认为匹配,否则认为不匹配则掉弃该报文。它发现有一条”30.30.30.0/24   fa0/1“的直连路由条目匹配,它就会把数据包转发到Fa0/1接口,并查找ARP缓存表中是否有与数据包中的目的IP对应的MAC映射(30.30.30.30  c-c-c-c-c-c),如果没有,就在fa0/1接口发ARP广播包,请求IP(30.30.30.30)的MAC地址,当主机C收到此广播后,拆除二层头部,发现IP首部的目的IP就是自己,它就会回应ARP请求,同时主机C还会检查本地ARP表中是否有与此帧源MAC和源IP地址的映射,如果有就跳过,如果没有就建立映射(30.30.30.254 3-3-3-3-3-3),然后根据arp缓存表完成arp回应包封装并发出去,路由器R2收到该arp回应后,取出源MAC和源IP在ARP缓存表中建立映射关系(30.30.30.30  c-c-c-c-c-c)。如果有就直接取出目标IP对应的MAC地址作为目标MAC,并用fa0/1接口的MAC做源MAC,对数据包进行帧的重封装,然后从fa/1发送出去。主机C收到该帧后,此时主机C不会取出该帧的源MAC和源IP建立ARP映射,因为此数据包是夸网络回来的,而ARP只对本地网络有效. 当主机C发送数据给主机A时,主机C将主机A的IP地址与自己网卡接口所配置的子网掩码进行“与”运算,得出来的结果是一个网络号,然后拿网络号与自己所在的网络号进行比较是否相同,判断出主机A和自己不在同一个网络,此时主机C就要把数据包(目的IP:192.168.1.11目的MAC:3-3-3-3-3-3)发送给路由器R2,.当路由器R2收到此帧后,发现目的MAC地址是自己,就会拆开此帧,并检查自己的ARP缓存表中是否有此帧中源IP与源MAC地址的映射,如果有就跳过,如果没有就在ARP缓存表中建立映射(30.30.30.30  c-c-c-c-c-c).接着路由器R2查看数据帧里IP首部的目的IP(192.168.1.11)不是自己的接口IP,它就会将IP报文中的目的地址和路由表项中的子网掩码进行"逻辑与"操作,得到一个网络地址,然后拿此网络地址与路由项中的网络地址做比较,如果一致就认为匹配,否则认为不匹配则掉弃该报文。它发现有一条”192.168.1.0/24   fa0/0“的直连路由条目匹配,它就会把数据包转发到Fa0/0口,并查找ARP缓存表中是否有与数据包中的目的IP对应的MAC映射,发现有(192.168.1.11 a-a-a-a-a-a)条目,就会用对应的MAC地址封装为目的MAC,并用Fa0/0接口的MAC作为源MAC对数据包进行重封装,然后从fa0/0接口发出去。交换机SW1从接口3收到路由器R2的帧,查看MAC地址表中是否有与该帧目的MAC地址对应的接口映射,发现有(a-a-a-a-a-a  1),直接将该帧从接口1发出去,主机A就收到了主机C返回的数据。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|番薯窝 ( 粤ICP备12088097号  

GMT+8, 2018-5-26 04:36 , Processed in 0.202014 second(s), 23 queries .

快速回复 返回顶部 返回列表