网络层IP协议(TCP)

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位,可以一分为二,左半部分表示网络号,右半部分表示主机号。

        例如:

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

网络中规定:

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】InnoDB引擎中的Compact行格式

目录 1、背景2、数据示例3、Compact解释【1】组成【2】头部信息【3】隐藏列【4】数据列 4、总结 1、背景 mysql中数据存储是存储引擎干的事,InnoDB存储引擎以页为单位存储数据,每个页的大小为16KB,平时我们操作数据库都是以行为单位进行增删…

Visual Studio 玩转 IntelliCode AI辅助开发

🎀🎀🎀【AI辅助编程系列】🎀🎀🎀 Visual Studio 使用 GitHub Copilot 与 IntelliCode 辅助编码Visual Studio 安装和管理 GitHub CopilotVisual Studio 使用 GitHub Copilot 扩展Visual Studio 使用 GitHu…

【LDAP】LDAP概念和原理介绍

目录 一、前言 二、什么是LDAP? 2.1 什么是目录服务? 2.2 LDAP的介绍 2.3 为什么要使用LDAP 三、LDAP的主要产品线 四、LDAP的基本模型 4.1 目录树概念 4.2 LDAP常用关键字列表 4.3 objectClass介绍 五、JXplorer工具使用 一、前言 对于许多的…

用ue5打开网址链接

需要用到 Launch URL 这个函数 字面意思就是打开填写的链接网页 这里填写的是百度,按下Tab键后就会打开百度的网页

在ESP32使用AT指令集与服务器进行TCP/IP通信时,<link ID> 解释

在ESP32使用AT指令集与服务器进行TCP/IP通信时&#xff0c;<link ID> 是一个非常重要的参数。它用于标识不同的连接实例&#xff0c;特别是在多连接场景下&#xff08;如同时建立多个TCP或UDP连接&#xff09;。每个连接都有唯一的<link ID>&#xff0c;通过这个ID…

前后端跨域问题(CROS)

前端 在src中创建util文件&#xff0c;写request.js文件&#xff1a; request.js代码如下&#xff1a; import axios from axios import { ElMessage } from element-plus;const request axios.create({// baseURL: /api, // 注意&#xff01;&#xff01; 这里是全局统一加…

学习笔记071——Java中的【线程】

文章目录 1、基础2、进程和线程3、什么是多线程4、Java 中线程的使用5、Java 中创建线程的方式5.1、继承 Thread 类5.2、实现 Runnable 接口5.3、继承 Thread 和实现 Runnable 接口的区别5.4、实现 Runnable 接口的优化 6、线程的状态7、线程调度7.1、线程休眠7.2、线程合并7.3…

devops-部署Harbor实现私有Docker镜像仓库

文章目录 概述下载配置安装安装后生成的文件使用和维护Harbor参考资料 概述 Harbor是一个开源注册中心&#xff0c;它使用策略和基于角色的访问控制来保护工件&#xff0c;确保镜像被扫描并且没有漏洞&#xff0c;并将镜像签名为可信的。Harbor是CNCF的一个毕业项目&#xff0…

快速上手Neo4j图关系数据库

参考视频&#xff1a; 【IT老齐589】快速上手Neo4j网状关系图库 1 Neo4j简介 Neo4j是一个图数据库&#xff0c;是知识图谱的基础 在Neo4j中&#xff0c;数据的基本构建块包括&#xff1a; 节点(Nodes)关系(Relationships)属性(Properties)标签(Labels) 1.1 节点(Nodes) 节点…

Polkadot 11 月生态月报:3900万交易量、69%增长率,技术与社区齐头并进

原文&#xff1a;https://x.com/Polkadot/status/1865118662069490074 编译&#xff1a;OneBlock 上个月对 Polkadot 生态来说可谓是跌宕起伏&#xff0c;从创下交易记录到开创性合作&#xff0c;Polkadot 热度不断。展现出强大的技术实力和蓬勃发展的社区活力。在回顾本月亮点…

