文章目录
网络基础
下面主要讲解的是网络层(对应OSI中的第三层),其作用是"实现终端节点的通信",所以也被称为"点对点通信";
网络层的下一层: 数据链路层,其作用是实现在同一链路层中的节点之间的包传递
IP地址
概念:
IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。
作用:
IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异 。
格式:
IP地址是一个32位的二进制数字格式,由于人们不习惯使用二进制形式,通常把二进制序列分为4个"8位二进制数",采用"点分十进制"格式来表示,如:a.b.c.d(a,b,c,d都是0~255的十进制数字).
IP协议有两种不同的版本: IPv4和IPv6,在早期使用的是IPv4,其IPv4数量 = 2 ^ 32,大概43亿,但是随着网络用户的急剧增长,导致地址分配不够,所以就推出IPv6(数量=2 ^ 128),之前为了解决IPv4数量不够的问题,利用DHCP,NAT等技术手段来缓解,但是IPv4目前还在广泛使用,导致IPv6还没有普及.
组成:
IP地址由两部分组成: 网络号和主机号
- 网络号: 标识网段,不同的网段所具有的标识不同
- 主机号: 标识主机,在同一网段的主机具有相同的网络号,但是具有不同的主机号.
所以通过合理的设置网络号和主机号,就可以使每一个主机都具有独特的IP地址
分类:
早期提出划分网络号和主机号的方案中将IP地址分为5种,其格式如下图:
各IP地址表示类的特性:
分 类 | 范围 | 适用网络 | 网络数量 | 主机最大连接数 |
---|---|---|---|---|
A 类 | 0.0.0.0 ~ 127.255.255.255 | 大型网络 | 126 | 16777214( 2 24 2^{24} 224-2) |
B 类 | 128.0.0.0 ~ 191.255.255.255 | 中等规模 网络 | 约16000 个 | 65534( 2 16 2^{16} 216-2) |
C 类 | 192.0.0.0 ~ 223.255.255.255 | 小型网络 | - | 254( 2 8 2^8 28-2) |
D 类 | 224.0.0.0 ~ 239.255.255.255 | |||
E 类 | 240.0.0.0 ~ 247.255.255.255 |
注: 这里的主机最大连接数减去2是排除主机号全0和全1的特殊IP地址
特殊的IP地址:
- 主机号全部设为0,就成为了网络号,代表这个局域网
- 主机号全部设为1,就成为了广播地址,通常用于给同一个链路中相互连接的所有主机发送数据包
- 127.*(127.0.0.1~127.255.255.255)的IP地址用于本机环回(loop back)测试,通常是127.0.0.1
- 本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信
但是这种分类方式太奢侈了:
- 在一般情况下使用B类IP地址,但是在实际网络架构时,连接的主机数是远远小于65534,造成IP地址浪费,同理使用A类浪费更严重,C类IP地址数量远远不够.
为了解决资源浪费,就引入子网掩码来进行子网划分,从逻辑上把一个大网络划分为一个个小网络:
子网掩码
格式:
和IP地址长度相同,也是由网络号和主机号构成:
网络号: 在左边,用二进制1表示,其1的数量代表网络号的长度
主机号: 在右边,用二进制0表示,其长度代表主机号的长度.
作用:
1**)划分A,B,C类地址的子网地址**
对于A,B,C类的子网掩码的表示形式如下:
类别 | 子网掩码的二进制数值 | 子网掩码的十进制数值 |
---|---|---|
A | 11111111 00000000 00000000 00000000 | 255.0.0.0 |
B | 11111111 11111111 00000000 00000000 | 255.255.0.0 |
C | 11111111 11111111 11111111 00000000 | 255.255.255.0 |
例如我们使用子网掩码255.255.128.0来划分子网,对于B类IP地址 191.100.0.0(16位网络号+16位主机号)在划分子网后高17位网络号,把原来的16位主机号划分为1位子网号+15位主机号
此时,IP地址组成为:网络号+子网号+主机号,网络号和子网号统一为网络标识(划分子网后的网络号/网段)
2)在网络通信中.利用IP地址和子网掩码可以计算出划分后的网络号和主机号,一般用于判断目的IP与本IP是否为同一个网段
计算方式:
网络号: 将计算机十进制的IP地址和子网掩码转换为二进制的形式,然后进行二进制“与”(AND)计算(全1则得1,不全1则得0)
主机号: 将子网掩码二进制按位取反,再与 IP 地址位与计算.
例如:
十进制 | 二进制 | |
---|---|---|
IP地址 | 180.210.242.131 | 10110100.11010010.11110010.10000011 |
子网掩码 | 255.255.248.0 | 11111111.11111111.11111000.00000000 |
网络号 | 180.210.240.0 | 10110100.11010010.11110000.00000000 |
主机号 | 0.0.2.131 | 00000000.00000000.00000010.10000011 |
在计算后就表示180.210.242.131 这个IP地址是属于180.210.240.0 这个网络,其主机号为0.0.2.131.
按照下面步骤可以查看当前主机的子网掩码
CIDR技术:
无类别域间路由(Classless Inter-Domain Routing、CIDR)是一个用于给用户分配IP地址以及在互联网上有效地路由IP数据包的对IP地址进行归类的方法。
由于基于分类网络进行地址分配和路由IP数据包的设计已经明显的可扩充性不足,对于A,B,C类分类方式,其网络号站位分别为8,16,24并不能手动分配,于是CIDR技术利用一个标志位来区分网络号的位数,其表示形式和普通的IPv4格式相似,也是利用点分十进制来表示,只不过在最后添加/数字
表示形式为:A.B.C.D/N(N范围0~32),斜扛后面的数字就是前缀长度,也就是从左到右,被地址块里的地址所共享的位的数目
网络数据传输
在不同主机之间传输数据时,它是如何寻找到目的主机呢?下面以主机B传输数据到主机C所经过的网络设备
举个寻路的例子,假如我手机没电了(不能使用地图),我的目的地是A区,我知道大概方向,于是我在按照这个方向走了一段距离了,向路人询问到当前到目的地下一个确切方向(当地人对当地的路况十分了解,但是对于其他的位置就不会十分了解),所以我每走一段距离,就会去问路,最终到达目的地.
所以在上面的"每次问路"是经历一次"路由转发",每个人了解的’确切方向’是"路由控制表",最终的目的地"A区"是目的IP.
路由控制表: 在源主机发送数据包时使用的时网络层的地址(IP地址),但是仅有IP地址不足以成功实现发送数据包,因为在寻找过程中会经由多个路由器转发,所以在转发过程中需要"下一个路由器或者主机"的信息,这样就可以成功发送到目的主机
IP地址中的网络地址就是用来进行路由控制的,在发送IP包时,根据目的IP地址计算出网络地址,在从路由控制表中寻找相同网络地址的记录并发送给对应的下一个路由器,重复以上操作,直到寻找到目的主机,所以对于路由转发,是"一跳一跳"进行转发的.
注: 集线器和二层交换机不会对数据报封装和分用,不算在下一跳设备
网络设备及相关技术
集线器
集线器是工作在网络层的设备,其作用是把发送到集线器的数据转发到连接在一起的所有端口设备中
交换机
交换机工作在数据链路层,其内部会维护并记录一个MAC地址转换表
- MAC地址转换表中主要记录MAC地址与端口之间的映射
- 在主机连接上交换机和主机发送数据时,交换机会学习并记录该主机MAC地址与端口信息
- 在交换机收到数据包后,通过MAC地址转换表找到目的MAC地址寻找到目的端口,就可以转发数据报到目的端口即可
- 如果在MAC地址转换表中不存在目的MAC和端口信息,交换机就会设置数据报的目的MAC地址为广播地址,发送到当前交换机上的其他端口,等待目的主机响应返回后,交换机就会把该信息记录
主机
在应用层发送数据报时,主机会对数据报进行封装.
路由器
路由器有两个作用:
(1) 作为网关
路由器作为网关,划分出公网和局域网,某些路由器还可以将局域网划分为多个子网
公网端口即WAN口,为单独的网卡,具有公网IP地址和公网MAC地址
划分的多个子网,是由局域网端口即LAN口划分,每个端口都有单独的网卡,具有该网段IP地址和MAC地址。
当路由器作为网关时,其通信方式为:
- 划分局域网多个子网时,可以直接通过ARP寻址找到局域网任意主机.(这里的局域网就是路由器下的多个子网组成的局域网)
- 划分公网和局域网时,局域网内主机发送数据报到公网主机时,需要基于NAPT协议,将局域网主机的IP地址和端口号,转换为路由器公网IP和端口号(指路由器中运行的程序的端口)
- 局域网IP+端口需要转换为公网IP+端口,原因是对于接收端返回的响应数据报,目的IP和目的端口无法使用局域网IP和端口
(2) 作为路由
路由中存放的路由寻址表,可以在网络通信中帮助快速寻找到目的地址
冲突域
主机设备之间进行网络设备(集线器,交换机)通信时,会存在两个主机在同一时刻发送数据报,如果产生冲突,则该网络范围为一个冲突域.
冲突域是基于第一层物理层,又称为碰撞域
对于冲突.可以理解为两个人(主机)在同一个房间(网络范围)内说话,导致房间内其他人无法听清讲话内容,即产生冲突
如何解决冲突,可以按照时间顺序发送数据报,在同一时刻,网络设备只能接受并转发一个数据报,多余的会丢弃,然后发送完成后让发送端再发送.
- 集线器接收到数据报后,是将数据报简单的复制、转发到其他所有端口,如果有两个数据报要同时转发,就会出现冲突.整个集线器,即集线器的所有端口为一个冲突域
- 交换机接收到数据报后,是将数据报转发到对应的一个端口:两个数据报同时转发到不同端口不存在冲突,但同时转发到一个端口就出现冲突。即交换机可以分割冲突域,分割后,一个端口为一个冲突域。
广播域
广播是指某个网络中的主机同时向网络中其它所有主机发送数据(IP,MAC地址设置为广播地址),这个数据所能传播到的范围即为广播域(Broadcast Domain)
广播域基于第二层数据链路层
- 集线器接收到广播数据报,仍是简单的复制、转发到其他所有端口,所以集线器的所有端口为一个广播域
- 交换机接收到广播数据报,会转发到其他所有端口;而路由器可以隔离广播域
- 路由器某个LAN口网卡接收到广播数据报,如果发现是同网段,则丢弃,即广播数据不会扩散到路由器以外。
应用层
DNS
DNS(Domain Name System),域名系统,把域名和IP地址建立起映射关系
域名: 例如baidu.com, sougo.com就是域名,方便人们记住
由于IP地址对于人们来说难以记住,所以为了方便大家理解和传播,于是人们发明了域名,并通过域名系统来映射域名和IP地址
域名系统是一个树状结构的系统,有很多个根节点:
- 根节点即为根域名服务器,最早的IPv4的根域名服务器全球只有3台.
- 子节点主要由各级DNS服务器,或者DNS缓存组成
- DNS域名服务器,即提供域名转换为IP地址的服务器
- 浏览器、主机系统、路由器中都保存有DNS缓存
- Windows系统的DNS缓存在 C:\Windows\System32\drivers\etc\hosts 文件中,
Mac/Linux系统的DNS缓存在 /etc/hosts 文件中
- 一个域名对应一个IP地址,一个IP地址可以对应多个域名
- DNS的多级缓存按照到浏览器的距离从近到远排序主要为:浏览器缓存 -> 系统缓存 -> 路由器缓存 -> IPS服务器缓存 -> 根域名服务器缓存 -> 顶级域名服务器缓存 -> 主域名服务器缓存
面试问题:
在浏览器中输入URL后发生了什么?
Internet上的每一个网页都具有一个唯一的名称标识,通常称之为URL(Uniform Resource Locator,统一资源定位器).它是www的统一资源定位标志,简单地说URL就是web地址,俗称“网址”.
URL的一般语法格式为:协议+IP地址(域名)+端口号+路径+参数+查询+信息片段,例如
:http://www. *****.com/ ***
,其中http为传输协议,www.*****.com为域名
,/***为路径
- DNS 域名解析
在浏览器中输入URL后浏览器并不能直接通过域名来访问到目的服务器,而是通过IP地址,获取IP地址就需要域名解析:
在域名解析过程中的顺序:
- 寻找本地缓存(递归查询)
- 在浏览器中的DNS缓存中寻找 -> 检查操作系统的hosts文件中查找 -> 本地DNS解析器缓存区中寻找 -> 本地DNS服务器中寻找; 以上过程是递归查询的,查找成功递归结束,并尝试建立TCP连接
- 递归过程:
- 寻找DNS服务器记录(迭代过程)
- 在迭代过程中涉及到根域名服务器,顶级域名服务器存,主域名服务器;三者之间的关系如图:
- 本地域名服务器向向上级服务器访问查询:
总结图如下:
- 发起TCP连接
在获取到IP地址后,就会三次握手建立连接
第一次握手: 客户端发送SYN = 1(这是一个同步报文))表示尝试建立连接,seq = x(序号为x,表明传输数据的第一个数据字节的序号为x)
第二次握手: 服务器收到请求后,如果同意,则发送确认报文(ACK = 1,ack = (客户端的seq + 1)),因为需要客户端确认,所以发送信息中有SYN = 1和seq = y.
第三次握手: 客户端收到确定报文后,检查ack是否正确,若正确,客户端会再次发送ack = (服务端seq + 1),seq = x + 1,并且ACK = 1表明连接建立成功.
- 发送HTTP请求
关于HTTP协议,为了避免篇幅过长请参考http
服务器处理请求并且返回HTTP报文
浏览器解析并渲染页面
断开TCP连接
第一次挥手:在AB之间的数据传输完毕后,二者都可以释放连接,首先A向B发送FIN = 1(表示该报文为结束报文),表明A没有数据发送给B了,断开A->B的连接吧,seq = u(在自定义协议中谈到过,这是通信结束标识符),进入FIN-WAIT-1状态,等待B的确认报文.
第二次挥手:B接受到A的接受报文,发送确认序号ack = u + 1和序号seq = v给A,B进入COLSE-WAIT状态.
第三次挥手: 如果B还需要发送数据,就继续发送,因为一旦B发送一个FIN,就中断B->A的连接了,发送完毕后,就发送确认序号ack = u + 1和新的序号seq = w的ACK + FIN包,用来关闭B->A的数据流通.B进入LAST-ACK状态
第四次挥手: A接受到FIN结束报文后,如果没有要发送的数据,就向B发送ACK表明B->A的连接已中断,A进入TIME-WAIT状态,时间结束后A进入CLOSED,
NAT
之前谈到在IPv6没有诞生时,可以利用NAT技术缓解IPv4地址不够用的手段.NAT(Network Address Translation,网络地址转换)
- 对于家庭,学校,公司使用的是内网地址,而NAT技术可以将内网IP转换为合法公网IP
注: 对于公网IP是要求唯一的,而在不同的局域网中出现相同的内网IP是不会有冲突的
NAT 转化过程:
首先NAT路由器将源地址从10.0.0.10替换成全局的IP 202.244.174.37
等待NAT路由器收到外部的数据时,又会把目标IP从202.244.174.37替换回10.0.0.10
在NAT路由器内部,有一张自动生成的,用于地址转换的表
当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系
NAPT
如果在局域网内多个内网设备访问同一个公网地址时,在NAT路由器转换后的返回的IP地址是相同的,那么如何判断并正确发送到内网的主机上呢?
NAPT(Network Address Port Translation)技术,使用IP地址 + 端口号 进行转换
这里的关联表是由NAT路由器维护的.
更多NAT原理请参考NAT基本原理及穿透详解
网络层
网络层协议的作用:
- 地址管理
- 路由选择(规划路线)
IP协议
协议头格式 :
4位版本号(version) 当前IP协议的版本: 4 -> IPv4,6 -> IPv6
4位首部长度(header length): IP报头的大小, 4bit表示最大的数字是15,因此IP头部最大长度是15 * 4 = 60字节
8位服务类型(TOS: Type Of Service): 3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0).4位TOS分别表示**:最小延时,最大吞吐量,最高可靠性,最小成本.**这四者相互冲突,只能选择一个.
16位总长度(total length): IP数据报整体占多少个字节 (报头 + 载荷)
16位标识(id): 唯一的标识主机发送的报文,如果IP报文在数据链路层被分片了,那么每一个片里面的这个id都是相同的
3位标志字段:第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到).第二位置为1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文.第三位表示"更多分片",如果分片了的话,最后一个分片置为1,其他是0.类似于一个结束标记
13位分片偏移(framegament offset):是分片相对于原始IP报文开始处的偏移。其实就是在表示当前包在原报文中处在哪个位置。
8位生存时间(Time To Live,TTL): 数据报到达目的地的最大报文跳数.一般是64。每次经过一个路由,TTL -= 1,一直减到0还没到达,那么就丢弃了。这个字段主要是用来防止出现路由循环 .例如
- 初始为64,经历11次转发,就抵达百度
- 对于访问国外网站,初始TTL可能是128
16位头部校验和:使用CRC算法进行校验,来鉴别头部是否损坏
32位源地址和32位目标地址:表示发送端和接收端
选项字段(不定长,最多40字节)
数据链路层
以太网
- 以太网是一种计算机局域网技术。
- 以太网是当前应用最广泛的局域网技术;和以太网并列的还有令牌环网,无线LAN等
以太网帧格式
- 目的地址和源地址:网卡的硬件地址(即MAC地址)
- **类型:**如图,帧协议类型格式有三种值,分别对应IP,ARP,RARP(从上到下)
- CRC: 校验码
在"路由转发"中的"一跳一跳的网络数据传输 "中,
源IP与目的IP标识了行程的起点和终点;
源MAC与目的MAC标识每一跳的起点和终点
在这跳的过程中,需要判断源主机和目的主机在同一网段,来设置下一跳的设备
- 如果源主机和目的主机在同一网段时,下一跳设备就是目的主机
- 在不同网段时,发送端就会设置下一跳的设备为网关设备(Gateway)
大家都知道从一个房间走到另一个房间需要经过一扇门,同样的,一个网络向另一个网络发送信息时,也需要经过一道"关口",这就是"网关",网关可以在网络层上对不同网络之间进行通信.
通常情况下.我们认为的网关就是路由器,它将网络划分为局域网(内网: 普通用户使用)和公网,也可以把局域网划分为多个子网
如果目的mac地址不知道,就需要ARP寻址
ARP协议
地址解析协议,即ARP(Address Resolution Protocol),把IP地址mac地址建立映射关系的协议.
在数据链路层中寻找下一跳的mac地址时,使用到ARP寻址,下面是主机A向主机B建立通信时的工作流程:
(1) 首先主机A根据路由控制表上内容找到主机B的IP地址,利用该IP地址在主机A的ARP缓存中寻找主机B的mac地址.
可以利用命令
arp -a
查看本机arp缓存表动态项目随时间推移自动添加和删除
静态项目一直保留,直到重新启动计算机为止
(2)如果在主机A的ARP缓存表中没有成功匹配,那么主机A会把包含主机B的IP地址的ARP请求(包含主机A的IP地址和mac地址)广播到局域网上所有的主机,并接受返回信息,这些接受到广播的主机检查当前IP地址是否和自己的匹配,如果不匹配,则会丢弃ARP请求,如果匹配,则主机B会把主机A的IP地址和mac地址保存到本地ARP缓存表中.
(3) 主机B已经知道主机A的信息,所以将包含自己的mac地址的ARP回复信息返回给主机A
(4)主机A接受回复信息后,就会更新ARP缓存,此时主机A就可以和主机B发送IP数据报了.
RARP协议
反向地址转换协议(RARP:Reverse Address Resolution Protocol)允许局域网的物理机器从网关服务器的 ARP 表或者缓存上请求其 IP 地址.通俗一点,就是通过mac地址寻找IP地址.
MAC地址
MAC地址(Media Access Control Address ),用于标识网络设备的硬件物理地址
- 在网卡设备出厂时其MAC地址就已经确定了(这就是为什么叫做“物理”地址的原因),对于每一个网卡设备其MAC地址是唯一的。
- 在网络通信中,不同的网络设备通过网络硬件设备,将数据发送到网卡上,或从网卡读取数据。
- 在硬件层面,只能基于MAC地址来区分网络设备的网络物理地址.(所以在网络上,随时可以根据MAC地址定位)
- MAC地址长度为6字节,即48位,一般用16进制数字加上-形式来标识,可以利用命令行查看:
- 利用
getmac
直接查看物理地址- 利用
ipconfig/all
查看(其中还有IPv4,IPv4)- MAC地址是用来区分数据链路层中的相连节点
特殊的MAC地址:
广播数据报: 发送一个广播数据报,表示对同网段所有主机发送数据报。广播数据报的MAC地址为:FF:FF:FF:FF:FF:FF (即全1)
所以对于IP地址和mac地址
- IP地址描述的是路途总体的起点和终点,是给人使用的
网络逻辑地址
- MAC地址描述的是路途上的每一个区间的起点和终点,即每一跳的起点和终点,是给网络硬件设备使用的
网络物理地址
MTU
最大传输单元(Maximum Transmission Unit,MTU)用来通知对方所能接受数据服务单元的最大尺寸,说明发送方能够接受的有效载荷大小。是包或者帧的最大长度,一般单位是字节。
- 在以太网帧的数据长度规定其范围为46~1500字节。
- 链路层的所能接受的最大数据帧为MTU,即最大传输单元,不同类型网络的具有不同的MTU
- 如果MTU过大,在碰到路由器时会拒绝转发,因为它不能处理过大的包,如果太小,因为这个包是被协议包装过的(加上报头),这样就会导致数据传输的数据量过小,所以操作系统会给用户提供一个恰当的默认值
- 不同的数据链路层标准的MTU是不同的
MUT对IP协议的影响
由于MUT对传输数据帧的大小有所限制,所以如果当前IP层需要发送一个数据包,并且该数据帧比MUT大,那么IP层就会对发送的数据包进行分片 (fragmentation),把数据包分成干片,这样每一片就都小于MTU,就可以符合传输要求
分包操作:
- 每个小包的IP协议头的19位标识是相同
- 每个小包的IP协议头的3位标志字段中,第2位置为0,表示允许分片,第3位来表示结束标记(当前是否是最后一个小包,是的话置为1,否则置为0)
- 到达对端时再将这些小包,会按顺序重组,拼装到一起返回给传输层;
- 一旦这些小包中任意一个小包丢失,接收端的重组就会失败。但是IP层不会负责重新传输数据;
MTU对UDP协议的影响
对于UDP数据报,其携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)),那么就会在网络层分成多个IP数据报 。
这多个IP数据报有任意一个丢失,都会引起接收端网络层重组失败。那么这就意味着,如果UDP数据报在网络层被分片,整个数据被丢失的概率就大大增加了
MTU对于TCP协议的影响
- TCP的一个数据报也受限于MTU,TCP的单个数据报的最大消息长度,称为MSS(Max Segment Size)
- TCP在建立连接的过程中,通信双方会进行MSS协商 ,双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值 ,然后双方得知对方的MSS值之后,选择较小的作为最终MSS ; 最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度
- MSS的值就是在TCP首部的40字节变长选项中(kind=2 )
MSS和MTU的关系
ARP协议
ARP不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网络层之间的协议
ARP协议的作用
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址物理地址的一个TCP/IP协议).主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源
ARP协议建立了主机 IP地址 和 MAC地址 的映射关系
在网络通信时,源主机是最大目标主机的IP地址和端口号,但是不知道其硬件地址,由于数据包是被网卡接受再区处理上层协议,如果接受到的数据报与自己的硬件地址不同,则会被丢弃,所以在通信前必须要获得目的主机的硬件地址
ARP协议的工作流程
- 主机A希望与主机B通信,首先向主机B发送ARP请求包,询问“IP地址是192.168.0.1的主机的硬件地址是多少”,并将这个请求
广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播 ) - 主机B接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给主机A,将自己的硬件地址填写在应答包中
- 每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址