浅谈网络到底是怎么回事-上

坚决抵制日本无视全球人民健康,文明长远发展,极其自私自利,向海洋倾倒核污水的行为

本专栏更新速度慢,简单讲讲那些特别散乱杂的知识,欢迎各位朋友订阅专栏

感谢一路相伴的朋友们

博主这段时间可能不会关注大家的留言和私信了,因为要备考力,希望大家理解

浅淡计算机系列第3篇


目录

前言

DNS

DNS数据包的发出,查询与发回

发出

分片,偏移

递归查询

发回

DNS污染

DNSSEC

HTTPDNS

中间人攻击

TCP/IP

分层

原始时期

集线器

交换机

IP地址

路由器

子网

路由表

结语

参考文章,书籍


前言

DNS是什么?DNS的数据包是怎么发出怎么发回的?分片偏移是什么?递归查询是什么?如何避免DNS污染?那么强的DNSSEC是什么?HTTPDNS怎么回事,中间人攻击是怎么做到的?TCP/IP的层数?集线器是什么东西?我们熟悉的交换机?MAC地址和MAC地址表?IP地址?路由?怎么理解?子网是什么东西?路由表是啥?


DNS

DNS数据包的发出,查询与发回

发出

在DNS数据包发出之前,会先使用UDP协议头,UDP协议头由以下部分组成:

  1. 源端口号(Source Port):用于标识发送方的端口。
  2. 目的端口号(Destination Port):用于标识接收方的端口
  3. 长度(Length):表示UDP数据包的长度,包括UDP头和数据部分
  4. 校验和(Checksum):用于错误检测

总共8个字节

之后会加入IP协议头,由以下组成

  1. 版本:表示IP协议的版本。通信双方使用的IP协议版本必须一致
  2. 首部长度:可表示的最大十进制数值是15。这个字段所表示数的单位是32位字长(1个32位字长是4字节)。因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充
  3. 区分服务*:用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。只有在使用区分服务时,这个字段才起作用
  4. 总长度:表示IP报文的总长度,以字节为单位。总长度字段为16位,因此IP报文的最大长度为2^16-1=65535字节
  5. 标识:用来标识IP数据报,以标识数据报的唯一性
  6. 标志:用于分片控制
  7. 片偏移:表示相对于原始IP数据报的第一个分片的位置
  8. 生存时间:表示数据报在网络中的生存时间
  9. 协议:表示IP数据报携带的数据的协议类型
  10. 首部校验和:用于错误检测
  11. 源地址:表示发送方的IP地址
  12. 目的地址:表示接收方的IP地址

P.S.:

IP协议头还有可选部分,包括选项字段和填充字段,用于提供可选项和填充

*:1998年IETF把这个字段改名为区分服务(Differentiated Services)

是不是有点不说人话,我们来举个例子

假设你是一个快递员,你要把一份包裹送到收件人的地址

在送包裹之前,你需要填写一份快递单,上面包含了以下信息:

  1. 发送方地址:你的公司地址
  2. 接收方地址:收件人的地址
  3. 包裹内容:要送的物品信息
  4. 包裹重量:包裹的重量
  5. 快递单号:用于跟踪和识别包裹的唯一号码
  6. 快递公司标志:表明使用的是哪家快递公司

这个例子和IP协议头中的各个组成部分有类似之处。以下是对应的解释:

  1. 版本:相当于快递单的版本号,比如新旧版本的区别
  2. 首部长度:相当于快递单的长度,表示填写的内容有多少
  3. 区分服务:相当于快递公司提供的不同服务等级,比如普通、加急等
  4. 总长度:相当于包裹的重量,表示整个包裹的重量是多少
  5. 标识:相当于快递单号,用于识别和跟踪包裹
  6. 标志:相当于包裹上贴的标签,表示是否需要特殊处理(比如易碎品)
  7. 片偏移:这个有点难解释,因为包裹不用分片,下面我来仔细讲讲
  8. 生存时间:这个例子也没有直接对应的部分,因为包裹不需要考虑生存时间
  9. 协议:相当于快递公司标志,表示使用的是哪家快递公司的服务
  10. 首部校验和:相当于快递单的校验和,用于错误检测
  11. 源地址:相当于发送方地址,表示快递员所在的公司地址
  12. 目的地址:相当于接收方地址,表示收件人的地址

