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

news2024/11/16 6:01:31

文章目录

  • 一、详细解释 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 数据报

  • 帧尾

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

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

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

相关文章

【C++笔记】AVL树的模拟实现

【C笔记】AVL树的模拟实现 一、AVL树的概念二、AVL树的模拟实现2.1、定义节点2.2、插入2.3、旋转2.3.1、左单旋2.3.2、右单旋2.3.3、左右双旋2.3.4、右左双旋2.3.5、插入接口的整体代码实现 三、验证AVL树3.1、验证 一、AVL树的概念 二叉搜索树虽然在一般情况下可以提高查找的…

如何使用`open-uri`模块

首先,我们需要使用open-uri模块来打开网页,并使用Nokogiri模块来解析网页内容。然后,我们可以使用Nokogiri的css方法来选择我们想要的元素,例如标题,作者,内容等。最后,我们可以使用open-uri模块…

多语言TTS:Multilingual speech synthesis

文章目录 [Learning to Speak Fluently in a Foreign Language:Multilingual Speech Synthesis and Cross-Language Voice Cloning](https://arxiv.org/abs/1907.04448)[2019interspeech][google][Improving Cross-lingual Speech Synthesis with Triplet Training Scheme](htt…

3DMAX建模基础教程:捕捉功能

在3DMAX中,捕捉功能是一项极其重要的技术,它能帮助我们在创建三维模型时更加精确和高效。本教程将详细介绍3DMAX中的捕捉功能及其应用。 1. 捕捉简介 3DMAX中的捕捉功能是指将物体固定在三维空间中的特定位置,以便进行精确的建模操作。这种…

0基础学习VR全景平台篇第120篇:极坐标处理接缝 - PS教程

上课!全体起立~ 大家好,欢迎观看蛙色官方系列全景摄影课程! 紧跟上节课,我们已经学会了怎么利用PS蒙版工具来对航拍全景图补天。但是在后续工作学习中,我们会遇到天空这部分存在部分接缝的问题,如图&…

算法通关村第八关-黄金挑战

大家好我是苏麟 ...... 路径总和2 描述 : 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 题目 : LeetCode 113.路径总和2 113. 路径总和 II 分析 : 这…

为什么UI自动化难做?—— 关于Selenium UI自动化的思考

在快速迭代的产品、团队中,UI自动化通常是一件看似美好,实际“鸡肋”(甚至绝大部分连鸡肋都算不上)的工具。原因不外乎以下几点: 1 效果有限 通常只是听说过,就想去搞UI自动化的团队,心里都认…

数据跨领域应用实例—车辆通行大数据应用场景(二)

2023年10月25日,国家数据局正式揭牌。标志着我国数据基础制度正在不断完善,数据资源使用水平稳步提升,数据要素市场将进入发展快车道。当前,数字经济已成为我国经济高质量发展的新动能,国家数据局的成立,在…

Python高级语法----Python类型注解与类型检查

文章目录 一、类型注解基础二、使用 `mypy` 进行类型检查三、类型注解的最佳实践结论在当今的软件开发实践中,类型注解和类型检查在提高代码的可读性和健壮性方面发挥着至关重要的作用。尤其在 Python 这种动态类型语言中,通过类型注解和类型检查工具,如 mypy,可以显著提升…

python爬虫代理ip关于设置proxies的问题

目录 前言 一、什么是代理IP? 二、为什么需要设置代理IP? 三、如何设置代理IP? 四、完整代码 总结 前言 在进行Python爬虫开发时,经常会遇到被封IP或者频繁访问同一网站被限制访问等问题,这时,使用代理IP就可以避免这些问题&#x…

微软允许OEM对Win10不提供关闭Secure Boot

用户可能将无法在Windows 10电脑上安装其它操作系统了,微软不再要求OEM在UEFI 中提供的“关闭 Secure Boot”的选项。 微软最早是在Designed for Windows 8认证时要求OEM的产品必须支持UEFI Secure Boot。Secure Boot 被设计用来防止恶意程序悄悄潜入到引导进程。问…

高版本模拟器安装burp证书

一、下载burp证书,安装openssl http://burp自己找官网安装opensslWin32/Win64 OpenSSL Installer for Windows - Shining Light Productions (slproweb.com)二、查看模拟器端口并连接 adb devices openssl x509 -inform der -in cacert.der -out burp.pem openssl…

一分多行列转换

问题描述: 将以下表方式存放的数据: 转换成如下方式存放: 1、 建表语句及插入测试数据 --建表语句 create table INFC_C_GUARANTOR_NISJ (CUST_NO VARCHAR2(30),BAIL_ACCT_NO VARCHAR2(2000) ); create table INFC_C_GUARANTOR_NISJ_N…

重复性工作自动化解决方案——影刀

以前,影刀是一个邂逅的初见小工具,新奇在里头,踌躇在外头; 现在,影刀是一个稳定的职场贾维斯,高效在里头,悠闲在外头; 以后,影刀是一个潜力的知己老司机,有序…

ROS 通信机制

ROS是一个分布式框架,为用户提供多节点(进程)之间的通信服务,所有软件和功能都建立在这种分布式通信机制上,ROS的通信机制是最底层也是最核心的技术。 一、话题通信机制 话题在 ROS 中使用最为频繁,其通信…

Python实现WOA智能鲸鱼优化算法优化循环神经网络分类模型(LSTM分类算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 鲸鱼优化算法 (whale optimization algorithm,WOA)是 2016 年由澳大利亚格里菲斯大学的Mirjalili 等提…

【VECTOR】:CAN OE Alyzer使用

CAN OE Alyzer使用 工程搭建新建工程DBC文件导入插入IG模块Trace查看录制Logger回放Trace 实际应用将需要回放报文的导出需要报文添加导出的报文,回放添加诊断CDD 工程搭建 新建工程 配置硬件1:通道数量选择(根据使用情况而定) 硬…

Swift爬虫程序

以下是一个简单的Swift爬虫程序,用于从前程无忧深圳地区招聘财务、会计的数据爬取数据: import Foundation import SwiftSoup// 创建一个请求对象,指定代理信息 var request URLRequest(url: URL(string: "https://www.51job.com/zh/c…

Machine-Level Programming III:Procedure

Machine-Level Programming III:Procedure Today Procedures Mechanisms(机制)Stack StructureCalling Conventions(调用规则) Passing control(传递控制)Passing data(传递数据)Managing local data Illustration of Recursion(递归说明) 补充术语: Program 程序…

Haskell添加HTTP爬虫ip编写的爬虫程序

下面是一个简单的使用Haskell编写的爬虫程序示例,它使用了HTTP爬虫IP,以爬取百度图片。请注意,这个程序只是一个基本的示例,实际的爬虫程序可能需要处理更多的细节,例如错误处理、数据清洗等。 import Network.HTTP.Cl…