【JavaEE】网络原理——网络层+数据链路层

news2024/9/21 1:19:48

在这里插入图片描述
🤡🤡🤡个人主页🤡🤡🤡
🤡🤡🤡JavaEE专栏🤡🤡🤡
🤡🤡🤡上一篇文章:【JavaEE】网络原理——传输层协议🤡🤡🤡

文章目录

  • 1.网络层
    • 1.1IP协议的报文格式
    • 1.2IP地址基本规则
      • 1.2.1网段划分
      • 1.2.2特殊IP地址
      • 1.2.3路由选择
  • 2.数据链路层
    • 2.1以太网协议

1.网络层

1.1IP协议的报文格式

在这里插入图片描述

  1. 4位版本:就是ipv4和ipv6两个版本,此处的报文格式是ipv4的。
  2. 4位首部长度:此处的和TCP是一样的,单位为字节,范围为0-15,则最大报头字节为15*4=60字节,最小为20字节。
  3. 8位服务类型:其实只有4位有效,并且这4位还是互斥的,有一位为1则其余三位都为0.
    在这里插入图片描述
  4. 16位总长度:指IP报头和载荷的和,通过这个长度可以算出TCP的载荷长度。
    在这里插入图片描述
    TCP载荷=IP总长度-IP报头-TCP报头
    此处的16位,那么IP的数据包也最多只有64kb?
    为了解决这个问题,IP有自动拆包和自动组包的特性
    在这里插入图片描述
    以上就是拆包的过程,那么接收方怎么把这些拆包的数据包组成一个完整的IP数据包呢。
  5. 16位标识:用来区分哪些数据包需要进行合并
  6. 3位标志:其实有用的只有2位,其中一位是表示该数据包是否触发拆包的效果,进而确定是否要组包,另一个标志位是在组包的时候标记最后一个包,在组包的过程,发现了这个标记说明到达了这个完整包的最后一部分。
  7. 13位片偏移:这个就是标记若干个要拼接数据包的先后顺序,片偏移量越大就越在后面。
  8. 8位生存时间:其实是IP数据包在网络转发的次数,一个IP数据包的初始情况下,有一个TTL的值(像32/64这样的整数)每经过一次路由器转发就-1,减到了0那么就丢包了,这个初始值是可配置的,是系统内核的参数。
  9. 8位协议:这里就是描述载荷部分是哪种协议的数据包,比如TCP,UDP等等协议
  10. 16位首部检验和:和TCP,UDP的检验和是一样的。
  11. IP地址:是一个32位的整数,为了让人们可以更好的观察,我们采取"点分十进制"的方式,理论上ip个数有42亿多,放到之前肯定是无法用完的,但是就现在而言,网络的发展,ip地址是远远不够的。
    IP地址不够用怎么办?
    1)动态分配IP地址
    比如这个地方的人不用,就给另一边的人用,就是空闲下来的ip地址分配给需要用的人。
    2)NAT机制——网络地址映射
    外网IP不可以重复,内网IP在不同的局域网中可以重复。
    a)内网/局域网
    192.168.* 10* 172.16-172.31* 一般这些IP地址开头的就是局域网,其余就是外网IP
    b)外网/广域网
    在NAT机制下有这几种情况:
    1)同一个局域网中,内网IP访问内网IP是可以的。
    2)不同的局域网中,内网IP访问内网IP是不可以的
    3)外网IP访问外网IP是可以的
    4)外网IP访问内网IP是不可以的
    5)内网IP访问外网IP是可以的
    对于内网IP访问外网IP这个问题我们来画一张图来描述
    首先我们以单个主机访问JD为例:
    在这里插入图片描述
    在同一个局域网下多个主机访问JD?
    我们需要添加一个端口号和一个映射表,通过端口号和映射表不仅可以让多个主机访问JD,而且还可以让JD将响应一一返回给我们的主机。
    映射表的简略模型:
    在这里插入图片描述
    在这里插入图片描述
    同局域网下的内网IP端口号相同怎么访问JD外网IP?
    只需要在端口号这改一下即可,将新端口号改为不一样的即可,这个新端口号是由运营商路由器自己分配的,类似于我们自己的主机给我们主机上的程序自动分配端口号一样
    不同局域网下内网IP相同怎么访问JD外网IP?
    在这里插入图片描述

1.2IP地址基本规则

1.2.1网段划分

