网络层协议之IP协议全了解!

IP协议

  • IP协议的原理是什么?
  • IP协议和IP地址有什么关系?
  • IP协议的首部是怎么样的

1.1 IP协议概述

无连接、不可靠

IP协议(Internet Protocol,互联网协议),是TCP/IP协议栈中最核心的协议之一,通过IP地址,保证了联网设备的唯一性,实现了网络通信的面向无连接不可靠的传输功能。

IP的作用


1.2 IP协议原理

无IP

如上图所示,当多台接入互联网的设备访问同一台服务器的时候,服务器如何区分不同电脑的请求,并且准确的将资源返回?

我们只要给每个设备加上一些“标识”,并且在通信的时候,将“标识”嵌入到数据包里,则整个数据往返过程可以准确无误。

加入IP

我们给PC和服务器加入IP地址,并且以PC1访问服务器为例:

PC1访问服务器

PC1的IP地址为12.1.8.66,Server的地址为8.8.8.8,那么整个通信过程应该是这样的📞:

  1. PC1在请求数据包里封装了源IP地址和目的IP地址,并将带有IP地址信息的数据包发送到互联网。
  2. 在互联网中有大量的网络通信设备(路由器等),路由器根据数据包中的IP地址查找路由表(Map),然后以接力的形式,将数据包逐条转发至目标服务器。
  3. 服务器接收到请求数据包之后,将源IP地址和目的IP地址翻转,并封装回应数据包发送到互联网。

上面这个通信过程类似于我们平时的寄信✉:

  1. 寄信时需要在信封中填写发件人和收件人的姓名和地址,然后将信件塞入信封中。
  2. 邮政公司根据信封中的收件地址,通过物流平台(飞机、货车)将信件跨省市传输,直至收件人城市。
  3. 送信员找到对应的收件人所在的小区地址,然后联系收件人,将信件交付到收件人手中

在寄信过程中,信封相当于IP地址,整个信件相当于数据包,邮政公司|送信员相当于路由器|交换机。

通过以上的案例我们可以明确以下知识点:

  1. IP协议通过提供IP地址,将IP地址夹带在通信数据包中,为路由器指明通信方向。
  2. IP协议仅仅指明数据包的源目通信方,但是并不能保证数据包一定能够送达,数据是否被丢弃以及丢弃后如何处理。(所以IP协议是面向无连接的不可靠传输功能)(TCP协议可以解决P协议的缺陷)

当然,IP协议不仅仅只有”导航“功能,他还能防止数据包环路,为数据打上重要或不重要等标签实现流量控制、能验证数据包是否损坏、能实现数据包分片和组装功能;而要深入学习这些功能,必须掌握IP头部的封装格式。


1.3 IP协议头部

以下是对某一数据包的抓包结果:

抓包结果

我们可以看到IP头部默认有12个字段:

  1. Version(版本号):标识IP协议的版本,目前V4版本地址已经枯竭,V6慢慢成为主流。
  2. Header Length(头部长度):默认为20字节,最大为60字节。
  3. Differentiated Services Field (服务区分符):用于为不同的IP数据包定义不同的服务质量,一般应用在QoS技术中。
  4. Total Length (总长度):标识IP头部加上上层数据的数据包大小,IP包总长度最大为65535个字节。
  5. Identification (标识符):用来实现IP分片的重组,标识分片属于哪个进程,不同进程通过不同ID区分。
  6. Flags(标志符):用来确认是否还有IP分片或是否能执行分片。
  7. Fragment offset (分片偏移量):用于标识IP分片的位置,实现IP分片的重组。
  8. Time to live (生存时间):标识IP数据包还能生存多久,根据操作系统不同,TTL默认值不同,每经过一个三层设备如路由器的处理,则TTL减去1,当TTL=0时,则此数据包被丢弃。
  9. Protocol (协议号):标识IP协议上层应用。当上层协议为ICMP时,协议号为1,TCP协议号为6,UDP的协议号为17。
  10. Header checksum (头部校验):用于检验IP数据包是否完整或被修改,若校验失败则丢弃数据包。
  11. Source(源IP地址):标识发送者IP地址,占用32bit。
  12. Destination (目的IP地址):标识接收者IP地址,占用32bit。

了方便记忆,可以总结为7个核心知识点:

  1. Source和Destination即IP源目地址字段,是IP协议最核心的字段;
  2. Id+Flags+FO三个字段可以实现IP数据分片和重组;
  3. Total Length和Header Length标记IP头部和上层数据的边界;
  4. TTL生存时间字段可以实现通信防环;
  5. DSCP服务区分符可以实现流量控制;
  6. Checksum字段可以数据包完整性校验;
  7. Protocol字段标记上层应用;

1.3.1 length长度字段解读

划分界限

Length

长度字段在大部分的协议里都会出现,例如TCP、UDP、IP协议,为了就是”划分界限“--->规定哪里是头部,哪里是数据。

由上图可知,IP协议的头部是20字节(默认为20字节,最长可到60字节),Total Length在这里表明是100字节,那么数据部分则是100-20=80字节。

那么这个头部和数据之间的界限有何用处?👇

当收到数据包之后,无论是电脑/手机还是其他联网设备,网卡模块会对数据包进行拆分、修改IP头部信息、重新进行数据封装等操作,如果没有"这条线",那就可能会"越界",一旦"越界",则数据包内容可能损坏

