【Java】网络编程-地址管理-IP协议后序-NAT机制-以太网MAC机制

在这里插入图片描述

🌈个人主页:努力学编程’
个人推荐
c语言从初阶到进阶
JavaEE详解
数据结构
学好数据结构,刷题刻不容缓:点击一起刷题
🌙心灵鸡汤总有人要赢,为什么不能是我呢
在这里插入图片描述

🐴🐴🐴地址管理

🐎🐎🐎网段划分

我们将IP地址划分为两个部分,网络号和主机号.

  • 网络号:保证两个不同的网段有不同的标识.
  • 主机号:在同一个网段中,我们为了区分不同的主机,这里引入主机号.

在这里插入图片描述
这里给大家强调几个有关IP地址在通信的过程中需要注意的过程

  • 不同的子网的作用就是将网络相同的主机放到一起.
  • 如果在子网中新增一个主机,则这台主机的网络号必须和子网中的网络号一致,但是主机号必须和子网中的主机号不同,我们就可以通过合理的设置网络号和主机号来构成唯一的IP地址.

这里在给大家一种很久之前的关于网络划分的方案,把所有的IP地址分为五类,如图:
在这里插入图片描述
在这里插入图片描述
当然这种划分网络号的形式,可以说只存在于教科书中了,我们在日常开发的过程中,使用的是上面所说的网络号,主机号的方式管理IP地址.

🐎🐎🐎特殊的IP地址

  • 将IP地址中的所有的主机地址全部设置为零,就成了网络号,代表这个局域网.
  • 将IP地址中的主机号全部设置为1,就成了广播地址,用于给同一个链路中互相连接的所有主机发送数据报.

这里给大家插一段,关于广播地址的一些知识,首先由于广播地址是一个虚拟的地址,没有具体的地址值,所以它的实现是基于UDP实现的,在具体应用中,其实就是我们平常在家里使用的投影过程,首先是使用手机,连接和家里客厅里的电视同一个网络,然后手机借助家里的路由器,向连接家里这个网络的所有的设备发送一个数据包,这个数据包的传递过程就是利用广播的形式传递点的,然后可以支持传递的设备就会响应一个可以连接的数据包,这样就完成了投屏中搜索设备的整个过程.

  • 127.*的IP地址用于本机回环(loop back)测试,通常我们使用的是127.0.0.1

在这里插入图片描述

🐎🐎🐎IP地址的数量限制

我们知道,IP地址(IPv4)是一个4字节,32位的正整数.那么一共就有42亿9千万左右,而TCP/IP协议规定,每个主机都需要有一个IP地址.

按照这样的逻辑,我们就只有43亿台主机能接入网络吗?

实际上,由于我们上面所说的一些特殊IP地址的原因,数量远不止43亿
相对的我们这里提出了三种解决方法:

  • 动态分配IP地址: 当设备接入网络的时候,我们才给他分配IP地址,因此同一个MAC地址的设备,每次接入互联网中,都是有多个IP地址.
  • NAT地址:这个点比较重要,我们后面着重来讲.
  • IPv6:IPv6相对于IPv4来说极大的扩大了IP的数量,16个字节,128位来表示一个IP地址,使用IPv6就不用在考虑IP不够用的情况,因为它的数量足以给地球中的每一粒沙子分配一个IP,而计算机的主要硬件材料是硅,而硅就是用沙子做的,所以IP的数量是一定够的,由于它的IPv4是不兼容的,所以IPv6现在还没有大量普及.

在这里插入图片描述

🐎🐎🐎私有IP地址和公网IP地址

如果⼀个组织内部组建局域⽹,IP地址只⽤于局域⽹内的通信,⽽不直接连到Internet上,理论上 使⽤任意
的IP地址都可以,但是RFC 1918规定了⽤于组建局域⽹的私有IP地址
• 10.,前8位是⽹络号,共16,777,216个地址
• 172.16.到172.31.,前12位是⽹络号,共1,048,576个地址
• 192.168.
,前16位是⽹络号,共65,536个地址
包含在这个范围中的, 都成为私有IP, 其余的则称为全局IP(或公⽹IP);