基坑表面位移沉降倾斜自动化监测 非接触式一体化解决机器视觉

基于变焦视觉位移监测仪的基坑自动化监测新方案是一种集成了光学、机械、电子、边缘计算、AI识别以及云平台软件等技术的自动化系统。该方案利用变焦机器视觉原理&#xff0c;结合特殊波段成像识别技术和无源靶标&#xff0c;实现了非接触式大空间、多断面、多测点的高精度水平…

CSS学习-第三天

css链接 链接样式&#xff0c;可以使用任何css属性 特别的样式&#xff0c;可以有不同的样式 a:link - 正常&#xff0c;未访问过的链接 a:visited - 用户已访问过的链接 a:hover - 当用户鼠标放在链接上时 a:active - 链接被点击的那一刻 a:hover必须跟在a:link和a:visited后…

电脑显示器选购指南2024

选择显示器是五花八门的显示参数&#xff0c;如何选择&#xff0c;以下给出参数说明&#xff0c;及部分参考&#xff1a; 1. 尺寸和分辨率 尺寸&#xff08;英寸&#xff09; 根据使用距离和用途选择合适的屏幕尺寸&#xff1a; 21-24 英寸&#xff1a;适合小桌面空间、日常…

快速掌握C语言——数据结构【创建顺序表】多文件编译

1.数据结构脑图&#xff08;未完&#xff09; 2.顺序表其他操作 3.功能函数封装 4 完整代码 1>头文件test.h #ifndef __TEST_H__ #define __TEST_H__#include<stdlib.h> #include<stdio.h> #include<string.h>//宏定义 线性表的最大容量 #define MAX 3…

Linux 中的 mkdir 命令:深入解析

在 Linux 系统中&#xff0c;mkdir 命令用于创建目录。它是文件系统管理中最基础的命令之一&#xff0c;广泛应用于日常操作和系统管理中。本文将深入探讨 mkdir 命令的功能、使用场景、高级技巧&#xff0c;并结合 GNU Coreutils 的源码进行详细分析。 1. mkdir 命令的基本用法…

STM32F407+LAN8720A +LWIP +FreeRTOS UDP通讯

STM32F407+LAN8720A +LWIP +FreeRTOS ping通 上一篇实现了LWIP ping 通 本篇实现UDP通讯 实现如下功能: 串口1空闲中断+DMA接收,收到数据用UDP发送UDP接收,收到数据用串口1发送STM32CUBEIDE配置和代码 1. 配置UARAT1的空闲中断+DMA接收 UART1接收到数据,释放信号量,在任…

【蓝桥杯选拔赛真题94】Scratch巡逻的直升机 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析

目录 scratch巡逻的直升机 一、题目要求 编程实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、python资料 sc…

非前后端分离项目,通过拦截器,对前端发送网络访问地址

一、背景 在非前后端分离的web应用开发过程中&#xff0c;在html中不可避免的需要请求项目地址去访问接口或者静态资源&#xff0c;但是开发环境、测试环境以及生产环境不同&#xff0c;地址也不同&#xff0c;避免频繁修改代码&#xff0c;可以通过自动获取访问地址通过拦截器…

人工智能大语言模型起源篇(一),从哪里开始

序言&#xff1a;许多人最初接触人工智能都是在ChatGPT火热之际&#xff0c;并且大多停留在应用层面。对于希望了解其技术根源的人来说&#xff0c;往往难以找到方向。因此&#xff0c;我们编写了《人工智能大语言模型起源篇》&#xff0c;旨在帮助读者找到正确的学习路径&…

FFmpeg功能使用

步骤&#xff1a;1&#xff0c;安装FFmpeg Download FFmpeg 在这里点击->Windows builds from gyan.dev&#xff1b;如下图 会跳到另外的下载界面&#xff1a; 在里面下拉选择点击ffmpeg-7.1-essentials_build.zip&#xff1a; 即可下载到FFmpeg&#xff1b; 使用&#…