IP协议+网络层

个人主页:Lei宝啊 

愿所有美好如期而遇


基本概念

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

协议头格式

首先我们介绍四位版本,他是用来指定IP协议的版本,对于IPV4来说,就是4.

四位首部长度,就是用来标识报头的大小,4位首部长度能表示的最大值为15,这里是按照乘4来计算,也就是说,他能表示的最大长度为60,前面固定的部分为20字节,我们也就可以通过这个字段来知道选项的大小。

8位服务类型,3 位优先权字段(已经弃用), 4 TOS 字段, 和 1 位保留字段(必须置为 0). 4 TOS 分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于 ssh/telnet 这样的应用程序, 最小延时比较重要; 对于 ftp 这样的程序, 最大吞吐量比较重要。

16位总长度计算的是包含包头在内的整个报文的大小。

第二列我们不做介绍。

8位生存时间,就是说,假如一个报文在网络转发过程中出现了环路转发,那么这个报文将永远不会消失,一直在网络中占用资源,而如果这样的报文过多,那么网络就必然会拥塞,甚至无法再传输报文,所以这个字段规定了报文的生存时间,即使出现这样的问题,生存时间到了,也就不再转发这个报文,也就被销毁了。

8位协议,表示上层协议的类型,Udp或Tcp协议。

32位源Ip地址,这是IPV4,如果是IPV6,这个字段是128字节,所以说他们两者是不兼容的。32位目的IP地址也是如此。 

网段划分

IP地址划分为两个部分,网络号和主机号,就像这样127.0.0.1/24,意思就是前24个比特位,就是网络号,后面8位就是主机号。

网络号用来标识不同的网段,而主机号用来标识同一网段下不同的主机,那么也就是说,不同网段下的主机号是可以相同的。

子网是什么?其实子网就是将网络号相同的主机放在一起,这样,主机之间发送消息时,一次筛选一个子网,效率就会高很多。如果在一个子网中新增一台主机,那么这个主机的网络号和子网的网络号相同,但是主机号不能和子网中任意主机的主机号重复。

这里我们要知道网络是被精心设计的,是被谁设计的呢?怎么设计的?我们来详谈。
网络是被运营商精心设计的,在没有路由器等基础设备时,仅仅只有局域网内通信,后来运营商将各种基础设施铺设到人们所在的城市,在这样的基础之上发展出了跨网络通信,但是随之而来的有一个问题,就是IP地址不足的问题,因为IP地址只有32位,也就能够支撑42亿多的主机,但是全球可不止这些主机,是怎么解决或缓解的呢?-->就是网段划分,过去曾经提出过一种方案,把所有IP地址划分为5类,如下图所示:

但是随着网络的飞速发展,这种方案的局限性很快就体现出来了,大多数组织都申请B类IP地址,导致B类地址很快分配完了,而A类却浪费了大量的地址,这里解释一下为什么大多数组织都申请B类地址,因为申请了一个B类地址,理论上这样一个子网能够允许的主机有2的16次方,也就是六万五千多,不少也不多,A类太多,C类太少。
针对这种情况提出了CIDR,也就是子网掩码的方式,引入了一个子网掩码来区分网络号和主机号,子网掩码也是32位,将IP地址和子网掩码按位与,得到的结果就是该IP地址所在子网的网络号,而网络号与这个IP地址是什么类无关。这里我们也就能解释为什么需要进行子网划分,划分子网后,发送一个报文时,将他的目的IP地址与当前子网的掩码按位与,就能够判断当前报文是否要前往该子网,不是则继续向上转发(这个我们会画图解释)。

现在我们来解释运营商是如何精心设计网络的。
首先我们要知道,路由器是可以组建局域网的,而一个局域网内的主机是可以直接进行通信的。同时,路由器一般是要横跨两个网络的,他会有两个IP地址:

我们可以发现,不同运营商组件的子网,他们的子网IP是可以相同的,并且不同子网中的主机的IP可以重复,但是最外层运营商的IP就是公网IP了,他们是唯一的。
这里我们就要说明一下私有IP地址和公网IP地址,私有IP地址也就是内网地址,他们是可以在不同的子网中重复的,而公网IP是不允许重复的。如果一个组织内部组建局域网,IP 地址只用于局域网内的通信,而不直接连到 Internet , 理论上使用任意的 IP 地址都可以,但是 RFC 1918 规定了用于组建局域网的私有 IP 地址:

