网络层IP协议知识大梳理

全是通俗易懂的讲解,如果你本节之前的知识都掌握清楚,那就速速来看我的IP协议笔记吧~

        自己写自己的八股!让未来的自己看懂! (全文手敲,受益良多)

 

网路基础3


   网路层
   

        TCP并没有把数据发到网路里面,只是提供了可靠性策略。而IP协议的本质工作才是,提供一种能力,将数据跨网路从A主机送到B主机!用户需要的是:提供一种能力,将数据可靠地跨网路从A主机送到B主机。所以TCP提供策略,IP提供能力!

1.前置知识

        我们要传输数据,前提要对所有的主机进行标识,源IP和目的IP来标识源主机和目的
主机。IP地址=目标网路+目标主机。从A主机到B主机要经过许多路由器转发,根据IP地址先到达目标网路,然后再交给目标主机。构建网路的时候,为我们将来高速定位一台主机提供基础保证!!

2.IP协议的报头

      宽度为0~31,4个字节,标准长度为20个字节。与TCP类似。
        如何理解IP报头呢?本质就是结构体,填字段

问题1:报头和载荷如何分离?
   

        报头标准长度有20字节,数据包括有http的报头,TCP的报头和用户数据,通过固定报头+自描述字段(4位首部长度(如果超过20字节就是选项的了),总长度(总长度-4位首部长度=数据))。 
TCP协议段格式:


  TCP协议也有4位首部长度
        都代表着:如果该位置的值是x,那么x*4就是真实报头。4位首部长度范围在【0000,1111】即0到15,因为至少有20字节,所以在【5,15】,所以真实报头大小为【20,60】
 
        IP地址有2^32个,对于IP地址不足,有NAT,IPv6。

        IP有自己总长度,而TCP没有。说明UDP,TCP最后都要把数据交给IP层,字节流服务也好,面向数据报也罢,将来在IP层发的都是数据报。所以TCP的字节流的概念,是TCP提供给应用层,应用层所关注到的概念。
        8位生存时间:当把IP报文转发出去(路由器之间的转发)的时候,因为有一些原因(网络有bug之类),导致IP报文被一直转发 


问题2:如何将有效载荷交付给上层?

答:8位协议:我们要把IP的有效载荷交给上层的哪个协议(TCP/UDP)

16位首部校验和:IP要对首部做校验,校验失败的首部直接丢弃,由发送方TCP直接传送。校验成功才可以向上交付

        结论:socket: IP + port。端口号是给TCP去用的,IP 是给IP层去用的。 有目的IP地址和目的端口号,就可以向目标位置发送报文了。用源端口和目的端口填充TCP报头,用源IP地址和目的IP地址填充IP报头。

        为什么要把点分十进制IP转为4字节IP?
        因为IP报头的源IP地址和目的IP地址是4个字节,在真正路由的时候,根据目的IP地址来进行路径选择。在通信的时候,只工作在网络层,没有传输层 
 

网段划分(重要)

     


         网络号和主机号很好理解

1.    路由器本质上也是特定一个子网的主机,也要配置IP地址
2.    路由器可以实现跨网段传发,至少要连接2个子网,相当于同时在2个子网。所以路由器一定要配置多个IP.(认为路由器有多张网卡就行了)
3.    路由器一般是一个子网中的第一个设备,一般它的IP地址都是:网络号. 1
4.    路由器的功能,IP报文的转发,但不仅仅如此~,还可以构建子网(局域网) 

一开始因为ip地址只有32位,大概42亿多,是不够用的。 

 ,分类划分法这种方法会存在IP地址严重浪费的问题。
针对这种情况提出了新的划分方案,称为CIDR(Classless Interdomain Routing):
 
 

子网掩码的特点:


   子网掩码左侧为1,右侧为0.将IP地址与网络掩码 & 就可以得到网络号。因此我们可以提供调整子网掩码1的个数来调整网络IP中主机号的多少~
        子网掩码在路由器里面配置的。

 140.252.20.0 为网络号,140.252.20.255 为广播。这两个主机不用

        子网掩码可以对IP 32位任意划分。 
  
子网掩码的书写:  

特殊的IP地址

IP地址的数量限制
 
 


动态内存分配IP地址,用的时候给你,不用的时候释放给别人用。相当于共享机制。
真正变革的技术IPv6:128位,即:2^128个IP地址


私有IP地址和公网IP地址
 

