网络三张表ARP表,MAC表,路由表,实现你的网络自由!!
背景说明:
网络的知识,是大家开发过程中,非常重要也是非常底层的知识。所以网络知识是一个非常、非常核心的面试知识点。
在30岁老架构师的读者交流群(50)中,其相关面试题是一个非常、非常高频的交流话题。社群中,还遇到过大概的变种:形式1:聊聊ARP地址解析协议?
形式2:在浏览器地址栏输入一个URL后回车,背后发生了什么?
形式3:。。。。非常多
这些问题,都和三张表有关。
可以说,掌握了三张表,就掌握了网络通讯的核心。
这里给大家把网络三张表,做一下系统化、体系化的梳理,使得大家可以充分展示一下大家雄厚的技术肌肉,让面试官爱到不能自已、口水直流。
也一并把这个相关题目以及参考答案,收入咱们的《尼恩Java面试宝典》,供后面的小伙伴参考,提升大家的3高架构、设计、开发水平。
注:本文以PDF持续更新,最新Java架构笔记、面试题的PDF文件,请后台私信【笔记】即可获取哦!首先,说一下网络中的数据包
首先我们需要知道,网络上传输的东西是什么?
在使用TCPIP协议传输时,网络上的数据,是以二进制数据包的形式传输的,核心的三个部分,如下:
这个数据包,其中有这么几个字段很重要:源IP地址源MAC地址目标IP地址目标MAC地址
这些都是和地址相关的,就像寄送快递,这就是里边的收件人电话,收件人地址,有了这个地址信息,对方才能收到这个包。
在网络中,每一台计算机,每一个通讯设备,都有自己的地址,包含IP地址和MAC地址。
注意:MAC地址又称为硬件地址、物理地址(因为这种地址用在MAC帧中)。
为什么需要那么多地址呢?
一个ip地址,还要一个mac地址。
原因是,网络协议是分层的。不同的地址,给不同的层使用。ip地址,网络层使用,mac地址,数据链路层使用。
什么是网络层,什么是链路层?
请参见TCPIP协议与七层ISO模型的对应关系,大致如下图所示:
图:TCPIP协议与七层ISO模型的对应关系网络三张表1:ARP表
网络中的三张表ARP表,MAC表,路由表
先看第一个ARP表。提起ARP表必然先想起ARP(addressresolutionprotocol)协议,地址解析协议。
为什么需要ARP协议?
在链路层中,同一局域网中的一台主机要和另一台主机进行通信,需要通过MAC地址进行定位,然后才能进行数据包的发送。
而在网络层中,计算机之间是通过IP地址定位目标主机,对应的数据报文只包含目标主机的IP地址,而没有MAC地址。
因此,在发送之前,需要做个翻译的工作:根据IP地址获取MAC地址。
只有翻译成功,才能将数据包发送到正确的目标主机,而这个获取过程是通过ARP协议完成的。网关设备上的ARP表项
在日常维护工作中,在华为的网关设备上,可以执行displayarp相关命令,查看设备上的ARP表项信息。
通过在网关设备上查看ARP表项,网络管理员可以查看下挂用户的IP地址、MAC地址和接口等信息
例如,当网络管理员知道某个用户的IP地址,想查询该用户的MAC地址时,可以通过查看ARP表项信息获取。
用户可以执行displayarpall。看到IPMAC的表项,我们可以看到已知的IP地址的MAC地址是什么,这样很方便我们排查故障
上述回显中,每行ARP表项的具体含义如下:IP地址为172。16。10。3,MAC地址为00259efbbe55,TYPE字段为S(代表该ARP表项为静态ARP表项)。这条静态ARP表项出接口为GE106,VLAN编号为100。
IP地址为172。16。20。3,MAC地址为0200000000e8,TYPE字段为S(代表该ARP表项为静态ARP表项)。这条静态ARP表项出接口为GE1019。
IP地址为172。16。10。1,MAC地址为00259ef4abcd,TYPE字段为I(代表该ARP表项为接口本身的ARP表项)。这条ARP表项代表IP地址172。16。10。1是接口Vlanif100的IP地址。
IP地址为172。16。10。2,MAC地址为00259efbbe55,TYPE字段为D(代表该ARP表项为动态ARP表项)。这条动态ARP表项是从接口GE106动态学习到的,VLAN编号为100,剩余存活时间为20分钟。
IP地址为172。16。20。1,MAC地址为00259ef4abcd,TYPE字段为I(代表该ARP表项为接口本身的ARP表项)。这条ARP表项代表IP地址172。16。20。1是接口GE1019的IP地址。
IP地址为172。16。20。2,MAC地址为0200000000e8,TYPE字段为D(代表该ARP表项为动态ARP表项)。这条动态ARP表项是从接口GE1019动态学习到的,剩余存活时间为18分钟。
代码转自,华为企业技术文档。ARP表的使用过程
由于IP协议使用了ARP协议,因此通常把ARP协议划归到网络层。但ARP协议的用途是为了从网络层使用IP地址,解析出在链路层使用的硬件地址。
每一台主机都设有一个ARP高速缓存,里面有本局域网上的各种IP地址到MAC硬件地址的映射表(ARP表),表里面的内容由ARP协议进行动态更新。
ARP表内的数据会老化,达到老化时间会自动删除,在此通信时,由ARP协议重新添加。
有PC0,PC1两台主机
PC0向PC1发送一个ping报文,向PC0输入1。1。1。3然后开始发送,PC0先查询本地APR表查询1。1。1。3对应MAC地址,但并没查到,这种情况PC0在本局域网上广播发送一个ARP请求分组。ARP请求分组的主要内容是:
我的IP地址是1。1。1。2,硬件地址是xxxxxxxxxxxx。我想知道IP地址为1。1。1。3的主机的硬件地址。
在本局域网上的所有主机上运行的ARP进程都会收到此ARP请求分组。PC1的IP地址与ARP请求分组中要查询的IP地址一致,就收下ARP请求分组,并向PC0发送ARP响应分组,同时在这个ARP响应分组中写入自己的硬件地址。其余主机ip地址都与ARP请求要查询的ip地址不一致,不做任何回应。
响应内容为:
我的ip地址是1。1。1。3,我的硬件地址是xxxxxxxxxxxx
虽然ARP请求分组是广播发送的,但ARP响应分组是普通的单播,即从一个原地址发送到一个目的地址。
接下来PC0就可以使用刚获取的PC1MAC地址,进行icmp数据发送。
网络三张表之2:MAC表
首先,来看交换机是怎么进行数据转发的。交换机是怎么进行数据转发的
MAC表工作在链路层,主要给交换机用的。
一个局域网的主机设备,多了以后,需要通过交换机,组织和管理起来。
主机设备接到交换机的端口上。
交换机内部维护一张【MAC地址表】,记录着每一个MAC地址的设备,连接在哪一个端口上。如果发来的包首部中包含的目标MAC地址在MAC地址表中没有映射关系,交换机就将此包广播给所有端口,也即发给了所有机器;如果地址表有映射,那就只发给那一个端口
比如主机A想要给主机C发送消息,就需要用到mac表。
但是,注意一下,一开始交换机的MAC地址表是空的,交换机并不知道C的端口号,因此A发送的消息将会被广播,同时,A的MAC地址和它对应的端口号会被记录到MAC地址表中。
具体如下图:
C收到广播之后,发现是发给自己的,就对A进行回复。
C对A的消息进行响应的时候,交换机就不需要进行广播消息了,因此它已经知道A计算机在哪个端口了,并且同样的,C的MAC地址和它对应的端口号会被记录到交换机的MAC地址表中。
C通过交换机给A发送消息,此时MAC地址表中含有A的信息MAC表的数据内容
MAC表放在了另一个层级,数据链路层。
如上图所示,mac表这样设计的。交换机内部维护一张MAC地址表,记录着每一个MAC地址的设备,连接在其哪一个端口上。
MAC地址
端口
bbbbbbbbbbbb
1hrcccccccccccc
3hraaaaaaaaaaaa
4hrdddddddddddd
5hr假如你仍然要发给B一个数据包,构造了如下的数据结构从网口出去。MAC表的使用过程
交换机是根据MAC地址转发数据帧的。
当PC0发送ARP数据包,交换机会把数据包发往PC0之外的所有主机,并在相应包中记录下相应Mac地址与接口数据。
当PC0向PC1发送一帧数据,从1口进到交换机。交换机收到帧后,根据帧中的目的MAC先查本地MAC表,没有查到应从哪个接口转发这个帧。
接着,交换机把这个帧的源MAC和接口1写入交换表中,并向除1以外的所有接口广播这个帧,PC2将此广播帧丢弃,因为目的地址不对。
PC1收下这个目的地址是自己MAC的数据,并回应数据包,此时交换机会把PC1的MAC和对应接口2写入表中。然后当PC0与PC1再次发送数据交换机可以根据目的MAC查表找出对应的接口,将数据包直接送达对应的主机。
考虑到有可能在交换机的接口更换主机,或者主机要跟换主机更换网卡,这时交换机中MAC表也是动态的、有自己的老化时间,会自动删除相关数据。
当交换机中一台主机突然从2口切换到3口,交换机收到的此主机的数据仍然会发送到原端口2口就会出现超时情况,直到Mac中数据更新,或者手动把交换机断电重启重更新Mac表数据。
网络三张表之3:路由表
说起路由表,就不得不提起路由器。
路由器是一种具有多个输入端口和多个输出端口的专用设备也可称为计算机。其任务是转发分组。
路由器结构由两部分组成:路由选择部分和分组转发部分。
说明:此处的路由器与家用路由器略有不同,家用路由器集成了路由器和交换机的功能为了,更方便用户使用路由表的起源
前面的mac表,是因为局域网内的主机多了,被逼出来对主机进行分组管理的。相当于按照端口,对主机分组管理。
路由表怎么来的呢?也是被逼的。但是这一次,是被IP地址逼的。
当IP地址多了之后,需要划分子网,路由器的根本目标,就是解决跨子网IP之间的路由。
而跨子网IP之间的路由,是通过路由表完成的。
这里有点复杂,先从网关开始说起。网关的由来
有了子网之后,每个子网,有一个网关,相当于子网的总代理。
所有的报文,需要进行这个子网网关的转发。
有了网关之后,A在自己电脑里配置的一个网关IP地址,以便在发给不同子网的机器时,发给这个网关IP地址,由这个网关转发。
有了这个代理之后,数据包的转发规则如下:如果源IP与目的IP处于一个子网,直接将包通过交换机发出去。如果源IP与目的IP不处于一个子网,就交给路由器去处理。
怎么知道,两个IP在同一个子网呢?
比如,我们希望达到下面的目标:192。168。0。1和192。168。0。2处于同一个子网192。168。0。1和192。168。1。1处于不同子网
那么,我们可以认为的规定一个规则:以192。168。0。xxx开头的,就算是在一个子网否则就是在不同的子网。
192。168。0。xxx开头的,就算是在一个子网,否则就是在不同的子网。
那对于计算机来说,怎么表达这个意思呢?于是人们发明了子网掩码的概念
在上面的规则中,咱们的子网掩码定为255。255。255。0
计算的时候,将源IP与目的IP分别同这个子网掩码进行与运算,相等则是在一个子网,不相等就是在不同子网,就这么简单。
比如A电脑:192。168。0。1255。255。255。0192。168。0。0B电脑:192。168。0。2255。255。255。0192。168。0。0C电脑:192。168。1。1255。255。255。0192。168。1。0D电脑:192。168。1。2255。255。255。0192。168。1。0
那么A与B在同一个子网,C与D在同一个子网,但是A与C就不在同一个子网,与D也不在同一个子网,以此类推。
所以如果A给C发消息,A和C的IP地址分别A机器配置的子网掩码,发现相等,网关就把数据发给C发现不相等,网关则A认为C和自己不在同一个子网,于是把包发给路由器,就不管了,之后怎么转发,A不关心。
接下来,工作交个路由器。路由器怎么进行跨子网的路由
现在A要给C发数据包,已经可以成功发到路由器这里了,
问题就是,路由器怎么知道,收到的这个数据包,该从自己的哪个端口出去,才能直接(或间接)地最终到达目的地C呢。
路由器收到的数据包有目的IP也就是C的IP地址,需要转化成从自己的哪个端口出去,很容易想到,应该有个表,就像MAC地址表一样。
这个表就叫路由表。
和MAC地址表的不同的是,路由表并不是一对一这种明确关系,我们下面看一个路由表的结构。
目的地址
子网掩码
下一跳
端口
192。168。0。0
255。255。255。0
0hr192。168。0。254
255。255。255。255
0hr192。168。1。0
255。255。255。0
1hr192。168。1。254
255。255。255。255
1hr我们学习一种新的表示方法,由于子网掩码其实就表示前多少位表示子网的网段,所以如192。168。0。0(255。255。255。0)也可以简写为192。168。0。024
目的地址
下一跳
端口
192。168。0。024
0hr192。168。0。25432
0hr192。168。1。024
1hr192。168。1。25432
1hr这就很好理解了,路由表就表示,192。168。0。xxx这个子网下的,都转发到0号端口,192。168。1。xxx这个子网下的,都转发到1号端口。
配合着结构图来看(这里把子网掩码和默认网关都补齐了)
表中的下一跳列还没有值,在这里不重要,重要的是,咱们理解了路由表的核心。路由表的使用过程
路由器工作在网络层,主要功能就是实现跨网段传输数据。
如上图:一网段的主机要与其他网段的主机通信,则数据会先发送给指定的网关,也就是路由器,由路由器选择网段继续通信,所以发送的数据包起始中网络层的ip地址不变,源ip地址就是当前主机的ip地址,目的ip地址就是不同网段的主机的ip地址,但是链路层由于数据要先发给路由器,那么目的mac就是路由器的mac地址,然后路由器选择其他网段,则源mac变成路由器另一个网口的mac地址,目的mac就是目标主机的mac地址,所以整个过程网络层的一直不变,但是链路层一直再变
如上图:由于现在是两台路由器和两个网段的主机,所以需要构成三个局域网,当源主机跨网段与目标主机通信时,由于网段不同,数据会先发送给路由器,然后路由器再选择对应的目的网段,但是此时路由器另一端所在的网段与之目标主机的网段不同,所以无法继续向下发送,此时需要设置下一跳,下一跳的目的就是指定当前自己网段的主机要访问其他网段的主机时从这个路由器应该跳到哪个路由器,只要设置了,就可以直接发送数据到指定的路由器,整个过程就完成
1、当网络中有多个路由器是,两个主机需要通信路由器需要记录下一跳信息,下一跳的目的就是指定当前自己网段的主机要访问其他网段的主机时从这个路由器应该跳到哪个路由器
2、路由表记录着下一跳。
路由表中记录着不同网段的信息。路由表中记录的信息有的需要手动添加(称为静态路由表),通过路由协议自动获取的(称为动态路由表),我们的主机直接连到路由器上(中间无三层网络设备)这种情况是直连路由,属于静态路由。
路由选择处理机的任务是根据所选定的路由选择协议(路由协议后续在做总结)构造出路由表,同时经常或定期和相邻路由器交换路由信息而不断地跟新和维护路由表。
面试题:聊聊ARP地址解析协议
1:首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。
2:当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机IP地址,源主机MAC地址,目的主机的IP地址。
3:当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。
4:源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
注意:广播发送ARP请求,单播发送ARP响应。说在最后:
说明:其他的网络面试题这里不多说,具体请参见《Java面试宝典》网络协议面试专题,有几十道相关的面试题。
美文摘抄34(摘自人民日报)1。我们每个人都有惰性,也有潜力。如果没有一点压力,人就会变得十分懒散,做事拖拖拉拉得过且过。2。轻松和舒服的事情大家都喜欢,但越有用的事情,做起来越不舒服。优秀的人会坚持去做那些
当你忍不住吼孩子,请静下心来看看这8句话,太管用了当你忍不住吼孩子,请静下心来看看这8句话,太管用了202208301946菏泽市妇联当孩子犯错不听话的时候,父母总是容易发火吼叫甚至打骂孩子你再不听话,我就不要你了!你能不能不要总
一念之选,受益终生的女孩名字,爸爸妈妈都说好见字如面,见名知人。字中寄托了人的思想,名中表达了人的品格。为2021年属牛的女宝宝起一个高雅有内涵的名字,既能托物言志,以表心意又能为日后社交中给他人留下好的印象,同时在女孩的成
10岁男孩开灯睡觉骨龄发育慢4年上热搜,开灯睡觉都有什么危害?衡宇发自凹非寺量子位公众号QbitAI连夜追完最新恐怖片,不敢关灯睡觉。不知道你是否有过类似经历?最近,有小朋友因睡觉不关灯致骨龄发育慢,上了热搜。这名来自郑州的10岁小患者,身高
幼儿专注力舒尔特方格(44)100套题合集每日更新,为防止资料丢失,请右上角点击关注,更多实用内容持续上传!在育儿路上难的从来都不是搜集学习资源,而是归纳整理消化吸收这些资源,以及如何带动孩子持之以恒地去学习。把我们的时间
人生大事朱一龙在电影人生大事中极具颠覆性地出演一位刑释人员,江湖人称三哥,三哥从事的还是游走于生死边缘的殡葬行业。殡葬师刑释人员半道妇女选择这样冷门却极具挑战的题材,这真的很朱一龙。一部关
网经资讯知名女网红卷走20亿泰铢苹果投资滴滴近70亿元打水漂?近70亿元投资打水漂?苹果据传已退出滴滴出行董事会8月31日,有媒体报道称,作为滴滴出行大股东之一的苹果公司,已经选择放弃了滴滴出行的董事会席位,作为公司代表的苹果企业发展副总裁阿
古尔曼苹果头戴设备将成为三款苹果ARVR头戴设备中的第一款据报道,苹果正在开发至少三款增强现实和虚拟现实头戴设备,其中第一款可能会以苹果现实专业版的名字发布彭博s马克古尔曼。概念渲染基于据称泄露的信息经过伊恩泽尔博在他的最新版本中开机简讯
美国司法部拟对苹果发起反垄断诉讼据央视财经消息,据道琼斯旗下新闻网站MarketWatch当地时间26日报道,一位知情人士透露,今年年底前,美国司法部或将会针对苹果发起反垄断诉讼。据悉,自2019年以来,美国司法
小鹏汽车就苹果起诉其前雇员张小浪发布声明与该案件无任何关联8月23日午间,小鹏汽车官微发布关于苹果起诉其前雇员张小浪的声明我们今日从媒体上获悉前苹果员工张小浪涉嫌窃取苹果商业秘密案件的最新进展。案件至今已经四年多,小鹏汽车并不了解案件的具
辅食添加好,宝宝少生病关注菲妈育儿不踩雷盼星星盼月亮,宝贝终于可以添加辅食了,水果补充维生素,少不了蔬菜营养丰富,不能缺鸡蛋高蛋白,必须加牛肉,虾,坚果是不是会发现每种食物都不能少,每样都想灌给宝宝,深