我们看下面这张图片👇

数据完整性被破坏!

当没有长度字段或者长度字段标识错误时,网卡在进行头部剥离的时候,错误的把数据部分划分到头部里面,这就会导致右边的数据部分完整性被破坏,接收方最终收到的就是一个损坏的数据包。


1.3.2 TTL生存时间字段解读

实现通信防环

TTL(Time to live)即生存时间,用于标识IP数据包"还能存活多久",这个生存值在发送方发送数据时便设置好了。不同电脑/操作系统的初始TTL是不同的,并且TTL值可以修改。

TTL值占用8个bit位,所以最大值是255(二进制11111111)

TTL

TTL Dead

上图所示👆,IP数据包每经过一个路由器或者其他三层设备时,TTL就会被减去1,当TTL=0的时间,就代表这个数据包已经”死亡“,此时路由器便会向源发送者返回一个”TTL Exceed“ICMP报错包。

TTL一个重要的功能就是实现通信防环,那么何为防环❓请看下图👇:

环路

​ 我们知道,路由器会将数据包以接力的形式逐条传递,很多时候,由于工程师的疏忽,或者因为网络拓扑结构的复杂性,会出现一些Bug环境,例如上图便是一个经典的”环路拓扑“,由于网络设备之间存在的环路”Loop“,所以数据包一直里面饶起来,而不是发送到最右边的服务器。

​ 如果没有TTL,那么这个数据包将会一直存在于链路中,这样不仅占用网络带宽,并且浪费设备的处理器资源,严重的时候将会拖垮其他人的正常通信。

​ 所以,当IP数据包加入TTL值之后,即便网络拓扑存在环路设计,当数据包被转发到TTL为0的时候,网络设备也可以直接丢弃,以此解决环路带来的危害

但是TTL仍然是一种“被动式”的解决环路的办法,真正要解决环路,还需要从网络设计和协议设计的角度切入。


1.3.3 DSCP字段解读

DSCP服务区分符可以实现流量控制

"VIP” 待遇

DSCP(Differentiated Services Field) 即服务区分符,用于为不同的IP数据包定义不同的服务质量。DSCP的前身叫做TOS(Type of Service,服务类型)。不管是TOS还是DSCP,它们都是QoS服务质量里面的技术实现。

DSCP

如上图所示👆,当PC1和PC2两个用户同时访问互联网时,由于数据包采用不同的DSCP值,不同的值代表了不同的优先级,例如这里的AF11和EF,可以看成一个是普通等级,一个是VIP等级,此时VIP等级自然要优先被转发。

应用场景:在企业网中,网络运维人员可以为核心数据流采用高优先级的DSCP值,为其他普通的例如BT下载流量采用最普通的优先级。在运营商网络里,可以根据客户购买的不同专线服务,采用不同的DSCP值


1.3.4 Checksum字段解读

实现数据完整性校验

checksum校验字段跟长度字段类似,存在于很多协议里面,用于实现数据完整性校验。

不同协议采用的方法有差异,例如IP协议的checksum值只校验IP头部,不包括数据部分,而TCP和UDP的校验则包括数据部分。

例如PC1发送IP数据包(含checksum1)给PC2,PC2拆开IP头部,然后进行校验计算(checksum2),若校验没问题则接收并处理,若检验有问题则丢弃。注意,这里采用的是校验算法,不是简单的相同对比。


1.1.3.5 Protocol字段解读

协议号

ICMP、TCP、UDP所对应的Protocol协议号👇:

ICMP TCP UDP
1 6 17

无论是IP协议的Protocol字段,还是Internet以太网协议里面的Type字段,又或者是TCP/UDP协议里面的Port字段,这些字段的功能都是用于标识上层协议或应用。例如,ICMP协议号为1,TCP协议号为6,UDP的协议号为17

那么,在IP协议里面加入协议号标识传输层协议,意义何在❓

Protocol

通过上面这张图我们可以看到,若PC1 PING PC2,则此时会采用ICMP协议,而ICMP协议对应的协议号是1。当PC2收到这个数据包时,拆开IP头部,则会看到协议号,根据协议号调用对应的上层协议或应用来进行上层数据处理。

以这里例子来看,若PC2采用TCP或UDP来解开ICMP数据包,则无法正常解析,好比用word程序要打开一部mp4电影,肯定会有故障。而如果这里PC2根据协议号为1,调用ICMP协议来处理ICMP数据包,则可以正常解读并返回回应包。

所以,协议号(Protocol)、端口号(Port)、类型值(Type)这些的功能都是:标记上层协议/应用,告诉接收方,有正确的协议/应用来打开这个数据,功能相当于电脑文件的后缀名,告诉电脑用哪些应用程序来打开对应的文件。

参考资料:

————————————————————————————————————————————

版权声明:本文为吴恺的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://www.cnblogs.com/zaijianba/p/11524722.html
为了更好的阅读体验,推荐至我的个人博客👇
个人博客文章地址为:https://www.wukailiving.cn/ip-xie-yi-xiang-jie.html

如有不足之处,欢迎指正!

posted @ 2019-09-15 22:21  -猪是念来过倒  阅读(2677)  评论(0编辑  收藏  举报