分片,偏移

如何理解分片和偏移

分片和片偏移是IP协议中用于处理大数据包的机制

分片(Fragmentation)是指当数据报的大小超过了网络的最大传输单元MTU(Maximum Transfer Unit)时,将数据报分成多个片段进行传输的过程

在网络通信中,每个数据报都有一个头部,用于指示数据报的长度和目标地址等信息。但是,每个网络层的MTU大小是不同的,根据所使用的网络类型(如以太网、PPP等)而有所不同

当数据报的大小超过了目的网络的MTU时,就需要进行分片,分片时,先将数据报分成多个小片段,每个片段的长度都小于MTU,然后每个片段独立传输,到达目的地址后再重新组合成原始的数据报

片偏移(Fragment Offset)是指在分片后,每个片段在网络中的位置。每个片段都有一个片偏移值,用于指示该片段在原始数据报中的位置。片偏移值的范围是0到(总长度/MTU),其中总长度是指原始数据报的总长度。例如,如果原始数据报的长度为1200字节,MTU为1500字节,那么将进行两个片段的分片,第一个片段的片偏移值为0,第二个片段的片偏移值为800(1200/1500*1500)

通过分片和片偏移的机制,IP协议能够处理不同大小的数据报,确保数据的正确传输。但是需要注意的是,分片和片偏移会增加了数据传输的开销和复杂性,因此在网络配置中需要合理设置MTU大小,以减少不必要的分片和片偏移操作

来举个例子

假设你有一份很长的文件,比如一个电影,需要通过网络传输到另一个地方

但是网络传输中有一个限制,就是每个数据包的长度有限制,比如最大只能传输1500字节

如果你的文件超过了1500字节,就需要将文件分成多个数据包进行传输,这便是分片

当你将文件分成多个数据包进行传输时,每个数据包都有一个偏移值,偏移值可以理解为每个数据包在原始文件中从哪个位置开始传输

比如,如果你的文件有2000字节,那么偏移值为0的数据包表示从文件的第1字节开始传输,偏移值为1的数据包表示从文件的第1501字节开始传输,以此类推,在接收方,需要将这些数据包按照偏移值重新组合成原始的文件

通过偏移值,接收方可以确定每个数据包在原始文件中的位置,从而正确地重组文件

这个例子和IP协议中的偏移类似,都是将一个较大的数据分成多个较小的部分进行传输,并使用偏移值来确定每个部分在原始数据中的位置,从而正确地重组数据

添加IP头之后就可以发出去了

递归查询

到DNS服务器查询到时候,加入DNS服务器并不知道这个域名的IP地址,那么它就会向根域名服务器,根服务器一定知道,但不见得会回传具体地址,而是传回顶级域名根服务器的地址,顶级域名根服务器,顶级域名根服务器可能还会回传一个域名服务器的地址

比如我们现在要请求http://www.example.com,DNS服务器不知道,就会向根服务器问,而通过域名我们知道,这个域名是归.com域名根服务器管的,根服务器就会回传.com顶级域名根服务器的IP地址,.com顶级域名根服务器会回传example.com的IP地址,而example.com会回传www.example.com的IP地址,至此DNS查询就完成了,但一般用不了这么远,大部分请求在第一步就被完成了

发回

查询之后就会被发回,DNS响应包大概长这个样子

相应包头部

  1. 标识:与请求包中的标识字段相对应,用于识别DNS请求和响应
  2. 端口号:源端口号,即发出请求的端口号
  3. 生存时间(TTL):表示DNS记录在DNS服务器中的缓存时间
  4. 标志:用于指示响应的类型和状态
  5. 原始DNS问题部分:与请求包中的问题部分相对应,包含了请求的详细信息

问题部分

  1. 查询类型:表示请求的类型,如A记录、CNAME记录等
  2. 类:地址类型,通常为互联网地址类型(IN)

