Linux:ip和ip协议的初步认识

ip协议基本认识

前面对于TCP的内容已经基本结束了,那么这也就意味着在传输层也已经结束了,那么下一步要进入的是的是网络层,网络层中也有很多种协议,这里主要进行解析的是ip协议

前面的TCP协议层把一大堆数据看起来是传输给了对方,那么实际上真的传输过去了吗?实际上只是把数据交给了网络层,而在网络层中也会对应的进行报头的封装等等内容

在对于网络层的认识前,要先明确一个概念,比如我们说有传递报文可靠的能力是代表确实一定能可靠传递吗?其实这两个概念并不等价,在网络协议栈中,TCP扮演的角色是提供可靠性的策略,比如说有对应的超时重传,快重传,流量控制,滑动窗口,阻塞控制等,但这些其实都是所谓的可靠性策略,对于真正进行传输的其实还是对应的网络层,ip协议,因此我们说ip的本质就是有能从主机a到主机b进行传输报文的能力,本质上来说它是一种能力,但是至于能不能传输过去也不敢保证,只是传输过去的概率比较大

那在当代网络的传输来说,ip协议能够保证以较大概率能够传递过去,而TCP又能提供可靠的策略,二者相结合,就能真正做到基本100%可靠的进行网络传输了

在这里插入图片描述
在进行传输的时候,数据包就会在路由器中进行传输,这是宏观上建立起的一个基本的认识

我们平时使用的设备,不管是任何设备,它一定是处于一个子网当中的,那这个子网和子网之间就会借助路由器来进行链接,在子网当中可能会存在很多个设备,例如有主机a和主机b,那主机a要发送数据给主机b,就意味着它一定是会借助路由器进行传输转发,说白了就是会跨越很多的子网,所以对于网络的理解,要首先理解到它是由一个一个的子网构成的,那么宏观上来讲,ip的报文就会在这个网络当中进行不断的转发,最后从源ip地址传递到了目标ip地址,凭借的就是这些很多的路由器进行转发的工作

ip协议的报头

在这里插入图片描述
对于ip协议的理解,必然要涉及到两个问题,这里先进行第一个问题:

1. 报头和有效载荷如何进行分离?

结论是固定长度和自描述字段,这个和TCP协议其实是一样的,这里就不过多进行说明了

2. 报文如何进行交付?

结论是使用8位协议,具体的使用如下所示

下面对于ip协议的协议字段进行理解

8位生存时间

这个字段是什么意思呢?下面我给出这样的一个场景:当一个ip的报文被发送出去之后,那么这个报文就会在网络当中进行转发,假如现在这个目标主机已经离线了,或者有其他原因,反正是处于不可应答的状态了,那么就会导致这个报文会被一直转发,在网络中自然是不会允许这样的情况出现的,所以就会提前设置好对应的8位生存时间这样的概念,使得最终这个报文在路由器的跳数是固定的,如果接受到一个跳数为0的报文,说明这个报文已经没用了,此时就把这个报文直接丢弃掉就可以,所以这个其实就是一个计数器

8位协议

那这个字段是做什么的呢?一句话来说,8位协议就是指的是要把报文交付给上层的哪一个协议,这个字段的作用就是用来表示要交付的协议,比如下面要发送给传输层,那么这个里面就要填写的是TCP协议,表示下一步要交付给传输层

32位源ip地址和32位目的ip地址

在进行TCP协议的学习中有源端口和目的端口,而在ip协议当中存放的是源ip地址和目标ip地址,在报文进行传输的时候是经过路由器进行传输的,而路由器的传输实际上是只会在ip层进行传输的

网段划分

下面要介绍的内容是对于网段划分的概念

在这里插入图片描述
对于路由器来说,它是工作在网络层的,所以这就意味着在原则上,路由器看不到主机上的端口号,它能看到的就是一个一个的ip地址,而在ip地址当中其实是可以分成两个部分的,一个叫做网络号,一个叫做主机号,所谓网络号就是在网络建设的过程当中,为了保证两个相互连接的网站具有不同的标识,而主机号则是在同一个网段中的主机之间具有相同的网络号,但是必须要有不同的主机号

原则上来说,路由器本质上也是一个子网的主机,所以它也是需要配置对应的ip地址的,而路由器是要进行网络传输的,这就意味着它必须要同时存在在至少两个子网当中,所以就意味着路由器起码有两个ip,那如何理解路由器有两个ip?这里可以简单理解为是路由器的内部是有多张网卡的

