JavaEE——网络原理(网络层 IP协议与数据链路层)

文章目录

  • 一、详细解释 IP协议
  • 二、解释 TCP 和 IP 之间的联系和区别。
  • 三、IP协议——地址管理
  • 四、数据链路层

一、详细解释 IP协议

注:在这里我向大家描述的 IP协议是 IPv4。
在这里插入图片描述
如上图所示,这就是 IP 协议头的格式,下面我会分别解释他们其中每一个部位所包含的含义。

  • 4位版本
    这就是指定 IP 协议的版本,对于 IPv4 而言,就是4。
  • 4位首部长度
    描述了 IP 报头的长度。(IP 报头是一个变长的)
    报头中有一个选项部分,是边长的,可有可无。 此处的单位也是 4 字节。
  • 8 位服务类型
    这里看似说是 8 位,但是实际上只有 4 位是有效的。这 4 位中只有 1 位可以是 1,其余均是 0 。
    这 4 位就表示的是 IP 协议的 四种形态 / 四种工作模式

上述提到的四种形态分别是
最小延时,最大吞吐量,最高可靠性,最小成本
对于上面的 四种形态,实际开发中可以根据不同的需求来切换 IP 的模式,以达到最优效果。

  • 16位总长度(字节数)
    描述了一个 IP 数据报的长度。(头+载荷)
    这里的这个长度减去前面的 IP 报文长度,剩下的就是 载荷长度。(一个完整的 TCP / UDP 数据报长度)

16 位总长度,这是否就意味着一个 IP 数据报,最大只能支持 64kb?
这个限制确实是存在的,但是,IP自身就支持对包的拆分的组装。
简单举例:
发送方: 将 100kb 的数据,交给传输层(封装).网络层就把这个 100kb 的数据进行拆包,(假设拆成两份 64kb + 36kb)。
之后再将这两份数据交给数据链路层,由以太网封装成两个数据帧
接收方: 数据链路层,针对两个数据帧进行分用,得到两个 IP 数据报,交给网络层。网络层针对这两个 IP 数据报进行解析,将里面的载荷拼接成一个,再交给传输层。

  • 16位标识 / 3位标志 / 13位片偏移
    这三点分别表示的是:
    同一个数据拆开的多个包标识相同
    结束标志。
    标识了多个包的先后顺序。
    总的来讲,这里的三点都是辅助 拆包 / 组包。

  • 8 位生存时间(TTL)
    这各代表的是,一个数据报在网络上可以传输的最大时间。
    这里所说的时间单位不是 “秒” 而是 “次数”

当一个数据报被构造出来,就会有一个初始的 TTL 数值(比如 32 或者 64…) 这个数据报每一次经过路由器转发,TTL - 1
如果一直减少到 0 ,还没有到达目标,此时就认为这个包永远无法到达,可以丢弃了

  • 8 位协议
    这里存放的是当前载荷部分的内容是属于那个协议的。(TCP / UDP)

  • 16 位首部校验和
    此处只需要对首部进行校验,载荷部分(TCP / UDP 数据报)自身已经有校验和了。

假设,此处传过来的校验和不一致。
此时数据将会直接丢弃,IP 不负责重传。如果上层使用 TCP,TCP 会在没有收取到 ack 后进行重传。

  • 32 位源IP地址 / 32 位目的IP地址
    IP 地址,是IP协议中最重要的部分。
    这两个地址,分别表示的是发送端和接收端

在我们日常见到的 IP,就是一串数字。这里是将 32 位 4 个字节的数字给分割开来,分成四个部分。每个部分都分别使用 0~255
十进制整数进行表示。

二、解释 TCP 和 IP 之间的联系和区别。

在前面的文章中,我已经向大家解释了在网络传输中 TCP 的相关知识。我们知道,TCP 有一个特点:可靠传输。
呢么,这里就有一个问题,既然 TCP 是进行传输工作的。我们现在介绍的 IP协议,也是进行传输工作的
呢么,这两者之间有什么不一样的地方,这就很值得探讨一下。
区别:
首先,我们先来简单的了解 TCP 和 IP 的区别

  1. TCP:叫做 传输控制协议,面向连接的,端对端的,可靠的,基于IP的 传输层 协议
  2. IP:叫做 因特网协议,位于 网络层,IP 协议规定了数据传输时的基本单位和格式。

