http://dengqi.blog.51cto.com/5685776/1223132
详解网络传输中的三张表,MAC地址表、ARP缓存表以及路由表
2013-06-16 18:57:33
标签:路由表 ARP协议 MAC地址表 静态路由
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://dengqi.blog.51cto.com/5685776/1223132
一:MAC地址表详解
说到MAC地址表,就不得不说一下交换机的工作原理了,因为交换机是根据MAC地址表转发数据帧的。在交换机中有一张记录着局域网主机MAC地址与交换机接口的对应关系的表,交换机就是根据这张表负责将数据帧传输到指定的主机上的。
交换机的工作原理
交换机在接收到数据帧以后,首先、会记录数据帧中的源MAC地址和对应的接口到MAC表中,接着、会检查自己的MAC表中是否有数据帧中目标MAC地址的信息,如果有则会根据MAC表中记录的对应接口将数据帧发送出去(也就是单播),如果没有,则会将该数据帧从非接受接口发送出去(也就是广播)。
如下图:详细讲解交换机传输数据帧的过程
[1.jpg]
1)主机A会将一个源MAC地址为自己,目标MAC地址为主机B的数据帧发送给交换机。
2)交换机收到此数据帧后,首先将数据帧中的源MAC地址和对应的接口(接口为f 0/1) 记录到MAC地址表中。
3)然后交换机会检查自己的MAC地址表中是否有数据帧中的目标MAC地址的信息,如果有,则从MAC地址表中记录的接口发送出去,如果没有,则会将此数据帧从非接收接口的所有接口发送出去(也就是除了f 0/1接口)。
4)这时,局域网的所有主机都会收到此数据帧,但是只有主机B收到此数据帧时会响应这个广播,并回应一个数据帧,此数据帧中包括主机B的MAC地址。
5)当交换机收到主机B回应的数据帧后,也会记录数据帧中的源MAC地址(也就是主机B的MAC地址),这时,再当主机A和主机B通信时,交换机根据MAC地址表中的记录,实现单播了。
如下图:当局域网存在多个交换机互联的时候,交换机的MAC地址表是怎么记录的呢?
[2.jpg]
1)主机A将一个源MAC地址为自己,目标MAC地址主机C的数据帧发送给交换机
2)交换机1收到此数据帧后,会学习源MAC地址,并检查MAC地址表,发现没有目标MAC地址的记录,则会将数据帧广播出去,主机B和交换机2都会收到此数据帧。
3)交换机2收到此数据帧后也会将数据帧中的源MAC地址和对应的接口记录到MAC地址表中,并检查自己的MAC地址表,发现没有目标MAC地址的记录,则会广播此数据帧。
4)主机C收到数据帧后,会响应这个数据帧,并回复一个源MAC地址为自己的数据帧,这时交换机1和交换机1都会将主机C的MAC地址记录到自己的MAC地址表中,并且以单播的形式将此数据帧发送给主机A。
5)这时,主机A和主机C通信就是一单播的形式传输数据帧了,主机B和主机C通信如上述过程一样,因此交换机2的MAC地址表中记录着主机A和主机B的MAC地址都对应接口f 0/1。
总结:从上面的两幅图可以看出,交换机具有动态学习源MAC地址的功能,并且交换机的一个接口可以对应多个MAC地址,但是一个MAC地址只能对应一个接口。
注意:交换机动态学习的MAC地址默认只有300S的有效期,如果300S内记录的MAC地址没有通信,则会删除此记录。
二、ARP缓存表详解
上面我们讲解了交换机的工作原理,知道交换机是通过MAC地址通信的,但是我们是如何获得目标主机的MAC地址呢?这时我们就需要使用ARP协议了,在每台主机中都有一张ARP表,它记录着主机的IP地址和MAC地址的对应关系。
ARP协议:ARP协议是工作在网络层的协议,它负责将IP地址解析为MAC地址。
如下图:详细讲解ARP的工作原理。
[3.jpg]
1)如果主机A想发送数据给主机B,主机A首先会检查自己的ARP缓存表,查看是否有主机B的IP地址和MAC地址的对应关系,如果有,则会将主机B的MAC地址作为源MAC地址封装到数据帧中。如果没有,主机A则会发送一个ARP请求信息,请求的目标IP地址是主机B的IP地址,目标MAC地址是MAC地址的广播帧(即FF-FF-FF-FF-FF-FF),源IP地址和MAC地址是主机A的IP地址和MAC地址。
2)当交换机接受到此数据帧之后,发现此数据帧是广播帧,因此,会将此数据帧从非接收的所有接口发送出去。
3)当主机B接受到此数据帧后,会校对IP地址是否是自己的,并将主机A的IP地址和MAC地址的对应关系记录到自己的ARP缓存表中,同时会发送一个ARP应答,其中包括自己的MAC地址。
4)主机A在收到这个回应的数据帧之后,在自己的ARP缓存表中记录主机B的IP地址和MAC地址的对应关系。而此时交换机已经学习到了主机A和主机B的MAC地址了。
路由表详解
路由器负责不同网络之间的通信,它是当今网络中的重要设备,可以说没有路由器就没有当今的互联网。在路由器中也有一张表,这张表叫路由表,记录着到不同网段的信息。路由表中的信息分为直连路由和非直连路由。
直连路由:是直接连接在路由器接口的网段,由路由器自动生成。
非直连路由:就是不是直接连接在路由器接口上的网段,此记录需要手动添加或者是使用动态路由。
路由表中记录的条目有的需要手动添加(称为静态路由),有的测试动态获取的(称为动态路由)。直连路由属于静态路由。
路由器是工作在网络层的,在网络层可以识别逻辑地址。当路由器的某个接口收到一个包时,路由器会读取包中相应的目标的逻辑地址的网络部分,然后在路由表中进行查找。如果在路由表中找到目标地址的路由条目,则把包转发到路由器的相应接口,如果在路由表中没有找到目标地址的路由条目,那么,如果路由配置默认路由,就科举默认路由的配置转发到路由器的相应接口;如果没有配置默认路由,则将该包丢弃,并返回不可到达的信息。这就是数据路由的过程。
如下图:详细介绍路由器的工作原理
[5.jpg]
1)HostA在网络层将来自上层的报文封装成IP数据包,其中源IP地址为自己,目标IP地址是HostB,HostA会用本机配置的24位子网掩码与目标地址进行“与”运算,得出目标地址与本机不是同一网段,因此发送HostB的数据包需要经过网关路由A的转发。
2)HostA通过ARP请求获取网关路由A的E0口的MAC地址,并在链路层将路由器E0接口的MAC地址封装成目标MAC地址,源MAC地址是自己。
3)路由器A从E0可接收到数据帧,把数据链路层的封装去掉,并检查路由表中是否有目标IP地址网段(即192.168.2.2的网段)相匹配的的项,根据路由表中记录到192.168.2.0网段的数据请发送给下一跳地址10.1.1.2,因此数据在路由器A的E1口重新封装,此时,源MAC地址是路由器A的E1接口的MAC地址,封装的目标MAC地址则是路由器2的E1接口的MAC地址。
4)路由B从E1口接收到数据帧,同样会把数据链路层的封装去掉,对目标IP地址进行检测,并与路由表进行匹配,此时发现目标地址的网段正好是自己E0口的直连网段,路由器B通过ARP广播,获知HostB的MAC地址,此时数据包在路由器B的E0接口再次封装,源MAC地址是路由器B的E0接口的MAC地址,目标MAC地址是HostB的MAC地址。封装完成后直接从路由器的E0接口发送给HostB。
5)此时HostB才会收到来自HostA发送的数据。
总结:路由表负责记录一个网络到另一个网络的路径,因此路由器是根据路由表工作的。
看完上面的文章是不是感觉原来数据在网络中传输是这么的复杂啊!呵呵...其实这些过程都是计算机自己完成的,我们需要做的很少。
可能写的不是很全面,请大家多多谅解!希望对大家有帮助。
本文出自 “邓奇的Blog” 博客,请务必保留此出处http://dengqi.blog.51cto.com/5685776/1223132
相关推荐
Activiti-5.21数据库表结构详解(共25张表) 工作流的应用越来越广泛,而activiti是公认的现阶段最好的工作流框架之一,详细了解activiti的库表结构有助于您更好的掌握学习工作流框架,共享本资源以供广大编程从业人员...
在PHP开发中,三级联动(省-市-县)是一种常见的功能,用于实现地理区域的选择,常见于地址填写、物流配送等场景。本主题将详细解释如何实现这种功能,包括在一个数据表和三个独立的数据表中存储省市县信息。 首先...
在本文中,我们将详细探讨这三张表的相关知识以及它们在数据库中的作用。 首先,我们来看`EMP`表。EMP表是Oracle SCOTT schema中的核心表,模拟了一个公司员工的信息。它通常包含以下字段:雇员ID (EMPNO)、姓名 ...
MySQL版省市区表 ---三级联动 省市区三张表 -分表 共三张表,合计三千条数据 数据是官网所发布,时间略旧,可能与最新国区有点误差
在课程设计中,这个模拟器提供了实践经验,帮助学生掌握网络层的核心概念,如子网划分、CIDR(无类别域间路由)、NAT(网络地址转换)以及VLAN(虚拟局域网)等。通过调整路由器配置,学生可以探索不同网络环境下的...
**ACT_GE_BYTEARRAY**表主要用于存储部署文件的大文本数据,包括但不限于流程定义文件(如XML)、流程图、以及Serializable格式的变量等。值得注意的是,在进行类路径部署时,应避免将与流程无关的文件(如SVN版本...
标题 "省市区sql文件一份在一张表里一份在三张表里.rar" 涉及的是数据库设计中的地理信息存储,特别是中国省级、市级和区级行政区域的数据组织。描述中提到“数据不算太新”,意味着这些SQL文件可能包含的是历史或...
标题与描述中的“from多张表等于left join其他表”主要涉及的是SQL查询语句中两种不同的连接方式:内连接(通常在FROM子句后直接使用WHERE子句实现)和左连接(LEFT JOIN)。这两种连接方式在处理多表查询时有着不同...
### Activiti23张表详解 #### 一、概述 Activiti是一款开源的工作流引擎,基于Java语言开发,主要用于管理业务流程。它提供了一套完整的API来定义和执行流程,并支持BPMN 2.0标准。为了实现这些功能,Activiti在...
BGP使用三张表来管理路由信息: 1. 邻居关系表:记录了建立BGP连接的邻居信息。 2. 转发数据库:也称作BGP路由表,记录了邻居的网络和属性,用于在多条路径中选择最佳路径。 3. 路由表:BGP路由器有两张路由表,IGP...
在AllData.sql文件中,很可能包含了创建这3张表的SQL语句,以及可能的数据插入语句。这些SQL语句可能是CREATE TABLE语句来定义表结构,以及INSERT INTO语句来填充数据。通过运行这个SQL脚本,用户可以直接在MSSQL...
Activiti 5.22.0数据库表结构添加中文注释MySQL脚本,内含3个脚本,分别是: ...答:因为25张表中有4张是ACT_ID_*开头的表,这几个表用自己业务系统的就行,或者在此基础上根据ACT_ID_*表稍做改造。
《网络层:IP路由原理详解》 在计算机网络的基础中,网络层扮演着至关重要的角色,其中IP路由原理是理解整个互联网运作的核心。路由,简单来说,是指IP分组在网络中从源主机传输到目的主机的路径。在因特网这个庞大...
Flowable 6.7.2 自动生成的79 张表,使用Chatgpt补全了表注释和字段注释,注意:注释未经专业校验,有问题请通知我,文件分享请不要收费,谢谢
在MySQL中创建dept,emp,salgrade三张表,以供学习测试使用
Activiti引擎的工作流数据主要存储在23张核心数据表中,这些数据表大致可以分为以下几类:历史数据表、运行时数据表、模型数据表、部署数据表、身份数据表和变量数据表。 3. 历史数据表: 历史数据表主要包括act_...
最新地址区域代码,三张表 内含视图 很全 资料整理的很周到 最新地址区域代码,三张表 内含视图 很全 资料整理的很周到
shiro权限框架数据库设计,附少量数据,仅供测试,非实际项目