网络层IP

news2024/9/28 13:16:11

文章目录

    • 网络层
      • 基本概念
      • IP报头
        • 分片和组装
          • 如何分片
          • 如何组合
          • 16位标识符
          • 13位片偏移
          • 3位标志
      • 网段划分
          • IP地址的分类
          • CIDR
          • IP地址数量限制
        • 私有IP和公网IP
      • 运营商
      • 路由

网络层

http和tcp只考虑了两端的问题,并没有考虑路途中的事情。路由查找

IP的构成:32位=网络号+主机号

  • TCP(教务处老爹)vsIP(试错满分工具人)各自解决什么问题?

    决策问题vs执行问题

IP提供了一种能力,将数据以较大概率从A主机跨网络传送给主机B的能力。所以,IP层不提供可靠性机制!

TCP是提供可靠性的机制,什么超时重传,拥塞控制啥的,东西给你准备好,你去干就完了。

基本概念

主机:配有IP地址,也可以进行路由控制的设备。

路由器:既配有IP地址,又能够进行路由控制。

节点:主机和路由器的统称。

所有网络中的端点主机和中间路由设备都叫做节点,两端的叫主机。

TCP那里的数据流叫做数据段,IP那里叫做数据包,数据链路层叫做数据帧

IP报头

标准长度是20字节

image-20221230105954688

  • 如何分离与封装?

    4位首部长度,基本单位也是4字节。十进制0-15,0000-1111。因为长度是20,所以是5,0101。和TCP报头是一样的。就可以无脑提取前20个字节,去掉前几位4位首部长度得到的就是有效载荷。

    有16位总长度,也就是IP是报文形式不是字节流,也必须一个报文一个报文的发出去,也要涉及边界问题,向上交付给传输层的字节流的时候,也要解决粘包问题,然后以流的形式交付给应用层。

    这两个就可以实现分离报头和有效载荷,实现分离和封装。

  • 如何向上交付践行分用?

    8位协议,让IP知道把有效载荷交给谁。TCP or UDP谁传下来的8位协议写啥,然后到对端根据8位协议传给UDP或者TCP,实现分用。

16位首部校验和:保证正确性,确认分片和组装情况。

4位版本(基本没有意义)IPV4 :给路上转发的路由器看的。

将数据包从一个节点跳转到下一个节点交租跳转到下一跳。

8位生存时间(TTL生存时间):就是为了处理游离报文的存在,每经过一个节点就–,让没有目标主机的游离报文自己就消失。

分片和组装

IP分片不是大部分情况。

  • 报文为什么会进行分片?

封装:报文向下交互添加报头(每层特有)的过程,但是网络层交给数据链路层的数据大小是有限制的,就是一次向网络中发送的是MTU:1500字节。

  • 所以,网络层需要怎么处理数据呢?太大的报文应该怎么处理呢?分片由网络层负责,数据链路层只管给你发固定大小不管分,毕竟分坏了不负责任的。

  • 谁来进行组装呢?

    得包含分片信息,由对端网络层根据你的分片信息进行组装,只有他才能解析报头文件。

如何分片

image-20221230115018055

因为MTU的限制,每次网络层给数据链路层的数据最大是1500,在添加了IP报头20字节的报头信息的。所以,从传输层拿到的最大字节数是1480,如果超过1480,比如是1500,在添加了20字节为1520,超了,就在1500中余出20字节大小用来填充报头,余出来的20字节报文再用20字节报头包装构成40字节进行下一次向下交付就可以了。首先保证都有报头,其次就是分的时候别出现IP报头重复就行。

为了保证最好的效率,TCP单个数据报的最大消息长度就是MSS(max segment size)

如何组合

如何分片传输层是不知道的,各层解耦。所以在这端网络层分片就需要在对端网络层组装,实现双方传输层没有感知。

  • 分片真的好吗?他会提高丢包的风险,所以IP分片并不是大多数情况。

  • 如果丢包了怎么办?组装失败就会将整个报文全部丢弃。

  • 如果不想分片,谁说了算呢?传输层,因为协议都是由他决定的,要tcp控制单个报文大小,你他吗少传点不就行了嘛。UDP是没有缓冲区的,所以这个协议就没有办法了。

16位标识符

没进行分片,不同报文之间的标识符都是不一样的。进行了分片,就将出现一群一样的标识符的报文,把它们归到一起组装就行了。

13位片偏移

image-20221230121435353

假设没有丢包,根据片偏移组装进行升序排列就行了,在原始报文中的有效载荷的偏移量。起始位置+偏移量就可以确定下一个分片的偏移量。

  • 如何判断报文都收全了呢?

