网络层协议

目录

一、网段划分的发展过程

(1)固定长度的网络号

(2)子网掩码---网络号长度不再固定

二、公有IP和私有IP

(1)私有IP

(2)NAT技术

三、IP协议报头

分片操作

四、查看一下linux中的路由表


一、网段划分的发展过程

(1)固定长度的网络号

在讲IP协议之前,我们要了解一件事:在网络刚开始被设计出来的时候,是只有公网IP的,采取的是IPv4(Internet Protocol version 4)即互联网协议第4版,IPv4地址采用32位地址长度,分为四组8位二进制数,每组以十进制表示,范围从0到255,例如192.168.1.1。

而路由器工作的原理是,在某一个路由器下的主机的IP地址配置成前面若干位数相同,这个我们称之为网络号,在同一个路由器下的主机使用IP地址的后若干位数来区分,这个我们叫做主机号。

那么根据路由器的工作原理,我们天然就需要把IP地址分组,供路由器们使用。在网络前期,人们采取的是把IP地址分为5类,根据子网的大小来选择合适位数的网络号和主机数量。

比如你是一个大公司,你的子网下的主机数量肯定很多,那么你就申请A类或者B类IP,这样你网络号占据的比特位就很少,而留给主机号的位数就很多。同理,小公司或者家庭的主机数量很少,所以需要的主机号也很少,只需要申请C类IP也够使用了。

在网络发展的前期没有那么多主机使用,所以这样的划分方式是可行的,但是随着网络的迅猛发展,人们很快发现IP竟然不够用了。为什么呢?因为这种方式划分的网段(子网)太过于死板,很多情况下某一个网络号的主机号都没有被使用干净,就比如你一个家庭明明只有三台主机,但是你却申请到了一个A类IP,那么你就浪费了许多的IP地址。

(2)子网掩码---网络号长度不再固定

于是人们想了一个办法-----子网掩码。子网掩码能有效的缓解IP地址浪费的问题。

可见,IP 地址与子网掩码做与运算可以得到网络号, 主机号从全 0 到全 1 就是子网的地

址范围。

IP 地址和子网掩码还有一种更简洁的表示方法,例如 140.252.20.68/24,表示 IP 地址为

140.252.20.68, 子网掩码的高 24 位是 1,也就是 255.255.255.0

因为子网掩码的32个比特位中的前若干位都可以为1,即网络号不再和以前一样是固定的大小,而是任意的个数。只要IP地址按位与上子网掩码得到的就是网络号。子网掩码的网络划分方式极大程度上的缓解了IP地址浪费的问题。

在此时,主机的数量仍然不是很多,如果每一个主机都有一个IP地址的话似乎也够用。

但是随着网络的发展,人们很快意识到,全球的主机数量已经远远超过IPv4的2的32次方个了。那么如果一台主机仍然分配一个固定的IP地址,是显然不可取的。在此基础上,人们优化了IP地址的分配规则,不再是固定分配的,而是根据主机的联网使用情况动态分配主机号(即IP地址),我们把这个技术叫做DHCP。

DHCP是技术是集成在路由器中的,打个比方说:你这个路由器下有3位可以用作主机号,那么你最多就可以有8台主机(实际上要减去2台,0号表示网络号,主机号全1表示向该子网做广播)即最多可以连接6台主机,但是你现在有10台主机要连接怎么办呢?如果你的10台主机不是每一时刻都要使用,则可以让路由器给当前在使用的主机分配一个主机号,而当前没有使用的主机则不分配主机号,从而达到动态分配主机号(IP)的效果,提高IP地址的使用率。

DHCP技术,是一种锦上添花的技术。实际上真正能解决的问题的策略只有两种:

(1)使用IPV6协议,扩大IP地址的位数至128位,这样能表示的主机号就非常大了。

(2)采取公有IP/私有IP的办法,使得同一个IP在不同的子网内可以重复利用。

由于网络发展的原因,IPv6协议并没有得到广泛的使用,且IPv6和IPv4并不兼容,推广起来比较困难,所以现实生活中全球都是采取的公有IP和私有IP来解决IPv4中IP地址不够用的问题的。

二、公有IP和私有IP

(1)私有IP

如果一个组织内部组建局域网,IP 地址只用于局域网内的通信,而不直接连到 Internet 上,理论上 使用任意的 IP 地址都可以,但是 RFC 1918 规定了用于组建局域网的私有 IP 地址。

可以根据我要建立的子网的大小来选择是使用功能10开头还是172开头亦或者是192开头,这取决于我的主机数量。

