网络层IP协议(TCP)

news2025/4/6 17:28:08

IP协议:

        在了解IP协议之前,我们市面上看到的"路由器"其实就是工作在网络层。如下图:

那么网络层中的IP协议究竟是如何发送数据包的呢?

IP报头:

IP协议的报头是比较复杂的,作为程序猿只需要我们重点理解几个点。

4位版本:

        当今的IP的版本有两种:IPv4和IPv6。

        现如今IPv4是主流的版本。

4位首部长度:

        IP协议报头的长度是可变的。IP报头的长度 = 0-15 * 4 KB.

        (4位的取值范围就是0-15)

8位服务类型:

        3位优先权字段(已经弃⽤), 4位TOS字段, 和1位保留字段(必须置为0) . 4位TOS分别表⽰: 最⼩延时, 最⼤吞吐量, 最⾼可靠性, 最⼩成本 . 这四者相互冲突, 只能选择⼀个。
对于ssh/telnet这样的应⽤程序, 最⼩延时⽐较重要; 对于ftp这样的程序, 最⼤吞吐量⽐较重要。

16位总⻓度(total length):

        IP数据报整体占多少个字节(64KB)

16位标识(id): 

        唯⼀的标识主机发送的报⽂. 如果IP报⽂在 数据链路层被分⽚ 了, 那么每⼀个⽚⾥⾯的这个id都是相同的.
需要注意的是IP数据报会自动完成拆包和组包。

3位标志字段:

        第⼀位保留(保留的意思是现在不⽤, 但是还没想好说不定以后要⽤到). 第⼆位置为1表⽰禁⽌分⽚, 这时候如果报⽂⻓度超过MTU, IP模块就会丢弃报⽂. 第三位表⽰"更多分⽚", 如果分⽚了的话, 最后⼀个分⽚置为1, 其他是0. 类似于⼀个结束标记.

13位分片偏移:

        13位分⽚偏移(framegament offset): 是分⽚相对于原始IP报⽂开始处的偏移. 其实就是在表⽰当前分⽚在原报⽂中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后⼀个报⽂之外, 其他报⽂的⻓度必须是8的整数倍(否则报⽂就不连续了).

8位⽣存时间(Time To Live, TTL):

数据报到达⽬的地的 最⼤报⽂跳数. ⼀般是64. 每次经过 ⼀个路由, TTL -= 1 , ⼀直减到0还没到达, 那么就丢弃了. 这个字段主要是⽤来防⽌出现路由循环。
可以假设构造了一个IP数据报,该数据包中的目的IP写了一个不存在的,此时这样的数据包将无限传输,但是设置了TTL,约定了传输上限,只要达到上限,数据包会自动丢弃。

8位协议:

        IP数据报传输过程中里面携带的载荷肯定是传输层的相关协议,8位协议里面的数值就代表着传输层的哪一个协议。

16位首部检验和:

        检验IP报头中数据是否出错。这里不需要检验载荷中传输层协议的正确性。

地址管理:

        路由器工作在网络层,现在的路由器都有自动分配IP的功能DHCP

       在IPv4的报头中我们也可以观察到,IP一共是32位,也就是一共42亿9千万个,但是随着时代的发展,这么多的IP地址已经不够用了,那么该如何解决以上的问题呢?


方案1:

        动态分配IP,一个设备上网就分配一个IP,不上网就不分配。

方案2:


        NAT网络地址转换。

        可不可能使用一个IP代表一大波设备?

        把IP地址分为两大类:

        1.公网IP\外网IP

        2.私网IP\内网IP  

 要求公网IP必须是唯一的,私网IP是允许重复的(在不同的局域网中是可以重复的)

一个设备在上网的时候,IP数据包中的IP地址会被NAT设备(通常是路由器)进行自动修改。

那么就会有以下几种4种情况:
1.同一个局域网内:主机A访问主机B

2.公网的设备A访问公网的设备B

3.一个局域网中的主机A,访问另一个局域网中的主机B

4.局域网中的设备A,访问公网中的设备B

一共有以上的4种访问情况,究竟哪种情况会触发NAT机制?

首先第一种:同一个局域网下的设备互相访问,不会触发NAT机制。

其次第二种:公网之间相互访问的设备,不会触发NAT机制。

再其次第三种,第三种这种访问时不被允许的,所以也谈不上NAT机制。

所以只有第四种情况才会触发NAT机制。

