网络协议 -- 基础概念

一、TCP/IP协议栈

网络协议 -- 基础概念_第1张图片

二、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 2 7 − 2 2^7-2 272 2 24 − 2 2^{24}-2 2242
B类地址 10+14位网络号+16位主机号 128.0.0.0 - 191.255.255.255 2 14 − 1 2^{14}-1 2141 2 16 − 2 2^{16}-2 2162
C类地址 110+21位网络号+8位主机号 192.0.0.0 - 223.255.255.255 2 21 − 1 2^{21}-1 2211 2 8 − 2 2^8-2 282
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类地址, 可以分为多少个子网。看表格可以推出网络数的计算公式为: 2 网 络 号 位 数 2^{网络号位数} 2
规定网络地址全为0的IP地址是保留地址,意思是“本网络”。

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

关于主机数的解释

主机数就是一个子网里面可以容纳多少台主机。看表格可以推出主机数的计算公式为: 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 8 − 2 2^8-2 282)。 如今,我们先思索借用2比特的主机号来充任子网络号的情形。

C类网络地址210.31.233.0,我们借用2bit的主机号来充当子网号,子网的数目为 2 2 − 2 2^2-2 222(子网号无法全为0或1,所以减2).
网络协议 -- 基础概念_第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 8 2^8 28-2.

2.3 网关的作用

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

相关文章:
WebRTC – IP地址
网络地址结构、转换函数介绍
debain 配置IP和DNS

三、包的封装(encapsulation)与解封装(Demultiplexing)

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

当数据报到达链路层时,链路层也要对IP数据包封装进行包装。链路层也要对IP数据包封装的方式主要有以太网IP数据包封装(RFC894)、IEEE 802 IP数据报封装(RFC1042)两种,最常使用的封装格式是以太网IP数据包封装(RFC894)。下图显示了这两种不同形式的封装格式:
网络协议 -- 基础概念_第4张图片
从图中可以看到以太网封装限制了数据帧的最大长度为1500字节,这个限制叫做MTU,最大传输单元(详见第四节)。

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

因为传输层的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值
netsh interface ipv4 show subinterfaces

网络协议 -- 基础概念_第6张图片

  • 修改MTU值
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

你可能感兴趣的:(☆,网络编程,网络协议)