IP地址被划分为:公网IP 和 私有IP。

理解运营商和全球网络理解

 

         我们是怎么上网的?

        运营商的工作人员先让光纤入户,然后要有2个设备,一个是调制解调器(猫),第二个是家用路由器。路由器有俩套账号和密码,一套是交钱提供上网服务的(给运营商);一套是给路由器加密的(给自己),防止别人蹭网。国家 大力 发展互联网,加大了网络基础设施建设。之前流量费非常贵,现在流量费非常便宜了。目的是让更多的人入网,

全球互联网:
        IP地址是一份很大的资源,从大区域进入小区域,最后到达目的主机。我们的网络被精心设计过的。

公网和私网有什么关系的?
   

        当目的IP不在当前网时要通过路由器进行寻找,直到找到目的主机。然后该主机会将源IP地址和目的IP地址转换,导致原来的私有IP变成了目的IP地址。因为私有IP不能出现在公网上的,所以该数据就回不来了!!! 
 

 我们应该怎么解决这样的问题呢?

        所以当IP地址要经历路由器的时候,将源IP地址替换成每一个路由器的WAN口IP,即报文的替换。所以私有IP地址不断被替换的过程,我们叫做NAT技术(主要解决IP地址不足的问题)

我们为什么要使用私有IP而不直接使用公用IP呢?
 

          原因是到达底层的区域的时候,IP地址已经严重不足了,不能够满足如此多的数量。
所以公网IP用在庞大的路由器里面,例如:国家,省份,城市。而私网IP地址用在小区域里面,例如:西安内部的网络 全都用私网。

所以:互联网=公网+私网~
 


路由器可以构建子网,路由器有Lan口IP和WAN口IP。家用路由器理解上和运营商的路由器性质是类似的。

为什么私网有那么多的类型呢? 

        如果子网覆盖得比较大,我们可以用第一种:10.*的可以有更多地址,其次是第二种,第三种。根据不同的情况选择不同的类型。

我们可以通过IP地址前几位,区分是在哪个区域,通过前面的数字就可以找到该IP的具体区域了。

大公司的IP是这样的(私有IP+公网IP)吗?
   也是类似的

为什么要这样呢?原因是IP地址不足


路由

 本地的主机也可以工作在网络层,也有掩码。查路由表的方式:拿着目标主机的IP & 掩码,如果结果等于目标网络,就通过该接口发出去。如果不等于就找下一个 

查路由表的结果:

1.    给你具体的下一跳
2.    路由器不清楚是去哪一跳,但是传入默认路由(告诉你别的可能知道的)一般是同网段的另一台路由器,所以目标IP不在目前内网中。默认路由是出口路由器,即通向另一个更大的网段。
3.    到达入口路由器

结论:因为IP=目标网络+目标主机,我们在进行转发的时候,我们先到达目标网络。
 

 
        我们转发的目的地址为192.168.56.3,先拿其与掩码&,得到192.168.56.0,与第一行地址作对比,不同下一个。发现与第二个相同,就会跳向0 eth1.所以IP路由的过程,就是逐个查路由表的过程。


我们再来看看IP协议的报文

        实际上,在一台主机中,报文并没有通过网络层直接发出去,而是继续交给了下一层协议(数据链路层)
 ,数据链路层(属于网卡的驱动层),不能一次发送过大的报文!所以要求上层不能给我交付过大的报文!这就是为什么TCP要发一个一个的报文,而不是全部都发过去。假如IP报文就是很大,就要求IP成进行分片转发。

IP不光要考虑分片,未来也要组装。 这行报头维护 IP的分片和组装字段。

16位标识:
     不同的IP报文有不同的标识
 

3位标识(更多分片): 
 
13位片偏移:目的要把之前发的片组装在一起

如何组装呢?
 
1.    确保将分片全部都聚在一起(相同的标识)
2.    通过片偏移进行排序(完成排序)

前置问题:你怎么知道一个IP是被分片了呢?
        如果没有分片,片偏移=0,更多分片=0。当我们发现 片偏移!=0 或 更多分片==1 (就分片一个)就说明分片了!

如果分片丢失了呢?

1.    丢第一个  收到的众多被分片的报文中,没有一个片偏移为0,就说明是丢第一个
2.    丢中间  让报文的长度与报文的片偏移做比较,如果差了超过一个报文的长度就说明丢中间了
3.    丢最后一个  所有的报文中,在3位标记的第三个都标记为1,就说明是最后一个