在这里插入图片描述
如上图所示,这张图是我们在初次认识到网络时就见过的 五层网络模型

通过上面的解释,发现 TCP 和 IP 分别在两个不同的层级
联系:
对此,我们可以通过上面的信息得出两者之间的联系:IP 通过接受来自 (更低层级:数据链路层) 发送过来的数据报,并将该数据报发送到更高层(传输层)——TCP 层;反之,IP 层也可以将 TCP 层的数据报转发到更低层进行传输

总结:
总的来看,TCP 和 IP之间有着明确的分工
IP 提供无连接,不可靠,尽最大的可能将数据报交付的工作。进行主机间的通信。
TCP 则是对数据报进行更精细的加工,面向对应用层提供服务,确保传输的可靠性。

形象的来讲,这就像是我们在网上买快递。
这里的 TCP 就像是 “商家”,对我们的商品进行比较详细的包装 然后递交给 “快递员” ,也就是 IP
同样的,要将这个 “快递包裹”,发送到我们用户的手中,就只需要对上述操作进行反向即可。

UDP 和 TCP 之间的区别不是很大,如果还想要了解整体工作的性质,可以看看这篇文章: JavaEE 网络原理——TCP的工作机制(初篇 包含 UDP 协议的再次阐述)

三、IP协议——地址管理

将一个 IP 地址分为两部分,一个叫网络号,一个叫主机号

  • 网络号: 标识网段,保证相互连接的两个网段具有不同的标识。
  • 主机号: 标识主机,在同一个网段内,主机之间可以有相同的网络号,但是必须要有不同的主机号

简单举例:
如,192.168.0.10 这个 IP 地址。
网络号为:192.168.0
主机号为: 10
以这个 IP 地址组建一个 局域网,呢么,当前局域网下的设备,网络号都为 192.168.0

简单展现一个典型的局域网环境,如图:
在这里插入图片描述

通过上图,简单明了的解释了在局域网中,网络号和主机号的用法。但是,在这里,我们又引入了一个新的信息——WAN口 和 LIN口

其实这也不难理解,下面我就简单的解释一下两者的功能。
如图,这就是路由器上的 WAN口 和 LIN口。
在这里插入图片描述
WAN口: 主要是用来联系局域网。(往大了将就是连接互联网)
LIN口: 就是将多个用户主机连接到一个局域网中。

到这里,我们已经了解了什么是网络号,什么是主机号。但是还有一个问题,它们两个是怎么界定的?是依据什么来划分的?

其实这里还有一个单独概念——子网掩码
在这里插入图片描述
如图所示,这里的 255.255.255.0 就是子网掩码。将其以二进制的形式表述出来就如下图:
在这里插入图片描述
这里 1 的部分就描述了 IP 有多少位是网络号。
所以,也就是说,网络号不一定就是前三个字节,是可以调整变化的。

四、数据链路层

在这里插入图片描述
如上图所示,数字链路层更加接近网络传输的底层逻辑。
明确的来讲,数据链路层所考虑的就是两个节点之间的传输。(也就是通过网线 / 光纤 / 无线,直接连接两个设备)

在这里的典型协议有很多,其中最知名的就是 “以太网协议”
这个协议规定了数据链路层,规定了物理层的内容。
我们日常生活中使用的网线,就叫做 “以太网线”。(就是遵守以太网协议的网线)

图示以太网数据帧,如下:
在这里插入图片描述
如上图所示,我们可以得到一个以太网数据帧的格式:
以太网数据帧 = 帧头 + 载荷 + 帧尾

  • 帧头
    这里的帧头包含了三个要素,分别是:目的地址、原地址、类型(这里的类型有三种:IP、ARP、RARP)。

解释说明此处 目的地址、原地址
此处使用的 不是 IP 地址 表示,而是设置了一个 mac 地址

问题1: 这里的 mac 地址是什么?