如果计算连续的话,也就是进行升序排列的时候,片偏移的计算连续,说明中间就没丢;计算不连续就说明中间丢了,很好判断。

如果有片偏移=0,说明报头没丢。如果没有,就说明头丢了。

  • 如何判断尾巴丢了呢?

    16位总长度只对自己报头负责,只负责自己那部分大小,比如上面分片出来的40字节报文,他的16位中长度表示的就是40字节,跟从哪分的那个原始报文无关。

3位标志

所以引进3位标志位,1位保留(不用),1位标识禁止分片(报文丢了也不让你分片)。

1位标识后面是否还有报文。如果有就是1,如果没有就是0。

  • 接收端如何辨别哪一个是独立的?那一个是分出来的呢?

    • 片偏移量为0的就是独立的

    • 3位标志也是0,说明跟后面没有报文了

网段划分

32位IP

网络号:保证相连接的两个网段的具有不同的标识;主机号:同一个网段中的不同主机,不可重复;

两个不同的网段通过路由器相连接进行路由转发,所以路由器应该各有一个这两个网段的IP;

所以一共存在2^32个IP,保证IP地址不同,但是存在上线,所以存在回收机制。

DHCP动态IP地址分配的功能,路由器当中也具备,你上线了就给你个IP,你下线了就把IP回收。

局域网中的给你地址的过程就是分配和回收的过程。

帮助理解:学号对于学生的划分,查找某一个学生,要先从我们这里入公网,由公网再进行派发到目标。

网络划分的本质就是为了提高效率,便于组网。

IP地址的分类

根据自己的需要按照分类进行选择。

image-20221230132911938

但是每种都有自己的缺陷,B类地址很快分配完毕,但是A类会存在大量的浪费IP,所以引入CIDR减少浪费。

CIDR
  • 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;

  • 子网掩码也是一个32位的正整数. 通常用一串 “0” 来结尾;

  • 将IP地址和子网掩码进行 “按位与” 操作, 得到的结果就是网络号;

  • 网络号和主机号的划分与这个IP地址是A类、B类还是C类无关;

引入额外子网掩码,通过设置左侧1个位数,来限制主机可用的IP个数。

image-20221230135553295

  • 划分主机的例子

    image-20221230140603961

    image-20221230140625800

IP地址数量限制

IP地址的绝对上限还是不够,因为很多中间设备也是需要IP地址的,这是有三种方式解决:

  • 动态分配IP地址: 只给接入网络的设备分配IP地址. 因此同一个MAC地址的设备, 每次接入互联网中, 得到
    的IP地址不一定是相同的;

  • NAT技术(后面会重点介绍);

  • IPv6: IPv6并不是IPv4的简单升级版. 这是互不相干的两个协议, 彼此并不兼容; IPv6用16字节128位来表
    示一个IP地址; 但是目前IPv6还没有普及;

私有IP和公网IP

RFC 1918规定了用于组件局域网的私有IP地址:

  • 10.*,前8位是网络号,共16,777,216个地址

  • 172.16.到172.31.,前12位是网络号,共1,048,576个地址

  • 192.168.*,前16位是网络号,共65,536个地址,包含在这个范围中的, 都成为私有IP, 其余的则称为全局IP(或公网IP);

我自己的电脑就是私有IP:

image-20221230141711230

云服务器公网IP:

image-20221230141822310

公网IP不可重复,在一个局域网中私有IP不可重复, 在不同的局域网中,两个设备的ip地址是可以相同的,私有IP可以在不同的子网中重复出现。所以,主机使用私有IP,用路由器的方式连上公网,实现入网。

运营商

基础设施:光纤,交网费话费都是由这些运营商运营的,你才能使用网络,互联网公司是不会去做的。不止你在交钱,互联网公司都在交钱给运营商。手机欠费了上不了网打不了电话但是可以打给运营商的客服10086。

运营商组建了各种子网,子网划分。

image-20221230172606025

路由器是可以用来组建局域网的。热点打开就是相当于路由器,构建子网。

每一个路由器都有:子网IP(LAN口),对自己管理之下的那些设备

WAN口,是自己被管控的上一层的IP标识。

