参考连接:https://www.nowcoder.com/study/live/504/2/16.
【Linux】网络编程一:网络结构模式、MAC/IP/端口、网络模型、协议及网络通信过程简单介绍
【Linux】网络编程二:socket简介、字节序、socket地址及地址转换API
【Linux】网络编程三:TCP通信和UDP通信介绍及代码编写
文章目录
一,网络结构模式
1.1 C/S结构
C/S结构,即服务器-客户端结构,Clien-Serve
。
C/S结构通常采用两层结构。服务器负责数据的管理,客户端负责完成与用户的交互任务。
客户端是因特网上访问别人信息的机器,服务器是提供信息供人访问的计算机。
- 客户端通过局域网与服务器相连,接受用户的请求,并通过网络向服务器提出请求,对数据库进行操作;
- 服务器接受客户端的请求,并将数据提交给客户端;
- 客户端将数据进行计算并将结果呈现给客户。
服务器还提供完善的安全保护及对数据完整性的处理等操作,并允许多个客户机同时访问服务器,这就对服务器的硬件处理数据能力提出很高的要求。
C/S结构中,应用程序分为两部分:服务器和客户端。
- 服务器是多个用户共享的信息与功能,执行后台服务,如控制共享数据库的操作等;
- 客户端是部分用户所专有,负责执行前台功能,在出错提示、在线帮助等方面有强大的功能,并且可以在子程序间自由切换。
C/S结构的优点
- 能充分发挥客户端PC的处理能力,有很多工作可以在客户端处理后再提交给服务器,所以C/S结构客户端响应速度快;
- 操作界面漂亮、形式多样,可以充分满足客户自身的个性化要求;
- C/S结构的管理信息系统具有较强的事务处理能力,能够实现负责的业务流程;
- 安全性较高,C/S一般面向相对固定的用户群,程序更加注重流程,它可以对权限进行多层次校验,提供更安全的存取模式,对信息安全的控制能力很强,一般高度机密的信息系统采用C/S结构适合。
C/S结构的缺点
- 客户端需要安装专用的客户端软件,首先涉及到安装的工作量,其次任何一台电脑出问题,如病毒、硬件损坏,都需要进行安装或维护。系统软件升级时,每一台客户端都需要重新安装,其维护和升级成本非常高;
- 对客户端的操作系统一般也有限制,不能跨平台;
1.2 B/S结构
B/S,浏览器/服务器结构,Browser-Server
结构。
B/S是Web兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种结构统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用,客户端只要安装一个浏览器,服务器安装数据库,浏览器通过web server与数据库进行交互。
B/S结构的优点
总体拥有成本低,维护方便,分布性强,开发简单,可以不用安装任何专门的软件就能实现在任何地方进行操作,客户端零维护,系统的扩展很容易,只需要有一台可以上网的电脑即可。
B/S结构的缺点
- 通信开销大,系统和数据的安全较难保证;
- 个性特点明显降低,无法实现具有个性化的功能要求;、
- 协议一般是固定的:
http/https
;
- 协议一般是固定的:
- 客户端服务器端的交互是请求-响应模式,通常动态刷新页面,响应速度明显降低;
二,MAC地址、IP地址、端口
2.1 MAC地址
网卡是一块被用来设计允许计算机在计算机网络上进行通讯的计算机硬件,又称为网络适配器或网络接口卡NIC。
网卡拥有MAC地址,是OSI模型的第2层,它使得用户可以通过电缆或无线相互连接。每一个网卡都有一个被称为MAC地址的独一无二的48位串行号。
网卡的主要功能:
- 数据的封装与解封装;
- 链路管理;
- 数据编码与译码;
MAC地址(Media Access Control Address
),称为媒体存取控制位址,也称为局域网地址、以太网地址、物理地址或硬件地址。MAC地址是一个用来确认网络设备位置的位址,由网络设备制造商生产时烧录在网卡中。
在OSI模型中,第三层网络层负责IP地址,第二层数据链路层负责MAC地址。
MAC地址用于在网络中唯一标识一个网卡,一台设备若有一个或多个网卡,则每个网卡都需要并且会有一个唯一的MAC地址。
MAC地址长度是48
位,通常表示为12个十六进制数,其中前三个字节代表网络硬件制造商的编号,由IEEE分配,后三个字节代表该制造商所制造的某个网络产品的系列号。只要不更改自己的MAC地址,MAC地址在世界上是唯一的。
2.2 IP地址
2.2.1 IP地址简介
IP协议是为计算机网络相互连接进行通信而设计的协议
。在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行 通信时应当遵守的规则。
任何厂家生产的计算机系统,只要它遵守IP协议就可以与因特网互连互通。各个厂家生产的网络系统和设备,如以太网、分组交换网等,它们之间不能互通,主要原因是因为它们所传送数据的基本单元的格式不同。
IP协议实际上是一套由软件程序组成的协议软件,它把各种不同帧统一转换称
IP数据报
格式,这种转换是因特网的一个最重要的特点,它使得所有各种计算机都能在因特网上实现互通,即具有开放性的特点。
IP协议也可以称为因特网协议。
IP地址,Internet Protocol Address
,是由IP协议提供的一种统一的地址格式。它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
IP地址是一个32
位的二进制数,可以被分割为4个8位的二进制数。
IP地址通常用点分十进制
表示,如a.b.c.d
,其中a
、b
、c
、d
都是0~255之间的十进制整数。
2.2.2 IP地址编址方式
每个IP地址包括两个标识码ID,即网络ID
和主机ID
。
同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机有一个主机ID与其对应。Internet委员会定义了5种IP地址类型以适合不同容量的网络,即A类-E类。
A类-C类由InternetNIC在全球范围内统一分配,D、E是特殊地址。
A/B/C类IP地址
类别 | 最大网络数 | IP地址范围 | 单个网段最大主机数 | 私有IP地址范围 |
---|---|---|---|---|
A | 126 = 2 7 − 2 126=2^{7}-2 126=27−2 | 1.0.0.1 - 126.255.255.254 | 16777214 | 10.0.0.0 - 10.255.255.255 |
B | 16384 = 2 14 16384=2^{14} 16384=214 | 128.0.0.1 - 191.255.255.254 | 65534 | 172.16.0.0 - 172.31.255.255 |
C | 2097152 = 2 21 2097152=2^{21} 2097152=221 | 192.0.0.1 - 223.255.255.254 | 254 | 192.168.0.0 - 192.168.255.255 |
A/B/C类IP地址如下:
在IP地址的四段号码中:
A类IP地址是第一段号码为网络号码,剩下三段是本地计算机的号码;
B类IP地址是前两段号码为网络号码,剩下两段是本地计算机的号码;
C类IP地址是前三段号码为网络号码,最后一段是本地计算机的号码;
用字节表示:
A类IP地址由1字节网络地址和3字节主机地址组成,网络地址的最高位必须是0
;
B类IP地址由2字节网络地址和2字节主机地址组成,网络地址的最高位必须是10
;
C类IP地址由3字节网络地址和1字节主机地址组成,网络地址的最高位必须是110
;
根据字节表示计算可以得到:
A类IP地址网络地址有
(
126
=
2
8
−
2
)
(126=2^{8}-2)
(126=28−2)个,每个网络可以容纳的主机有
(
2
24
−
2
)
(2^{24}-2)
(224−2)台。
B类IP地址网络地址有
(
16384
=
2
14
−
2
)
(16384=2^{14}-2)
(16384=214−2)个,每个网络可以容纳的主机有
(
2
16
−
2
)
(2^{16}-2)
(216−2)台。
C类IP地址网络地址有
(
2
21
−
2
)
(2^{21}-2)
(221−2)个,每个网络可以容纳的主机有
(
2
8
−
2
)
(2^{8}-2)
(28−2)台。
A类IP地址的子网掩码是255.0.0.0
,广播地址是126.255.255.255
;
B类IP地址的子网掩码是255.255.0.0
,广播地址是191.255.255.255
;
C类IP地址的子网掩码是255.255.255.0
,广播地址是223.255.255.255
;
A类IP地址一般用于大型网络;
B类IP地址一般用于中等规模的网络;
C类IP地址一般用于小规模的局域网;
D类IP地址
D类IP地址也被叫做多播地址(Multicast address
),或者称为组播地址。在以太网中,多播地址命名了一组应该在这个网络中应用接收到一个分组的站点。多播地址的最高位必须是1110
,范围从224.0.0.0
-239.255.255.255
。
特殊的网址
每一个字节都为0的地址0.0.0.0
对应的是当前主机。
每一个bit都为1的地址255.255.255.255
是当前子网的广播地址。
IP地址中以11110
开头的E类IP地址都保留用于将来和实验使用。
IP地址中不能以十进制127
开头,该类地址中数字127.0.0.1
到127.255.255.2555
用于回路测试,比如127.0.0.1
表示本机IP地址。
子网掩码
子网掩码,subnet mask
,也称为网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位 标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。
子网掩码不能单独存在,它必须结合IP地址一起使用。
子网掩码只有一个作用,就是将某个IP地址划分称网络地址和主机地址两个部分
。
子网掩码是一个32
位地址,用于屏蔽IP地址的一部分以区分网络标识和主机标识,并说明该IP地址是在局域网上,还是在广域网上。
示例,有一个IP地址是
192.168.34.5
,
如果子网掩码是255.255.255.0
,那么IP地址与子网掩码按位与后得到192.168.34.0
,那么就可以得到该IP地址是一个C类地址;
如果子网掩码是255.255.0.0
,那么IP地址与子网掩码按位与后得到192.168.0.0
,可以判断该IP地址是一个B类地址;
如果要获取主机ID,假设子网掩码是255.255.255.0
,首先子网掩码取反得到0.0.0.255
,然后IP地址与取反后的子网掩码按位与得到0.0.0.5
;如果一个IP地址是
192.168.100.10/26
,那么表示该IP地址的子网掩码中连续26个位是1,即子网掩码为11111111 11111111 11111111 11000000
。
子网掩码是在IPv4地址资源紧缺的背景下为了解决IP地址分配而产生的虚拟IP技术,通过子网掩码将A、B、C三类地址划分为若干子网,从而显著提高了IP地址的分配效率,有效解决了IP地址资源紧张的局面。
另一方面,在企业内网中为了更好地管理网络,网管人员也利用子网掩码的作用,人为地将一个较大的企业内部网络划分为更多个小规模的子网,再利用三层交换机的路由功能实现子网互联,从而有效解决了网络广播风暴和网络病毒等诸多网络管理方面的问题。
一般将子网掩码的作用描述为通过逻辑运算,将IP地址划分为网络标识(Net.ID
)和主机标识(Host.ID
),只有网络标识相同的两台主机在无路由的情况下才能相互通信。
根据RFC950定义,子网掩码是一个32位的2进制数
,其对应网络地址的所有位都置为1,对应主机地址的所有位置为0,子网掩码告知路由器,地址的哪一部分是网络地址,哪一部分是主机地址,使路由器正确判断任意IP地址是否是本网段的,从而正确进行路由。
网络上,数据从一个地方传到另外一个地方,是依靠IP寻找。从逻辑上讲,有两步:第一步,从IP中找到所属的网络;第二步,再从IP中找到主机在这个网络中的位置。
子网掩码的设定必须遵循一定的规则。与二进制IP地址相同,子网掩码由1和0组成,且1和0分别连续。
子网掩码长度是32
位,左边是网络标识,用二进制1
表示,1的数目是网络位的长度;
右边是主机位,用二进制数0
表示,0的数目是主机位的长度。
这样做的目的是为了让掩码与IP地址做按位与运算时只保留网络位,屏蔽主机位,并且通过0的位数也可以确定子网的主机数。
通过子网掩码,才能表明一台主机所在的子网与其它子网的关系,使网络正常工作。
2.3 端口
2.3.1 端口简介
端口,port,可以认为是设备与外界通讯交流的出口。端口可以分为虚拟端口和物理端口。
虚拟端口指的是计算机内部或交换机路由器的端口,不可见,是特指TCP/CP协议中的端口,是逻辑意义上的端口,比如计算机中的80端口、21端口、23端口等。
物理端口又称为接口,是可见端口,比如计算机背板的RJ45网口,交换机路由器集线器等RJ45端口,电话RJ11插口等。
一个IP地址的端口可以有65536个,端口是通过端口号来标记的,端口号只有整数,范围从0~65535
。可以简单理解为端口是标记计算机中的应用程序的唯一标识。
2.3.2 端口类型
端口类型有:周知端口、注册端口、动态端口/私有端口。
-
周知端口
Well Known Ports
周知端口是众所周知的端口号,也称为知名端口、公认端口或者常用端口,范围从
0
到1023
,这些端口绑定于一些特定的服务。比如
80
端口分配给WWW
服务,21
端口分配给FTP
服务,23
端口分配给Telnet
服务等。
在浏览器的地址栏输入网址时不必指定端口号,因为默认情况下WWW服务的端口是80
。
网络服务可以使用其它端口号,如果不是默认的端口号则应该在地址栏上指定端口号,在地址后面加上冒号:,再加上端口号。比如使用8080
作为WWW服务的端口,则需要再地址栏中输入:网址:8080
。但需要注意,有些系统协议使用固定的端口号,不能被改变,比如
139
端口专门用于NetBIOS
与TCP/IP
之间的通信,不能手动改变。 -
注册端口
Registered Ports
注册端口的端口号范围从
1024
到49151
,用于绑定一些服务,分配给用户进程或应用程序,这些进程主要是用户选择安装的一些应用程序。这些端口在没有被服务器资源占用的时候,可以在用户端动态选用为源端口。 -
动态端口/私有端口
动态端口的范围从
49152
到65535
,一般不固定分配某种服务,而是动态分配。
三, 网络模型
3.1 OSI七层参考模型
OSI参考模型,Open System Interconnection
,七层模型,即开放式系统互联。
参考模型是国际标准化组织ISO指定的一个用于计算机或通信系统间互联的标准体系,一般称为OSI参考模型或七层模型。
OSI模型是一个七层的、抽象的模型体,不仅包括一系列抽象的术语或概念,也包括具体的协议。
物理层
:主要定义物理设备标准,如网线的接口类型,光纤的接口类型,各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,即常说的数模转换/模数转换)。这一层的数据叫做比特
。数据链路层
:建立逻辑连接、进行硬件地址寻址、差错校验等功能。定义了如何让格式化数据以帧为单位进行传输,以及如何控制对物理介质的访问。将比特组合成字节而组合成帧,用MAC地址访问介质。网络层
:进行逻辑地址寻址,在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。Internet的发展使得从世界各站点访问信息的用户数大大增加,网络层管理这种连接。传输层
:定义了一些传输数据的协议和端口号(比如WWW端口80等),如:TCP-传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据;UDP-用户数据包协议,与TCP特性相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据传输。主要是将从下层接收的数据进行分段和传输,到达目的地址后在进行重组,这一层数据也常称为段
。会话层
:通过传输层建立数据传输的通路,主要在系统之间发起会话或接受会话请求。表示层
:数据的表示、安全、压缩。主要进行对接收的数据进行解释、加密与解密、压缩与解压缩等,也就是把计算机能够识别的东西转换成人能够是被的诸如图、声音等。应用层
:网络服务与最终用户的接口,这一层为用户的应用程序提供网络服务。
3.2 TCP/IP四层模型
现在Internet使用的主流协议族是TCP/IP协议族,它是一个分层、多协议的通信体系。TCP/IP协议族是一个四层协议系统,自底而上分别是 数据链路层、网络层、传输层和应用层,每一层完成不同的功能,且通过若干协议来实现,上层协议使用下层协议提供的服务。
TCP/IP模型:
- 应用层:第一层,直接为应用程序提供服务
- 对不同种类的应用程序,会根据自己的需要来使用应用层的不同协议,邮件传输使用SMTP协议,WWW使用HTTP协议,远程登录服务应用使用了TELNET协议。
- 应用层还能加密、解密、格式化数据。
- 应用层可以建立或解除与其它节点的联系,这样可以充分节省网络资源。
- 传输层:第二层,设计到TCP协议和UDP协议等。
- 网络层:第三层,进行网络连接的建立和终止以及IP地址的寻找等功能。
- 网络连接层/数据链路层:第四层,既是传输数据的物理媒介,也可以为网络提供一条准确的线路。
四, 协议
协议,网络协议的简称,协议是通信计算机双方必须共同遵守的一组约定,比如怎么建立连接、怎么互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。
协议的三要素:语法
、语义
、时序
。
为了使数据在网络上从源到达目的,网络通信的参与方必须遵循相同的规则,这套规则称为协议(protocol),它最终体现为在网络上传输的数据包的格式。
协议往往分成几个层次进行定义,分层定义是为了使某一层协议的改变不影响其他层次的协议。
4.1 常见协议
应用层常见的协议有:
FTP协议
,File Transfer Protocol
文件传输协议HTTP协议
,Hyper Text Transfer Protocol
超文本传输协议NFS协议
,Network File System
网络文件系统SSH服务
传输层常见的协议有:
TCP协议
,Transmission Control Protocol
传输控制协议UDP协议
,User Datagram Protocol
用户数据报协议
网络层常见协议有:
IP协议
,Internet Protocol
因特网互联协议ICMP协议
,Internet Control Message Protocol
因特网控制报文协议IGMP协议
,Internet Group Management Protocol
因特网组管理协议
网络接口层协议有:
ARP协议
,Address Resolution Protocol
地址解析协议,根据IP地址找出MAC地址RARP协议
,Reverse Address Resolution Protocol
反向地址解析协议,根据MAC地址找到IP地址
4.2 UDP协议
UPD协议数据报文格式如下:
- 源端口号:发送方的端口号
- 目的端口号:接收方端口号
- 长度:UPD用户数据报的长度,最小值是8,表示仅有首部
- 校验和:检测UDP用户数据报在传输中是否有错,有错就丢弃
前面8字节是UDP数据报的头部,后面是传送的数据。
4.3 TCP协议
TCP协议数据报文格式如下:
- 源端口号:发送方端口号
- 目的端口号:接收方端口号
- 序列号:本报文段的数据的第一个字节的序号
- 确认号:期望收到对方下一个报文段的第一个数据字节的序号
- 头部长度:也成为数据偏移,TCP报文段的数据起始处距离TCP报文段的起始处有多远,即头部长度,单位:32bit=4byte,以4字节为计算单位
- 保留:为今后使用,以4字节为计算单位
- 紧急
URG
:置1表明紧急指针字段有效,告诉系统此报文段中有紧急数据,应尽快传送 - 确认
ACK
:仅当ACK=1时,确认号字段才有效,TCP规定,在连接建立后所有传达的报文段都必须把ACK置为1 - 推送
PSH
:当两个应用程序进行交互式通信时,有时在一端的应用程序希望在键入一个命令后立即就能够收到对方的响应。在这种情况,TCP就可以使用推送操作,这时发送方TCP把PSH置为1,并立即创建一个报文段发送出去,接收方收到PSH=1的报文段,就尽快交付给接收应用程序,不再等待整个缓存都填满后再向上交付 - 复位
RST
:用于复位相连的TCP连接 - 同步
SYN
:仅在三次握手建立TCP连接时有效。当SYN=1而ACK=0时,表明这是一个连接请求报文段,对方若同一建立连接,则应在相应的报文段中使用SYN=1和ACK=1,因此,SYN=1表示这时一个连接请求或连接接受报文 - 终止
FIN
:用来释放一个连接,当FIN=1表示此报文段的发送方数据已经发送完毕,并要求释放运输连接 - 窗口:指发送本报文段的一方的接收窗口
- 校验和:检验和字段,检验的范围包括手部和数据两部分,在计算校验和时需要加上12字节的伪头部
- 紧急指针:尽在URG=1时有效,指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据),即指出了紧急数据的末尾在报文中的位置,注意:即使窗口为0时也可发送紧急数据
- 选项:长度可变,最长可达40字节,当不使用选项时,TCP首部长度是20字节
4.4 IP协议
如下是IPv4协议数据报文:
- 版本号:IP协议的版本。通信双方使用的IP协议的版本必须一致,目前最广泛使用的IP协议版本号为4,即IPv4。
- 头部长度:单位是32bit=4byte
- 服务类型:一般不使用,置为0
- 总长度:首部长度加上数据的总长度,单位:字节。
- 标识
identification
:IP软件在存储器中维持一个计数器,每生产一个数据报,计数器就加1,并将此值赋给标识字段。 - 标志
flag
:目前只有两位有意义。- 标志字段的最低位记为
MF
。MF=1
表示后面还有分片的数据报;MF=0
表示这已是若干数据报片中的最后一个; - 标志字段的中间一位记为
DF
,意思是不能分片,只有当DF=0
时才允许分片。
- 标志字段的最低位记为
- 片偏移:指出较长的分组在分片后,某片在源分组中的相对位置,也就是说,相对于用户数据段的起点,该片从何处开始,片偏移以8字节为偏移单位。
- 生存时间TTL:表明数据报在网络中的寿命,即跳数限制,由发出数据包的源点设置这个字段。路由器在转发数据之前把TTL-1,当TTL减为0时,就丢弃这个数据。
- 协议:指出此数据报携带的数据时使用哪种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程,常用的:ICMP-1、IGMP-2、TCP-6、UDP-17、IPv6-41。
- 头部校验和:只校验数据报的首部,不包括数据部分。
- 源地址:发送方IP地址
- 目的地址:接收方IP地址
4.5 以太网帧协议
类型:0x800-IP、0x806-ARP、0x835-RARP。
4.6 ARP协议
- 硬件类型:1标识MAC地址;
- 协议类型:0x800标识IP地址;
- 硬件地址长度:6
- 协议地址长度:4
- 操作:1-ARP请求,2-ARP应答,3-RARP请求,4-RARP应答
五,网络通信过程
5.1 封装
上层协议如何使用下层协议提供的服务呢?
答案是通过封装encapsulation
实现的。应用程序数据在发送到物理网络上之前,将沿着协议栈(先进后出)从上到下依次传递。每层协议都将在上层数据的基础上加上自己的头部信息(有时还包括尾部信息),以实现该层的功能,这个过程称为封装
。
5.2 分用
当帧达到目的主机,将沿着协议栈自底向上依次传递。各层协议栈依次处理帧中本层负责的头部数据,以获取所需的信息,并将处理后的帧交给目标应用程序,这个过程称为分用demultiplexing
。分用依靠头部信息中的类型字段实现。
如下是封装和分用示意图(以TCP/IP模型):
5.3 ARP协议
ARP,Address Resolution Protocol,地址解析协议。ARP协议根据IP地址获取到对应的MAC地址。RARP根据MAC地址查找对应的IP地址。
ARP协议详细介绍参考:ARP协议。
在局域网中,网络中实际传输的是帧,帧里包含目标主机的MAC地址。以太网中,一个主机和另一个主机通信,必须知道目标主机的MAC地址。但我们只知道目标主机的IP地址,怎么获取对应的MAC地址呢?就是使用ARP协议根据IP地址获取都MAC地址。
ARP请求包给所有在局域网内的主机发送。
5.3.1 ARP协议映射
ARP协议映射方式有静态映射和动态映射。
静态映射
静态映射的意思是手动创建一张ARP表,把IP地址和MAC地址关联起来,这个ARP表储存在网络中的每一台机器上。这样,如果知道一台主机的IP地址,就可以根据ARP表查询到该主机的MAC地址。
静态映射有一定的局限性,如果物理地址变化,那么ARP表格中的对应关系就有问题了。
MAC地址发生变化的可能:
- 机器可能更换网络适配器,有了一个新的物理地址;
- 在某些局域网中,每次计算机加电,物理地址都会改变;
- 移动电脑可以从一个物理网络转移到另一个物理网络,也会导致物理地址改变。
所以为了避免出现这些问题,必须定期维护更新ARP表,比较麻烦并且影响网络性能。
动态映射
动态映射时,知道另一台主机的IP地址,就可以使用ARP协议找出对应的物理地址,已经实现的动态映射协议有ARP和RARP两种协议。
5.3.2 ARP协议封装
ARP协议的数据包如下:
假设源端主机A的IP为:192.168.10.1
,发送端主机A的MAC地址为:aa:bb:cc:dd:ee:ff
;目的端主机B的IP为:192.168.10.2
,要获取到目的端的B的MAC地址,那么源端主机A就要使用ARP协议,封装一个ARP请求,这个封装的ARP请求该是如下:
1 | 0x800 | 6 | 4 | 1 | aa:bb:cc:dd:ee:ff | 192.168.10.1 | 00:00:00:00:00:00 | 192.168.10.2 |
---|---|---|---|---|---|---|---|---|
1表示MAC地址 | 0x800表示IP地址 | 1表示ARP请求 |
该ARP请求经过以太网协议发送给当前局域网内的所有主机,只有IP地址为192.168.10.2
的主机会对该请求处理,ARP请求经过以太网协议时会加上以太网协议的头部和尾部,如下,目的物理地址为ff:ff:ff:ff:ff:ff
表示给当前局域网内的所有主机都发送该请求。
ff:ff:ff:ff:ff:ff | aa:bb:cc:dd:ee:ff | 0x806 | 1 | 0x800 | 6 | 4 | 1 | aa:bb:cc:dd:ee:ff | 192.168.10.1 | 00:00:00:00:00:00 | 192.168.10.2 | CRC |
---|---|---|---|---|---|---|---|---|---|---|---|---|
目的物理地址 | 源物理地址 | 0x806表示IP协议 | 1表示MAC地址 | 0x800表示IP地址 | 1表示ARP请求 |
当目的主机B(IP:192.168.10.2
)收到该ARP请求后,会封装一个ARP应答,并把该应答发送给源端主机,假设该目的主机B的MAC地址为:01:02:03:04:05:06
,那么目的主机B封装的ARP应答应该为:
1 | 0x800 | 6 | 4 | 2 | 01:02:03:04:05:06 | 192.168.10.2 | aa:bb:cc:dd:ee:ff | 192.168.10.1 |
---|---|---|---|---|---|---|---|---|
1表示MAC地址 | 0x800表示IP地址 | 2表示ARP应答 |
源端主机A收到该协议就可以得到目的主机B的MAC地址了。
MAC帧头部目的物理地址设置为
ff:ff:ff:ff:ff:ff
表示给局域网内的所有主机发送ARP请求。
5.3.3 ARP报文总长度
ARP报文总长度是64字节
。
ARP数据包的总长度固定的28 bytes = 2(硬件类型) + 2(协议类型) + 1(硬件地址长度) + 1(协议地址长度) + 2(操作) + 6(发送端MAC地址) + 4(发送端IP地址) + 6(目的端MAC地址) + 4(目的端IP地址);
还要包含以太网的帧头14 bytes = 6(目的端MAC地址) + 6(源端MAC地址) + 2(类型)。
ARP请求中帧总长度 = 帧头 + ARP数据包 = 14 + 28 =42 bytes。
真正发包时为了保证以太网帧的最小帧长为64bytes,会在报文里添加一个padding字段,用来填充数据包大小。
但使用wireshark抓包时,抓到的包为60bytes,比以太网帧的最小帧长少了4bytes,是因为抓包时不能抓到数据包最后的CRC字段。
CRC字段是为了校验以太网帧的正确性。在数据包填充完成后,通过算法计算一个值放到CRC字段中。
当接收端收到数据包后,会同样使用算法计算一个值,和CRC字段的值进行对比,查看是否相同,如果不同,则证明数据包被更改,如果相同则证明数据包未被更改。