我们不建议分片!可能增加丢包概率,在IP中如果任何分片丢失,都要进行重发。


分片过程用数据举例:
   假如报文有3000字节,报头有20字节。我们要对它进行分片,前提:每个分片必须要带报头,因为报头有标识,更多分片,片偏移的字段,少了这些无法组装。我们先分1500,然后把20字节的报头和后面的1480数据组成新的1500字节的分片,最后还剩20字节,再和20字节结合,形成40字节的分片。
 ,然后再进行组装

请你帮我解释一下:
  一个http请求,从服务器发出到你拿到响应的整个过程

   从应用层request和response 谈,request和response都是数据要交给TCP,交给TCP就会面临可靠性,拥塞控制,流量控制,面向连接,丢包重传的问题,如果再想谈,TCP报文向下传到IP,又会涉及路由问题,分片问题。细节谈的越多越说明你越厉害~

下篇文章我将更新——数据链路层~期待你的关注👉【A charmer】

 

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

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

相关文章

数据结构与算法学习导航

目录 指导思想资料总结代码随想录hello-algoOI-WIKI 一名麻瓜的刷leetcode的简单概述。 在这里对过去的自己说: 如果你相信算法有用你就刷刷leetcode,如果不相信面试会让你相信。 当然,现在我确实认为算法和数据结构有用,leetcode也有用。 …

【网络安全】谁入侵了我的调制解调器?(二)

文章目录 针对 TR-069 协议 REST API 的攻击思路攻击百万台调制解调器意外发现 Cox 后端 API 的授权绕过漏洞确认我们能够进入任何人的设备访问和更新任何Cox商业客户账户通过泄露的加密密钥覆盖任何人的设备设置执行对任何调制解调器的命令影响最后想说阅读本文前,请先行浏览…

大模型在急性单纯性阑尾炎预测及治疗方案制定中的应用研究

目录 一、引言 1.1 研究背景与意义 1.2 研究目的 1.3 研究方法与创新点 二、急性单纯性阑尾炎概述 2.1 定义与发病机制 2.2 临床表现 2.3 传统诊断方法 三、大模型在急性单纯性阑尾炎预测中的应用 3.1 大模型简介 3.2 数据收集与处理 3.3 模型训练与优化 3.4 预测…

Linux 上安装和配置 VNC 远程桌面

在 Linux 上安装和配置 VNC(Virtual Network Computing)可以让你远程访问图形化桌面环境。以下是详细的安装和配置步骤,适用于主流 Linux 发行版(如 Ubuntu、CentOS、Debian 等)。 1. 安装 VNC 服务器 Ubuntu/Debian …

《AI大模型应知应会100篇》第22篇:系统提示词(System Prompt)设计与优化

第22篇:系统提示词(System Prompt)设计与优化 摘要 在大语言模型(LLM)应用中,系统提示词(System Prompt)是控制模型行为的核心工具之一。它不仅定义了模型的身份、角色和行为规范,还直接影响输…

其他网页正常进入,但是CSDN进入之后排版混乱

显示不正常,排版混乱 解决方法: ①打开网络设置 ②更改适配器 ③所连接的网络 --右键 属性 然后就可以正常访问了。

Qwen2.5-VL视觉大语言模型复现过程,没碰到什么坑

视频讲解:Qwen2.5-VL视觉大语言模型复现过程,没碰到什么坑_哔哩哔哩_bilibili Qwen2.5-VL视觉大语言模型复现过程,没碰到什么坑 今天复现下Qwen2.5-VL玩玩 https://github.com/QwenLM/Qwen2.5-VL 创建conda环境,实测22.04&#x…

宫庭海:跨界融合与家国情怀的影视开拓者

从音乐经纪人到影视多面手的创业之路 近日,国内娱乐产业领军人物、著名音乐经纪人、制片人、影视投资人宫庭海先生再次受到广泛关注。凭借其卓越的成就和贡献,宫庭海先生在业界树立了良好的口碑和广泛的影响力。 宫庭海, 辽宁省大连市人&…

LeetCode算法题(Go语言实现)_51

题目 给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,两者长度都是 n ,再给你一个正整数 k 。你必须从 nums1 中选一个长度为 k 的 子序列 对应的下标。 对于选择的下标 i0 ,i1 ,…, ik - 1 ,你的 分数 …

并查集(力扣2316)

