javaEE - 9( 5000 字详解 TCP / IP 协议 )

一: IP 地址

1.1 IPv4 和 IPv6

IP 协议有两个版本:

  1. IPv4
  2. IPv6。

IPv4 数量为 232,大约 43 亿左右,而 TCP / IP 协议规定,每个主机都需要有一个 IP 地址。对于全世界计算机来说,这个数量是不够。

所以后来推出了 IPv6,数量为 2128。但因为目前 IPv4 还广泛的使用,且可以使用其他技术来解决 IP 地址不足的问题,所以 IPv6 也就没有普及。

(此文章是提到IP协议,没有特殊说明的,默认都是指IPv4。)

1.2 IP 地址的组成

IP 地址分为两个部分,网络号和主机号

  • 网络号:标识一个局域网,保证相互连接的两个网段具有不同的标识;
  • 主机号:标识主机,同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号;

通过合理设置网络号和主机号,就可以保证在相互连接的网络中,每台主机的 IP 地址都是唯一的,那么,我们该如何划分网络号和主机号呢?

过去曾经提出一种划分网络号和主机号的方案,把所有 IP 地址分为五类,如下图所示:
在这里插入图片描述

类别范围适用网络网络数量主机最大连接数
A0.0.0.0 ~ 127.255.255.255大型网络12616,777,214 (224-2)
B128.0.0.0 ~ 191.255.255.255中等规模网络约16,00065,534 (216-2)
C192.0.0.0 ~ 223.255.255.255小型网络-254 (28-2)
D224.0.0.0 ~ 239.255.255.255---
E240.0.0.0 ~ 247.255.255.255---

请注意,类别 D 和 E 用于特殊用途,不分配给实际的网络和主机,

主机最大连接数减去 2,是为了扣除主机号为全 0 和全 1 的特殊 IP 地址。

特殊的 IP 地址:

  • 将 IP 地址中的主机地址全部设为 0,就成为了网络号,代表这个局域网;
  • 将 IP 地址中的主机地址全部设为 1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包;
  • 127.*的 IP 地址用于本机环回(loop back)测试,通常 127.0.0.1

在上述的分类中,存在IP地址浪费的问题:

  1. 单位一般会申请 B 类网络( C 类连接主机数量有限 ),但实际网络架设时,连接的主机数量又常远小于 65534( B 类连接主机数 ),造成 IP 地址浪费;同理,A 类网络的 IP地址也会造成大量的浪费。

  2. 当一个单位申请了一个网络号,并且想将该网络中的 IP 地址再分给它下属的几个小单位时,因为每个下属单位都需要一个独立的网络号,那么这将导致 IP 地址资源的浪费。

为了解决以上问题,引入子网掩码来进行子网划分。

1.3 子网掩码

子网掩码格式和 IP 地址一样,也是一个 32 位的二进制数,其中:

  • 左边是网络位,用二进制数字 “1” 表示,1 的数目等于网络位的长度;
  • 右边是主机位,用二进制数字 “0” 表示,0 的数目等于主机位的长度。

子网掩码的作用:

  1. 划分 A,B,C 三类 IP 地址子网,

如一个 B 类 IP 地址:191.100.0.0,网络号二进制数为 16 位网络号 + 16 位主机号。

假设使用子网掩码 255.255.128.0,即 11111111.11111111.10000000.00000000 ,这里有 17 个 1,这意味着划分子网后,高 17 位都是网络位

此时,IP 地址组成为:网络号+子网号+主机号,网络号和子网号统一为网络标识( 划分子网后的网络号 / 网段 )

在这里插入图片描述
在这里插入图片描述

通过子网掩码结合 IP 地址,可以计算获得划分子网后的网络号及划分子网后的主机号,可以用于判断目的 IP 与本 IP 是否为同一个网段。

1.4 通过 IP 地址和子网掩码计算主机号

将 IP 地址和子网掩码进行“按位与”操作,得到的结果就是网络号,IP地址减去网络号,剩下的就是主机号

举个例子:假设有一个 IP 地址是 192.168.0.100,子网掩码是 255.255.255.0。

以下是具体的计算步骤:

首先将IP地址和子网掩码都转换为二进制形式。

  • IP地址:11000000.10101000.00000000.01100100
  • 子网掩码:11111111.11111111.11111111.00000000

子网掩码意味着划分子网后,高 24 位都是网络位/网络号,剩下的 8 为是主机号

接着进行按位与,将IP地址的每一位与子网掩码的对应位进行逻辑与运算。

  • 结果为:11000000.10101000.00000000.00000000

此时这个结果就是网络部分,IP 地址减去网络部分就是主机部分了

  1. 得到网络部分和主机部分的二进制值后,可以将它们转换回十进制形式。

    网络部分:192.168.0.0
    主机部分:0.0.0.100