解释:
这是一个物理地址,这个地址是完全独立的,是另外一套地址体系
大小为 6 字节(相较于 IPV4 地址大很多) 当前的每一个设备都会有一个唯一的 mac 地址
这个地址不是动态分配的,而是网卡在出厂时就已经被设置好了

问题2: 这里的 mac 和 IP 之间是如何相互配合的?

解释:
在这里,IP 地址和 mac 各司其职
IP 在这里宏观描述传输过程的起点和终点
mac 在这里详细描述两个相邻节点的起点和终点怎么走
假设从北京出发到南京
通过网络层(IP),规划出了如下图的路径,选择走那条更合适的路径:
在这里插入图片描述
数据链路层(mac)中,就是考虑两个节点之间如何走。
这里我们假设选择
第二条路线
。如图:
在这里插入图片描述

  • 载荷
    这里的载荷就是完整的 IP 数据报

  • 帧尾

  • 在这里不是很重要就不再多进行解释了。

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

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

相关文章

分布式数据库Schema 变更 in F1 TiDB

分布式数据库Schema 变更 in F1 & TiDB 【转载】TiDB 源码阅读系列文章(十七)DDL 源码解析 | PingCAP 上述文章主要叙述了从DDL语句发起到执行的过程,简单介绍了弄一套相同的模式来后台处理数据回填,从而提高DDL的并发度的一…

Leetcode-104 二叉树的最大深度

递归实现 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

小红书app拉新校园版本地网推项目修改政策了 附一手官签渠道

小红书app拉新深受现在地推作业人员和网推作业人员还有校园推广项目的喜爱,简单价格高 可以通过”聚量推客“申请小红书校园版项目拉新 以下为最新价格政策和介绍,需要7天内活跃,按照活跃天数进行结算

响应式作文新闻资讯博客网站模板源码

模板信息: 模板编号:29081 模板编码:UTF8 模板分类:博客、文章、资讯、其他 适合行业:博客类企业 模板介绍: 本模板自带eyoucms内核,无需再下载eyou系统,原创设计、手工书写DIVCSS&a…

subprocess 模块用法

如果你只关心命令的标准输出,并且希望在命令执行失败时引发异常,可以使用 check_output。如果你需要更多的控制,例如与正在运行的进程进行交互,可以使用 Popen。如果你希望获取标准输出和命令的状态码,可以使用 getsta…

前后端分离项目为什么很火?有什么优势?

目录 一、什么是前后端分离 二、前后端分离项目的技术栈 三、前后端分离项目有什么优势 一、什么是前后端分离 前后端分离是一种软件架构的设计模式,它将应用程序的前端(即用户界面)和后端(即服务器端)进行解耦,使得它们可以独…

Outlook如何删除邮箱账户

Outlook如何删除邮箱账户 说明: 最近有用户询问到“我的Outlook登陆了很多个邮箱账号,不知道怎么退出”接下来将具体操作步骤加以说明 操作指引: 1、首先打开Outlook该软件,然后点击“文件” 2、点击账户设置下拉菜单 3、在下拉…

Vue使用高德地图实现点击获取经纬度以及搜索功能

1. 首先在高德开放平台申请key值 2. 然后会在这个地方显示 3. 在VScode里面安装地图 yarn add amap/amap-jsapi-loader --save 4. 准备一个容器 <div id"maps"></div> <style scoped>#maps {width: 100%;height: 100%;position: relative;z-index…

使用SpringAOP+Redis实现接口处理幂等

文章目录 一、思路分析二、代码实战1、搭建SpringbootAOPRedis环境2、自定义注解3、切面类4、测试一下吧 一、思路分析 在调用后台接口时&#xff0c;由于用户多次点击或者说第三方重试&#xff0c;可能会导致幂等问题。 解决方案无非就是上一次请求没有处理完&#xff0c;第…

瑞吉外卖01-实现管理端登录登出功能