资源记录部分

  1. 回答问题区域字段:包含问题的回答
  2. 权威名称服务器区域字段:指向负责管理相关域名的权威DNS服务器
  3. 附加信息区域字段:包含一些附加信息,如域名等

资源记录格式

  1. 域名:DNS请求的域名。
  2. 类型:资源记录的类型,与问题部分中的查询类型值相对应。
  3. 类:地址类型,与问题部分中的查询类值相对应。
  4. 生存时间:资源记录在DNS服务器和客户端缓存中的生存时间。
  5. 资源数据长度:资源数据的长度。
  6. 资源数据:按查询段要求返回的相关资源记录的数据。

因此,DNS响应包的结构包括了响应包头部、问题部分、资源记录部分和资源记录格式等几个部分,每个部分中包含了特定的字段信息

或者说,响应包跟像这样

假设你正在购物或者订餐,你可能会使用电话或者手机APP来联系商家

当你拨打商家电话或者打开APP时,你的设备会向电话簿或者应用数据库发送一个查询请求,询问商家的电话号码或者餐厅地址

电话簿或者应用数据库在收到请求后会返回一个响应包,这个响应包包含了所查询的电话号码或者餐厅地址

举个具体的例子,假设你打开了一个外卖APP,并搜索了一家附近的餐厅

APP会将搜索请求发送到应用数据库中,以查找该餐厅的电话号码

在返回的响应包中,问题部分会显示你所请求的餐厅名称或电话号码等信息,资源记录部分则会包含对应的电话号码等信息

因此,当你拨打商家电话或者打开应用来联系商家时,响应包中的问题部分会显示你所请求的商家信息,资源记录部分则会包含对应的电话号码或地址等信息

DNS污染

假设你是一个外地游客,来到了一个陌生的城市。为了找到一家好的餐馆,你打开地图应用,输入餐馆的名字,然后地图会告诉你餐馆的地址和电话

但是,如果有一些不良商家,他们可能会在地图上标注错误的信息,比如将他们的餐馆地址标注到其他餐馆的地址上,或者将其他餐馆的电话号码标注到他们的餐馆上

这样,当你打开地图搜索餐馆时,你可能会得到错误的信息,导致你无法找到正宗的餐馆或者被不良商家欺骗

这个例子就类似于DNS污染

DNS服务器就像是地图应用,它们帮助我们将域名(比如餐馆的名字)转换成对应的IP地址(比如餐馆的电话和地址)

但是,如果有一些恶意攻击者篡改了DNS服务器的信息,将错误的IP地址映射到被攻击的域名上,那么我们就会得到错误的信息,导致我们无法正常访问网站或者被引导到错误的网站

因此,DNS污染是一种非常危险的网络攻击方式,它可以让攻击者破坏我们的网络体验和安全

为了防止DNS污染,我们可以采取一些安全措施,比如使用DNSSEC技术来验证域名解析的完整性,或者使用防火墙等网络安全设备来保护域名服务器等

DNSSEC

DNSSEC通过添加几个新的资源记录,如DNSKEY、DS、DNSMP等,来实现对DNS信息的认证。这些新的资源记录可以提供数字签名,以防止未经授权的第三方修改DNS条目。

DNSSEC的目的是防止DNS劫持和中间人攻击等网络威胁,确保域名解析的准确性,保护用户的网络交易和数据安全。

DNSSEC已于1997年由IETF(Internet Engineering Task Force)提出,并已在全球范围内得到广泛应用。它是维护互联网安全的重要工具之一

举个例子来解释:

假设,你正在研究一个地区的野生动物种群,为了更好地跟踪和监测野生动物的活动,你决定设置一些摄像头来拍摄野生动物的照片

但是,你担心有人会盗走摄像头或者篡改拍摄数据,从而破坏你的研究,于是,你决定采用DNSSEC技术来确保拍摄数据的完整性

具体来说,你将为每一个摄像头设置一个DNSSEC记录,这些记录可以验证摄像头的IP地址和域名的关系

