网络层协议之IP协议

网络层主要做两方面事情:

1.地址管理:制定一系列规则,通过地址描述出网络上的一个设备的位置

2.路由选择:网络环境复杂,从一个节点到另一个节点之间有很多条路径,这就需要通过路由选择来筛选/规划出更合适的路径进行传输。

所以我们接下来讲解到IP协议,也是从这两方面进行展开

一.IP协议报文格式

4位版本:指定协议的版本。如果这里的数据是4,就表示此协议版本是IPv4;如果是6就表示IPv6

4位首部长度:与TCP的一样,IP的报头也是变长的,因为下面的选项可有可无,可以是一个也可以是多个。4个比特位表示的范围是0~15,每个比特位的单位是4字节,所以首部长度最长是15*4=60个字节(也就是选项拉满),最短是20个字节(也就是没有选项)。

8位服务类型:这个字段能够让IP协议切换形态。其实只有4位是有效的(因为前面的三位已经弃用,后面的一位是保留位)这四位叫做TOS字段(Type Of Service),其中分别对应最小延迟,最大吞吐量,最高可靠性,最小成本。这四者是相互冲突的,只能让其中的一个为1.

16为总长度:描述了一个IP数据报最长是多长。16位可以表示2^16-1字节,相当于是64kb。这样看,IP协议好像是存在64kb限制,但实际上,IP协议是支持拆包组包功能的(而不同于UDP,UDP的拆包组包不是自带的,必须自己在代码中实现)

16位标识,3位标志,13位片偏移,这三个属性就是在支持拆包组包。假设一个打包要拆成若干个小包,那么这若干个小包的16位标识就是相同的数值;组抱歉要知道数据的发送顺序,这13位片偏移就是描述了当前每个小数据包(分片)的相对位置,片偏移越小就说明数据越靠前;3位标志位只有两位是有用的,一位表示是否允许拆包,一位表示是否是最后一个包(这就类似于单链表的结束标志,1表示后面还有包,0表示后面没有包了),最后还有一个保留位

注意,若哪天被问到如何基于UDP实现拆包组包,就可以模仿上面的进行回答

8位生存时间:描述了该IP数据包在网络上还能存活多久。生存时间即Time To Live,所以也叫做TTL,它的单位是次数。在IP数据包构造出来时,TTL就会被设置成一个初始值(32,64,128……),包在转发过程中,每经过一个交换机或路由器,TTL的值就hi减一。若包已经把TTL耗尽了还没有顺利到达对方,就会被丢掉

这个机制是很有用的,可以给网络兜底:假如一个包的目的IP是一个不存在的IP,这包就不可能到达目的地,所以TTL就起作用了

8位协议:描述了数据报的载荷部分是TCP还是UDP数据包,也就是传输层是什么协议

16位首部检验和:它只校验IP首部,而不校验IP载荷,因为IP载荷就是TCP/UDP数据包,它们自身就携带校验和

32位源IP,32位目的IP:这是IP协议中最重要的部分

二.地址管理

现在我们一般都是用IPv4进行IP地址的管理

IPv4是一个32个比特位的整数,能够表示大约42亿9千万个地址。但是现在,这个数字好像是不够了。互联网发展到今天,能上网的设备已经非常多了,早超过了这个数字,甚至出现了物联网,向冰箱,电视,汽车等都有IP地址,所以IPv4显然不够用了

1.如何解决IPv4数量不够的问题

方案一:动态分配IP

上网的设备就分配,不上网的设备就不分配。

这个方案明显治标不治本,它仅仅是提高了IP地址的利用率,但是并没有增加IP地址的数量。

不过,这个方案任然是被普遍使用

方案二:NAT技术(网络地址转换)

这个技术的关键就是让一个IP地址代表一大批设备。是用于在本地网络中使用私有地址,在连接互联网时转而使用全局 IP 地址的技术。NAT实际上是为解决IPv4地址短缺而开发的技术。

公网和私网:

首先来了解一下公网和私网:IP可以分为Public IP 和 Private IP,出现这种规划的原因在于IPv4所能表示的IP太少而电脑太多以至于不够用,然而只有Public IP才能直接连接上网络,所以对于那些公司,学校,政府机构等场所,就可以集中使用私有的IP进行管理,而大家可以共用一个IP去连接上公网,这样,就省下了许多宝贵的Public IP。

我们用命令行输入ipconfig,查到的IP和从百度上查到的IP不一样:

在ipconfig查到的是192开头的,而在百度上查到一个外网IP(其实就是本机的公网IP)。所以其实在命令行查到的是你的私网IP(或者叫内网IP),此类地址仅在局域网中使用,不能联通外网;而在百度上查到的IP是上网的共有地址,也许并不是你的主机所在位置,而是电信联通等网络运营商分配给你的地址,用于连接互联网。

内网IP:也就是局域网IP,它是以10.或172.16~172.31或192.168开头的

外网IP:也是广域网IP,除内网IP之外。

在同一个局域网内部,内网IP不能重复,在不同的局域网,可以用相同的内网IP。但外网IP始终不可以重复。

当前情况下,通常都是一个小区/公司/学校构成一个大的局域网(这个网中有成千上万台设备),这样的局域网就使用一个外网IP即可。

NAT机制具体是怎样工作的?

比如左边的想要访问右边,左边有一个内网IP10.1.1.1,首先经过运营商路由器(它也是一个NAT设备),就能对源IP进行替换,将源IP替换成外网IP202.168.2.2(也就是它所在局域网被分配到的一个共同IP),然后传输到主机B;当主机B返回响应时,到了NAT设备后,就会将目的IP202.168.2.2替换成10.1.1.1(为什么能够替换呢?因为在NAT内部有一张转换表,记录了映射关系:里面记录着刚才是10.1.1.1的主机向172.20.7.3发送了请求,现在响应报文回来了,就要把IP替换回去)。