这种涉及不同连通分量的,看上去就可以用并查集。并查集的模板请参见上一篇内容。并查集(力扣1971)-CSDN博客 现在我们要求的是无法互相到达的点对。根据观察易得,我们只需要求出每个并查集的元素数量,然后遍历每个点&…

Python在生成艺术中的创新应用

Python在生成艺术中的创新应用 在数字艺术的浪潮中,Python以其强大的库支持和简洁的语法,成为了生成艺术领域的一颗璀璨明珠。今天,就让我们一起踏上这段充满创意与惊喜的旅程,探索Python如何在生成艺术中大放异彩。 一、引言 生成艺术,是一种通过算法自动生成艺术作品的…

ROS ROS2 机器人深度相机激光雷达多传感器标定工具箱入门教程(一)

系列文章目录 目录 系列文章目录 前言 一、安装 1.1 ROS 2 官方软件包 二、教程 2.1 标定配置器 2.1.1 机器人选项 2.1.2.1 外参相机-激光雷达标定 2.1.2.2 外参激光雷达-激光雷达标定 2.1.2.3 外参相机参照标定 2.1.2.4 外参激光雷达-参考标定 2.2 外参照相机-激…

Ubuntu利用docker搭建Java相关环境问题记录

Docker拉取镜像超时 报错 Unable to find image dpanel/dpanel:latest locally docker: Error response from daemon: Get "https://registry-1.docker.io/v2/ ": context deadline exceeded (Client.Timeout exceeded while awaiting headers)解决方式 在etc/do…

list的模拟实现和反向迭代器的底层

1&#xff1a;list的模拟实现 1&#xff1a;链表的节点 对于list的模拟实现&#xff0c;我们需要先定义一个节点的类可以使用&#xff08;class也可以使用struct&#xff09; // List的节点类 template<class T> struct ListNode {ListNode(const T& val T()){_p…

数据加载与保存

通用方式‌ SparkSQL提供了通用的数据加载方式&#xff0c;使用spark.read.loa方法&#xff0c;并可通过format指定数据类型&#xff08;如csv、jdbc、json、orc、parquet、textFile&#xff09;。 load方法后需传入数据路径&#xff08;针对csv、jdbc、json、orc、parquet、…

7 编译型语言、解释型语言与混合型语言的深度解析:以 C、Java、Python 为例

在编程领域&#xff0c;语言的执行方式是其设计哲学的核心体现&#xff0c;直接影响着性能、可移植性和开发效率。本文将深入剖析编译型语言&#xff08;以 C 语言为例&#xff09;、解释型语言&#xff08;以 Python 为例&#xff09;和混合型语言&#xff08;以 Java 为例&am…

Edge浏览器安卓版流畅度与广告拦截功能评测【不卡还净】

安卓设备上使用浏览器的体验&#xff0c;很大程度取决于两个方面。一个是滑动和页面切换时的反应速度&#xff0c;另一个是广告干扰的多少。Edge浏览器的安卓版本在这两方面的表现比较稳定&#xff0c;适合日常使用和内容浏览。 先看流畅度。Edge在中端和高端机型上启动速度快&…

智能云图库-12-DDD重构

本节重点​ 之前我们已经完成了本项目的功能开发。由于本项目功能丰富、代码量大&#xff0c;如果是在企业中维护开发的项目&#xff0c;传统的 MVC 架构可能会让后续的开发协作越来越困难。所以本节鱼皮要从 0 带大家学习一种新的架构设计模式 —— DDD 领域驱动设计。 大纲…

量子安全邮件系统 —— 邮件回溯密钥销毁机制

这里写目录标题 量子安全邮件系统 —— 邮件回溯密钥销毁机制一、项目背景与简介二、理论基础2.1 密钥销毁的重要性2.2 时间衰减与回溯销毁2.3 安全日志与报警机制三、系统架构设计3.1 模块划分3.2 系统架构图(Mermaid示意图)四、关键算法与实现流程4.1 密钥生成与存储4.2 邮…

个人博客系统后端 - 用户信息管理功能实现指南(上)

本文记录了如何实现用获取户信息&#xff0c;用户信息更新&#xff0c;用户头像上传三大基础功能 先上接口实现截图&#xff1a; 一、项目结构概览 先介绍一下 个人博客系统采用了标准的 Spring Boot 项目结构&#xff0c;用户功能相关的文件主要分布在以下几个目录&#xff1a…