自我总结:总结来自极客时间
第一讲:为什么要学习网络协议?
协议三要素
语义
内容要符合一定的规则和格式,如括号要成对、结束要使用分号等(HTTP报文的状态、首部、内容)
语法
一段内容是代表某种意义的,如数字减去数字是有意义的,数字减去文本一般来说就没有意义。
顺序(时序)
先干啥后才能干啥,如先加上某个数后才能做下一步的操作
只有通过网络协议,才能够使一大片机器相互协作,共同完成一件事
例子
从浏览器发起一个请求开始,如去考拉商城进行购物,浏览器之所以能够展示界面就是因为浏览器收到了HTTP响应报文,报文格式如下:
请求流程
应用层
从输入请求的URL(www.kaola.com)开始,浏览器只知道名字("www.kaola.com"),但不知道具体的地点,于是打开地址簿(DNS或者HTTPSDNS),然后得到服务器的地址(106.114.138.24);
知道了目标服务器的地址后,浏览器开始打包请求,对于普通的浏览,一般使用的是HTTP协议;但是对于购物下单这类的信息就是使用HTTPS协议,协议里面写明了“要买什么、要买多少”等信息
经过应用层的协议封装后,浏览器将包交给传输层去完成(Socket套接字)
传输层(TCP、UDP)
UDP无连接,面向服务;
TCP面向连接:TCP会保证包能准确到达目的地址,如果不能到达就会重新发送,知道准确到达(如支付请求就需要使用TCP)
头里有两个端口:浏览器端口:浏览器监听的端口;电商应用端口:电商的服务器监听的端口; 操作系统根据端口来决定把包转发到哪个进程中进行处理
传输层封装完毕后,继续把包转交给下一层:网络层
网络层
网络层的协议是IP协议,协议头里面包含了源地址(浏览器所在的机器IP)和目标地址(电商服务器的IP)
操作系统既然知道了目标IP地址,就开始想如何根据这个门牌号(IP地址)找到目标机器。操作系统往往会判断,这个目标IP地址是本地人,还是外地人。如果是本地人,从门牌号就能看出来,但是显然电商网站不在本地,而在遥远的地方。
操作系统知道要离开本地去远方。虽然不知道远方在何处,但是可以这样类比一下:如果去国外要去海关,去外地就要去网关。而操作系统启动的时候,就会被DHCP协议配置IP地址,以及默认的网关的IP地址192.168.1.1。
操作系统将IP地址发给网关呢?在本地通信基本靠吼,于是操作系统大吼一声,谁是192.168.1.1啊?网关会回答它,我就是,我的本地地址在村东头。这个本地地址就是MAC地址,而大吼的那一声是ARP协议。
操作系统得到MAC地址后,继续封装并转发给MAC层
物理层(MAC层)
MAC头里包含了MAC地址,所以能准确的到达网关,网关(192.168.1.1)在收到包后,根据自己的知识判断下一步该怎么走
网关:往往是一个路由器,到某个IP地址应该怎么走,这个叫路由表
路由器有点像玄奘西行路过的一个个国家的一个个城关。每个城关都连着两个国家,每个国家相当于一个局域网,在每个国家内部,都可以使用本地的地址MAC进行通信。一旦跨越城关,就需要拿出IP头来,里面写着贫僧来自东土大唐(就是源IP地址),欲往西天拜佛求经(指的是目标IP地址)。路过宝地,借宿一晚,明日启行,请问接下来该怎么走啊?城关往往是知道这些“知识”的,因为城关和临近的城关也会经常沟通。到哪里应该怎么走,这种沟通的协议称为路由协议,常用的有OSPF和BGP。
城关与城关之间是一个国家,当网络包知道了下一步去哪个城关,还是要使用国家内部的MAC地址,通过下一个城关的MAC地址,找到下一个城关,然后再问下一步的路怎么走,一直到走出最后一个城关。
最后一个城关知道这个网络包要去的地方。于是,对着这个国家吼一声,谁是目标IP啊?目标服务器就会回复一个MAC地址。网络包过关后,通过这个MAC地址就能找到目标服务器。目标服务器发现MAC地址对上了,取下MAC头来,发送给操作系统的网络层。发现IP也对上了,就取下IP头。IP头里会写上一层封装的是TCP协议,然后将其交给传输层,即TCP层。
在这一层里,对于收到的每个包,都会有一个回复的包说明收到了。这个回复的包绝非这次下单请求的结果,例如购物是否成功,扣了多少钱等,而仅仅是TCP层的一个说明,即收到之后的回复。当然这个回复,会沿着刚才来的方向走回去,报个平安。因为一旦出了国门,西行路上千难万险,如果在这个过程中,网络包走丢了,例如进了大沙漠,或者被强盗抢劫杀害怎么办呢?因而到了要报个平安。
如果过一段时间还是没到,发送端的TCP层会重新发送这个包,还是上面的过程,直到有一天收到平安到达的回复。这个重试绝非你的浏览器重新将下单这个动作重新请求一次。对于浏览器来讲,就发送了一次下单请求,TCP层不断自己闷头重试。除非TCP这一层出了问题,例如连接断了,才轮到浏览器的应用层重新发送下单请求。
当网络包平安到达TCP层之后,TCP头中有目标端口号,通过这个端口号,可以找到电商网站的进程正在监听这个端口号,假设一个Tomcat,将这个包发给电商网站。
电商网站的进程得到HTTP请求的内容,知道了要买东西,买多少。往往一个电商网站最初接待请求的这个Tomcat 只是个接待员,负责统筹处理这个请求,而不是所有的事情都自己做。例如,这个接待员要告诉专门管理订单的进程,登记要买某个商品,买多少,要告诉管理库存的进程,库存要减少多少,要告诉支付的进程,应该付多少钱,等等。
如何告诉相关的进程呢?往往通过RPC(remote procedure call)调用,即远程过程调用的方式来实现。远程过程调用就是当告诉管理订单进程的时候,接待员不用关心中间的网络互连问题,会由RPC框架统一处理。RPC框架有很多种,有基于HTTP协议放在HTTP的报文里面的,有直接封装在TCP报文里面的。
当接待员发现相应的部门都处理完毕,就回复一个HTTPS的包,告知下单成功。这个HTTPS的包,会像来的时候一样,经过千难万险到达你的个人电脑,最终进入浏览器,显示支付成功。
讲后问题
当网络包到达一个城关的时候,可以通过路由表得到下一个城关的IP地址,直接通过IP地址找就可以了,为什么还要通过本地的MAC地址呢?
答:1. mac地址是唯一的,为什么可以修改?想想身份证,身份证号是唯一的,不能改变的,但是可以造假。mac地址全球唯一,它是固化在网卡里的。网卡毕竟是个硬件,需要软件支持,既操作系统识别。重点来了,操作系统识别出来的mac地址是可以更改的,它只不过是一个字符串。我们常说的修改mac指的是修改电脑中记录的既注册表中的记录。
2. 有了mac地址为什么还要有ip地址。举个例子,身份证号是你的唯一标识,不会重复,一落户就有(网卡一出厂就有mac)。现在我要和你通信(写信给你),地址用你的姓名+身份证,信能送到你手上吗?明显不能!身份证号前六位能定位你出生的县。mac地址前几位也可以定位生产厂家。但是你出生后会离开这个县(哪怕在这个县,也不能具体找到你)。所以一般写个人信息就要有出生地和现居地址了。
第2讲:网络分层的真实含义
网络为什么要分层?
网络是一个非常庞大、复杂的系统,网络上的两个终端要进行通信交互需要很复杂的过程,而网络分层可以将复杂的通信过程化解为一些列可以控制和实现的功能模块,使复杂的计算机网络系统变得易于设计、实现和标准化。网络各个层之间相互独立,专门处理该层该处理的事情,体现了职责分离的思想。
程序工作过程:简单地想象“你”这个程序的工作过程
当一个网络包从一个网口经过的时候,你看到了,首先先看看要不要请进来,处理一把。有的网口配置了混杂模式,凡是经过的,全部拿进来。
拿进来以后,就要交给一段程序来处理。于是,“你”调用process_layer2(buffer)。当然,这是一个假的函数。但是你明白其中的意思,知道肯定是有这么个函数的。那这个函数是干什么的呢?从Buffer中,摘掉二层的头,看一看,应该根据头里面的内容做什么操作。
假设你发现这个包的MAC地址和你的相符,那说明就是发给你的,于是需要调用process_layer3(buffer)。这个时候,Buffer里面往往就没有二层的头了,因为已经在上一个函数的处理过程中拿掉了,或者将开始的偏移量移动了一下。在这个函数里面,摘掉三层的头,看看到底是发送给自己的,还是希望自己转发出去的。
如何判断呢?如果IP地址不是自己的,那就应该转发出去;如果IP地址是自己的,那就是发给自己的。根据IP头里面的标示,拿掉三层的头,进行下一层的处理,到底是调用process_tcp(buffer)呢,还是调用process_udp(buffer)呢?
假设这个地址是TCP的,则会调用process_tcp(buffer)。这时候,Buffer里面没有三层的头,就需要查看四层的头,看这是一个发起,还是一个应答,又或者是一个正常的数据包,然后分别由不同的逻辑进行处理。如果是发起或者应答,接下来可能要发送一个回复包;如果是一个正常的数据包,就需要交给上层了。交给谁呢?是不是有process_http(buffer)函数呢?
没有的,如果你是一个网络包处理程序,你不需要有process_http(buffer),而是应该交给应用去处理。交给哪个应用呢?在四层的头里面有端口号,不同的应用监听不同的端口号。如果发现浏览器应用在监听这个端口,那你发给浏览器就行了。至于浏览器怎么处理,和你没有关系。浏览器自然是解析HTML,显示出页面来。电脑的主人看到页面很开心,就点了鼠标。点击鼠标的动作被浏览器捕获。浏览器知道,又要发起另一个HTTP请求了,于是使用端口号,将请求发给了“你”。
你应该调用send_tcp(buffer)。不用说,Buffer里面就是HTTP请求的内容。这个函数里面加一个TCP的头,记录下源端口号。浏览器会给你目的端口号,一般为80端口。
然后调用send_layer3(buffer)。Buffer里面已经有了HTTP的头和内容,以及TCP的头。在这个函数里面加一个IP的头,记录下源IP的地址和目标IP的地址。
然后调用send_layer2(buffer)。Buffer里面已经有了HTTP的头和内容、TCP的头,以及IP的头。这个函数里面要加一下MAC的头,记录下源MAC地址,得到的就是本机器的MAC地址和目标的MAC地址。不过,这个还要看当前知道不知道,知道就直接加上;不知道的话,就要通过一定的协议处理过程,找到MAC地址。反正要填一个,不能空着。
万事俱备,只要Buffer里面的内容完整,就可以从网口发出去了,“你”作为一个程序的任务就算告一段落了。
层与层之间的关系
每个层之间虽然是相互独立的,但是只要是在网络上跑的包,都是完整的,可以有下层没有上层,绝对不可能有上层而没有下层(如对TCP协议来说,三次握手也好,重试也罢,只要想发出去包,就要有MAC层和IP层,不然是发不出去的)
第3讲:将ifconfig,熟悉又陌生的命令行
从ip addr命令入手
IP地址分类
CIDR:无类别域间路由
无类别域间路由(Classless Inter-Domain Routing、CIDR)是一个用于给用户分配IP地址以及在互联网上有效地路由IP数据包的对IP地址进行归类的方法。
这种方式打破了原来设计的几类地址的做法,将32位的IP地址一分为二,前面是网络号,后面是主机号(192.168.1.128/24)。伴随着CIDR存在的,一个是广播地址,192.168.1.255。如果发送这个地址,所有192.168.1网络里面的机器都可以收到。另一个是子网掩码,255.255.255.0。
网络号=IP地址&子网掩码
CIDR例题,已知IP为16.158.165.91/22,求出这个网络的第一个地址(16.158.164.1)、子网掩码(255.255.252.0)和广播地址(16.158.167.255)
私有IP地址
私有IP地址段:这些地址允许组织内部的IT人员自己管理、自己分配,而且可以重复。
公有IP地址有个组织统一分配,你需要去买。如果你搭建一个网站,给你学校的人使用,让你们学校的IT人员给你一个IP地址就行。但是假如你要做一个类似网易163这样的网站,就需要有公有IP地址,这样全世界的人才能访问。
组播地址
使用这一类地址,属于某个组的机器都能收到。这有点类似在公司里面大家都加入了一个邮件组。发送邮件,加入这个组的都能收到。
在IP地址的后面有个scope,对于eth0这张网卡来讲,是global,说明这张网卡是可以对外的,可以接收来自各个地方的包。对于lo来讲,是host,说明这张网卡仅仅可以供本机相互通信。
lo全称是loopback,又称环回接口,往往会被分配到127.0.0.1这个地址。这个地址用于本机通信,经过内核处理后直接返回,不会在任何网络中出现。
MAC地址
MAC地址是一个很容易让人“误解”的地址。因为MAC地址号称全局唯一,不会有两个网卡有相同的MAC地址,而且网卡自生产出来,就带着这个地址。很多人看到这里就会想,既然这样,整个互联网的通信,全部用MAC地址好了,只要知道了对方的MAC地址,就可以把信息传过去。
这样当然是不行的。 一个网络包要从一个地方传到另一个地方,除了要有确定的地址,还需要有定位功能。 而有门牌号码属性的IP地址,才是有远程定位功能的。
反例:如果只是用MAC地址,那么一个客户端发送一个请求,它不知道请求目标在哪,于是它要往广播这个请求,互联上的请求通常是亿级以上的,这么大量的请求很容易使路由或者交换机宕机。假如使用了IP,对于一个请求可以先根据一个IP定位到一定的范围,然后再根据MAC地址继续往下查找,直到找到准确的那个目标。
网络设备的状态标识
<BROADCAST,MULTICAST,UP,LOWER_UP>:这个叫作net_device flags,网络设备的状态标识
UP表示网卡处于启动的状态;BROADCAST表示这个网卡有广播地址,可以发送广播包;MULTICAST表示网卡可以发送多播包;LOWER_UP表示L1是启动的,也即网线插着呢。MTU1500:是二层MAC层的概念。MAC层有MAC的头,以太网规定
连MAC头带正文合起来,不允许超过1500个字节。正文里面有IP的头、TCP的头、HTTP的头。如果放不下,就需要分片来传输。
qdisc pfifo_fast是什么意思呢?qdisc全称是queueing discipline,中文叫排队规则。内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配置的qdisc(排队规则)把数据包加入队列。
最简单的qdisc是pfifo,它不对进入的数据包做任何的处理,数据包采用先入先出的方式通过队列。pfifo_fast稍微复杂一些,它的队列包括三个波段(band)。在每个波段里面,使用先进先出规则。三个波段(band)的优先级也不相同。band 0的优先级最高,band 2的最低。如果band 0里面有数据包,系统就不会处理band 1里面的数据包,band 1和band 2之间也是一样。
数据包是按照服务类型(Type of Service,TOS)被分配到三个波段(band)里面的。TOS是IP头里面的一个字段,代表了当前的包是高优先级的,还是低优先级的。
第4讲:DHCP与PEX
DHCP:动态主机配置协议
只需要配置一段共享的IP地址。每一台新接入的机器都通过DHCP协议,来这个共享的IP地址里申请,然后自动配置好就可以了。等人走了,或者用完了,还回去,这样其他的机器也能用。
如果是数据中心里面的服务器,IP一旦配置好,基本不会变,这就相当于买房自己装修。DHCP的方式就相当于租房。你不用装修,都是帮你配置好的。你暂时用一下,用完退租就可以了。
DHCP的工作方式
当一台机器新加入一个网络的时候,肯定一脸懵,啥情况都不知道,只知道自己的MAC地址。怎么办?先吼一句,我来啦,有人吗?这时候的沟通基本靠“吼”。这一步,我们称为DHCP Discover。
新来的机器使用IP地址0.0.0.0发送了一个广播包,目的IP地址为255.255.255.255。广播包封装了UDP,UDP封装了BOOTP。其实DHCP是BOOTP的增强版,但是如果你去抓包的话,很可能看到的名称还是BOOTP协议。在这个广播包里面,新人大声喊:我是新来的(Boot request),我的MAC地址是这个,我还没有IP,谁能给租给我个IP地址!
如果一个网络管理员在网络里面配置了DHCP Server的话,他就相当于这些IP的管理员。他立刻能知道来了一个“新人”。这个时候,我们可以体会MAC地址唯一的重要性了。当一台机器带着自己的MAC地址加入一个网络的时候,MAC是它唯一的身份,如果连这个都重复了,就没办法配置了。
只有MAC唯一,IP管理员才能知道这是一个新人,需要租给它一个IP地址,这个过程我们称为DHCP Offer。同时,DHCP Server为此客户保留为它提供的IP地址,从而不会为其他DHCP客户分配此IP地址。
DHCP Offer的格式就像这样,里面有给新人分配的地址:
DHCP Server仍然使用广播地址作为目的地址,因为,此时请求分配IP的新人还没有自己的IP。DHCP Server回复说,我分配了一个可用的IP给你,你看如何?除此之外,服务器还发送了子网掩码、网关和IP地址租用期等信息。
新来的机器很开心,它的“吼”得到了回复,并且有人愿意租给它一个IP地址了,这意味着它可以在网络上立足了。当然更令人开心的是,如果有多个DHCP Server,这台新机器会收到多个IP地址,简直受宠若惊。
它会选择其中一个DHCP Offer,一般是最先到达的那个,并且会向网络发送一个DHCP Request广播数据包,包中包含客户端的MAC地址、接受的租约中的IP地址、提供此租约的DHCP服务器地址等,并告诉所有DHCP Server它将接受哪一台服务器提供的IP地址,告诉其他DHCP服务器,谢谢你们的接纳,并请求撤销它们提供的IP地址,以便提供给下一个IP租用请求者。
此时,由于还没有得到DHCP Server的最后确认,客户端仍然使用0.0.0.0为源IP地址、255.255.255.255为目标地址进行广播。在BOOTP里面,接受某个DHCP Server的分配的IP。
当DHCP Server接收到客户机的DHCP request之后,会广播返回给客户机一个DHCP ACK消息包,表明已经接受客户机的选择,并将这一IP地址的合法租用信息和其他的配置信息都放入该广播包,发给客户机,欢迎它加入网络大家庭。
最终租约达成的时候,还是需要广播一下,让大家都知道。
IP地址的续租和收回
租期到了,管理员就要将IP收回。如果不用的话,收回就收回了。就像你租房子一样,如果还要续租的话,不能到了时间再续租,而是要提前一段时间给房东说。DHCP也是这样。客户机会在租期过去50%的时候,直接向为其提供IP地址的DHCP Server发送DHCP request消息包。客户机接收到该服务器回应的DHCP ACK消息包,会根据包中所提供的新的租期以及其他已经更新的TCP/IP参数,更新自己的配置。这样,IP租用更新就完成了。
PXE:预启动执行环境
数据中心里面的管理员可能一下子就拿到几百台空的机器,一个个安装操作系统,会累死的。所以管理员希望的不仅仅是自动分配IP地址,还要自动安装系统。装好系统之后自动分配IP地址,直接启动就能用。
第5讲:从物理层到MAC层
第一层:物理层
电脑连电脑,除了网线要交叉,还要配置两台电脑的IP地址、子网掩码和默认网关,要想两台电脑能够通信,就必须把上面三项配置成一个网络,如可以是192.168.1.2/24和192.168.1.3/24,否则是不通的。(注意:此时两台电脑之间的网络包是包含MAC层的)至此两台电脑已经构成了最小的一个局域网(LAN)
此时有第三台电脑,想要加入本局域网,除了交换机之外,可以使用Hub(集线器),这种设备有多个口,可以将宿舍里的多台电脑连接起来。但是,和交换机不同,集线器没有大脑,它完全在物理层工作。它会将自己收到的每一个字节,都复制到其他端口上去。这是第一层物理层联通的方案。
第二层;数据链路层
Hub采用的是广播的模式,如果每一台电脑发出的包,宿舍的每个电脑都能收到,那就麻烦了。这就需要解决几个问题:
1. 这个包是发给谁的?谁应该接收?
2. 大家都在发,会不会产生混乱?有没有谁先发、谁后发的规则?
3. 如果发送的时候出现了错误,怎么办?
这几个问题,都是第二层,数据链路层,也即MAC层要解决的问题。MAC的全称是Medium Access Control,即媒体访问控制。控制什么呢?其实就是控制在往媒体上发数据的时候,谁先发、谁后发的问题。防止发生混乱。这解决的是第二个问题。这个问题中的规则,学名叫多路访问。有很多算法可以解决这个问题。就像车管所管束马路上跑的车,能想的办法都想过了:
方式一:分多个车道。每个车一个车道,你走你的,我走我的。这在计算机网络里叫作信道划分;
方式二:今天单号出行,明天双号出行,轮着来。这在计算机网络里叫作轮流协议;
方式三:不管三七二十一,有事儿先出门,发现特堵,就回去。错过高峰再出。我们叫作随机接入协议。著名的以太网,用的就是这个方式。
接下来要解决第一个问题:发给谁,谁接收?这里用到一个物理地址,叫作链路层地址。但是因为第二层主要解决媒体接入控制的问题,所以它常被称为MAC地址。
解决第一个问题就牵扯到第二层的网络包格式。对于以太网,第二层的最开始,就是目标的MAC地址和源的MAC地址。
接下来是类型,大部分的类型是IP数据包,然后IP里面包含TCP、UDP,以及HTTP等,这都是里层封装的事情。
有了这个目标MAC地址,数据包在链路上广播,MAC的网卡才能发现,这个包是给它的。MAC的网卡把包收进来,然后打开IP包,发现IP地址也是自己的,再打开TCP包,发现端口是自己,也就是80,而nginx就是监听80。于是将请求提交给nginx,nginx返回一个网页。然后将网页需要发回请求的机器。然后层层封装,最后到MAC层。因为来的时候有源MAC地址,返回的时候,源MAC就变成了目标MAC,再返给请求的机器。
对于以太网,第二层的最后面是CRC,也就是循环冗余检测。通过XOR异或的算法,来计算整个包是否在发送的过程中出现了错误,主要解决第三个问题。这里还有一个没有解决的问题,当源机器知道目标机器的时候,可以将目标地址放入包里面,如果不知道呢?一个广播的网络里面接入了N台机器,我怎么知道每个MAC地址是谁呢?这就是ARP协议,也就是已知IP地址,求MAC地址的协议。
在一个局域网里面,当知道了IP地址,不知道MAC怎么办呢?靠“吼”。
广而告之,发送一个广播包,谁是这个IP谁来回答。具体询问和回答的报文就像下面这样:
为了避免每次都用ARP请求,机器本地也会进行ARP缓存。当然机器会不断地上线下线,IP也可能会变,所以ARP的MAC地址缓存过一段时间就会过期。
局域网
至此,三台电脑组成了一个小的局域网(Hub)。
这种组网的方法,对一个机器数目来说没有问题,但是一旦机器数目增多,问题就出现了。因为Hub是广播的,不管某个接口是否需要,所有的Bit都会被发送出去,然后让主机来判断是不是需要。这种方式路上的车少就没问题,车一多,产生冲突的概率就提高了。而且把不需要的包转发过去,纯属浪费。看来Hub这种不管三七二十一都转发的设备是不行了,需要点儿智能的。因为每个口都只连接一台电脑,这台电脑又不怎么换IP和MAC地址,只要记住这台电脑的MAC地址,如果目标MAC地址不是这台电脑的,这个口就不用转发了。
谁能知道目标MAC地址是否就是连接某个口的电脑的MAC地址呢?这就需要一个能把MAC头拿下来,检查一下目标MAC地址,然后根据策略转发的设备,按第二节课中讲过的,这个设备显然是个二层设备,我们称为交换机。
交换机怎么知道每个口的电脑的MAC地址呢?这需要交换机会学习。一台MAC1电脑将一个包发送给另一台MAC2电脑,当这个包到达交换机的时候,一开始交换机也不知道MAC2的电脑在哪个口,所以没办法,它只能将包转发给除了来的那个口之外的其他所有的口。但是,这个时候,交换机会干一件非常聪明的事情,就是交换机会记住,MAC1是来自一个明确的口。以后有包的目的地址是MAC1的,直接发送到这个口就可以了。
当交换机作为一个关卡一样,过了一段时间之后,就有了整个网络的一个结构了,这个时候,基本上不用广播了,全部可以准确转发。当然,每个机器的IP地址会变,所在的口也会变,因而交换机上的学习的结果,我们称为转发表,是有一个过期时间的。
三个重要点
第一,MAC层是用来解决多路访问的堵车问题的;
第二,ARP是通过吼(广播)的方式来寻找目标MAC地址的,吼完之后记住一段时间,这个叫作缓存;
第三,交换机是有MAC地址学习能力的,学完了它就知道谁在哪儿了,不用广播了。
问题:如果一个局域网里面有多个交换机,ARP广播的模式会出现什么问题呢?
答:ARP广播时,交换机会将一个端口收到的包转发到其他的端口上,比如数据包经过交换机A到达交换机B,交换机B又将包复制多份广播出去,如果整个局域网存在一个环路,使得数据包又回到最初的交换机A,这个包又会被A再次复制多份广播出去,如此循环,数据包会不停转发,而且越来越多,最终占满带宽,或者使解析协议的硬件过载,形成广播风暴。