公网转发实现了移动到联通的用户之间的交互。

  1. 所有的客户是在家用路由器中以局域网的形式接入网络的。
  2. 每个路由器都有自己的LAN和WAN口。
  3. 路由器是可以构建子网的,不断地进行子网划分。
  4. 互联网公司介入可以直接进公网。
  • 如何将信息向互联网公司服务器发送呢?

    家用路由器根据你请求中的目的IP,最起码能确定你要去外面,将你的源IP替换成家用路由器的WAN口IP 转发给上层路由器,逐层向上替换WAN口,最后在官网中找到目标(比如百度),构建响应时如果是你的私网IP,但是私有IP不具有唯一性,所以在我们自己的请求向外发送的时候,我们的源IP一直在被中间路由器的替换,就好像是那个路由器发出的,这样服务器构建响应时看到的你的源IP就是最上层路由器的,这就是NAT技术。所以,私有IP是不可能出现在公网上的。

  • 那我和同一个局域网下不同子网的主机进行交流不用通过公网实现能做到吗?不能。其实不是主机交流而是主机上的软件交流,最好还是走公网。

  • 墙(拦截我的请求),比如我欠费了,不让我访问各种网站。我没欠费也不让你访问各种违法网站,运行商会对你额网址进行拦截检测,如果不合法就会直接在基础设施阶段丢弃你的数据。

路由

路由过程:就是一跳一跳问路的过程。所谓的一跳就是数据链路层中的一个区间,具体在以太网中就是从源MAC地址到目的MAC地址之间的区间。

  • IP数据报的传输过程

IP数据包到达路由器,根据目的IP决定这个数据包是直接发给目标主机还是下一个路由器(下一跳路由器or默认路由),依次反复一直到达目标IP地址,最后在内网中进行数据转发。依靠每个节点维护的路由表,进行判断下一跳。route查看自己的路由表。

[xiaoawei@VM-24-10-centos ~]$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gateway         0.0.0.0         UG    0      0        0 eth0
10.0.24.0       0.0.0.0         255.255.252.0   U     0      0        0 eth0
link-local      0.0.0.0         255.255.0.0     U     1002   0        0 eth0

假设我们的目的IP,

用目的IP和路由器本身路由表中的的子网掩码Genmask进行&,得到的是一个网络号然后和Destination进行比对是否符合,看看是不是一个网络号里面的,通过接口Iface扔出去;如果不是这个范围,就用下一个掩码进行按位与,如果都不是,就直接走default,走默认路由下一跳,在由默认路由器根据他的维护的路由表决定吓一跳的地址。
55.255.0.0 U 1002 0 0 eth0


假设我们的目的IP,

用目的IP和路由器本身路由表中的的子网掩码`Genmask`进行&,得到的是一个网络号然后和`Destination`进行比对是否符合,看看是不是一个网络号里面的,通过接口`Iface`扔出去;如果不是这个范围,就用下一个掩码进行按位与,如果都不是,就直接走`default`,走默认路由下一跳,在由默认路由器根据他的维护的路由表决定吓一跳的地址。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/130654.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Ctfer训练计划】——(八)

作者名:Demo不是emo 主页面链接:主页传送门 创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷座…

fx5u 脉冲输出指令PLSY(DPLSY)4种写法

本文描述三菱FX5U的 脉冲输出指令PLSY(DPLSY),4种写法,都有效。 第一行:设置脉冲输出频率 第二行:DPLSY D0 K0 K1,FX5U ,第二个参数是脉冲数量,设置为K0表示一值输出脉冲。 第三个参数是轴号K1,表示Y0脉冲…

2023跨年倒计时2023最炫烟花秀烟花代码

📋 前言 🖱 博客主页:在下马农的碎碎念✍ 本文由在下马农原创,首发于CSDN📆 首发时间:2022/12/30📅 最近更新时间:2022/12/30🤵 此马非凡马,房星本是星。向前…

c#入门-补码

补码 明明我们用正数用的更多,如果把0归到负数里面,那么正数就是整的2n次方了。 为什么不这么做呢? 如果你的手表快了20分钟,你可以: 1.把他调慢20分钟 2.再调快11小时40分钟 其实负数就是一个特别大的正数。CPU没有…

Unity 基于法线和深度实现完美描边,可独立控制物体描边

目录前言自定义PostProcessOutlineShader关键代码说明1 使用深度绘制描边1.1 获得斜四方形UV坐标:1.2 采样四方向深度2 使用法线绘制描边3 解决倾斜表面白块问题3.1 计算视方向3.2 使用视方向修正阈值4 单独控制物体是否显示描边OutlineShader完整代码前言 最近项目…

github上传代码(亲测实用)

又被github上传代码折腾了我3个小时,各种问题都遇到过,最后写篇博客记录一下,方便后续上传。 github创建项目完成后,就会出现上传指令,如下图所示: 现在只需要按着命令的提示一步步执行; 1.点…

一文读懂HTTPS

大家第一次接触 HTTPS 协议的时候是不是和我一样,非常困惑。 这玩意概念又多又繁琐。尤其是里面的公钥私钥啥的。 当时就特别想知道,为什么用公钥加密却不能用公钥解密? 看完这篇文章你会弄明白,同时还会解锁很多HTTPS里的细节…