这样,当其他人想要访问摄像头的IP地址并查看拍摄数据时,DNSSEC可以确保数据的完整性和真实性

如果有人试图篡改拍摄数据或者盗走摄像头,DNSSEC技术可以检测到这些非法行为,并发出警报或者通知你,从而保护你的研究数据和成果

DNSSEC可以确保域名和IP地址的映射关系的完整性和真实性,从而保护用户的网络体验和安全

HTTPDNS

用户输入网址回车,游览器解析网址,获取域名,解析域名。

先是向浏览器中找是否有此域名的缓存,如果有则解析结束,没有则继续查找操作系统缓存中是否有这个域名对应的dns结果

如果以上两则都未能找到,则游览器会向你部署HTTPDNS服务器发送HTTP请求(直接访问HTTPDNS的IP),HTTP服务器返回域名解析结果,然后浏览器缓存起来

这极大解决了DNS污染等问题

中间人攻击

中间人攻击(Man-in-the-Middle Attack,MITM)是一种网络攻击方式,攻击者通过各种技术手段将受入侵者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间,这台计算机就称为"中间人"

中间人攻击是一种间接的入侵攻击,攻击者不会直接攻击目标系统,而是通过拦截网络通信,假冒其中一个参与者,将通信内容重定向到自己的计算机上,从而窃取、篡改或者干扰通信内容

中间人攻击的技术手段包括:

  1. ARP欺骗:攻击者通过伪造ARP报文,将受害者的网关地址指向自己的计算机,从而截获所有受害者与网关之间的通信
  2. DNS欺骗:攻击者通过篡改受害者的DNS配置,将域名解析为攻击者自己的计算机,从而截获所有受害者与目标网站之间的通信
  3. SSL攻击:攻击者通过破解或假冒合法的SSL证书,使受害者误以为与目标网站建立了安全的加密通信,实际上加密通信被攻击者窃取、篡改或解密

中间人攻击是一种非常危险的攻击方式,它可以对各种网络通信进行窃取、篡改或干扰,包括敏感数据、账号密码、金融交易等

为了防止中间人攻击,可以采用各种安全措施,如加密通信、使用安全的证书和协议、定期更新和升级软件等

举个例子

假设你和你朋友在打电话聊天,你的电话号码是123-456-7890,你朋友的电话号码是987-654-3210。你们通过电话线进行通话

这时候,有一个坏人想要偷听你们的通话。他可以采取中间人攻击的方式来实现他的目的

具体来说,他可以这样做:

  1. 他先假扮成一个电信工人,声称需要对电话线路进行维修。他骗过你的信任,让你把电话线路断开
  2. 然后,他暗中接上他自己的设备,将你的电话线路和他自己的设备相连。这样,当你打电话给你朋友时,你的通话实际上并不是直接通过电话线到你朋友那里,而是先到了这个坏人的设备
  3. 这个坏人可以听到你们的通话内容,并且可以篡改或者录制这些内容。他可以模仿你的声音,让你朋友认为他就是你,然后骗取你朋友的一些个人信息,比如银行账号、密码等
  4. 当你发现通话内容不对劲时,你可能会挂断电话并重新拨打。但是,这个坏人可以再次进行中间人攻击,让你和你的朋友都察觉不到

TCP/IP

分层

在了解TCP/IP之前,我们先来了解一下TCP/IP的分层:

| 应用层 | HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH...... |
| 表示层 | XDR、ASN.1、SMB、AFP、NCP...... |
| 会话层 | ASAP、SSH、RPC、NetBIOS、ASP、Winsock...... |
| 传输层 | TCP、UDP、TLS、RTP、SCTP、SPX、ATP...... |
| 网络层 | IP、ICMP、IGMP、IPX、BGP、OSPF、RIP...... |
| 数据链路层 | 以太网、令牌环、HDLC、帧中继、ISDN、ATM...... |

物理层 铜缆、网线、光缆、无线电......
[OSI模型各层的通信协议]

TCP/IP协议是Internet互联网最基本的协议,其在一定程度上参考了七层ISO模型

