IP协议详解

本文详细介绍了IP协议的基础知识,包括报文格式(版本、头部长度、服务类型等)、地址管理(IP地址、动态分配、NAT机制、IPv6)以及路由选择的过程。阐述了网络层如何通过路由表进行数据包转发,以及涉及的关键概念如端口号、子网掩码和默认路由。
摘要由CSDN通过智能技术生成

目录

IP的报头(报文格式)

地址管理

1.IP地址

1)动态分配IP地址

2)NAT机制(网络地址转换)

3)IPv6

2.网段划分

路由选择


如何在复杂的网络环境中确定一个合适的路径?这里就需要网络层中的重点协议—IP协议。

IP的报头(报文格式)

4位版本号(version):指定IP协议的版本,对于IPv4来说,就是4;对于IPv6来说,就是6。目前大规模使用的两个版本就是IPv4和IPv6

4位头部长度(header length):IP头部的长度是多少个32bit,也就是 length * 4 的字节 数。4bit表示最大的数字是15,因此IP头部最大长度是60字节。

8位服务类型(Type Of Service):能够让IP协议切换形态。3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0)。4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。 这四者相互冲突,只能选择一位设为1。不同的位设为1,表示IP协议不同的形态。

16位总长度(total length):描述了IP数据包最长是多长。16位的长度表示IP数据包只能携带64kb的数据,但是IP协议自身支持"拆包组包"功能。通过16位标识,3位标志,13位片偏移这三个属性来支持IP协议的拆包和组包。

16位标识(id):唯一的标识主机发送的报文。如果IP报文在数据链路层被分片(拆包)了,那么每 一个片里面的这个id都是相同的。

3位标志字段:第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到)。第二位表示是否允许拆包,置为1表示禁止拆包,这时候如果报文长度超过MTU,IP模块就会丢弃报文。第三位用来表示否是最后一个包,如果分片了的话,最后一个分片置为1,其他是0。

13位分片偏移(framegament offset):是分片相对于原始IP报文开始处的偏移,描述当前每个分片的相对位置。偏移量越小,分片顺序越靠前。实际偏移的字节数是这个值 * 8 得到的。因此, 除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)。

8位生存时间(Time To Live,TTL):描述了这个IP数据包能在网络上存活多久,TTL的单位是次数。数据包构造出来的时候,TTL会设置有一个初始值(32,64,128...),数据包在转发的过程中,每经过一次路由器转发,TTL就会-1。如果TTL减到0还没有到达目的地,这个数据包就会被丢弃。这个字段主要是用来防止出现路由循环。

8位协议:描述的是IP数据包的载荷部分,是一个UDP数据包还是TCP数据包。

16位头部校验和:使用CRC进行校验,来鉴别头部是否损坏。这个校验和只校验IP的首部,不管IP的载荷部分。

32位源IP地址和32位目标IP地址:表示发送端和接收端。

地址管理和路由选择是IP协议的两个核心功能。

地址管理

1.IP地址

IP地址本质上是一个32位的整数,2^32 => 42亿9千万。IP地址理论上来说是不能重复的,但是互联网发展到今天,能上网的设备是非常非常多的,早就超过了42亿9千万这个数字了。那么如何解决IP地址不够用的问题呢?

1)动态分配IP地址

同一时间,将IP地址分配给正在上网的设备,不上网的设备则不用分配IP地址。但这个方案治标不治本,这样做提高了IP地址的利用率,并没有增加IP地址的数目。不过即便如此,这个方案目前已就是广泛存在的。

2)NAT机制(网络地址转换)

这个方案本质上是让一个IP地址代表一批设备。

把IP地址分为两大类:

1.内网IP(局域网IP)

如果一个地址是10.*或者172.6.*-172.31.*或者192.168.*的形式,那么它的IP就是内网IP。同一个局域网内部,内网IP之间是不能重复的;但在不同的局域网中,内网IP之间可以重复。

2.外网IP(广域网IP)

除内网IP之外,剩下的IP都是外网IP。外网IP是不允许重复的,必须唯一。

当前情况下,通常是一个小区/一个学校/一个公司个都是构成一个大的局域网(这个局域网中可能就有几千几万个设备),这样的局域网,使用一个外网IP即可,这样一个外网IP就代表了几千上万个设备,这样就大大节省了IP地址的开销。

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

假设目前有一台设备想要访问一个服务器,

此时的运营商路由器(NAT设备)就相当于是一个中转站。

如果当前局域网内有多个主机,都访问同一个网站服务器,此时服务器返回的响应,路由器如何决定这个数据要交给哪个主机?此时就要结合端口号来进行区分! "端口号,可以用来区分同一个主机之间的不同进程,也可以用来区分不同主机的不同进程。"

举个栗子:

可能有小伙伴有疑问:如果主机A和主机B的端口号相同呢?

这时候,路由器就会主动把相同的端口替换成不同的端口号。

NAT机制最大的优势就它是"纯软件"的,它不需要更换任何硬件设备.,只需要在路由器上安装NAT就可以了。正是因为这个机制,局域网内部的设备能够主动访问外网的设备,但是外网的设备无法主动访问局域网内网的设备。但这个局限性并不是坏事,反而更好的保护了我们放电脑的安全,试想外网设备都无法访问,黑客想要访问也就无从谈起了。