同一个局域网的主机要按照一定规则分配IP地址
这个规则就是:
将一个IP地址分为两部分,一部分为网络号,一部分为主机号。
在同一个局域网下网络号相同,但主机号不同。
那么怎么划分网络号和主机号呢?
这里就需要一个新的概念子网掩码,这个子网掩码就是帮助我们来设置网络号和主机号的,子网掩码左边部分全为1,右边部分全为0,这些01是指二进制,而且01不能交替
比如:255.255.255.0这个子网掩码就是前三个字节全为1,后一个字节全为0。
全为1的就是网络号,全为0的就是主机号
在这里插入图片描述

1.2.2特殊IP地址

  1. 主机号全为0:这样的IP表示网段,不应该分配给具体的主机
  2. 主机号全为1:这样的IP表示广播IP,在广播IP发送数据,就会发送给局域网中所有的设备,例如:手机投屏。
    广播IP在发送数据是发送UDP数据包而不是TCP数据包,原因就是TCP是有连接的,但是广播IP在发送数据给每一个设备的时候并不需要建立连接,只需要发送到了就行。‘
  3. 127.*开头的地址:这样的地址称为环回地址,就是将数据包自己发送给自己,比如客户端和服务器在同一个主机上。

1.2.3路由选择

路由选择其实就是找从源IP到目的IP的路径,这里类似于我们生活中的地图导航,规划出一个路线"最优解",但是在我们路由这里就不是"最优解"而是"较优解"其实就是我们网络路线复杂程度很高,并且路由不是对全局网络路线都很了解,只对周围路由的网络线路了解。
对于源IP找目的IP是"探索性"的方式寻找,在寻找的过程中会借助"路由表"来寻找目的IP。

2.数据链路层

2.1以太网协议

在这里插入图片描述
mac地址:为了区分网络传输中不同设备的。
mac地址/物理地址:
在这里插入图片描述

mac地址在网卡出厂的时候就设置好的,原则上不同点网卡的mac地址是不一样的,因此mac地址可以作为主机的一种身份标识。
IP地址是支持整个传输过程的转发
mac地址的作用是支持两个相邻节点之间的转发。
比如:生活中出游的路线规划
假设我要从株洲出发到重庆旅游,那么我规划的路线是这样的:
株洲-长沙-重庆
株洲作为源IP,重庆作为目的IP
株洲-长沙:株洲就是源mac,长沙就是目的mac
长沙-重庆:长沙就是源mac,重庆就是目的mac
这个过程中源mac和目的mac一直是变化的,可以将mac作为短期目标,而ip作为长期目标来理解。
在数据传输的过程中,IP会用到路由表,mac会用到转发表,这两个表不是同一个东西
ARP协议就是为了给每一个路由器/交换机来建立转发表的。

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

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

相关文章

RuoYi3.0之sql代码审计

1 SQL注入漏洞代码审计 单点漏洞代码审计首当其冲当然要先看SQL注入漏洞是否存在,全局搜索关键字$,并限定文件类型为.xml,发现sysDeptMapper.xml和sysUserMapper.xml有存在SQL注入的地方,如下图所示: 1.1 SQL注入漏洞代码审计1 单点漏洞代码审计首当其冲当然要先看SQL注…

Elasticsearch 实现 Word、PDF,TXT 文件的全文内容提取与检索

文章目录 一、安装软件:1.通过docker安装好Es、kibana安装kibana:2.安装原文检索与分词插件:之后我们可以通过doc命令查看下载的镜像以及运行的状态:二、创建管道pipeline名称为attachment二、创建索引映射:用于存放上传文件的信息三、SpringBoot整合对于原文检索1、导入依赖…

基于PicoScope示波器理解CAN/CAN-FD的报文帧格式

🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe&…

Qt:21.事件(事件的介绍、事件的基类、用户输入事件、窗口和界面事件、其他系统事件、事件处理的思路)