OSI模型共有七层,从下到上分别是物理层、数据链路层、网络层、运输层、会话层、表示层和应用层。但是这是有些复杂的,所以在TCP/IP协议中,七层被简化为了四个层次

TCP/IP模型中的各种协议,依其功能不同,被分别归属到这四层之中,常被视为是简化过后的七层OSI模型

链路层包含数据链路层与物理层

网络层传输层不变

会话层表示层引用层整合为应用层

原始时期

三台电脑互相可以通过网线进行连接,互相发送的数据可以通过网线直接到达目标,而这种情况在越来越多的电脑加入的时候显得力不从心

集线器

于是发明了一个中间设备,把网线都插到这个设备上,由这个设备做转发,就可以彼此之间通信了,本质上和原来一样,只不过网口的数量和网线的数量减少了,不再那么混乱

它仅仅是无脑将电信号转发到所有出口,不做任何处理,因此被定性在了物理层

假设现在与ABCDEF,6个机器,

由于转发到了所有出口。A发的消息,BCDEF这5台机器怎么知道数据包是不是发给自己的呢

首先,你要给所有的连接到交换机的设备,都起个名字。原来你们叫 ABCD,但现在需要一个更专业的,全局唯一的名字作为标识,这个名字称为 MAC 地址

A的 MAC 地址是 aa-aa-aa-aa-aa-aa,B的 MAC 地址是 bb-bb-bb-bb-bb-bb,以此类推,不重复就好。

这样,A 在发送数据包给 B 时,只要在头部拼接上发件人:aa-aa-aa-aa-aa-aa,收件人:bb-bb-bb-bb-bb-bb就可以了

B 在收到数据包后,根据头部的目标 MAC 地址信息,判断这个数据包的确是发给自己的,于是便收下

其他的机器收到数据包后,根据头部的目标 MAC 地址信息,判断这个数据包并不是发给自己的,于是就可以丢弃了

虽然集线器使整个布局干净不少,但原来A只要发给 B 的消息,现在却要发给连接到集线器中的所有电脑,这样非常非常非常不安全

交换机

由于集线器过于不安全,所以交换机诞生了,它内部会有一张表,写着所有接到交换机上设备的MAC地址和端口,我们假设一下,接到交换机上有6台设备,它们对应如下

MAC地址 端口
aa-aa-aa-aa-aa-aa 1
bb-bb-bb-bb-bb-bb 2
cc-cc-cc-cc-cc-cc 3
dd-dd-dd-dd-dd-dd 4
ee-ee-ee-ee-ee-ee 5
ff-ff-ff-ff-ff-ff 6
[MAC 地址表]

此时,仍然也可以拼接上发件人:aa-aa-aa-aa-aa-aa,收件人:bb-bb-bb-bb-bb-bb就可以了,但是第一次交换机内部什么都没有,怎么确定MAC地址归属呢,其实加入A发了第一次消息,交换机监测到信息从1端口来了后,就可以把A的MAC地址和1端口记录下了,而第一次发消息,交换机并不知道哪个是B,所以就全部发一遍,直到B响应了,就可以记录B和它对应的端口,而和上面集线器一样,发给B的数据包其他设备会丢弃,这里,我们就可以把它归类为数据链路层

这个网络结构被称为以太网

而假如设备足够多也没事,只需要多加一台交换机就可以了,在这种情况下,上百台设备在交换机性能足够多情况下同时在线也没问题,可是随着技术的发展,上百台设备同时在线也满足不了需求了,怎么办?

IP地址

MAC地址也叫物理地址、硬件地址,长度为 48 位,一般这样来表示

00-16-EA-AE-3C-40

它是由网络设备制造商生产时烧录在网卡的EPROM

其中前 24 位(00-16-EA)代表网络硬件制造商的编号,后 24 位(AE-3C-40)是该厂家自己分配的,一般表示系列号。

只要不更改自己的 MAC 地址,MAC 地址在世界是唯一的。形象地说,MAC地址就如同身份证上的身份证号码,具有唯一性