所以此时,运营商路由器就相当于是一个中转站。

问题:如果有多台设备都向主机B发起请求,那怎么进行转换?——NAPT

这时 ,端口号就有作用了。客户端这边的端口号是系统随机分配的,一般来说,分配到端口号是不同的,所以当服务器返回响应时,NAT设备就可以通过端口号来将行营返回给对应的客户端。所以端口号不仅可以区分同一个主机上的不同进程,也可以区分同一个局域网内部的不同主机!!

这就是NAT技术的改进:NAPT

问题:假设两台主机恰好被分配到了相同的端口号,又该怎么处理?

这时,在将请求转发给服务器之前,NAT设备会主动将相同发端口号替换成不同端口号,并在记录表中做好记录。

在整个流程当中,最关键的有以下几点:
  • 网络被分为私网和公网两个部分,NAT网关设置在私网到公网的路由出口位置,双向流量必须都要经过NAT网关
  • 网络访问只能先由私网侧发起,公网无法主动访问私网主机
  • NAT 路由器在两个访问方向上完成两次地址的转换或翻译,出方向做源信息替换,入方向做目的信息替换;
  • NAT 路由器的存在对通信双方是保持透明的;
  • NAT 路由器为了实现双向翻译的功能,需要维护一张关联表,把会话的信息保存下来。
NAT技术的缺陷

它只能用于内网访问外网,但是外网访问不了内网。所以之前写到UDP回显程序,只有部署到云服务器上才能被不同主机访问。其实这时缺陷也是优势,因为黑客无法入侵,更好的保护了电脑安全。

其次,NAT没有增加IP个数。

方案三:最终解:IPv6

IPv6时使用16个字节来表示地址,这就从IPv4的4个字节扩大了,范围从2^32扩大到了2^128,是IPv4的2^96倍,简直就是一个天文数字,达到可以给地球上的每一粒沙子分配一个IP地址。

但是IPv6的普及程度很低,关键是应为IPv6与IPv4不兼容。所以要想使用IPv6就得更换设备,这是很大的一笔开销,但是花了这钱后,用户也看不到实际效果,因为它不会使得网速变快,仅仅是为了解决ip地址不够用的问题。

不过欣慰的是,我们中国是IPv6普及程度最高的国家。

2.IP地址中的网段划分

我们将IP地址划分成两个部分:网络号(标识一个局域网)+主机号(区分不同的主机)。

假设现在有一个局域网,里面有三台主机,并且通过路由器1和外部相连。其中,主机1的IP为192.168.0.1,主机2的IP为192.168.0.2,主机三为192.168.0.3,路由器1为192.168.0.10;那么这个局域网的网络号就是192.168.0,其中,.1 .2 .3 .10都是主机号。

然后又有一个与之相邻的局域网,里面也有三台主机,并且通过路由器2和外部相连。其中,主机1的IP为192.168.2.1,主机2的IP为192.168.2.2,主机三为192.168.2.3,路由器1为192.168.2.10;那么这个局域网的网络号就是192.168.2,其中,.1 .2 .3 .10都是主机号。

这两个局域网之间就通过一个路由器相连,两个相邻的局域网的网络号不能相同。

子网掩码

一个IP地址,哪一部分是网络号,不一定,子网掩码就是用来确定网络号的。

他也是32为整数,左侧都必须是1,右侧都是0,不会有01交替出现的情况。其中为一的位对应的IP位就是网络号,为0的位对应的IP位就是主机号。

例如:子网掩码255.255.255.0,写成二进制就是前面三个字节都是1,后面一字节都是0,所以对应到IP上就是说这个IP的前面三个字节表示网络号,后面一个字节表示主机号。

比如我这个,就表示192.168.43是网络号,而.208就是主机号

3.特殊IP

1.若IP主机号全部是0:说明当前IP表示网络号,代表一个局域网了

2.若主机号全为1:表示当前IP是一个广播地址(UDP天然支持广播,就可以给这个地址发送UDP数据报;但是TCP无法给这个地址发送)

3.若以127开头,表示环回IP。常用的就是127.0.0.1,不过127.0.0.1~127.255.255.254都可以,只要别用127.0.0.0和127.255.255.255即可。使用这个IP就可以给自己的主机发送数据。这是因为操作系统提供了一个特殊的网卡“虚拟网卡”,关联到了这个IP上。使用环回IP来测试程序,就可以排除网络不通畅的影响

三.路由选择

路由选择是描述IP协议数据报具体怎么走:就是A发送到B的过程中,走哪条路。

在现实生活中,我们只要输入目的地就能得到精确路线,这是应为导航是全局性的,它能够看到地球的全貌。然而对于网络,每个路由器只能够知道自己和哪个路由器相连,无法知道网络的全貌,所以IP数据报在发送时是“探索式”“启发式”的过程,很难给出最优解。

这可以举个例子:比如我在大连开发区,我要到大连海事大学,期间不使用导航。出门后,我问A大连海事大学怎么走,A说不知道,但是她知道大连海事大学在甘井子区,所以她让我先坐地铁二号线,在地铁上问问别人。上了二号线,我问B,他说他也不知道,但是他知道从哪里下车,所以我就在那里下来车。下车后,我又问了C,因为此时已经和接近大学了,所以C知道了准确路线并告诉了我。

这就是“探索式”“启发式”的过程。在路上逐渐有人给我指出了接近的方向。

一个网络层数据报,每到一个路由器,就会问路!每个路由器内部又有一个路由表这样的数据结构。根据数据报中的目的IP查表,查到了就按路转发,没查到,表中有一个默认选项(下一条地址),就按它走。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值