一、协议栈
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 台主机(
C 类网络地址210.31.233.0
,我们借用 2bit 的主机号来充当子网号,子网的数目为
为了借用原来 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 自动添加了水印。