一、协议栈

1.1 七层OSI协议栈

完整的OSI协议总共有7层,如下图所示:

1.2 五层TCP/IP协议栈

在实际应用中,业界又产生了简化的五层 TPC/IP 协议栈,将 OSI 协议栈中的会话层、表示层、应用层统称为应用层。

1.3 四层TCP/IP协议栈

在五层TCP/IP协议栈的基础上,进一步将物理层、数据链路层统称为链路层。

二、IP 地址、子网掩码、网关

2.1 IP 地址及分类

IP 地址相当于互联网上的门牌号,计算机在启动的时候可以从磁盘(无盘系统例外)上读取该主机的 IP 配置。

IP 地址由 4 个字节(也就是 32 位)的二进制码组成,包含了网络号( net-id )主机号( host-id )。但现实中,我们经常还需要再继续划分“子网”,这时就需要借用主机号的一部分充任子网号,这样 IP 地址也就可以看成由标准网络号、子网号、主机号3 部分组成的,即IP地址=标准网络号+子网号+主机号

网络号、子网号、主机号三者间的关系,形象的描述如下:假设你的住址 IP 是武汉市文治街16号,那么,
IP 地址 = 武汉市文治街 16 号
网络号 = 武汉市
子网号 = 文治街
主机号 = 16 号

IP 地址种类 二进制组成(前缀位+网络位+主机位) IP 范围 网络数 主机数/网络
A 类地址 0+7 位网络号+24 位主机号 1.0.0.0 - 127.255.255.255
B 类地址 10+14 位网络号+16 位主机号 128.0.0.0 - 191.255.255.255
C 类地址 110+21 位网络号+8 位主机号 192.0.0.0 - 223.255.255.255
D 类地址 1110+多播地址(用于多播) 224.0.0.0 - 239.255.255.255 - -
E 类地址 1111+保留位(不开放, 保留使用) 240.0.0.0-249.255.255.255 - -

从表中可以看出,A 类 IP 的第 1 位(二进制位)必须是 0,所以 A 类 IP 的第一个整数的范围是0000 0000 ~ 01111 11111,转换为十进制就是0 ~ 127,以此类推。

关于网络数的解释