路由器的一般来说是子网当中的第一个设备,所以它的ip地址一般是网络号.1,而路由器的功能这里抛出一个概念,它不仅仅是用来进行报文的转发,同时它还可以进行构建子网,也就是局域网,换句话说就是子网当中的ip地址都是怎么来的?结论是由路由器进行分配的,在一个子网当中,如果出现了一个新的主机,就要构建一个新的ip地址,子网ip本质上是让路由器来帮你维护的,这样的ip一般就是我们所谓的内网ip,而之前所谈的主机a和主机b进行数据包转发的ip,这个叫做是公网ip,那至于这两个有什么区别,下面的内容会进行理解

所以至此就已经完成了对于路由器的认知,它是可以进行子网的划分的,路由器本身也是一个主机,这就意味着它的上面也有操作系统,那这个操作系统是要管理什么?在路由器上面会进行ip的分配,这就意味着它是能够进行网络的管理,如果让用户手动进行管理ip是非常马粪的一件事,所以就诞生了一种技术叫做DHCP,这种技术就是能够自动给新增的主机派生对应的ip地址,同时可以保证ip地址不重复,所以从某种意义来说,路由器也可以叫做是DHCP服务器,又能构建子网,还能进行ip地址的管理工作

ip的类型划分

下面要进行描述的是ip的划分,那这块要如何进行描述?先聊聊各种ip类型

在这里插入图片描述

ip地址是32位,换算下来最大有42亿多种方案,ip本质上来说是一个有限的资源,全世界只要需要入网的设备都是要有对应的ip资源的,所以换句话说这也可以看成是一份公共资源,每个国家都要对于这份资源进行抢占,才能有使用网络的权利

那这就意味着这块资源不能被随便的使用,要有合适的划分管理的方式,全球为了进行网络资源的管理,因此有了网络地址和主机地址进行划分的依据原则,如上图所示

但是这样的划分方法很快就出现了问题,大多数的组织都喜欢申请b类网络,因为这种网络的主机号和网络号都比较合适,用起来是最舒服的,但是问题是,即便是b类网络,也会面临主机号明显不会被使用的问题,可能申请的这个ip可以容纳很多的主机,但是实际的使用中只用了2个地址,那这就会造成大量的ip地址的浪费,那这必然是不合适的,所以就需要诞生一种新的划分方法:子网掩码

子网掩码

子网掩码可以理解为是一种新的方式来区分网络号和主机号,子网掩码就是一个32位的正整数,只不过是一串01,这个子网掩码的特点是通常把它写成二进制的话,通常是用一串0来结尾,将IP地址和子网掩码进行 “按位与” 操作,得到的结果就是网络号,网络号和主机号的划分与这个IP地址是A类、B类还是C类无关

在这里插入图片描述

可见,IP地址与子网掩码做与运算可以得到网络号,主机号从全0到全1就是子网的地址范围
IP地址和子网掩码还有一种更简洁的表示方法,例如140.252.20.68/24,表示IP地址为140.252.20.68,子网掩码的高
24位是1,也就是255.255.255.0

那问题是,这个子网掩码在报文中也并没有体现,实际上这个内容是在路由器的内部进行配置的,所以说通常你的报文在经过路由器转发的时候,要先按照目的网络进行转发,为什么这么说,其原因就是因为路由器会拿着这个目标报文和和自己内部的子网掩码,按位与就形成了网络号,而路由器的内部是可以配置多个ip的,每个路由器连接哪个子网它内部是清楚的,所以就能够把这份报文经过网络进行转发,所以就形成了整个网络世界

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-04 10:44:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-04 10:44:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-04 10:44:03       82 阅读
  4. Python语言-面向对象

    2024-04-04 10:44:03       91 阅读

热门阅读

  1. 路由的hash和history模式的区别

    2024-04-04 10:44:03       35 阅读
  2. nvm 安装多个版本的Node npm

    2024-04-04 10:44:03       33 阅读
  3. 如何设计一个类似Dubbo的RPC框架

    2024-04-04 10:44:03       31 阅读
  4. 外汇MT4交易心得分享:如何规避常见交易陷阱?

    2024-04-04 10:44:03       34 阅读
  5. Docker客户端命令

    2024-04-04 10:44:03       41 阅读
  6. openharmony launcher 调研笔记 01

    2024-04-04 10:44:03       38 阅读
  7. Tomcat 启动闪退问题解决方法

    2024-04-04 10:44:03       34 阅读
  8. Kafka中groupid和auto.offset.reset的关系

    2024-04-04 10:44:03       38 阅读