在这里插入图片描述

一个路由器是可以配置两个IP地址的,一个叫WAN口IP,另一个叫LAN口IP(子网IP).
路由器LAN口连接的主机,都从属于当前这个路由器的子网中.
不同的路由器,子网IP其实都是一样的,(通常都是192.168.1.1).子网内的主机IP不能重复,但是每个子网之间的IP地址是可以重复的.
每一个家用路由器其实都是运行商路由器子网的一个节点,这样的运行商路由器可以有很多级,最外层的运行商路由器,WAN口IP就是一个公网IP.
如果我们希望自己实现的服务器程序,能够在公网上被访问到,就需要把程序部署在一台具有外网IP的服务器上,这样的服务器可以再阿里云/腾讯云上进行购买.

NAT机制:
这里给大家就介绍一下一台主机访问一个外部的服务器的时候的整个过程.由于我们在网络通信的时候,内网中的设备是没法访问公网中的服务器的,所以我们一般在发送请求之后给运行商路由器之后,中间会有一个机制叫NAT,它的作用就是给我们发送的这个数据包重新分配一个I公网的P地址,这样就可以访问外部的服务器,等到收到服务器收到响应之后,站在服务器的角度,它只是知道IP为运行商的机器给他发送了一个请求,对于后面的主机IP是一无所知的,所以发送响应的数据也是发送给了运营商这个IP,然后在运营商路由器里呜呼了一个类似于 “路由表” 的东西,这个东西的作用,就是将路由器IP和主机IP做了一个映射关系,等到我们收到数据之后,根据路由表找到发送请求的主机,然后将数据发送给对应的主机,完成整个通信过程.

在这里插入图片描述

🐎🐎🐎路由选择:

我们知道在真实的网络通信中,线路是非常复杂的,那么我们在网络通信的时候,到底是如何选择通信的线路的呢?

这里的过程就类似于 “跳一跳” 即 “问路” 的过程.

IP数据包的传输过程就类似于问路的过程.

  • 当IP数据包,到达路由器之后,路由器会先查看其目的IP;
  • 如果目的IP可以到达,直接将数据发送给目的IP.否则发送给另一个路由器
  • 重复这个过程,直到到达IP地址.

在这里插入图片描述
注意:

网络中,路由器的寻找,是不能直接寻找最优解的,我们只能找到所谓的 “较优解” 因为一台路由器是无法知道整个网络的结构的,它只能直到它附近的路由器的信息,所以我们寻找 “最优解” 的这个过程是启发式的,试探性的,逐渐知道最终的目标.

🐎🐎🐎数据链路层

对于数据链路层,就越来越接近底层了,离程序员越来越远了,这里着重关注一下其中的以太网协议就好,以太这个概念本身是物理上面的概念,用来描述光在真空中传播的一种介质,但是后面证明这个概念是不存在的,我们计算机就把这个概念拿来用了.

以太网横跨数据链路层和物理层,平时我们使用的有线网络就是以太网.
在这里插入图片描述

这里有一个非常重要的概念叫MAC地址(存在于目的地址和源地址是网卡出厂的时候固化的).

MAC地址和IP地址都是为了区分网络上的不同设备.
其实在开始的时候,开发MAC和开发IP地址的是同一伙人,独立各自提出的.
只是IP地址设置的是4个字节,MAC地址设置的是6个字节,现在4个字节明显不够用了,但是6个字节的MAC地址还是勉强够用的,我们刚才也说了,MAC地址是在出厂的时候,在网卡固化的时候设置的,所以理论上每个主机都有一个唯一的MAC地址.

基于这个原因,MAC地址就有了利另一个用处,可以用来识别主机的唯一的标记.

这里就让我想起了 “卖外挂” 商家,为了不让买家把外挂卖给被人或者到处传播,就会在外挂中加一个识别买家主机的程序,只有和买家的主机的MAC地址一致,才能使用外挂系统.所以理论上,我们其实是可以手动修改主机 的MAC地址的,只要修改成买家的MAC地址,就可以成功安装外挂了~~.

MAC的用处:

