IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> IP协议理解 -> 正文阅读

[网络协议]IP协议理解

简介

最近惰性有点大,导致经常拖更,希望有小伙伴来鞭策一下。闲话不多说,接着上一篇TCP协议,接下来就轮到IP协议发挥作用了,下面我们来看看IP协议在互联网中都起到什么作用。

正文

上篇TCP协议中我们说到了发送端和接收端互相发送数据包进行通信,那么具体双方的数据包是如何传递的呢?又是通过什么路线走到的呢?这时候就到了IP协议出场了:

IP协议在网络传输中的作用主要可以分为以下几点:

  1. 子网掩码
  2. 路由控制
  3. 分片重组(路径MTU发现)

上一篇TCP协议理解中,我们看到TCP报文中只有端口号信息, 事实上光凭借这个是无法完成两个主机通信的。真正能确定两个主机位置的是IP地址

ps:IP协议是面向无连接型的,TCP协议是面向连接型的。

IP地址是通过IP协议封装在IP报文首部中的,如下图所示:

当tcp协议在传输层将数据包上tcp首部之后,传到网络层,经过IP协议再一次包装IP首部,才会传到数据链路层也就是网卡发送出去。

知道了数据包在网络中是通过IP地址进行通信的,那么IP地址是什么呢?

打开电脑的命令行模式(win+r,输入cmd)输入ipconfig,我们就能看到一串串数字:

192.168.X.X,172.X.X.X,10.X.X.X.

这些数字就是我们的IP地址。任意一串数字都是由四个数字组成,每个数字都是用八位二进制数转化来的。合起来就是32位的IPv4地址。

然而32位的IP地址是远远不够用的,所以聪明的人们就想出了一个办法,让有限的IP地址可以最大限度的复用,那就是子网掩码。

那么什么是子网掩码呢?

大家比较常见的192.168.X.X/24,后面的24就表示子网掩码的位数,表示由24位的1组成相应的子网掩码,后八位补0,既255.255.255.0.

知道子网掩码是什么后,那么子网掩码具体起到什么作用呢?

例如下面有两个IP地址

192.168.3.10

192.168.3.11

如果这两个IP地址的子网掩码都是255.255.255.0,那么这两个IP的主机就属于同一个网段就可以互相通信了。假如两个IP地址的子网掩码不相同的话,则二者无法相互通信,需要让其中一个IP地址的路由再进行转发,直到二者子网掩码相同,才能进行相互通信。

子网掩码的作用很明显就是划分网段,让同处于同一网段下的IP可以相互通信。


问题来了,同一网段下的IP地址可以相互通信,那么不同网段下的IP地址又是如何找到对方的呢?

因此,IP协议会根据一张表格查找我们需要访问的主机应该通过什么路径访问。这张表就叫路由控制表

ps:路由控制表并不是由IP协议生成或者维护的,IP协议只是使用这张表进行查询,真正维护这张表的功能是由路由协议提供的。

每次主机发送信息是,会根据目的IP和子网掩码在路由控制表中找到下一个需要到达的位置,然后一步步转发,直到到达目的地。

下面举例说明:

  1. 首先要发往10.1.2.10这个目的地址。先到路由器1查看,发现10.1.2.0/24最符合要求。
  2. 然后就转发到对应的下一个路由器10.1.0.2(路由器2)
  3. 到了路由器2后,继续查表,发现10.1.2.0/24的下一跳是10.1.2.1
  4. 于是就跳转到10.1.2.1,这个网段就是属于10.1.2.10所在区域。

这样,两台主机在不同网段就完成通信。


以前,因为数据链路层的最大传输单元(MTU)不同,导致每次发包都需要进行分片,然后在路由器上进行重组

看到这里,小伙伴们应该有些疑惑,上一篇TCP协议中不是算出了最大消息长度MSS了吗,为什么还要分片?

那是因为在TCP通信中有计算MSS,所以在TCP传输中可以不需要进行分片操作,但是在网络传输中并不是只有TCP传输(可以回看HTTP协议理解)。UDP传输也是网络传输的重要途径之一。

所以IP协议为了其他传输方式,提供了分片重组的操作。但是这样做明显增大了路由器的工作量以及耗时。

因此,人们想在不需要分片的情况下发送最大量的数据,最后提出了路径MTU发现这个方法。

路径MTU方法原理如下:

  1. 发送IP首部的分片标志设置为不分片。
  2. 路由器收到超过MTU的数据包就会丢包
  3. 丢包后通过ICMP协议将当前MTU值返回
  4. 下次发送按照返回的MTU值大小发送,以最后收到的MTU值为准,即为最大MTU

ps:MTU值最大缓存10分钟

UDP

?TCP

分片标志

分片标志
比特含义
0未使用,默认0
1

0 -?可以分片

1 -?不能分片

2

包在分片情况下,是否为最后一个包

0 -?是

1 -?不是


上面I大概就是P协议在网络传输中的基本作用?,下面记录一个针对IP协议的应用。

路由追踪命令:tracerount实现原理:

设置IP首部的生存时间TTL为1,然后发包,记录丢包ICMP协议返回的信息

设置IP首部的生存时间TTL为2,然后发包,记录丢包ICMP协议返回的信息

……

设置IP首部的生存时间TTL为可以抵达目的地跳转次数,然后发包,记录丢包ICMP协议返回的信息

通过不断地增加生存时间,可以依次获得丢包的路由IP,从而达到路由追踪的目的。

?

总结

以上就是IP协议在网络传输中发挥的主要作用,当然还有一些知识点没有涵盖,

  1. 比如IP首部还有很多字段没有讲解。
  2. 还有关于IPv6和IPv4也没有进行比较。
  3. 以及特殊的IP地址也没有提及,例如广播地址

这些如果各位感兴趣,可以另开一篇进行讲解。

以上就是对IP协议的理解,如果有不对的地方,欢迎各位进行指正。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:49:22  更:2022-03-03 16:53:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:21:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码