概述
文章目录
- 数据通信网络基础
- 网络通信的基本概念
- OSI参考模型
- TCP/IP 协议栈
- TCP三次握手和四次挥手
- ARP(地址解析协议)
- 1.ARP概念及原理
- 2.ARP表
- 3.ARP攻击
- 冲突域和广播域
- 网络层协议及IP编址
- ping的整个流程详解(icmp)
数据通信网络基础
网络通信的基本概念
网络通信:是指终端设备之间通过计算机网络进行的通信
数据通信最基本功能:实现数据互通
常见术语
常见网络设备的作用
交换机:距离终端用户最近的设备,用于终端用户接入网络、对数据帧进行交换等
注:二层交换机发所有接口都处于同一个广播域路由器:
路由器:
* 实现同类型网络或异种网络之间的通信
* 隔离广播域
* 维护路由表(Routing Table)、运行路由协议(查表与转发)
* 路径(路由信息)选择、IP报文转发 广域网接入、网络地址转换
* 连接通过交换机组建的二层网络
防火墙:
* 隔离不同安全级别的网络实现不同安全级别的网络之间的访问控制(安全策略)
* 用户身份认证
* 实现远程接入功能
* 实现数据加密及虚拟专用网业务
* 执行网络地址转换
* 其他安全功能
无线:
胖AP:普遍用于家庭个人使用(类似普通家用路由)
瘦AP:中大型企业常用模式(AC无线控制器+AP无线接入点)
物理拓扑与逻辑拓扑
OSI参考模型
TCP/IP 协议栈
应用层
* HTTP(Hypertext Transfer Protocol,超文本传输协议):用来访问在网页服务器上的各种页面。
* FTP(File Transfer Protocol,文件传输协议):为文件传输提供了途径,它允许数据从一台主机传送到另一台主机上。
* DNS(Domain Name Service,域名称解析服务):用于实现从主机域名到IP地址之间的转换。
传输层
* TCP (Transmission Control Protocol,传输控制协议) :为应用程序提供可靠的面向连接的通信服务。目前,许多流行的应用程序都使用TCP。
* UDP(User Datagram Protocol,用户数据报协议):提供了无连接通信,且不对传送数据包进行可靠性的保证。
网络层
* IP(Internet Protocol,互联网协议):将传输层的数据封装成数据包并完成源站点到目的站点的转发,提供无连接的、不可靠的服务。
* IGMP(Internet Group Management Protocol,因特网组管理协议):负责IP组播成员管理的协议。它用来在IP主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。
* ICMP(Internet Control Message Protocol,网际报文控制协议):基于IP协议在网络中发送控制消息,提供可能发生在通信环境中的各种问题反馈。通过这些信息,使管理者可以对所发生的问题作出诊断,然后采取适当的措施解决。
数据链路层
* PPP(Point-to-Point Protocol,点对点协议):一种点对点模式的数据链路层协议,多用于广域网。
* Ethernet( 以太网协议 ):一种多路访问广播型数据链路层协议,是当前应用最为广泛的局域网技术。
* PPPoE(Point-to-Point Protocol over Ethernet,以太网承载PPP协议):PPPoE提供通过简单桥接访问设备(接入设备)把一个网络的多个主机连接到远程访问集中器的功能。常见的应用有家庭宽带拨号上网。
PDU通信地址(协议数据单元)在各层间的存在形式
TCP和UDP报文格式
TCP报文头部:
* Source Port:源端口,标识哪个应用程序发送。长度为16比特。
* Destination Port目:的端口,标识哪个应用程序接收。长度为16比特。
* Sequence Number:序号字段。TCP链接中传输的数据流每个字节都编上一个序号。序号字段的值指的是本报文段所发送数据的第一个字节的序号。长度为32比特。
* Acknowledgment Number:确认序列号,是期望收到对方下一个报文段数据的第1个字节的序号,即上次已成功接收到的数据段的最后一个字节数据的序号加1。只有Ack标识为1,此字段有效。长度为32比特。
* Header Length:头部长度,指出TCP报文头部长度,以32比特(4字节)为计算单位。若无选项内容,则该字段为5,即头部为20字节。
* Reserved:保留,必须填0。长度为6比特。
* Control bits:控制位,包含FIN、ACK、SYN等标志位,代表不同状态下的TCP数据段。
* Window:窗口TCP的流量控制,这个值表明当前接收端可接受的最大的数据总数(以字节为单位)。窗口最大为65535字节。长度为16比特。
* Checksum:校验字段,是一个强制性的字段,由发端计算和存储,并由收端进行验证。在计算检验和时,要包括TCP头部和TCP数据,同时在TCP报文段的前面加上12字节的伪头部。长度为16比特。
* Urgent:紧急指针,只有当URG标志置1时紧急指针才有效。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。紧急指针指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。长度为16比特。
* Options:选项字段(可选),长度为0-40字节。 UDP报文头部:
* Source Port:源端口,标识哪个应用程序发送。长度为16比特。
* Destination Port:目的端口,标识哪个应用程序接收。长度为16比特。
* Length:该字段指定UDP报头和数据总共占用的长度。可能的最小长度是8字节,因为UDP报头已经占用了8字节。由于这个字段的存在,UDP报文总长不可能超过65535字节(包括8字节的报头,和65527字节的数据)。
* Checksum:覆盖UDP头部和UDP数据的校验和,长度为16比特。
TCP三次握手和四次挥手
三次握手
两台终端基于TCP应用进行数据通信,假设其中一台向另一台发送TCP会话连接,通信双方会进行数据同步,首先发送端随机生成序列(seq=a),flags标记位:SYN置位为1,ACK=0;接收端进行数据同步(SYN置位为1),对发过来的序列进行ACK确认(ack=a+1,ACK置位)并生成随机序列(seq=b);同理,接收端发出的确认报文,发送端也会进行确认,对接收端返回的报文(seq=a+1),进行ACK置位,对接收端生成的随机序列确认(ack=b+1),建立TCP连接
四次挥手
两台已建立TCP连接的终端设备,TCP报文进行交互,断开连接的过程,其中一台PC1发送中断(FIN)请求断开连接,另一台PC2同意请求;同时PC2也会发起FIN请求断开连接,PC1对请求回复ACK同意断开。
MAC地址
* MAC (Media Access Control)地址在网络中唯一标识一个网卡,每个网卡都需要且会有唯一的一个MAC地址。
* MAC用于在一个IP网段内,寻址找到具体的物理设备。
* 工作在数据链路层的设备。例如以太网交换机,会维护一张MAC地址表,用于指导数据帧转发。
ARP(地址解析协议)
1.ARP概念及原理
根据已知的IP地址解析获得其对应的MAC地址
ARP是IPv4中必不可少的一种协议,它的主要功能是:将IP地址解析为MAC地址; 维护IP地址与MAC地址的映射关系的缓存,即ARP表项; 实现网段内重复IP地址的检测。
为什么需要APR协议?
传输层封装端口,网络层封装IP地址。通过三层路由协议,已知对端的IP地址,为了完成下一步封装动作需要获取对端MAC地址进行识别。
ARP工作原理图解
假设主机Host1和Host2在同一个网段,主机Host1要向主机Host2发送信息,具体的地址解析过程如下:
(1) 主机Host1首先查看自己的ARP表,如果ARP表中含有主机Host2对应的ARP表项,则主机Host1直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机Host2
(2) 如果主机Host1在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式发送一个ARP请求报文。ARP请求报文中的发送端IP地址和发送端MAC地址为主机Host1的IP地址和MAC地址,目标IP地址和目标MAC地址为主机Host2的IP地址和全0的MAC地址。由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机Host2)会对该请求进行处理。
(3) 主机Host2比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机Host1)的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给主机Host1,其中包含了自己的MAC地址。
(4) 主机Host1收到ARP响应报文后,将主机Host2的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。
抓包分析
下面是抓取的ARP数据包,可以对照上面的说明进行理解。
图中蓝框圈起来的是一对ARP请求和ARP应答。
ARP请求报文内容
ARP应答报文内容
报文内的字段信息
Hardware type :硬件类型,标识链路层协议
Protocol type: 协议类型,标识网络层协议
Hardware size :硬件地址大小,标识MAC地址长度
Protocol size: 协议地址大小,标识IP地址长度
Opcode: 操作代码,标识ARP数据包类型,1表示请求request,2表示回应reply
Sender MAC address :发送者MAC地址
Sender IP address :发送者IP地址
Target MAC address :目标MAC地址
Target IP address: 目标IP地址
2.ARP表
动态ARP表
- 动态ARP表项由ARP协议通过ARP报文自动生成和维护
- 可以被老化
- 可以被新的ARP报文更新
- 可以被静态ARP表项覆盖
- 当到达老化时间、接口down时会删除相应的动态ARP表项。
静态ARP表
- 静态ARP表项通过手工配置和维护
- 不会被老化
- 不会被动态ARP表项覆盖。
- 配置静态ARP表项可以增加通信的安全性
- 静态ARP表可以限制和指定IP地址的设备通信时只使用指定的MAC地址
- 好处:攻击报文无法修改此表项的IP地址和MAC地址的映射关系,保护了本设备和指定设备间的正常通信。
免费ARP
(1)免费ARP指主机发送ARP查找自己的IP地址
(2)通常发生在系统引导期间进行接口配置时
(3)与标准ARP的区别就是免费ARP分组的目的IP地址字段封装的是自己的IP地址
(即向所在网络请求自己的MAC地址。)
免费ARP的作用有:
1)一个主机可以通过它来确定另一个主机是否设置了相同的 IP地址。
正常情况下发送免费ARP请求不会收到ARP应答,如果收到了一个ARP应答,则说明网络中存在与本机相同的IP地址的主机,发生了地址冲突。
2)更新其他主机高速缓存中旧的硬件地址信息。
如果发送免费ARP的主机正好改变了硬件地址,如更换了接口卡。
其他主机接收到这个ARP请求的时候,发现自己的ARP高速缓存表中存在对应的IP地址,但是MAC地址不匹配,那么就需要利用接收的ARP请求来更新本地的ARP高速缓存表表项。
3)网关利用免费ARP防止ARP攻击
有些网关设备在一定的时间间隔内向网络主动发送免费ARP报文,让网络内的其他主机更新ARP表项中的网关MAC地址信息,以达到防止或缓解ARP攻击的效果。
4)利用免费ARP进行ARP攻击
ARP协议并不只在发送了ARP请求才接收ARP应答,计算机只要接收到ARP应答数据包,就会使用应答中的IP和MAC地址对本地的ARP缓存进行更新。
主机可以构造虚假的免费ARP应答,将ARP的源MAC地址设为错误的MAC地址,并把这个虚假的免费ARP应答发送到网络中,那么所有接收到这个免费ARP应答的主机都会更新本地ARP表项中相应IP地址对应的MAC地址。更新成功后,这些主机的数据报文就会被转发到错误的MAC地址,从而实现了ARP欺骗的攻击。
代理ARP
代理ARP就是通过使用一个主机(通常为router),来作为指定的设备使用自己的 MAC 地址来对另一设备的ARP请求作出应答。
为什么需要代理ARP?
先要了解,路由器的重要功能之一就是把局域网的广播包限制在该网内,阻止其扩散,否则会造成网络风暴。
ARP请求是个广播包,它询问的对象如果在同一个局域网内,就会收到应答。但是如果询问的对象不在同一个局域网该如何处理?路由器就提供了代理ARP为这个问题提供了解决方案。
工作过程
两台主机A和C处于同一网段但不同的广播段(不在同一物理网络上)时,主机A发送ARP请求主机C的MAC地址时,因为路由器不转发广播包的原因,ARP请求只能到达路由器。如果路由器启用了代理ARP功能,并知道主机C属于它连接的网络,那么路由器就用自己接口的MAC地址代替主机C的MAC地址来对主机A进行ARP应答。主机A接收ARP应答,但并不知道代理ARP的存在。
代理ARP的优缺点
优点:代理ARP能在不影响路由表的情况下添加一个新的Router,使子网对该主机变得透明化。一般代理ARP应该使用在主机没有配置默认网关或没有任何路由策略的网络上。
缺点:从工作工程可以看到,这其实是一种ARP欺骗。而且,通过两个物理网络之间的路由器的代理ARP功能其实互相隐藏了物理网络,这导致无法对网络拓扑进行网络概括。此外,代理ARP增加了使用它的那段网络的ARP流量,主机需要更大的ARP缓存空间,也不会为不使用ARP进行地址解析的网络工作。
3.ARP攻击
ARP攻击是属于局域网内的一种攻击方式,通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞。arp攻击一般可以导致网内其他机器出现“IP地址冲突”或不能上网的症状。
ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的进行。 基于ARP协议的这一工作特性,黑客向对方计算机不断发送有欺诈性质的ARP数据包,数据包内包含有与当前设备重复的Mac地址,使对方在回应报文时,由于简单的地址重复错误而导致不能进行正常的网络通信。
一般情况下,受到ARP攻击的计算机会出现两种现象:
1)不断弹出“本机的XXX段硬件地址与网络中的XXX段地址冲突”的对话框。
2) 计算机不能正常上网,出现网络中断的症状。
因为这种攻击是利用ARP请求报文进行“欺骗”的,所以防火墙会误以为是正常的请求数据包,不予拦截。因此普通的防火墙很难抵挡这种攻击。
ARP攻击大致分为两种类型:
对主机欺骗:欺骗对象为主机
对网关欺骗:欺骗对象为网关,可以获得其他主机的数据流量
ARP欺骗攻击原理:
ARP欺骗攻击建立在局域网主机间相互信任的基础上的。
比如:假设A、B、C在同一个局域网中,网关为192.168.10.1,IP地址和MAC地址分别假设如下。假设C是攻击者。
主机编号 | A | B | C |
---|---|---|---|
IP地址 | 192.168.10.1 | 192.168.10.2 | 192.168.10.3 |
MAC地址 | MAC-A | MAC-B | MAC-C |
当A发广播询问:我是192.168.10.1,硬件地址macA,我想知道主机IP是192.168.10.2的硬件地址。此时B回应:我是192.168.10.2,硬件地址是macB。如果此时IP地址是192.168.10.3的C非法回应:我是IP192.168.10.2,我的硬件地址是macC。这样A就会收到两个ARP回应包,由于ARP遵循后到优先规则,所以如果C持续不停发出ARP欺骗包,就一定能够覆盖掉正常的ARP回应包(也称为ARP毒化)。 然后A就会误信192.168.10.2的硬件地址是macC。这样当主机A向主机B发送数据时,主机C就劫持了主机A发送给主机B的数据,这就是ARP欺骗的过程。相反,如果主机B向主机A发送数据,主机C依然可以以同样的ARP欺骗,劫持主机B发送给主机A的数据,这样就形成了“中间人攻击”。
还有一种ARP欺骗的方法:主机C直接冒充网关,此时主机C会不停的发送ARP欺骗广播,大声说:我是192.168.10.254,硬件地址是macC。此时局域网内所有主机都会被欺骗,更改自己的缓存表,C将会监听到整个局域网发送给互联网的数据报。
ARP攻击分类:
1、ARP泛洪攻击
通过向网关发送大量ARP报文,导致网关无法正常响应。首先发送大量的ARP请求报文,然后又发送大量虚假的ARP响应报文,从而造成网关部分的CPU利用率上升难以响应正常服务请求,而且网关还会被错误的ARP表充满导致无法更新维护正常ARP表,消耗网络带宽资源。
2、ARP欺骗主机的攻击
攻击者通过ARP欺骗冒充网关,使得局域网内被攻击主机发送给网关的流量信息实际上都发送给攻击者。
3、欺骗网关的攻击
把别的主机发送给网关的数据通过欺骗网关的形式使得这些数据通过网关发送给攻击者。这种攻击目标选择的不是个人主机而是局域网的网关,这样就会攻击者源源不断的获取局域网内其他用户数据。
4、中间人攻击
最典型的攻击之一,中间人攻击是同时欺骗局域网内的主机和网关,局域网中用户的数据和网关的数据会发给同一个攻击者,这样,用户与网关的数据就会泄露。
5、IP地址冲突攻击
通过对局域网中的物理主机进行扫描,扫描出局域网中的物理主机的MAC地址,然后根据物理主机的MAC进行攻击,导致局域网内的主机产生IP地址冲突,影响用户的网络正常使用。
冲突域和广播域
广播域和冲突域的区别
1、广播域可以跨网段,而冲突域只是发生的同一个网段的。以太网中,冲突域是由hub组织的。一个hub就是一个冲突域。交换机的每个端口都是一个冲突域。网段,又叫潜在冲突域。
2、冲突域在同一个冲突域中的每一个节点都能收到所有被发送的帧。广播域在网络中能接收任一设备发出的广播帧的所有设备的集合 。
3、冲突域是基于第一层(物理层),而广播域是机于第二层(数据链路层) 。
4、广播域就是说, 如果站点发出一个广播信号后能接收到这个信号的范围,通常来说一个局域网就是一个广播域(用路由器连接的除外)。 冲突域是一个站点向另一个站点发出信号,除目的站点外,有多少站点能收到这个信号,这些站点就构成一个冲突域。
5、HUB 所有端口都在同一个广播域,冲突域内。Swith所有端口都在同一个广播域内,而每一个端口就是一个冲突域。
冲突域:一种物理分段,指连接到同一导线上所有工作站的集合、同一物理网段上所有节点的集合或是以太网上竞争同一带宽节点的集合。冲突域表示冲突发生并传播的区域,这个区域可以被认为是共享段。在OSI模型中,冲突域被看作是OSI第一层的概念,连接同一冲突域的设备有集线器、中继器或其它简单的对信号进行复制的设备。其中,使用第一层设备(如中继器、集线器)连接的所有节点可被认为是在同一个冲突域内,而第二层设备(如网桥、交换机)和第三层设备(如路由器)既可以划分冲突域,也可以连接不同的冲突域。
广播域:指可以接收到同样广播消息的节点的集合,能否接收和发送一样的广播报文的范围…
路由器一个接口就是一个单独的唯一的广播域(一个网段就是一个广播域,一个vlan也是一个单独广播域);简单地说,在该集合中的任何一个节点传输一个广播帧,则其它所有能够接收到这个帧的节点都是该广播域的一部分。由于许多设备都极易产生广播,因此,如果不进行维护就会消耗大量的带宽,降低网络的效率。广播域被看作是OSI第二层的概念,因此由中继器、集线器、网桥、交换机等第一、二层设备连接的节点被认为是在同一个广播域中,而路由器、第三层交换机等第三层设备则可以划分广播域。
第一层设备(如中继器、集线器)不能划分冲突域和广播域;第二层设备(如网桥、交换机)能划分冲突域,但不能划分广播域;第三层设备(如路由器)既能划分冲突域,又能划分广播域。
网络互连设备可以将网络划分为不同的冲突域、广播域。然而,由于不同的网络互连设备可能工作在OSI模型的不同层次上,如中继器工作在物理层,网桥和交换机工作在数据链路层,路由器工作在网络层,而网关工作在OSI模型的上三层。因此,它们划分冲突域、广播域的效果也就各不相同。
下面我们讨论一下常见网络互连设备的工作原理以及它们在划分冲突域、广播域时各自的特点。
- 传统以太网
传统共享式以太网的典型代表是总线型以太网。在这种类型的以太网中,通信信道只有一个,并采用介质共享(介质争用)的访问方法。每个站点在发送数据前首先要侦听网络是否空闲,如果空闲就发送数据,否则继续侦听直到网络空闲为止。如果两个站点同时检测到介质空闲并同时发送出一帧数据,就会导致数据帧的冲突,使得双方的数据帧都会遭到破坏。这时,两个站点将采用二进制指数退避的方法各自等待一段随机的时间再进行侦听和数据发送。
图1中,假定主机A需要将一个单播数据包发送给主机B,但由于传统共享式以太网的广播性质,接入到总线上的所有主机都将收到此单播数据包。此时,如果任何第二方(包括主机B)也要发送数据到总线上就会产生冲突,导致双方数据发送失败,因此我们称连接在总线上的所有主机共同构成了一个冲突域。
当主机A发送一个目标是所有主机的广播类型数据包时,总线上的所有主机都会接收该广播数据包,因此我们称连接在总线上的所有主机共同构成了一个广播域。
- 中继器(Repeater)
中继器作为一个实际产品出现主要有两个原因:第一,扩展网络距离,再生衰减信号;第二,实现粗同轴电缆以太网和细同轴电缆以太网的互连。
中继器虽然可以延长信号传输的距离、实现两个网段的互连,但它并没有增加网络的可用带宽。如图2所示,网段1和网段2经过中继器连接后构成了一个冲突域和广播域。
3、集线器(HUB)
集线器可以看作是多接口的中继器,若侦测到碰撞,它就会提交阻塞信号。集线器同样可以延长网络通信的距离,或是连接物理结构不同的网络,但集线器主要还是用作主机站点的汇聚点,将连接在集线器各个接口上的主机联系起来,使之可以互相通信。
集线器位于物理层,无法识别MAC地址和IP地址,因此会以广播的形式发送它接收到的数据包,它的所有端口为一个冲突域同时也为一个广播域。
如图3所示,所有主机都连接到中心节点的集线器上构成一个物理上的星型连接。但实际上,集线器内部的各个接口都是通过背板总线连接在一起的,在逻辑上仍构成一个共享的总线。因此,集线器及其接口所连接的所有主机共同构成了一个冲突域和广播域。
集线器最大的特点就是采用共享型模式。也就是说,当一个接口向另一个接口发送数据时,其他端口处于等待状态。为什么会等待呢?举个例子来说,其实在集线器所连接的网络中,若A向B发送数据包,实际上A是发送给B、C、D三个接口的(该现象即紧接下文介绍的IP广播),但只有B接收,其他的接口在第一时间判断不是自己需要的数据后将不会再去接收A发送来的数据,直到A再次发送IP广播。在A再次发送IP广播之前的单位时间内,C,D是闲置的,或者C、D之间可以传输数据。因此我们可以理解为集线器内部只有一条通道(即公共通道),然后在这条公共通道下方连接着所有接口。
4、网桥(Bridge)
网桥又称为桥接器,与中继器类似,传统的网桥只有两个接口,用于连接不同的网段。与中继器不同的是,网桥具有一定的智能性,可以学习网络上主机的地址,同时具有信号过滤的功能。
如图4所示,由于网桥可以识别网段内部的通信数据流,因此在网段1中,主机A发给主机B的数据包将不会被网桥转发到网段2。同样,网段2中主机X发给主机Y的数据包也不会被网桥转发到网段1。可见,网桥可以将一个冲突域分割为两个,而每个冲突域共享自己的总线信道带宽。
但是,如果主机C发送了一个目标是所有主机的广播类型数据包时,网桥就需要对这个数据包进行转发,这样网桥两侧的两个网段总线上的所有主机都会接收到该广播数据包,因此网段1和网段2仍同属一个广播域。
5、交换机(Switch)
交换机的出现是为了解决连接在集线器上的所有主机会共享可用带宽,使得冲突域过大,从而造成网络堵塞的问题。交换机是通过为需要通信的两台主机直接建立专用的通信信道来增加可用带宽的,从一定层面上交换机可看作是多接口的网桥。
局域网交换机的基本功能与网桥一样,具有帧转发、帧过滤的功能。但是,交换机与网桥相比还是存在以下不同:
(1)交换机工作时,实际上允许多组端口间的通道同时工作。所以,交换机的功能体现出不仅仅是一个网桥的功能,而是多个网桥功能的集合,即网桥一般分有两个端口,而交换机具有高密度的端口。
(2)分段能力的区别:由于交换机能够支持多个端口,因此可以把网络系统划分成为更多的物理网段,这样使得整个网络系统具有更高的带宽,而网桥仅仅支持两个端口,所以,网桥划分的物理网段是相当有限的。
(3)传输速率的区别:交换机与网桥数据信息的传输速率相比,交换机要快于网桥。
(4)数据帧转发方式的区别 :网桥在发送数据帧前,通常要接收到完整的数据帧并执行帧检测序列FCS后,才开始转发该数据帧,而交换机则具有存储转发和直接转发两种帧转发方式。直接转发方式在发送数据以前,不需要在接收完整个数据帧和经过32bit循环冗余校验码CRC的计算检查后的等待时间。
位于第二层的交换机是通过查找MAC地址表将接收到的数据传送到目的端口的。相比于集线器,交换机可以分割冲突域,每一个端口为一个单独的冲突域。
如图5所示,交换机为主机A和主机B建立了一条专用的信道,也为主机C和主机D建立了一条专用的信道。因此,如果主机A想给主机B发送消息,交换机不会转发这个数据帧,同理,主机C发给主机D也是一样。也就是说,交换机将一个冲突域划分为两个冲突域,并且这两个冲突域共享自己的总信道带宽。只有当交换机的某个接口直接连接了一个集线器,而集线器又连接了多台主机时,交换机上的该接口和集线器上所连的所有主机才可能产生冲突,形成冲突域。换句话说,交换机上每个接口都是自己的一个冲突域。
然而,交换机同样没有过滤广播通信的功能。也就是说,交换机在接收到一个广播数据包后,会向其所有端口转发此广播数据包。因此,交换机和其所有接口所连接的主机共同构成了一个广播域。
交换机可以划分冲突域,但不能划分广播域。
6、路由器(Router)
交换机虽然能够分割冲突域,但其连接的设备仍同属一个广播域,当交换机接收到广播数据包时,会在所有的设备中进行传播,可能导致网络拥塞并造成安全隐患。为了避免因不可控制的广播导致的网络故障风险,通信网络中使用路由器来分割广播域。路由器并不通过MAC地址来转发数据,而是利用不同网络的ID号即IP地址来确定数据转发的目的地址。MAC地址通常由设备硬件出厂自带,无法自行更改,而IP地址则一般由网络管理员手动配置或由系统自动分配。路由器通过IP地址将连接到其端口的设备划分为不同的网络(子网),每个端口下连接的网络即为一个广播域,广播数据不会扩散到该端口以外,因此我们说路由器隔离了广播域。
路由器工作在网络层,可以识别网络层的地址(即IP地址),有能力过滤第三层的广播消息。实际上,除非做特殊配置,否则路由器从不转发广播类型的数据包。因此,路由器的每个端口所连接的网络都独自构成一个广播域。
如图6所示,如果各个网段都是共享式局域网,则每网段自己构成一个独立的冲突域和广播域。
7、网关(Gateway)
网关工作在OSI参考模型的上三层,因此并不使用冲突域、广播域的概念。网关主要用来进行高层协议之间的转换。如充当LOTUS 1-2-3邮件服务和Microsoft Exchange邮件服务之间的邮件网关。(注意,这里网关的概念完全不同于PC主机以及路由器上配置的默认网关。)
-----------------------------------最后打个通俗的比喻来帮助理解冲突域和广播域的概念-------------------------------------
局域网好比一栋大楼,每个人(好比主机)有自己的房间(房间就好比网卡,房号就是物理地址,即MAC地址),里面的人(主机)人手一个对讲机,由于这些对讲机都工作在同一频道,所以一个人说话,其他人都能听到,这就是广播(向所有主机发送信息包),只有目标才会回应,其他人虽然听见但是不理(丢弃包),而这些能听到广播的所有对讲机就够成了一个广播域。这些对讲机所工作的频道相当于集线器,而每个对讲机相当于集线器上的端口。大家都知道对讲机在说话时是不能收听的,必须松开对讲键才能收听,这种在同一时刻只能收或者发的工作模式就是半双工。而且同一时刻只能有一个人说话,这样其他人才能听清楚对讲机中的声音,同一时刻有两个或更多的人一起说话声音就会重叠,从而产生冲突,所以这就构成了一个冲突域。
之后的一天,楼里的人受不了这种低效率的通信了,所以他们对设备进行了升级,换成每人一部内线电话(即交换机,每个电话都相当于交换机上的一个端口),每人都有一个内线号码(逻辑地址即IP地址)。(这里要额外说一下IP地址和MAC地址转译的问题,常见的第二层交换机只能识别MAC地址,它内置一个MAC地址表,并不断维护和更新它,来确定哪个端口对应那台主机的MAC地址,而我们所用的通信软件都是基于IP的,IP地址和MAC地址的转换工作,就由ARP地址解析协议来完成。)在最开始时,没人知道哪个号码对应哪个人,所以要想打电话给某个人得先广播一下:“xxx,你的号码是多少?”,随后那个人接受到广播信息并回复“我的号码是xxxx”。这样你就有了目标的号码,所有的内线号码就是通过这种方式不断加入电话簿中(交换机的MAC地址表),下次可以直接拨到他的分机号码上去而不用广播了。大家都知道电话是点对点的通信设备,不会影响到其他人,起冲突的只会限制在本地,一个电话号码的线路相当于一个冲突域,只有再串连分机时,分机和主机之间才可能产生冲突,但这个冲突不会影响外面其他的电话。电话号码就像是交换机上的端口号,也就是说交换机上每个端口自成一个冲突域,所以整个大的冲突域被分割成若干的小冲突域了。而且,电话在接听的同时可以说话,这样的工作模式就是全双工。这就是交换机比集线器性能更好的原因之一。
网络层协议及IP编址
IPv4报文格式
IP Packet(IP数据包),其包头主要内容如下:
* Version:4 bit,4:表示为IPv4;6:表示为IPv6。
* Header Length:4 bit,首部长度,如果不带Option字段,则为20,最长为60。
* Type of Service:8 bit,服务类型。只有在有QoS差分服务要求时,这个字段才起作用。
* Total Length:16 bit,总长度,整个IP数据包的长度。
* Identification:16 bit,标识,分片重组时会用到该字段。
* Flags:3 bit,标志位。
* Fragment Offset:12 bit,片偏移,分片重组时会用到该字段。
* Time to Live:8 bit,生存时间 。 ** 可经过的最多路由数,即数据包在网络中可通过的路由器数的最大值。** 为 避免环路导致的网络拥塞,IP报文头中包含一个生存时间TTL(Time To Live)字段。报文每经过一台三层设备,TTL值减1。初始TTL值由源端设备设置。当报文中的TTL降为0时,报文会被丢弃。同时,丢弃报文的设备会根据报文头中的源IP地址向源端发送ICMP错误消息。
* Protocol:8 bit,协议:下一层协议。指出此数据包携带的数据使用何种协议,以便目的主机的IP层将数据部分上交给哪个进程处理。 常见值:
1: ICMP, Internet Control Message;
2: IGMP, Internet Group Management;
6: TCP , Transmission Control Protocol;
17: UDP, User Datagram Protocol。
* Header Checksum:16 bit,首部检验和。
* Source IP Address:32 bit,源IP地址。
* Destination IP Address:32 bit,目的IP地址。
* Options:可变,选项字段。
* Padding:可变,填充字段,全填0。
ping的整个流程详解(icmp)
ICMP 全称是 Internet Control Message Protocol,也就是互联网控制报文协议
ICMP 主要的功能包括:
- 确认 IP 包是否成功送达目标地址
- 报告发送过程中 IP 包被废弃的原因和改善网络设置等 ICMP协议号为
1
ICMP 包头的类型字段,大致可以分为两大类:
- 一类是用于诊断的查询消息,也就是「查询报文类型」
- 另一类是通知出错原因的错误消息,也就是「差错报文类型」
查询报文类型
回送消息 —— 类型 0 和 8
回送消息用于进行通信的主机或路由器之间,判断所发送的数据包是否已经成功到达对端的一种消息,ping 命令就是利用这个消息实现的。
可以向对端主机发送回送请求的消息(ICMP Echo Request Message,类型 8),也可以接收对端主机发回来的回送应答消息(ICMP Echo Reply Message,类型 0)
差错报文类型
接下来,说明几个常用的 ICMP 差错报文的例子:
- 目标不可达消息 —— 类型 为 3
- 原点抑制消息 —— 类型 4
- 重定向消息 —— 类型 5
- 超时消息 —— 类型 11
目标不可达消息(Destination Unreachable Message) —— 类型为 3
IP 路由器无法将 IP 数据包发送给目标地址时,会给发送端主机返回一个目标不可达的 ICMP 消息,并在这个消息中显示不可达的具体原因,原因记录在 ICMP 包头的代码字段。
由此,根据 ICMP 不可达的具体消息,发送端主机也就可以了解此次发送不可达的具体原因。
* 网络不可达代码为 0
* 主机不可达代码为 1
* 协议不可达代码为 2
* 端口不可达代码为 3
* 需要进行分片但设置了不分片位代码为 4
原点抑制消息(ICMP Source Quench Message) —— 类型 4
在使用低速广域线路的情况下,连接 WAN 的路由器可能会遇到网络拥堵的问题。
ICMP 原点抑制消息的目的就是为了缓和这种拥堵情况。
当路由器向低速线路发送数据时,其发送队列的缓存变为零而无法发送出去时,可以向 IP 包的源地址发送一个 ICMP 原点抑制消息。
收到这个消息的主机借此了解在整个线路的某一处发生了拥堵的情况,从而增大 IP 包的传输间隔,减少网络拥堵的情况。
然而,由于这种 ICMP 可能会引起不公平的网络通信,一般不被使用。
重定向消息(ICMP Redirect Message) —— 类型 5
如果路由器发现发送端主机使用了「不是最优」的路径发送数据,那么它会返回一个 ICMP 重定向消息给这个主机。
在这个消息中包含了最合适的路由信息和源数据。这主要发生在路由器持有更好的路由信息的情况下。路由器会通过这样的 ICMP 消息告知发送端,让它下次发给另外一个路由器。
超时消息(ICMP Time Exceeded Message) —— 类型 11
IP 包中有一个字段叫做 TTL (Time To Live,生存周期),它的值随着每经过一次路由器就会减 1,直到减到 0 时该 IP 包会被丢弃。
此时,路由器将会发送一个 ICMP 超时消息给发送端主机,并通知该包已被丢弃。
设置 IP 包生存周期的主要目的,是为了在路由控制遇到问题发生循环状况时,避免 IP 包无休止地在网络上被转发。
ping —— 查询报文类型的使用
接下来,我们重点来看 ping 的发送和接收过程。
同个子网下的主机 A 和 主机 B,主机 A 执行ping 主机 B 后,我们来看看其间发送了什么?
-
ping 命令执行的时候,源主机首先会构建一个 ICMP 回送请求消息数据包。 ICMP 数据包内包含多个字段,最重要的是两个:
- 第一个是类型,对于回送请求消息而言该字段为 8;
- 另外一个是序号,主要用于区分连续 ping 的时候发出的多个数据包。每发出一个请求数据包,序号会自动加 1。为了能够计算往返时间 RTT,它会在报文的数据部分插入发送时间。
-
然后,由 ICMP 协议将这个数据包连同地址 192.168.1.2 一起交给 IP 层。IP 层将以
192.168.1.2作为目的地址,本机 IP 地址作为源地址,协议字段设置为 1 表示是 ICMP 协议,再加上一些其他控制信息,构建一个 IP 数据包。
-
接下来,需要加入 MAC 头。如果在本地 ARP 映射表中查找出 IP 地址 192.168.1.2 所对应的 MAC 地址,则可以直接使用;如果没有,则需要发送 ARP 协议查询 MAC 地址,获得 MAC 地址后,由数据链路层构建一个数据帧,目的地址是 IP 层传过来的 MAC 地址,源地址则是本机的 MAC 地址;还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。
-
主机 B 收到这个数据帧后,先检查它的目的 MAC 地址,并和本机的 MAC 地址对比,如符合,则接收,否则就丢弃。
接收后检查该数据帧,将 IP 数据包从帧中提取出来,交给本机的 IP 层。同样,IP 层检查后,将有用的信息提取后交给 ICMP 协议。 -
主机 B 会构建一个 ICMP 回送响应消息数据包,回送响应数据包的类型字段为 0,序号为接收到的请求数据包中的序号,然后再发送出去给主机 A。
在规定的时候间内,源主机如果没有接到 ICMP 的应答包,则说明目标主机不可达;如果接收到了 ICMP 回送响应消息,则说明目标主机可达。
此时,源主机会检查,用当前时刻减去该数据包最初从源主机上发出的时刻,就是 ICMP 数据包的时间延迟。
针对上面发送的事情,总结成了如下图:
当然这只是最简单的,同一个局域网里面的情况。如果跨网段的话,还会涉及网关的转发、路由器的转发等等。
但是对于 ICMP 的头来讲,是没什么影响的。会影响的是根据目标 IP 地址,选择路由的下一跳,还有每经过一个路由器到达一个新的局域网,需要换 MAC 头里面的 MAC 地址。
说了这么多,可以看出 ping 这个程序是使用了 ICMP 里面的 ECHO REQUEST(类型为 8 ) 和 ECHO REPLY (类型为 0)。
traceroute —— 差错报文类型的使用
有一款充分利用 ICMP 差错报文类型的应用叫做 traceroute(在UNIX、MacOS中是这个命令,而在Windows中对等的命令叫做 tracert )。
traceroute 作用一
traceroute 的第一个作用就是故意设置特殊的 TTL,来追踪去往目的地时沿途经过的路由器。
traceroute 的参数指向某个目的 IP 地址:
traceroute 192.168.1.100
这个作用是如何工作的呢?
它的原理就是利用 IP 包的生存期限 从 1 开始按照顺序递增的同时发送 UDP 包,强制接收 ICMP 超时消息的一种方法。
比如,将 TTL 设置 为 1
,则遇到第一个路由器,就牺牲了,接着返回 ICMP 差错报文网络包,类型是时间超时。
接下来将 TTL 设置为 2
,第一个路由器过了,遇到第二个路由器也牺牲了,也同时返回了 ICMP 差错报文数据包,如此往复,直到到达目的主机。
这样的过程,traceroute 就可以拿到了所有的路由器 IP。
当然有的路由器根本就不会返回这个 ICMP,所以对于有的公网地址,是看不到中间经过的路由的。
发送方如何知道发出的 UDP 包是否到达了目的主机呢?
traceroute 在发送UDP
包时,会填入一个不可能的端口号值作为 UDP 目标端口号(大于3000
)。当目的主机,收到 UDP 包后,会返回 ICMP 差错报文消息,但这个差错报文消息的类型是「端口不可达」。 所以,当差错报文类型是端口不可达时,说明发送方发出的 UDP 包到达了目的主机。
2. traceroute 作用二
traceroute 还有一个作用是故意设置不分片,从而确定路径的 MTU。
这么做是为了什么?
这样做的目的是为了路径MTU发现。
因为有的时候我们并不知道路由器的 MTU 大小,以太网的数据链路上的 MTU 通常是 1500 字节,但是非以外网的 MTU 值就不一样了,所以我们要知道 MTU 的大小,从而控制发送的包大小。
它的工作原理如下:
首先在发送端主机发送 IP 数据报时,将 IP 包首部的分片禁止标志位设置为1
。根据这个标志位,途中的路由器不会对大数据包进行分片,而是将包丢弃。
随后,通过一个 ICMP 的不可达消息将 数据链路上 MTU 的值一起给发送主机,不可达消息的类型为「需要进行分片但设置了不分片位」。
发送主机端每次收到 ICMP 差错报文时就减少包的大小,以此来定位一个合适的 MTU 值,以便能到达目标主机。
最后
以上就是怕孤单曲奇为你收集整理的HCIA-DATACOM网络基础数据通信网络基础的全部内容,希望文章能够帮你解决HCIA-DATACOM网络基础数据通信网络基础所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复