那如果希望向上面那样表示将目标 MAC 地址为 FFFF-FFFF-?开头的,统一从路由器出去发给某一群设备(后面会提到这其实是子网的概念),那就需要要求某一子网下统统买一个厂商制造的设备,要么就需要要求厂商在生产网络设备烧录 MAC 地址时,提前按照你规划好的子网结构来定 MAC 地址,并且日后这个网络的结构都不能轻易改变

这显然是不现实的!

于是发明了一个新的地址,给每一台机器一个 32 位的编号,如:

11000000101010000000000000000001

有些不清晰,于是可以把它分成四个部分,中间用点相连

11000000.10101000.00000000.00000001

还是够不清晰,于是把它转换成 10 进制

192.168.0.1

最后给了这个地址一个响亮的名字,IP 地址。现在每一台电脑,同时有自己的 MAC 地址,又有自己的 IP 地址,只不过 IP 地址是软件层面上的,可以随时修改,MAC 地址一般是无法修改的

这样一个可以随时修改的 IP 地址,就可以根据我们规划的网络拓扑结构,来调整了

路由器

交换机已经无法记录如此庞大的映射关系了。

那我们可不可以让那根红色的网线,接入一个新的设备,这个设备就跟电脑一样有自己独立的 MAC 地址,而且同时还能帮我们把数据包做一次转发呢

这个设备就是路由器,它的功能就是,作为一台独立的拥有 MAC 地址的设备,并且可以帮我们把数据包做一次转发,它被定义在了网络层

现在两个设备之间传输,除了加上数据链路层的头部之外,还要再增加一个网络层的头部

假如 A 给 B 发送数据,由于它们直接连着交换机,所以 A 直接发出如下数据包即可,其实网络层没有体现出作用

数据链路层头部:

源MAC:AAA

目标MAC:BBB

网络层头部:

源IP:192.168.0.1

目标IP:192.168.0.2

然后就是数据包了

但假如 A 给 C 发送数据,A 就需要先转交给路由器,然后再由路由器转交给 C。由于最底层的传输仍然需要依赖以太网,所以数据包是分成两段的

A~路由器需要

数据链路层头部:

源MAC:AAA

目标MAC:ABAB

网络层头部:

源IP:192.168.0.1

目标IP:192.168.1.1

路由器到 C 这段的包如下

数据链路层头部:

源MAC:CDCD

目标MAC:CCCC

网络层头部:

源IP:192.168.0.1

目标IP:192.168.1.1

子网

如果源 IP 与目的 IP 处于一个子网,直接将包通过交换机发出去

如果源 IP 与目的 IP 不处于一个子网,就交给路由器去处理

好,那现在只需要解决,什么叫处于一个子网就好了

192.168.0.1 和 192.168.0.2 处于同一个子网

192.168.0.1 和 192.168.1.1 处于不同子网

这两个是我们人为规定的,即我们想表示,对于 192.168.0.1 来说:

192.168.0.xxx 开头的,就算是在一个子网,否则就是在不同的子网。

那对于计算机来说,怎么表达这个意思呢?于是人们发明了子网掩码的概念

假如某台机器的子网掩码定为 255.255.255.0

这表示,将源 IP 与目的 IP 分别同这个子网掩码进行与运算,相等则是在一个子网,不相等就是在不同子网,就这么简单。

比如

A电脑:192.168.0.1 & 255.255.255.0 = 192.168.0.0

B电脑:192.168.0.2 & 255.255.255.0 = 192.168.0.0

C电脑:192.168.1.1 & 255.255.255.0 = 192.168.1.0

D电脑:192.168.1.2 & 255.255.255.0 = 192.168.1.0

那么 A 与 B 在同一个子网,C 与 D 在同一个子网,但是 A 与 C 就不在同一个子网,与 D 也不在同一个子网,以此类推

所以如果 A 给 C 发消息,A 和 C 的 IP 地址分别 & A 机器配置的子网掩码,发现不相等,则 A 认为 C 和自己不在同一个子网,于是把包发给路由器,就不管了,之后怎么转发,A 不关心

上一步 A 通过是否与 C 在同一个子网内,判断出自己应该把包发给路由器,那路由器的 IP 是多少呢?