对于IP地址来说,是支持整个数据的转发过程的.而MAC是支持两个相邻的节点数据之间的转发.
这里给大家举一个栗子:
我要从未央区到周至,大致有这样几个过程:
未央区.西安北站.杨凌.周至
从IP地址的角度我们要对整个过程进行规划:
未央区->西安北站->杨凌->周至
具体每个过程我们需要从一个地方到另一个地方~~

  1. 未央区->西安北站
    源IP:未央区
    目的IP:周至
    源MAC:未央区
    目的MAC:西安北站
    2.西安北站->杨凌
    源IP:未央区
    目的IP:周至
    源MAC:西安北站
    目的MAC:杨凌
    3.杨凌->周至
    源IP:未央区
    目的IP:周至
    源MAC:杨凌
    目的MAC:周至

计算机中也是一样IP地址负责记录整个过程中的路线,而MAC地址则是记录每次走的每一步对应的路线.

我们上面针对以太网数据帧可以了解到其最大长度是1500字节,此处的1500也称为MTU(和硬件相关联的)针对不同的数据链路层协议,对应的MTU是不同的.

在这里插入图片描述
这里的 ARP 协议是为了给了每个路由器一个"转发表"这个表中就记录了IP地址->MAC地址的映射.

我们在发数据的时候,先根据目的IP,确定接下来往哪里走,直到下一跳的IP(查路由表),然后根据下一跳的IP,查转发表,直到IP对应的 MAC / 端口是哪个.

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

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

相关文章

vscode关闭git的提交提示

问题描述: vscode中光标停留在每一行都会有出现git仓库的提交信息,影响代码阅读。 解决方法: 左下角设置齿轮: 输入关键词commit input 取消勾选,即可解决。

Apache subversion 编译流程

目录 1. 概述2. 依赖库简介2.1 Expat2.2 Apache apr2.3 Apache apr-iconv2.4 Apache apr-util2.5 Zlib2.6 OpenSSL2.7 Sqlite2.8 Apache Serf2.9 Apache subversion3. 编译3.1 Expat编译3.1.1 源码信息3.1.2 CMake-GUI3.1.3 编译步骤3.2 APR编译3.2.1 源码信息3.2.2 编译步骤3.…

2024年【中级消防设施操作员(考前冲刺)】及中级消防设施操作员(考前冲刺)模拟考试题库