10.*, 8 位是网络号 , 16,777,216 个地址
172.16.* 172.31.*, 12 位是网络号 , 1,048,576 个地址
192.168.*, 16 位是网络号 , 65,536 个地址
 
剩下不在这个范围内的IP地址,就全部是公网IP地址了。
接下来,我们接着上面的图解释不同子网间的主机如何通信,主机如何访问服务器。

我们看图:

首先,发送报文的主机能够判断出要发送的报文一定不是他所在的子网,因为他的IP地址与子网掩码按位与后得出的网络号是192.168.1.0,而dst与子网掩码按位与后得出的网络号是122.77.241.0,所以该报文就会被直接转发到家用路由器中,但是家用路由器也会发现,这个报文一定不是他所在的子网10.1.1.0,所以他只能接着转发,交给了运营商路由器,于是这个路由器就发现要去的报文是在他所在的子网中,而这个子网就是公网,于是他就将这个报文交给了服务器主机。但是我们会发现一个问题,服务器向谁发回报文呢?向192.168.1.201发回?但是,私有IP地址是不能出现在公网中的,即使他能,不同的子网中(内网),这种IP地址是可以重复的,也就无法确定是发回给哪台主机的,这个报文也就发不回去了。

这就有了NAT技术:

子网内的主机需要和外网进行通信时 , 路由器将 IP 首部中的 IP 地址进行替换
( 替换成 WAN IP), 这样逐级替换 , 最终数据包中的 IP 地址成为一个公网 IP. 这种
技术称为 NAT(Network Address Translation ,网络地址转换 ).
当报文到达家用路由器时,src地址就被替换成10.1.1.3,当这个报文再到达运营商路由器时,src地址就被替换为122.77.241,于是这个报文在到达服务器主机时,我们也就能保证,至少服务器的应答能够到达目标主机所在的出入口路由器中,所以,在公网中的报文,他的源ip和目的ip也就绝不会是私有ip。至于报文返回到了运营商出入口路由器,再如何返回到我们的主机,我们后面的文章会提到。
但是,经过上面我们的解释,我们就发现,新增一个公网IP,这个公网IP下面就可以挂靠一个大的子网,而这个子网中的IP地址是可以与其它子网中的IP地址重复的,于是,这样就相当于变相的增加了IP地址的上限了。
所以,我们所有人上网,都是在内网中访问的,通过运营商转发到公网去访问公网上的服务器,再由运营商给我们将消息转回来。
那么网络是被精心设计的,这是怎么体现的?
我们这里简单认为IP地址是按照国家来进行划分的(尽管这样不全面,但是好画图,方便我们理解)
全世界有197个国家,我们可以用IP地址的前8位来唯一标识一个国家,就像这样:
而红圈我们表示他们在一个局域网内,紫色的圈我们表示国际路由器的IP地址,我们以我们国家为例,我们国家有34个省级行政区,需要6个bit位进行表示,于是上面的图我们可以更新为:
再下面,就由运营商路由器进行接管,构建一个个的子网。
那么接下来就剩下最后一个问题,就是报文在发送过程中,如何进行路径选择?这个就涉及到路由器内的路由表,因为一个局域网下的主机是可以直接通信的,所以他们在局域网建设好后,就知道了自己所在局域网下的其他主机,就会在构建类似于这样的路由表:
Destination表示目的地址,Gateway表示下一跳地址,Genmask表示子网掩码,Flags中U表示此条目有效,G表示此条目的下一跳是路由器地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经由路由器转发,Iface就是接口。default表示默认路由,如果说要发送的报文在下面的条目中找不到对应的IP地址,那么就发送到默认路由中由他进行转发。
本章节对于IP协议头格式中,有三个字段未解释,我们将于下篇文章,Mac帧地址中进行解释。
  • 11
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Lei宝啊

觉得博主写的有用就鼓励一下吧

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

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

打赏作者

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

抵扣说明:

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

余额充值