目录 1.事件的介绍: 2.事件的基类: 3.派生类——用户输入事件: 4.派生类——窗口和界面事件: 5.派生类——其他系统事件: 6.事件处理的思路: 1.事件的介绍: Qt 的事件(Event&…

druid(德鲁伊)数据线程池连接MySQL数据库

文章目录 1、druid连接MySQL2、编写JDBCUtils 工具类 1、druid连接MySQL 初学JDBC时,连接数据库是先建立连接,用完直接关闭。这就需要不断的创建和销毁连接,会消耗系统的资源。 借鉴线程池的思想,数据连接池就这么被设计出来了。…

Java多线程性能调优

Synchronized同步锁优化方法 1.6之前比较重量级,1.6后经过优化性能大大提升 使用Synchronized实现同步锁住要是两种方式:方法、代码块。 1.代码块 Synchronized在修饰同步代码块时,是由 monitorenter和monitorexit指令来实现同步的。进入mo…

mysql的事务,你弄懂了吗?(Innodb)

目录 1.事务的ACID原则 2. 事务的隔离级别 2.1 数据库的脏读问题 2.2 数据库不可重复读问题 2.3 数据库幻读问题 2.4 数据库脏写问题 3.Mysql的锁 3.1 以锁粒度的维度划分 3.2 以互斥性的维度划分: 3.3 以操作类型的维度划分: 3.4 以加锁方式…

树的概念与二叉树的实现

目录 一. 树的概念 二. 访问树的方法 1. 左孩子右兄弟法 2. 双亲表示法 3. 顺序表存孩子的指针(孩子表示法) 三. 二叉树 1. 二叉树的定义 2. 特殊二叉树 3. 二叉树的性质 4. 存储方式 四. 二叉树的前中后序遍历 1. 前序遍历 2. 中序遍历 3. …

C 语言中如何实现图结构?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会! 📙C 语言百万年薪修炼课程 【https://dwz.mosong.cc/cyyjc】通俗易懂,深入浅出,匠心打磨,死磕细节,6年迭代&…

基于docker-compose部署zabbix7.0

1.安装docker和docker-compose 已有可跳过,没有参照我的docker一件安装脚本连接放在下方 一键安装dockerv24.0.6以及docker-compose可离线_docker 24对应docker-compose-CSDN博客 2.运行zabbix-server 1.创建zabbix工作目录 mkdir /zabbix 2.编写docker-compos…

【人工智能】Transformers之Pipeline(一):音频分类(audio-classification)

​​​​​​​ 目录 一、引言 二、音频分类(audio-classification) 2.1 概述 2.2 技术原理 2.2.1 Wav2vec 2.0模型 2.2.1 HuBERT模型 2.3 pipeline参数 2.3.1 pipeline对象实例化参数 2.3.2 pipeline对象使用参数 2.4 pipeline实战 2.4.1 …

【python】Python中常见的KeyError报错分析

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

ESP32FreeRTOS开发笔记:1.双核并行

ESP32 的 Arduino 框架内部集成了 FreeRTOS,允许开发者利用其多任务处理功能。在代码中,xTaskCreatePinnedToCore 函数是 FreeRTOS 提供的 API,用于创建任务并指定任务在哪个核心上运行。 FreeRTOS 是一个流行的实时操作系统内核,…

信息打点web篇--语言开发框架,组件识别

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本章节主要整理 识别语言开发框的打点内容 框架简介 高效理解:把用于做某些事的代码封装起来,使用者无需自己写代码直接一个函数就能完成本该很多行才能完成的功能。 例子:我们要写网站,…

Open3D 点云Kmeans聚类算法

目录 一、概述 1.1算法介绍 1.2实现步骤 二、代码实现 三、实现效果 3.1原始点云 3.2聚类后点云 前期试读,后续会将博客加入该专栏,欢迎订阅Open3D与点云深度学习的应用_白葵新的博客-CSDN博客 一、概述 1.1算法介绍 聚类是一种将数据集分组的方…

Qml 图片和加载器操作

学习目标:Qml 图片和加载器编程 学习前置 Qt Qml编程 基础部分 认识qml-CSDN博客 实现效果 对图片的基本操作 加载器 核心代码 加载器 思路: 创建一个加载器 默认是几个圆点,我们重写加载器元素(contentItem)&…

文献阅读:高效和稳健的 π-FISH rainbow 用于多种生物分子的多重原位检测

文献介绍 文献题目: Highly efficient and robust π-FISH rainbow for multiplexed in situ detection of diverse biomolecules 研究团队: 曹罡(华中农业大学)、戴金霞(华中农业大学) 发表时间&#xff…

RSA算法(C++)

RSA加解密过程 RSA为非对称加密算法,由一对公钥和一对私钥构成,私钥加密公钥解密,公钥加密私钥解密 如下图,D为私密的,假设传输英文字母,我们给英文字母编号A1,B2,C3… RSA加解密过程 两对密钥产生方法如下 C Op…

网络通信基本知识

网络通信 什么是网络通信? 通信网络是指将各个孤立的设备进行物理连接,实现人与人,人与计算机,计算机与计算机之间进行信息交换的链路,从而达到资源共享和通信的目的。 什么是网络协议? 网络协议是计算机…

Python函数 之 参数

1.参数的简单介绍 参数 形式参数(形参):在函数定义的时候,在括号中写⼊变量,这个变量就称为是函数的参数。实际参数(实参):在函数调⽤的时候,可以给定义时候的形参传递具体的数据值,供其使⽤。注: 在函数调⽤的时候,会将函数的实…