开发前准备 准备数据表 结合页面原型创建数据库reggie,可以使用图形化界面或者MySQL命令运行SQL文件导入表结构(使用命令时sql文件不要放在中文目录中) 创建工程 创建一个SpringBoot的工程(勾选Spring Web&#xff0c;MySQL和MyBatis),配置pom.xml文件导入druid&#xff0c;…

打破时空界限的虚拟线上会议大厅:多人在线互动的未来

引言&#xff1a; 在数字时代&#xff0c;迅猛发展的科技不仅改变了我们的日常生活&#xff0c;也深刻地影响着商务和社交领域。虚拟会议大厅&#xff0c;作为一种创新的交流平台&#xff0c;正以其多人同时在线、音视频通话和直播推流的强大功能&#xff0c;展现着新时代的会…

2023最新整理软件测试常见面试题附答案

包含的模块&#xff1a; 本文分为十九个模块&#xff0c;分别是&#xff1a;软件测试 基础、liunx、MySQL、web测试、接口测试、APP测试 、管理工具、Python、性能测试、selenium、lordrunner、计算机网络、组成原理、数据结构与算法、逻辑题、人力资源需要的点击文末获取&…

海思平台awb标定

文章目录 1、raw图采集2、awb标定3、标定效果优化1、raw图采集 raw图采集标准: 如果raw是12bit,即raw12,那么Block9 块的亮度就是40960.8 = 3276.8左右。 勾上Dump Raw,我这里raw10,即Depth为10bit,那么Block19的亮度应该为10240.8 = 819.2左右,调整曝光Exposure Attr…

深入探讨跨境电商商城源码的多语言、多货币、多商户入驻支持“

随着全球电子商务的飞速发展&#xff0c;跨境电商已成为一股不可忽视的力量。在这个背景下&#xff0c;为跨境电商商城源码提供多语言、多货币、多商户入驻支持显得尤为重要。本文将深入探讨这三大特性的实现方式及其对跨境电商发展的影响。 一、多语言支持 对于跨境电商来说&a…

多数据源切换

多数据源切换 1.jdbcTemplate2.使用切面3.mybatis层次的多数据源4.spring的dynamic自动注入 项目中经常会有多个数据源&#xff0c;那么如何处理呢 有4种方法 准备&#xff1a; 创建两个数据库 CREATE SCHEMA test DEFAULT CHARACTER SET utf8mb4 ; CREATE SCHEMA school DEFA…

【Debug】此语法需要一个导入的帮助程序,但找不到模块“tslib”

报错如下&#xff1a; 代码可以编译运行&#xff0c;但是会有红线和报错。 解决方法&#xff1a;TypeScript error “TS2354: This syntax requires an imported helper but module ‘tslib’ cannot be found” Issue #37991 microsoft/TypeScript GitHub 在tsconfig.jso…

MacOS下VMware Fusion配置静态IP

前言 在虚拟机安装系统后&#xff0c;默认是通过DHCP动态分配的IP&#xff0c;这会导致每次重启虚拟机ip都可能会改变&#xff0c;使用起来会有很多不便。 配置静态IP 查看主机网关地址 cat /Library/Preferences/VMware\ Fusion/vmnet8/nat.conf 查看主机DNS&#xff0c;m…

3种方法,教你用Pytest更改自动化测试用例执行顺序!

前言 在自动化测试中&#xff0c;自动化测试用例设计原则就是&#xff1a;执行过程时不能存在依赖顺序。那么如果测试用例需要按照指定顺序执行&#xff0c;这个时候应该怎么做呢&#xff1f; 目前单元测试框架中UnitTest没有办法改变测试用例的执行顺序&#xff0c;但是另一…

数据结构-数型查找

二叉排序树&#xff08;BST&#xff09; 二叉排序树&#xff0c;又称二叉查找树&#xff08;BST&#xff0c;Binary Search Tree&#xff09; 一颗二叉树或者是空二叉树&#xff0c;或者是具有如下性质的二叉树&#xff1a; 左子树上所有结点的关键字均小于根结点的关键字&…

微信支付配置完整操作手册

微信支付配置 必须申请开通微信支付 微信支付官方地址&#xff1a;https://pay.weixin.qq.com/index.php/core/home/login?return_url%2F 申请指引&#xff1a;https://pay.weixin.qq.com/index.php/public/bare_applyment/login4bank 百度经验&#xff1a;https://jingyan.b…