通过使用子网掩码进行地址划分,可以将一个 IP 地址空间合理地分配给不同的网络和主机。这样就避免了 IP 地址的浪费,这对于大规模的网络环境尤为重要,因为 IP 地址是有限的资源。

二: MAC 地址

MAC 地址,即 Media Access Control Address,MAC 地址用来识别数据链路层中相连的节点,长度为 48位, 6 个字节。一般用 16 进制数字加上冒号的形式来表示( 例如:08:00:27:03:fb:19 )

主机具有一个或多个网卡,路由器具有两个或两个以上网卡;其中每个网卡都有唯一的一个 MAC 地址,网络数据传输的本质是网络硬件设备将数据发送到网卡上,再从网卡接收数据。

注意: MAC 地址在网卡出厂时就确定了,不能修改。虚拟机中的 MAC 地址不是真实的 MAC 地址,可能会冲突;也有些网卡支持用户配置 MAC 地址。

广播数据报有一个特殊的 MAC 地址:FF:FF:FF:FF:FF:FF

2.1 网络数据传输

以下为主机 B 传输数据到主机 C 经过的网络设备:
在这里插入图片描述
对于以上经过的网络设备:

  • 主机:配有 IP 地址,但是不进行路由控制的设备;
  • 路由器:即配有 IP 地址,又能进行路由控制;
  • 节点:主机和路由器的统称;

对于网络数据传输,不是想象中那样,数据直接从源主机到达目的主机,而是类似在地图中,从 A 到 D 的过程,这就好比唐僧去西天取经,行程为长安、五指山、黑风山、女儿国……大雷音寺。

IP地址描述的是路途总体的起点和终点:

  • 源 IP 就是整个行程的起点:长安;
  • 目的 IP 对应为整个行程的终点:大雷音寺

而行进也必须一个地点一个地点的前进,由 MAC 地址来描述路途上每一个区间的起点和终点:

  • 从长安到五指山,为一跳的区间,源 MAC 为长安,目的 MAC 为五指山;
  • 从五指山到黑风山,为下一跳的区间,源 MAC 为五指山,目的 MAC 为黑风山。

三:网络设备及相关技术

3.1 集线器:转发所有端口

在这里插入图片描述

集线器是工作在物理层的网络设备,发送到集线器的任何数据,都只是简单的将数据复制并转发到其他所有端口。( 端口指集线器后边的物理端口 )

在这里插入图片描述

3.2 交换机:MAC 地址转换表 + 转发对应端口

在这里插入图片描述
交换机工作在数据链路层,交换机内部会记录并维护一张 MAC 地址转换表:

  1. MAC 地址转换表主要记录 MAC 地址与端口之间的映射。
  2. 主机连接到交换机,及主机发送数据的时候,交换机可以学习并记录该主机 MAC 地址与端口信息。
  3. 交换机接收到数据报以后,在 MAC 地址转换表中,通过目的 MAC 查找到对应的端口,接着只需要将数据报转发到对应端口上即可。

在这里插入图片描述

发送数据报时,发送端主机都需要先根据网络分层从上到下封装:
在这里插入图片描述

  • 源 IP 与目的 IP 标识整个路途的起点和终点;
  • 源 MAC 与目的 MAC 标识了每一跳的起点和终点;

此时还需要根据发送端主机与接收端主机是否在同一网段,来设置下一跳设备:

  • 源主机和目的主机在同一个网段时,下一跳设备就是目的主机;
  • 发送端主机和接收端主机在不同网段时,发送端主机是无法知道目的主机在哪,此时会设置下一跳设备为网关设备;

所谓网关,我们这里可以简单理解为,不同网段的网络互连时需要使用的设备,通常的网关设备是路由器,可以划分公网和局域网,同时还可以把局域网划分为多个子网,Windows 中可以在网络设置中,更改适配器设置查看网关IP:

在这里插入图片描述

以上两种情况,下一跳设备 IP 地址都可以获取到,但目的 MAC 可能不知道,此时就需要使用以下 ARP 寻址:

3.4 主机&路由器:ARP 缓存表+ARP 寻址

首先,ARP 是一个介于数据链路层和网络层之间的协议;ARP 协议建立了 IP 地址与 MAC 地址的映射关系,在数据链路层,寻找下一跳设备 MAC 地址的过程,称为 ARP 寻址:

  1. 主机和路由器中都保存了一张 ARP 缓存表:通过 IP 地址可以找到对应的 MAC 地址。
  2. 根据下一跳设备的 IP 地址,在 ARP 缓存表中能找到对应的 MAC 地址,则可以设置目的 MAC 并发送数据报。
  3. 如果找不到,则发送 ARP 广播数据报:目的 MAC 为广播地址,询问下一跳设备的 MAC 地址。

