IP 基本认识
在之前的章节中,我们已经详细介绍了应用层和传输层的相关概念和原理,了解了进程之间如何进行可靠的数据传输。我们知道,传输层的头部包含了进程所使用的端口信息,这是为了确保数据能够正确地传递到目标进程。今天,我们将进一步探讨网络层的IP协议,以了解主机之间如何进行通信。
在TCP/IP参考模型中,IP协议位于第三层,即网络层。网络层的主要功能是实现主机与主机之间的通信,也被称为点对点(end to end)通信。网络层通过IP地址来标识不同的主机,它负责将数据包从源主机传输到目标主机。IP协议还具有路由选择的功能,它通过查找路由表来确定最佳路径,确保数据能够正确快速地传输到目标主机。因此,网络层是整个TCP/IP网络体系中至关重要的一层,它为主机之间的通信提供了基础支持。
网络层和数据链路层在通信中扮演着不同的角色,它们之间有着密切的关系。IP协议(网络层)和MAC地址(数据链路层)都是实现数据传输的关键要素。
有些小伙伴可能会对IP(位于网络层)和MAC(位于数据链路层)之间的区别和关系感到困惑。
其实很容易区分,网络层(IP协议)的主要作用是在不同的网络之间进行通信传输。它通过使用IP地址来标识不同的主机和网络,负责将数据包从源主机传输到目标主机。网络层还负责路由选择,即根据路由表选择最佳路径,确保数据能够快速有效地传输到目标主机。
而数据链路层(MAC地址)则是在直接相连的两个设备之间进行通信的关键。它负责将数据包从一个节点传输到另一个节点,通过物理地址(MAC地址)来标识不同的设备。数据链路层确保了在同一个网络中,数据能够正确地从源设备传递到目标设备。
可以用一个旅行行程的例子来形象地解释网络层和数据链路层的关系。假设小雨要去一个很远的地方旅行,他的行程表相当于网络层,它规划了整个旅行的路线和目的地。而飞机票和地铁票则相当于数据链路层,它们只在特定的区间内有效,负责将小林从一个地点传输到下一个地点。在区间内移动就像是数据链路层,在源地址和目标地址之间传输数据。整个行程表相当于网络层,它提供了整个旅行的定位和指导,就像IP地址一样。行程的起点和终点分别对应源IP和目标IP地址。
如果小雨只有行程表而没有车票,他将无法找到适合的交通工具来到达目的地。反之亦然,如果他只有车票而没有行程表,他也很难知道应该搭乘哪种交通工具以及何时换乘。
因此,只有同时具备某个区间的车票和整个旅行的行程表,才能确保成功到达目的地。类似地,在计算机网络中,需要同时存在数据链路层和网络层分层,才能实现与最终目标地址的通信。
另外,旅行途中虽然交通工具可能不断变化,但旅行的起始地址和目的地址始终保持不变。在网络数据包传输中,也是如此,源IP地址和目标IP地址在传输过程中不会改变,只有源MAC地址和目标MAC地址会不断变化。
IP 地址的基础知识
在 TCP/IP 网络通信中,为了确保正常通信,每个设备都需要正确配置 IP 地址。否则,通信将无法实现。IP 地址(IPv4 地址)使用32位正整数表示,并在计算机中以二进制形式处理。为了方便人类记忆,IP 地址采用点分十进制标记方式。即将32位IP地址分为4组,每组8位,用点号分隔,并将每组转换为十进制形式。
那么,IP 地址最大值也就是
当然,最大允许的43亿台计算机连接到网络是基于IP地址的可用范围。实际上,IP地址并不是按照主机台数来配置的,而是按照网卡来配置的。像服务器、路由器等设备通常有2个或更多的网卡,因此它们会有2个或更多的IP地址。
因此,实际上并不可能让43亿台计算机全部连接到网络,更何况IP地址由"网络标识"和"主机标识"两个部分组成,这意味着能够连接到网络的计算机数量更少。
有些人可能会问,现在不仅计算机配备了IP地址,手机、平板等电子设备也都有IP地址,那么连接到网络的设备数量肯定会超过43亿,那么网络是如何支持这么多的IP地址呢?
这是因为使用了一种称为NAT(Network Address Translation,网络地址转换)的技术,通过NAT技术可以实现IP地址的更换。这样就使得可连接的计算机数量超过了43亿台。NAT技术将在后续的讨论中进一步解释和说明。
IP 地址的分类
互联网诞生之初,IP 地址资源相对较为充裕,为了更好地管理和分配这些地址,计算机科学家们设计了基于分类的 IP 地址方案。
根据这个方案,将 IP 地址分为了五种不同的类型,分别是 A 类、B 类、C 类、D 类和 E 类。这些分类根据地址的位数分配方式和网络规模进行了划分。
当我们谈论A、B、C类地址时,主要涉及到网络号和主机号两个部分。这个概念可以通过类比来更好地理解,就像我们住在不同的小区一样。比如,小雨住在A小区8栋101号,而你住在B小区1栋101号。为了更清楚地了解A、B、C类地址的分类和范围,我们可以通过下面这个图片来了解每个分类所对应的地址范围和最大主机个数。
在标记网络IP地址时,最大值为255是因为IP地址中的每个字段是一个8位二进制数,因此范围是从0到255,共256个可能的取值。IP地址的每个字段代表了一个字节,也就是8位二进制数,所以最大值是2的8次方减1,即255。
对于A、B、C类地址,最大主机个数是根据主机号的位数来计算的。以C类地址为例,主机号占据了8位。由于二进制的8位能表示的最大数值是255(0到255共256个数值),因此C类地址的最大主机个数就是254个。
为什么要减 2 呢?
因为在 IP 地址中,有两个 IP 是特殊的,分别是主机号全为 1 和 全为 0 地址。
主机号全为1时,表示该网络下的所有主机,用于进行广播操作。而主机号全为0时,表示指定某个网络。
除了A、B、C类地址之外,还有D类和E类地址。D类地址常被用于多播操作,用于将数据同时发送给多个主机。而E类地址是预留的地址分类,暂时未被使用。
IP 分类的优点
不论是路由器还是主机,在解析一个IP地址时,我们可以通过判断其首位是否为0来确定其分类。如果首位为0,则为A类地址,这样我们就能快速找到网络地址和主机地址。对于其他分类,我们可以参考如下图所示的判断方式:
因此,这种分类地址的优点在于其简单明了的特点,使得选路(基于网络地址)变得更加简单。通过对IP地址的分类,我们可以更快速地确定网络地址和主机地址,从而更方便地进行网络通信和路由选择。这种简单的分类方式为网络管理和路由器的操作提供了便利和效率。
IP地址分类的缺点之一是缺乏地址层次性。例如,一个公司可能需要根据生产环境、测试环境和开发环境来划分地址层次,但是传统的IP分类方式并没有提供地址层次划分的功能,因此缺少了灵活性。
另一个缺点是A、B、C类地址在现实网络中无法很好地匹配。C类地址能够包含的最大主机数量太少,仅有254个,这对于像网吧这样的场所来说显然不够使用。而B类地址能够包含的最大主机数量又太多,超过6万台机器,一般的企业很难达到这个规模,这样就会导致地址的浪费。
这两个缺点可以通过CIDR(无分类地址)来解决。CIDR使用可变长度子网掩码(VLSM),使得网络划分更加灵活和精确,可以根据实际需要分配合适大小的地址块,避免了传统IP地址分类的缺点。
无分类地址 CIDR
正因为IP地址分类存在许多不足之处,因此提出了无分类地址CIDR的方案。CIDR不再使用分类地址的概念,而是将32位的IP地址划分为网络号和主机号两部分,前面是网络号,后面是主机号。
怎么划分网络号和主机号的呢?
CIDR的表示形式为a.b.c.d/x,其中/x表示前x位属于网络号,x的范围是0~32,这使得IP地址更加灵活。例如,10.100.122.2/24表示CIDR的地址形式,其中/24表示前24位是网络号,剩余的8位是主机号。最后的.2只是一个简单的举例,你也可以将其写成10.100.122.0/24,意思是相同的。
除了CIDR的形式外,还有一种划分网络号和主机号的方式是使用子网掩码。子网掩码的作用是将主机号掩盖掉,只留下网络号。
使用子网掩码时,可以将子网掩码和IP地址按位计算与操作,从而得到网络号。计算结果即为网络号的值。子网掩码中的1表示对应位是网络号,0表示对应位是主机号。
为什么要分离网络号和主机号?
分离网络号和主机号的目的是为了在计算机通讯时能够判断是否处于同一个广播域内,也就是判断网络地址是否相同。这样可以更有效地进行数据包的传输和路由选择。当两台计算机要进行通讯时,首先需要根据网络地址来判断它们是否处于同一个广播域内。如果两台计算机的网络地址相同,即网络号相同,那么它们就处于同一个网络中。在这种情况下,数据包可以直接发送到目标主机,而不需要经过路由器的转发。
总结
在本文中,我们深入了解了IP协议和IP地址的基本知识。
首先,我们了解了IP协议在TCP/IP参考模型中的位置和作用。IP协议位于网络层,负责实现主机之间的通信。它通过IP地址来标识不同的主机,同时具有路由选择的功能,确保数据能够正确快速地传输到目标主机。
然后,我们学习了IP地址的基础知识。IP地址是使用32位二进制数表示的,为了方便记忆,采用点分十进制标记方式。IP地址分为A、B、C、D、E五类,其中A、B、C类地址用于主机与主机之间的通信,D类地址用于多播操作,E类地址是预留的。
此外,我们还了解到IP地址的分类存在一些缺点,比如缺乏地址层次性和地址浪费。为了解决这些问题,引入了无分类地址CIDR的概念,它使用可变长度子网掩码,使得网络划分更加灵活和精确。
总的来说,IP协议和IP地址是计算机网络通信中非常重要的概念,了解它们的基本知识对于理解网络通信原理和进行网络配置非常有帮助。
我是努力的小雨,一名 Java 服务端码农,潜心研究着 AI 技术的奥秘。我热爱技术交流与分享,对开源社区充满热情。同时也是一位腾讯云创作之星、阿里云专家博主、华为云云享专家、掘金优秀作者。
💡 我将不吝分享我在技术道路上的个人探索与经验,希望能为你的学习与成长带来一些启发与帮助。
🌟 欢迎关注努力的小雨!🌟