那么究竟是怎样出发的呢?

如下图:

那么此时一个路由器可能关联着许多设备,那么这么多设备如果同时发送QQ消息,此时发送给QQ服务器的IP地址都是一样的了。

结论:此时就相当于一个公网IP地址代表着一大波设备!!

但是此时还是有问题,此时QQ服务器给我返回响应,最后通过路由器传回客户端,那么这个端口号应该怎么填写:

例如:

此时在经过路由器的时候,路由器不仅进行了NAT,其实还将端口号进行了一个修改定制:

此时所有设备在经过路由器的时候,相当于路由器这边会自动生成一个表记录IP和端口号的键值对,最后都已新的IP和端口号发送给对端。

之后等服务器相应过来的数据,经过路由器,对应查表之后发送给不同的客户端。

方案3:

        使用IPv6解决IP不够用的问题.

        IPv4使用的是32位4个字节。

        IPv6使用的是128位16个字节. 

IPv6是16个字节,可以说,能够表示的IP数量够地球上每一粒沙子拥有一个独立的IP。

 网络号&主机号:

        那么理解完IP的协议和地址管理之后,问题又来了,IP中的数字是什么含义?

        IP地址一共是32位,可以一分为二,左半部分表示网络号,右半部分表示主机号。

        例如:

这里的一半并不代表均分,至于左半部分占的多还是右半部分占的多,就和主机上面的子网掩码有关。

网络中规定:

        同一个局域网下,网络号必须相同,但是主机号一定不同

        两个相邻的局域网,网络号必须不同

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

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

相关文章

前端传入Grule,后端保存到 .grl 文件中

前端传入Grule,后端保存到 .grl 文件中 通过简单的输入框,将Grule的部分拆解成 规则名称 规则描述 规则优先级 规则条件 规则逻辑Grule关键字 when Then 模拟了 if 判断的条件和逻辑部分 类似于 shell 和 ruby 之类的脚本语言,有 then 关键字…

vlan和vlanif

文章目录 1、为什么会有vlan的存在2、vlan(虚拟局域网)1、vlan原理1. 为什么这样划分了2、如何实现不同交换机相同的vlan实现互访呢3、最优化的解决方法,vlan不同交换机4、vlan标签和vlan数据帧 5、vlan实现2、基于vlan的划分方式1、基于接口的vlan划分方式2、基于m…

遗传算法与深度学习实战(27)——进化卷积神经网络

遗传算法与深度学习实战(27)——进化卷积神经网络 0. 前言1. 自定义交叉算子2. 自定义突变操作符3. 进化卷积神经网络小结系列链接 0. 前言 DEAP toolbox 中提供的标准遗传操作符对于自定义的网络架构基因序列来说是不够的。这是因为任何标准的交叉算子…

react-dnd 拖拽事件与输入框的文本选中冲突

问题描述 当我们使用拖拽库的时候,往往会遇到拖拽的一个元素他的子孙元素有输入框类型的dom节点,当拖拽的事件绑定在该元素身上时候,发现子孙的输入框不能进行文本选中了,会按住鼠标去选中文本的时候会触发拖拽 实际的效果&…

经典NLP案例 | 推文评论情绪分析:从数据预处理到模型构建的全面指南