ansible的安装

自定义环境 1.操作环境 角色主机名IP地址组名 控制主机 server.example.com 192.168.90.134 server 受控主机 node1.example.com 192.168.90.135 node1 受控主机 node2.example.com 192.168.90.133 node2 需要保准三台主机能够互相通信。设置同一种网络模式&#xff0…

Tic-Tac-Toe可能棋局搜索的实现(python)

目录 1. 前言 2. 算法流程 3. 代码实现 3.1 终局及胜负判定方法 3.2 搜索邻节点 3.3 打印棋盘状态 3.4 代码 4. 小结 1. 前言 Tic-Tac-Toe中文常译作井字棋,即在3 x 3的棋盘上,双方轮流落子,先将3枚棋子连成一线的一方获得胜利。Tic-…

✿✿✿JavaScript --- jQuery框架一

目 录 1.jQuery的介绍和在线学习网址以及下载网址 2.jQuery的功能和优势 3.引用jQuery库和第一个案例 4.jQuery代码格式和注释 5.jQuery如何达到获取原生的DOM对象 6.jQuery选择器(CSS对比版) (1)常见选择器 (2)高级选择器以及方法 (3)属性选择…

单片机基础知识

目录 一、单片机基本认知 二、IO口输入和输出 三、点亮一个LED 1、编程实现LED闪烁 2、按下按键点亮灯 3、按键的消抖 4、记录状态位来控制LED 一、单片机基本认知 单片机和PC电脑相比的话,相当于电脑的主板 单片机是一种集成电路芯片。单片机又称单片微控…

S32DS_Optimization优化选项

S32DS_Optimization优化选项 S32DS3.4的选项, 右击工程后出现的选项 char is signed 让char类型为有符号, 类似signed char bitfield is unsigned 当声明不使用signed/unsigned时, 控制位字段是否无符号; 默认signed(因为基本整形(int等)也是signed) Function sections 默认情…

C语言—动态内存管理和柔性数组

目录 1. C/C的内存开辟 2. 为什么存在动态内存分配 3. 动态内存函数介绍 3.1 malloc 和 free 3.2 calloc() 3.3 realloc() 4. 常见的动态内存错误 4.1 对NULL指针的解引用操作 4.2 对动态开辟的空间越界访问 4.3 对非动态内存开辟的空间进行free(&…

外贸谈判前需要注意的4p

01Past了解客户的过去 当一个客户找到我们的时候,作为业务,我们需要第一时间回复客户所问到的问题。让客户感受到,他需要的产品我们公司可以提供。于此同时,在客户沟通意愿度较高的时候,我们不妨多跟客户沟通一下几个问…

Java学习笔记 --- MySQL-索引和事务

一、索引 索引的原理 1、没有索引会全表扫描,从而查找速度会很慢 2、使用索引会形成一个索引的数据结构,比如二叉树 3、索引的代价 磁盘占用 对 dml(update、delete、insert)语句的效率影响 索引的类型 1、主键索引&#xff…

2022年圣诞节 | 用代码实现简单圣诞树

2022年圣诞节到来啦,很高兴这次我们又能一起度过~ 一、前言 本文我们用 Python 来画一棵带背景音乐效果的雪夜圣诞树以及使用 HTMLCSSJS 在页面渲染出动态圣诞树,所涉及到的源码均来自GitHub开源站点。 二、效果展示 Python HTMLCSSJS 三、编码实现 …

(六)汇编语言——包含多个段的程序

目录 使用数据 使用栈 代码 总结 使用数据 首先,我们来看一个问题,就是编程计算0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H的和,结果存在ax寄存器…

《剑指offer》每日三题

这里使用的是题库: https://leetcode.cn/problem-list/xb9nqhhg/?page1 目录剑指 Offer 07. 重建二叉树剑指 Offer 14- I. 剪绳子剑指 Offer 14- II. 剪绳子 II剑指 Offer 07. 重建二叉树 递归思想: 代码 class Solution {int pPre0;//用于遍历preorde…

深入理解HashMap

HashMap集合 1. HashMap集合简介 HashMap基于哈希表的Map接口实现,是以key-value存储形式存在,即主要用来存放键值对。hashMap的实现不是同步的,这就意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。 JDK1.8之前…

短视频上热门技巧总结,这样做你也可以快速上热门。

最近开始做短视频,找了很多短视频运营创作技巧,但能上热门的只有那么几个,经过近一周的分析,结合了我赢上短视频运营创作技巧,得到了以下几个经典技巧合集:学会一个就值了。 首先说一下:什么样的…