网络数就是一种网络的子网数, 比如 A 类地址, 可以分为多少个子网。看表格可以推出网络数的计算公式为:
规定网络地址全为0的 IP 地址是保留地址,意思是“本网络”。

  • 在 A 类地址中,实际上 0.0.0.0 是不指派的,而可以指派的最小网络是 1.0.0.0;网络地址为 127 的 A 类 IP 地址保留作为本地软件环回测试本主机的进程之间的通信(比如常用的 127.0.0.1但实际上网络地址为127的都可以用作本地环回地址)。所以 A 类地址网络数为
  • 在 B 类地址中,实际上 128.0.0.0 是不指派的,而可以指派的最小网络是 `128.1.0.0,所以 B 类地址网络数是
  • 在 C 类地址中,实际上 192.0.0.0 是不指派的,而可以指派的最小网络是 192.0.1.0,所以 C 类地址网络数是

关于主机数的解释

主机数就是一个子网里面可以容纳多少台主机。看表格可以推出主机数的计算公式为: 2^主机号位数-2。主机号全为 0 表示该网络,而主机号全为 1 表示广播地址,所以要排除掉这两个。比如 A 类地址 1.0.0.0 表示主机所在的网段的网络地址, 1.255.255.255 为该网段的广播地址。

2.2 私有 IP 地址

经常可以看到192.168.1.101这类的 IP 地址, 这些是私有 IP 地址, 专用地址, 也就是局域网内使用的的 IP 地址。
公网 IP 地址是需要向有关部门申请备案的,私有 IP 地址不用申请, 但是仅限内网使用, 也节约公网 IP。

IP 地址种类 私有 IP 范围
A 类地址 10.0.0.0 - 10.255.255.255
B 类地址 172.16.0.0 - 172.31.255.255
C 类地址 192.168.0.0 - 192.168.255.255

路由器看到专用地址就不转发,所以说专用地址作为目的地址是不可能在因特网上传送的。专用 IP 地址也可叫做可重用地址。那好,问题来了,如果配置了这些专用地址的主机想和因特网上的主机通信,怎么办呢?NAT(network address translation: 网络地址转换)在这种情况下就应运而生了。NAT 就是将这种地址转换成有效的外部全球 IP 地址,使得整个专用网只需要一个全球 IP 地址就可以与因特网联通。

2.3 子网掩码

IP地址=标准网络号+子网号+主机号。从 IP 分类可以很容易确定“标准网络号”,32bit的 IP 地址除去前面的“标准网络号”之后,剩下的就是“子网号”和“主机号”,那么怎么确定“子网号”和“主机号”了? 这就需要借助“子网掩码”了。子网掩码也是一个 32bit(xxx.xxx.xxx.xxx)的值,其中值为 1 的 bit 留给“标准网络号”和“子网号”,为 0 的 bit 留给“主机号”。我们可以将子网掩码和 IP 地址进行二进制“与运算”,通过得到的结果来确定“子网号”。

以 C 类 IP 地址为例,对于规范的 C 类 IP 地址来说,规范子网掩码为255.255.255.0,即用 32 比特 IP 地址的前 24 比特标识网络号,后 8 比特标识主机号。因而,每个 C 类网络下共可容纳 254 台主机()。 如今,我们先思索借用 2 比特的主机号来充任子网络号的情形。

C 类网络地址210.31.233.0,我们借用 2bit 的主机号来充当子网号,子网的数目为(子网号无法全为 0 或 1,所以减 2).

为了借用原来 8 位主机号中的前 2 位充任子网络号,采用了新的非规范子网掩 255.255.255.192。
采用了新的子网掩码后,借用的 2 位子网号可以用来标识两个子网:01 子网和 10 子网(子网号无法全为 0 或 1,因而 00、11 子网无法用)。

对于上图的 01 子网来说,其网络号的点分十进制的方式为:210.31.233.64,该子网的最小 IP 地址为:210.31.233.65,最大 IP 地址为:210.31.233.126(主机号全为 1 位广播地址),共可容纳 62 台主机。对该子网的直接广播地址为:210.31.233.127(主机号全为 1)。

经常见到像192.168.1.0/24这样的写法,它的意思是网络号为192.168.1.0;子网掩码为 24 位,即111111111 111111111 111111111 00000000,转为点分十进制就为255.255.255.0,没有借用主机号来充当子网号,可以拥有的主机数为-2.

2.3 网关的作用

你的住址 IP 是武汉市洪山区文治街16号,你的父母只允许你和文治街的小朋友(同一个子网)一起玩耍,如果你想要去和别的街道(别的子网)的小朋友玩耍,你就需要经过你的父母的同意,由你的父母带你过去,这时候你的父母就充当了网关的角色,没有你的父母,你就不能和其他街道(其他子网)的小朋友玩耍。

三、包的封装与解封装

封装英文:Encapsulation
解封装英文:Demultiplexing

当应用程序使用网络传送数据时,数据按照协议栈从上到下的顺序,逐次通过每一层。其中每一层对收到的数据都要增加一些首部信息(有时还增加尾部信息)。最终生成一串比特流通过以太网来传输,我们称这串比特流叫帧。
如图:

当数据报到达链路层时,链路层也要对 IP 数据包封装进行包装。链路层也要对 IP 数据包封装的方式主要有以太网IP数据包封装(RFC894)、IEEE 802 IP数据报封装(RFC1042)两种,最常使用的封装格式是以太网 IP 数据包封装(RFC894)。下图显示了这两种不同形式的封装格式:

从图中可以看到以太网封装限制了数据帧的最大长度为 1500 字节,这个限制叫做 MTU,最大传输单元(详见第四节)。

接收端收到帧之后,按照和上面相反的顺序(协议栈从下到上)来解包,依次解析每一层加入的头部(或尾部),最终将原始数据传给最上层应用程序。
如图:

因为传输层的 TCP、UDP、ICMP 等都有可能向网络层 IP 协议传送数据,这样在 IP 协议层解包的时候,需要知道这个包对应的上层协议是哪一个,因此 IP 协议必须在生成的 IP 首部加入某种标识,以表明数据的上一层的具体协议。为此,IP 在首部中存入了一个长度为 8bit 的数值,称作协议域。常见的 IP 协议号有:
1 表示 ICMP 协议,2 表示 IGMP 协议,6 表示 TCP 协议,17 表示 UDP 协议。

完整的 IP 协议号见:IP 协议号列表

四、MTU

前面第三节提到了以太网封装限制了数据帧的长度为 1500 字节,这个限制是在链路层封装 IP 数据报时作的。如果 IP 层的数据报比链路层的这个 MTU 值大,那么 IP 层就需要分片(英文:fragmentation),把数据报分成若干片,保证每一片的大小都小于 MTU 值。

windows 系统修改 MTU 值

  • 查询当前 MTU 值
1
netsh interface ipv4 show subinterfaces

  • 修改 MTU 值
1
netsh interface ipv4 set subinterface "本地连接" mtu=1480 store=persistent

文章参考:
https://m.vipcn.com/a/360973/ > https://ahaochan.github.io/posts/IP_address,_subnet_mask,_gateway_Introduction.html > https://www.zhihu.com/question/20717354

《TCP/IP 详解 卷 1:协议》在线阅读地址:http://www.52im.net/topic-tcpipvol1.html

文章图片带有“CSDN”水印的说明:
由于该文章和图片最初发表在我的CSDN 博客中,因此图片被 CSDN 自动添加了水印。