NLP经典案例:推文评论情绪提取 项目背景 “My ridiculous dog is amazing.” [sentiment: positive] 由于所有推文每秒都在传播,很难判断特定推文背后的情绪是否会影响一家公司或一个人的品牌,因为它的病毒式传播(积极&#xff0…

杨振宁大学物理视频中黄色的字,c#写程序去掉(原版改进,三)

上一节,我们分清了主次矛盾,并搞定了主要矛盾(去掉黄色的字),这一节解决次要矛盾(矩形色带)。 我们的想法如图: 1,我们找到稳定黄色的最左边,最右边两点&…

第24周:文献阅读

目录 摘要 Abstract 一、现有问题 二、提出方法 三、创新点 模型结构创新 强化学习与GAN结合 属性特征与通顺性优化 四、方法论 生成对抗网络(GAN) 强化学习(RL) 模型组件 五、实验研究 数据集 数据预处理 评价指…

SQL server学习05-查询数据表中的数据(上)

目录 一,基本格式 1,简单的SQL查询语句 2,关键字TOP 3,关键字DISTINCT 二,模糊查询 1,通配符 三,对结果集排序 1,不含关键字DISTINCT 2,含关键字DISTINCT 3&…

【Azure 架构师学习笔记】- Azure Function (1) --环境搭建和背景介绍

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Function 】系列。 前言 随着无服务计算的兴起和大数据环境中的数据集成需求, 需要使用某些轻量级的服务,来实现一些简单操作。因此Azure Function就成了微软云上的一个必不可少的组成部分。 …

KeepAlive与RouterView缓存

参考 vue动态组件<Component>与<KeepAlive> KeepAlive官网介绍 缓存之keep-alive的理解和应用 Vue3Vite KeepAlive页面缓存问题 vue多级菜单(路由)导致缓存(keep-alive)失效 vue3 router-view keeperalive对于同一路径但路径…

Linux:进程(环境变量、程序地址空间)

目录 冯诺依曼体系结构 操作系统 设计操作系统的目的 操作系统的管理 进程 PCB fork 进程状态 进程状态查看 僵尸进程 孤儿进程 进程优先级 查看、修改进程优先级命令 竞争、独立、并行、并发 进程切换 活动队列和运行队列 活动队列 过期队列 active指针…

希迪智驾持续亏损8.2亿:毛利率下滑,冲刺“自动驾驶矿卡第一股”

《港湾商业观察》黄懿 近日,希迪智驾(湖南)股份有限公司(下称“希迪智驾”)向港交所主板递交上市申请,联席保荐人为中金公司、中信建投国际、中国平安资本(香港)。 资料显示&#…

Rust之抽空学习系列(三)—— 编程通用概念(中)

Rust之抽空学习系列(三)—— 编程通用概念(中) 1、变量&可变性 在Rust中,变量默认是不可变的 fn main() {let x 5;println!("x is {}", x); }使用let来声明一个变量,此时变量默认是不可变…

OpenCV中的识别图片颜色并绘制轮廓

一、实验原理 使用OpenCV库在图像中识别和绘制特定颜色(黄色)的轮廓 二、实验代码 import cv2 import numpy as np# 读取图片并调整大小 img cv2.imread(./color_1.png) img cv2.resize(img,(600,600))# 将图片从BGR颜色空间转换到HSV颜色空间 img_h…

【Qt】qt基础

目录 一、使用Qt Creator创建qt项目 二、项目文件解析 三、Qt中创建图形化界面的程序的两种方法 四、对象树 五、Qt中处理打印乱码问题的利器:qDebug() 一、使用Qt Creator创建qt项目 1.选择项目模板 选中第一类模板Application(Qt应用程序,包含普…

Transformer入门(6)Transformer编码器的前馈网络、加法和归一化模块

文章目录 7.前馈网络8.加法和归一化组件9.组合所有编码器组件构成完整编码器 7.前馈网络 编码器块中的前馈网络子层如下图所示: 图1.32 – 编码器块 前馈网络由两个带有ReLU激活函数的全连接层组成。全连接层(Fully Connected Layer)有时也…

AI智算-k8s部署大语言模型管理工具Ollama

文章目录 简介k8s部署OllamaOpen WebUI访问Open-WebUI 简介 Github:https://github.com/ollama/ollama 官网:https://ollama.com/ API:https://github.com/ollama/ollama/blob/main/docs/api.md Ollama 是一个基于 Go 语言开发的可以本地运…

HTML/CSS总结

HTML 1.1 标题标签h 为了使网页更具有语义化&#xff0c;我们经常会在页面中用到标题标签&#xff0c;HTML提供了6个等级的标题&#xff0c;即 标题标签语义&#xff1a; 作为标题使用&#xff0c;并且依据重要性递减 其基本语法格式如下&#xff1a; <h1> 标题文本…

信号处理:概念、技术、领域

目录 基本概念 主要技术 应用领域 信号处理是一个涉及分析、修改和再生信号的多学科领域。信号可以是各种形式的&#xff0c;例如声音、图像、视频或其他类型的监测数据。信号处理的主要目标是提取有用的信息并增强信号的质量。以下是信号处理的一些基本概念和应用&#xff…

黑盒白盒测试

任务1 黑盒测试之等价类划分法 【任务需求】 【问题】例&#xff1a;某报表处理系统要求用户输入处理报表的日期&#xff0c;日期限制在2003年1月至2008年12月&#xff0c;即系统只能对该段期间内的报表进行处理&#xff0c;如日期不在此范围内&#xff0c;则显示输入错误信息…