NAT能承载的数量非常非常大,除非是在局域网内同一时刻访问同一个服务器超过65535各设备,否则NAT就不会不够用。

3)IPv6

与IPv4使用4个字节来表示IP地址不同,IPv6使用了16位字节来表示IP地址。那IPv6的地址比IPv4多多少?是四倍吗?其实远远不止! IPv4有2^32个地址,而IPv6有2^128=2^32*2^32*2^32*2^32个地址,2^32就是42亿8千万,可想而知,2^128是一个多么大的天文数字,这个数字大到什么程度?可以给地球上的每一粒沙子都分配一个不同的IP地址,甚至还绰绰有余。IPv6大大的提升了IP地址的个数,从根本上解决了IP地址不够的问题,但IPv6的普及程度却是比较低的。虽然IPv6的诞生时间和NAT差不多,但是NAT一经问世,就立刻广泛使用了,而IPv6却一直不温不火。为什么?

原因很简单,因为IPv6与IPv4互不兼容。如果想要支持IPv6的话就得换设备,换设备就需要一笔相当大的资金,但是升级为IPv6网速并不会提升,用户也感受不到你是用的IPv6还是IPv4,使用起来没有任何区别,相当于说钱花出去了,但是没有任何收益,这不就得不偿失了吗,因此没人乐意主动升级IPv6。

话虽如此,但我们国内,是上IPv6普及程度最高的国家,没有之一,已经达到70%以上,遥遥领先世界上其他国家。这是国家大力推进的结果,想知道其中缘由的小伙伴可以看看这个视频电子监听、全国断网,棱镜门背后,中国如何从末路狂奔到世界之巅_哔哩哔哩_bilibili,看完之后相信会受益匪浅~

2.网段划分

网段划分就是把一个IP地址分成两个部分。划分后就变成了:

IP地址=网络号(标识了一个局域网)+主机号(标识了局域网中的一个设备)

比如说:

同一个局域网中的设备,网络号必须相同,主机号把必须不同;不同的局域网,网络号不能相同!

一个IP地址,哪个部分是网络号,哪个部分是主机号,是不一定的,需要通过子网掩码来确定网络号。

子网掩码是一个32位的整数,左侧都是1,右侧都是0,不会1 0 交替出现,被标记成1的就是网络号,比如1111 1111 1111 1111 111 1111 0000 0000,这里的1不一定就非得是24个,可以根据实际的网络环境来灵活配置。一般来说,家用路由器的子网掩码都是255.255.255.0。

如果一个IP地址,主机号全0,当前这个IP就表示"网络号",比如"192.168.100.0"就是一个网络号;但是255.255.255.0这个IP代表的是一个局域网的,一个具体的主机是不能分配这个IP的。

如果一个IP地址,主机号全1,表示当前这个IP是一个"广播地址",比如"192.168.100.255"这个IP就是一个广播地址,广播地址也是不能给具体的主机分配这个IP的。UDP天然能支持广播就是和这个IP有关系。广播就是使用UDPsocket给这个地址发送数据报,此时局域网中的所有设备都能接收到这个数据报;而TCP无法与这个地址建立连接,所以TCP没有广播这个功能。

如果一个IP是以127开头的,此时这个IP就是一个"环回IP"(loopback),最常用的就是127.0.0.1这个IP,使用环回IP都表示"设备自身"自己发给自己。

路由选择

路由选择,就是描述了IP协议(IP数据包)的转发过程。

如果需要从A -> B,中间可能有很多可行的路径,具体怎么走,使用地图软件一搜索,就会出现很多条路径,地图软件能够做出这样的路径规划,主要是因为开了全图的,整个地图的路径信息,都只在地图的服务器上存储好的,可以动中给出"最优解"。

而进行IP数据包转发的时候,每个路由器是无法知道网络的全貌的,只知道一些局部的信息(一个路由器能知道哪些设备和它自己是相连的),这就意味着,IP数据在转发的过程中,是一个"探索式"过程。这个过程很难给出最优解,只能给出较优解。

就像你去一个陌生的城市,对所有路都不甚熟悉,但是需要去某个地方,这时你就需要问路(假设没有地图导航)。

1.遇到了A,A说他不知道该咋走,但是大概知道它在南郊,建议我先去坐102公交车,往南走;

2.坐上102,往南走,问B,B说他也不知道,但是建议我坐517公交车到莲花公园;

3.到了莲花公园,问C,C说可以做三号线地铁到五公里,在左转就到了。

一个网络层的数据报,每次到达一个路由器就会进行上述"问路"过程。每个路由器内部都有一个数据结构"路由表",根据数据报中的目的IP查路由表,如果查到了,就直接按照路由表给的方向(从哪个网络接口进行转发),继续转发就可以了;如果没查到,路由表里有一个"默认的表项"(下一跳地址),按照默认的表象转发即可。

以上就是关于IP协议的一些基本情况啦,有什么问题小伙伴们可以积极留言讨论,我们一起共勉~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值