题库来源:安全生产模拟考试一点通公众号小程序 中级消防设施操作员(考前冲刺)根据新中级消防设施操作员(考前冲刺)考试大纲要求,安全生产模拟考试一点通将中级消防设施操作员(考前冲刺&#xf…

mp4转换成mp3,八个超简单视频转换方法

怎么将mp4转换成mp3?在现代数字媒体的世界中,视频和音频的转换变得尤为重要。许多人在观看视频时,常常会被其中的声音吸引,想要单独保存下来。这时,将MP4格式的视频转换为MP3格式的音频就显得尤为必要。MP4是一种常用的…

长时间认知任务中的大脑补偿机制:fNIRS和眼动追踪研究

摘要 在需要高度集中和高效完成关键任务的领域,如何在疲劳状态下维持认知表现是一个非常重要的问题。在这种情况下,帮助大脑克服疲劳的补偿机制研究就显得尤为重要。本研究探讨了生理、行为和主观测量之间的相关性,同时考虑了疲劳对工作记忆…

yolov5/8/9/10模型在VOC数据集上的应用【代码+数据集+python环境+GUI系统】

yolov5/8/9/10模型在VOC数据集上的应用【代码数据集python环境GUI系统】 1.背景意义 VOC数据集被广泛应用于计算机视觉领域的研究和实验中,特别是目标检测和图像识别任务。许多知名的目标检测算法都使用VOC数据集进行训练和测试。VOC挑战赛(VOC Challeng…

maxwell 输出消息到 kafka

文章目录 1、kafka-producer2、运行一个Docker容器,该容器内运行的是Zendesk的Maxwell工具,一个用于实时捕获MySQL数据库变更并将其发布到Kafka或其他消息系统的应用3、进入kafka容器内部4、tingshu_album 数据库中 新增数据5、tingshu_album 数据库中 更…

[Unity Demo]从零开始制作空洞骑士Hollow Knight第四集:制作更多的敌人

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、制作敌人僵尸虫Zombie 1.公式化导入制作僵尸虫Zombie素材2.制作僵尸虫Zombie的Walker.cs状态机3.制作敌人僵尸虫的playmaker状态机二、制作敌人爬虫Climber…

Gradio 自定义组件

如何使用 Gradio 自定义组件,Gradio 前端使用 Svelte,后端使用的 Python。如何自定义一个组件呢?Gadio 提供了类似于脚手架的命令,可以生成需要开发组件的前后和后端代码。 创建组件 运行如下命令,gradio 会自动生成…

鹏鼎控股社招校招入职SHL综合能力测评:高分攻略及真题题库解析答疑

鹏鼎控股(深圳)股份有限公司,成立于1999年4月29日,是一家专注于印制电路板(PCB)的设计、研发、制造与销售的高新技术企业。公司总部位于中国广东省深圳市,并在全球多个地区设有生产基地和服务中…

FinGPT金融大模型

FinGPT仓库https://github.com/AI4Finance-Foundation/FinGPT 功能: Adviser。根据新闻判断市场情绪(积极、消极、中性),给出投资建议。Quantitative Trading。定制属于自己的金融助手。叫它关注某几个股票、监测消息等。可以直…

计算机网络33——文件系统

1、chmod 2、chown 需要有root权限 3、link 链接 4、unlink 创建临时文件,用于非正常退出 5、vi vi可以打开文件夹 ../是向外一个文件夹 6、ls ls 可以加很多路径,路径可以是文件夹,也可以是文件 ---------------------------------…

5.C_数据结构_树

概述 树的逻辑结构: 树中任何节点都可以有0个或多个直接后继节点,但最多只有一个直接前驱节点。根节点没有直接前驱节点,叶节点没有直接后继节点。 相关名词: 空树:树中没有节点节点的度数:一个节点的…

【纯小白论文代码带读】医学图像分割MASDF-Net(问题产生及解决)

论文链接:https://www.semanticscholar.org/paper/MASDF-Net%3A-A-Multi-Attention-Codec-Network-with-and-Fu-Deng/6ab609eb93dfd12596032174ca9603712f5c050a 代码链接:https://github.com/Rayicer/TransFuse 初见面代码: Q&am…

【字符函数】strcpy函数(字符串复制函数)+strcat函数(字符串追加)+strcmp函数(字符串比较)【笔记】

1.复制函数--------------strcpy函数 函数使用 char*strcpy(char* destination, const char* source) strcpy函数用于拷贝字符串,即将一个字符串中的内容拷贝到另一个字符串中(会覆盖原字符串内容)。它的参数是两个指…

大数据新视界 --大数据大厂之Kubernetes与大数据:容器化部署的最佳实践

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

Java键盘输入语句

编程输入语句 1.介绍:在编程中,需要接受用户输入的数据,就可以使用键盘输入语句来获取。 2.步骤: 1)导入该类的所在包,java.util.* 2)创建该类对象(声明变量) 3)调用里面的功能 3…

面试官:什么是CAS?存在什么问题?

大家好,我是大明哥,一个专注「死磕 Java」系列创作的硬核程序员。 回答 CAS,Compare And Swap,即比较并交换,它一种无锁编程技术的核心机制。其工作方式分为两步: 比较:它首先会比较内存中的某…

C++的初阶模板和STL

C的初阶模板和STL 回顾之前的内存管理,我们还要补充一个概念:内存池 也就是定位new会用到的场景,内存池只会去开辟空间。 申请内存也就是去找堆,一个程序中会有很多地方要去找堆,这样子效率会很低下,为了…

vue之我不会 计算属性 vuex 路由 插槽

一、计算属性 例子&#xff1a; 注意&#xff1a;调用计算属性时&#xff0c;不可以带括号&#xff0c;那样调用的就是方法&#xff0c;如&#xff1a;以下调用fullName时不可funnName() <div id"root">姓&#xff1a;<input type"text" v-model&…