其实说发给路由器不准确,应该说 A 会把包发给默认网关

对 A 来说,A 只能直接把包发给同处于一个子网下的某个 IP 上,所以发给路由器还是发给某个电脑,对 A 来说也不关心,只要这个设备有个 IP 地址就行

所以默认网关,就是 A 在自己电脑里配置的一个 IP 地址,以便在发给不同子网的机器时,发给这个 IP 地址

路由表

现在 A 要给 C 发数据包,已经可以成功发到路由器这里了,最后一个问题就是,路由器怎么知道,收到的这个数据包,该从自己的哪个端口出去,才能直接(或间接)地最终到达目的地 C 呢

路由器收到的数据包有目的 IP 也就是 C 的 IP 地址,需要转化成从自己的哪个端口出去,很容易想到,应该有个表,就像 MAC 地址表一样

这个表就叫路由表

至于这个路由表是怎么出来的,有很多路由算法,本文不展开

假如你(A)此时不知道你同伴 B 的 MAC 地址(现实中就是不知道的,刚刚我们只是假设已知),你只知道它的 IP 地址,你该怎么把数据包准确传给 B 呢?

答案很简单,在网络层,我需要把 IP 地址对应的 MAC 地址找到,也就是通过某种方式,找到 192.168.0.2 对应的 MAC 地址 BBBB

这种方式就是 arp 协议,同时电脑 A 和 B 里面也会有一张 arp 缓存表,表中记录着 IP 与 MAC 地址的对应关系

一开始的时候这个表是空的,电脑 A 为了知道电脑 B(192.168.0.2)的 MAC 地址,将会广播一条 arp 请求,B 收到请求后,带上自己的 MAC 地址给 A 一个响应。此时 A 便更新了自己的 arp 表

这样通过大家不断广播 arp 请求,最终所有电脑里面都将 arp 缓存表更新完整


结语

作者会经常帮助有问题的小伙伴解决问题如果你有问题,可以直接到评论区指出,作者会在看到后到24小时内给予答复

如果本文有任何问题欢迎在评论去指出,如果喜欢这篇文章,希望能点赞评论关注

10246字,5个父项,13个子项,2个孙子项


参考文章,书籍

参考文章

一文彻底搞懂 TCP/IP 协议 - 知乎

HTTPDNS详解 - 知乎

一文了解"中间人攻击(MITM)"及如何防范 - 知乎

访问一个不存在的域名时,浏览器的工作流程是怎样的_不存在的分站域名_至学者的博客-CSDN博客

DNSSEC 简介,签名的工作原理 | ZE3kr

DNSSEC是什么,工作原理是怎样的? - 知乎

八个字节的 UDP 如何传输数据!细节,都是细节! - 知乎

一个DNS数据包的惊险之旅

完了!TCP出了大事!

太棒了!TCP/IP协议 (图解+秒懂+史上最全)_图解tcpip_退休的汤姆的博客-CSDN博客

子网掩码是什么?有什么作用? - 知乎

参考书籍

图解HTTP (豆瓣)

相关推荐
_微风轻起几秒前
linux下网络编程socket&select&epoll的底层实现原理
linux·网络
网安墨雨1 小时前
iOS应用网络安全之HTTPS
web安全·ios·https
vortex51 小时前
Burp与其他安全工具联动及代理设置教程
网络·安全
xserver22 小时前
ensp 基于端口安全的财务部网络组建
网络·安全
孤独的履行者3 小时前
入门靶机:DC-1的渗透测试
数据库·python·网络安全
从后端到QT4 小时前
boost asio 异步服务器
服务器·网络·tcp/ip
Blankspace学4 小时前
Wireshark软件下载安装及基础
网络·学习·测试工具·网络安全·wireshark
墨水\\4 小时前
Ansible部署及基础模块
服务器·网络·ansible
手心里的白日梦4 小时前
网络计算器的实现:TCP、守护进程、Json、序列化与反序列化
网络·tcp/ip·json
不吃鱼的羊4 小时前
Excel生成DBC脚本源文件
服务器·网络·excel