在这里插入图片描述

3.5 路由器:路由 + NAPT

路由器主要有两个作用:

  1. 功能一:网关

公网是指连接全球范围的互联网,它由各种网络设备和基础设施组成,用于在全球范围内实现信息传输和数据交换。公网可以被任何人访问和使用,例如访问网站、发送电子邮件、视频通话等。而子网是指在一个大的网络中划分出来的较小网络。

路由器作为网关,可以划分公网和局域网,某些路由器还可以将局域网划分为多个子网

公网端口即 WAN 口,为单独的网卡,具有公网 IP 地址和公网 MAC 地址。划分的多个子网,是由局域网端口即 LAN 口划分,每个端口都有单独的网卡,具有该网段 IP 地址和 MAC 地址。
在这里插入图片描述
路由器作为网关:

  1. 划分局域网多个子网时,可以直接通过 ARP 寻址找到局域网任意主机。
  2. 划分公网和局域网时,局域网内主机发送数据报到公网主机时,需要基于 NAPT 协议,将局域网主机的 IP 地址和端口号,转换为路由器公网 IP 和端口号

在公网和局域网的划分中,局域网主机发送数据报到公网主机时需要将其 IP 地址和端口号转换为路由器公网 IP 和端口号的主要原因如下:

  • 公网 IP 资源有限:IPv4 地址数量有限,无法为每个局域网主机都分配一个独立的公网 IP 地址。
  • 不直接使用局域网的 IP 和端口可以避免暴露局域网的拓扑结构和主机信息,增强网络安全。
  • 公网的路由规则:公网中的路由器根据公网 IP 地址进行路由转发数据。局域网的 IP 地址在公网中不被识别和路由。

所以这个转换的目的是有效地利用有限的公网 IP 资源、保障网络安全、遵循公网的通信规则

  1. 功能二:路由

所谓路由,即在复杂的网络结构中,找出一条通往终点的路线;网络通信(网络数据传输),路由器中的路由功能,就类似于规划路线,往哪个方向行进能更快到达目的地。

3.6 冲突域

主机之间通过网络设备、网线相连时,两个主机在同一时刻同时发送数据报,如果存在冲突,则该网络范围为一个冲突域。

因为同一时刻,网络设备只能接收并转发一个数据报,多余的会丢弃,让发送端主机重新发送,要解决冲突,就得按时间顺序来发送多个数据报,冲突域基于物理层。

集线器接收到数据报后,是将数据报简单的复制、转发到其他所有端口,如果有两个数据报要同时转发,就会出现冲突。整个集线器,即集线器的所有端口为一个冲突域。

在这里插入图片描述
交换机接收到数据报后,是将数据报转发到对应的一个端口:两个数据报同时转发到不同端口不存在冲突,但同时转发到一个端口就出现冲突。即交换机可以分割冲突域,分割后,一个端口为一个冲突域。
在这里插入图片描述

3.7 广播域

广播是指某个网络中的主机同时向网络中其它所有主机发送数据,这个数据所能传播到的范围,广播域基于第二层数据链路层。

集线器接收到广播数据报,仍是简单的复制、转发到其他所有端口,所以集线器的所有端口为一个广播域。
在这里插入图片描述
交换机接收到广播数据报,会转发到其他所有端口;而路由器可以隔离广播域,路由器某个 LAN 口网卡接收到广播数据报,如果发现是同网段,则丢弃,即广播数据不会扩散到路由器以外。

在这里插入图片描述

3.8 网络数据传输流程

3.8.1 局域网传输流程:集线器

使用集线器网络互联的情况下,发送端主机发送数据包时,需要先从上到下封装数据报。但封装时,目的 MAC 可能并不知道,需要先进行 ARP 寻址:

  1. 发送端在本机 ARP 缓存表中,根据目的 IP 查找对应的 MAC 地址
  2. 如果找到,则可以在数据链路层以太网帧头中,设置目的 MAC 并发送数据包
  3. 如果没有找到,需要先发送 ARP 广播请求,让接收端,即目的主机告诉自己,目的 MAC 是多少
  4. 发送端更新本机 ARP 缓存表:保存目的 IP 与目的 MAC 的映射
  5. 有了目的 MAC,就可以按照第(2)个步骤发送数据了。

在这里插入图片描述
如果本机ARP缓存表中找不到目的MAC,则需要先发送广播请求:
在这里插入图片描述

3.8.2 局域网传输流程:交换机

在这里插入图片描述

3.8.3 局域网传输流程:交换机+路由器

在这里插入图片描述

3.8.4 广域网数据传输流程

在这里插入图片描述

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ice___Cpu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值