前面的文章中介绍了网络中来回跑的网络包长什么样子,这篇文章再来探讨下这包裹的每一层信息是怎么产生的。
这是上篇文章的包裹图,里面包含了很多信息:端口,IP,MAC地址。这些信息都是从哪来的呢。
端口
端口是由计算机操作系统来管理的,每一个端口都对应了一个进程或服务。端口在网络连接的所有设备中都统一标准,每个端口都有一个编号,也就是所谓端口号。端口位于网络协议的传输层,网络包的端口号使得收发机器明白这个包应该给到哪个进程(应用程序)。
IP
先来看看IP协议是什么。
IP协议是互联网上用于数据传输的一种协议,它是TCP/IP协议族中的一个关键组成部分,用于在网络中传输数据包(也就是前面说的网络包)。IP协议负责定义数据包的结构、寻址方式以及路由策略,以确保数据能够在不同的网络和计算机之间进行可靠的传递。IP协议工作在网络协议的网络层。
IP地址
IP地址是IP协议中的一个重要内容,类似于我们的家庭住址一样,每个网络设备都拥有一个IP地址。只有拥有了IP地址,该设备才能接入网络,正常收发数据包。
IPv4和IPv6是两种常用的IP地址格式,IPv4是一个32位的二进制数,可以表示大约43亿个地址;IPv6是一个128位的二进制数,几乎可以不受限制地提供地址。 就目前我接触到的IP格式来说,IPv4仍是主流。IPv4的32位二进制数通常被分割为4个“8位二进制数”。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。举个例子,32位二进制数每一位都用P来表示,每8位组成一组,则可以表示为【PPPP.PPPP.PPPP.PPPP】,这也是我们经常见到的IP格式例如【192.168.0.10】,其实IP地址本质上还是一个32位的二进制数,a.b.c.d的形式只是为了更便于人类来阅读。
下面文章中提到的IP都以IPv4地址格式为前提,不再特别声明。
子网掩码
在公司中配置电脑的网络信息时,除了IP外还需配置子网掩码,这是干嘛用的呢。
IP地址其实包含了两部分内容:网络部分与主机部分。
- 网络部分用于标识该IP属于哪个子网,相同网络地址(一个IP地址的网络部分被称为网络号或者网络地址)的IP是属于同一个子网的,它们之间的通信也属于局域网内部的通信。
- 主机部分是该IP在所处子网中的一个身份地址,即主机在子网内的一个身份标识。
那么怎么区分IP地址的哪些位是网络部分那些位是主机部分呢?这就是子网掩码要干的事了。
子网掩码同IP的长度一样,也是一个32位的二进制数,通常也采用8位一组,a.b.c.d的形式来表示。子网掩码与IP进行逻辑与运算后,得出来的结果就是IP的网络地址。将子网掩码取反后再与IP进行逻辑与运算,得出的结果就是IP的主机地址。
以上图中的配置为例,子网掩码255.255.255.0,对应的32为二进制数为11111111.11111111.11111111.00000000,前24位值为1,代表了IP的这些位是网络地址,后8位值为0,代表了IP的这些位是主机地址。 图中的IP为192.168.1.5 ,转化为32位二进制数就是11000000.10101000.00000001.00000101,配合子网掩码就能得到标黄的前24位就是网络地址(192.168.1.0),标蓝的后8位就是主机地址(5)。
另外,IP与子网掩码可以有另一种表示方式,就是192.168.1.5/24 ,IP后面的【/24】代表了这个IP的子网掩码的前24位是1,也就是子网掩码为255.255.255.0。
IP地址通常被分为A、B、C类,其实这就是子网掩码的几个粗粒度的分类。子网掩码的4个十进制位,用前几个来标识网络地址呢,一个,两个或者三个,就形成了A类,B类与C类的IP地址。
IP地址类型 | 地址表示范围 | 缺省(默认)子网掩码 | 网络位n与主机位h |
---|---|---|---|
A类地址 | 1.0.0.1-127.255.255.255 | 255.0.0.0 | 0nnnnnnn.hhhhhhhh. hhhhhhhh.hhhhhhhh |
B类地址 | 128.0.0.1-191.255.255.255 | 255.255.0.0 | 10nnnnnn.nnnnnnnn. hhhhhhhh.hhhhhhhh |
C类地址 | 192.0.0.1-223.255.255.255 | 255.255.255.0 | 110nnnnn.nnnnnnnn. nnnnnnnn.hhhhhhhh |
A、B、C 等不同类别是为了更好地满足不同规模和需求的网络。A 类地址通常用于大型组织和互联网服务提供商,B 类地址用于中等规模的组织,而 C 类地址用于小型组织。
然而,随着互联网的发展,这种严格的 A、B、C 类地址划分逐渐失去了某些意义,因为它们在实践中变得不够灵活。现代网络通常使用更灵活的子网掩码和无类别域间路由选择(CIDR)来更好地适应各种网络规模和需求。CIDR 允许更细粒度地划分 IP 地址,并更好地支持了互联网的增长和多样性。因此,虽然 A、B、C 类地址仍然存在,但它们的刚性划分已不再是网络设计的首要依据。
网关
网关即这张图中的“路由器”,当主机通信需要跨网络通信时,数据包就要通过网关来发向别的子网了,网关的具体内容,后面文章再详细介绍。
DHCP协议
知道了IP的具体含义,那么主机的IP怎么产生呢?答:两种方式
- 手动配置。手动配置IP,子网掩码,网关,DNS等信息。适用于机器需要固定IP的情况。
- DHCP协议自动分配。适用于不需要固定IP,只想要联网的情况,比如手机连家庭的wifi。
手动配置IP信息很好理解,我们重点关注DHCP协议。DHCP协议全称为动态主机配置协议(Dynamic Host Configuration Protocol)。使用DHCP协议,需要在局域网内配置一个DHCP Server,一旦有新设备接入局域网的时候,DHCP Server就会给这台设备分配一个可用的IP,并自动为其配置子网掩码、默认网关地址,域名服务器(DNS)地址和其他相关配置参数,以便可以与其他IP网络通信。那么DHCP具体是怎么运作的呢?
DHCP协议采用UDP作为传输协议,DHCP客户端发送请求消息到DHCP服务器的68号端口,DHCP服务器回应应答消息给DHCP客户端的67号端口。
一台设备刚接入局域网时是没有IP的,只有mac地址,这时候该设备就会向局域网广播一条消息,大声问一下“谁能给我IP?” 这时候发出去的包长下面这个样子,由于该设备还没有IP,所以暂用IP 0.0.0.0,广播地址的mac为FF:FF:FF:FF:FF:FF,ip为255.255.255.255。
DHCP Server收到这条消息后,就会拿一个该局域网内的空闲可用ip回复给该设备,回复的包长下面这个样子,由于此时该设备还没有IP,所以DHCP Server仍然是广播一条消息出去,该设备收到后,就可以思考下要不要使用DHCP Server给出的这个IP了。
如果设备想要用这个IP的话,就要ACK一下,告诉DHCP Server这个IP我用了。由于还没有得到 DHCP Server 的最后确认,客户端仍然使用 0.0.0.0 为源 IP 地址、255.255.255.255 为目标地址进行广播。
当 DHCP Server 接收到客户机的应答消息之后,会广播返回给设备一个 DHCP ACK 消息包,表明已经接受客户机的选择,并将这一 IP 地址的合法租用信息和其他的配置信息(子网掩码,网关地址,DNS信息等)都放入该广播包,发给设备,欢迎它加入网络大家庭。
DHCP协议给出的IP都是短租IP,如果需要长期使用的话就要不断续租,如果不续租就收回此IP了
入网的设备会在租期过去 50% 的时候,直接向为其提供 IP 地址的 DHCP Server 发送 DHCP request 消息包。设备接收到该服务器回应的 DHCP ACK 消息包,会根据包中所提供的新的租期以及其他已经更新的 TCP/IP 参数,更新自己的配置。这样,IP 租用更新就完成了。
至此,机器就有了自己的IP。
MAC
MAC是网卡出厂时自带的,也就是设备本身就有的。
至此一个网络包中需要拥有的基本信息就都具备了。接下来就是和其它主机进行通信了,下篇文章我们来分析下主机之间是怎么在局域网中进行通信的。