**而私有IP的特点是,不能入公网,且在不同的私网下IP是可以重复的。**即今天在我家的路由器下,我可以使用192.168.0.1作为我电脑的IP,别人也可以在自己的路由器下使用192.168.0.1作为他电脑的IP。(因为私有IP不入公网,如果要进行不同子网的网络通信会采取NAT技术,后面再讲)

(2)NAT技术

前面我们说了两个子网可以使用相同的私有IP地址,那么两个子网的主机如果想要进行通信呢?怎么解决私有IP相同而找不到目标主机的问题呢?这就是我们的NAT技术。

比方说我现在要访问一个公网ip地址122.77.241.3

路由器要做的事情:

(1)接收自己子网的私有IP地址,将其替换成路由器WAN口的IP

(2)在自己路由器的路由表中查看,有没有和目的IP网络号相同的,如果没有将IP报文向下一个缺省路由器做转发。(这个路由器我们称为内网(私网)路由器)

(3)当某个路由器在自己的路由表中发现了公网IP且和我目的的IP的网络号相同,则转发给改公网IP。(这个路由器我们称为出入口路由器,用来进行公网和私网的数据传递)

也就是说,世界上的所有主机都是在一层层的私网中的,这些个私网由运营商来统一管理,当我们要进行网络通信的时候,本质是把数据报发给运营商的路由器,由运营商一步步往上层传递,直到传递到公网IP中。

在了解了网络的基础原理后,我们再来看看真正的IP报头。

三、IP协议报头

这些字段都比较好理解,不过我们要注意其中的:16位标识,3位标志,和13位片偏移。

这涉及到分片和重组操作。

分片操作

由于数据链路层的物理特性,一般在最底层无法转发太大的数据,一次性可以转发到交换机中的网络报文限制是1500字节(这个我们称为MTU),但是实际上由于有IP报头,TCP/UDP报头的存在,实际上留给应用层的空间会小于1500字节。比如IP报头和TCP报头都是20个字节的话,那么应用层的空间就是1500-20*2=1460个字节。这个我们称为MSS,而MSS是在刚开始通信的时候,双方要进行协商达成的。

所以一旦数据包太大,在网络层就会将TCP/UDP报文分片,给每一个报文一个序号,序号相同的要组装到一起。

首先我们来看看这个16位标识。

他的意思是IP报文的序号,如果IP报文不用分片就是一个单独的序号,一旦IP报文分片了,则这些小片的16位标识全都必须是一样的序号,这样对端在收到IP报文的时候就能把同一个数据报的小片拼接起来,并向上层传递。

而13位片偏移就好像TCP协议中的32位序号,表示该小片在原本的数据中的偏移量,这样对方在收到数据后就能根据偏移量一个个还原到原本的位置。

3位标志中的第一位是没有使用的,第二位为 1 表示禁止分片, 这时候如果报文长度超过 MTU, IP 模块就会丢弃报文。 第三位表示"更多分片", 如果分片了的话, 最后一个分片置为 0, 其他是 1.。类似于一个结束标记。

四、查看一下linux中的路由表

Gateway是网关的意思,表示从Destination主机可以发送到另外哪一个主机的IP地址

相关推荐
西北大程序猿35 分钟前
文件系统 linux ─── 第19课
linux·运维·服务器
一匹电信狗1 小时前
浅谈Linux中的Shell及其原理
linux·服务器·c语言·开发语言·c++·ssh·unix
SAP-ZX1 小时前
SAP IBP for Supply Chain Certification Guide (Parag Bakde, Rishabh Gupta)
运维
IT 小旋风1 小时前
Linux系统安全及应用
linux·运维·系统安全
泡泡里的月亮1 小时前
【docker】Windows10启动Docker Desktop - WSL update failed
运维·docker·语言模型·容器
wjf630002 小时前
CentOS 7 系统上安装 SQLite
linux·运维·centos
Damon小智2 小时前
玩转云服务器——阿里云操作系统控制台体验测评
服务器·数据库·阿里云
曹天骄3 小时前
NAT 和 IP 直接通信的区别
服务器·网络协议·tcp/ip
迷茫、Peanut3 小时前
嵌入式学习L6网络编程D3TCP
服务器·网络·嵌入式硬件·学习·tcp/ip
pp-周子晗(努力赶上课程进度版)3 小时前
Linux 进程的创建、终止、等待与程序替换函数 保姆级讲解
linux·运维·服务器