网络编程之IP协议

news2024/11/19 18:27:54

🎉🎉🎉点进来你就是我的人了
博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!

人生格言:当你的才华撑不起你的野心的时候,你就应该静下心来学习!

欢迎志同道合的朋友一起加油喔🦾🦾🦾
目标梦想:进大厂,立志成为一个牛掰的Java程序猿,虽然现在还是一个🐒嘿嘿
谢谢你这么帅气美丽还给我点赞!比个心


目录

一.IP协议 (网络层)

1. IP 数据报的拆包组包

2. 8 位生存时间

3. 源 IP 与目的 IP

4. IP协议 的两个核心功能

二、IPv4 协议

 特殊地址

三、如何解决 IP地址的不够用问题

1. 动态分配 IP

2. NAT 机制

(1) 根据例子理解 NAT 机制

(2) NAT 机制对应的模型

3. IPv6 协议

四.以太网协议 (数据链路层)

五.DNS协议



 IP是一种 「不可靠」的 「端到端」的数据包 「传输服务」,主要实现两个功能:数据传输 和 数据分片。

一.IP协议 (网络层)

①IP协议的报头格式以及各部分说明:

1. IP 数据报的拆包组包

在上图中,我们可以看到:一个 IP 的数据报总长度为 16位,这看上去和 一个UDP 数据报的长度相同,最大都为 64KB.

而虽然 IP协议 看起来也是有个最大 64KB 的限制,但实际上,IP协议 内置了拆包组包的功能。如果一个数据太长了,IP协议 就会先将数据自动拆成多个数据报,再进行传输,最后接收方收到数据时,又会重新进行组包。这样一来,就没有单单的 64KB 的限制了。此外,IP协议 的拆包组包功能是内置在协议中的,不需要程序员实现这一功能,比较方便。

2. 8 位生存时间

8 位生存时间这个字段表示 一个 IP数据报 最多在网络上存活多久,而 TTL 并不是一个时间单位,它其实是一个以 " 次数 " 为单位的概念。

比方说,主机A 给距离较远的 主机B 发送数据,数据每次经过一个路由器转发,TTL 就减 1,而 TTL 一直减到 0 还未到达 主机B 目的 IP,那么就被自动丢弃。而一般情况下 TTL 的次数都较为充裕。

那么,8 位生存时间这个字段,主要是用来防止出现路由器之间的循环。( A -> B -> C -> A )

3. 源 IP 与目的 IP

这是整个 IP 协议中最核心的部分。
我们将 IP地址 比作成快递单号上的地址,源IP 就表示 " 发件人地址 ",目的IP 就表示 " 收件人地址 "。

4. IP协议 的两个核心功能

① 地址管理

地址管理:能够通过一系列的规则,将网络上设备的地址给描述出来。
地址管理中的一些重点部分在下面的 IPv4 协议中会详细介绍到,现在请继续往下看。

② 路由选择

路由选择:根据当下的源地址和目的地址,规划出一条合适的路径。

此处的 " 路由 " 指的是 IP协议 中的 " 路径规划功能 ",为什么要进行规划?
因为通过网络从某一端传输到另一端,在这个过程中,并不是 " 一站到达 ",它更多的情况下是错综复杂的路线,下图为我们展现出来了这样的情况。

 举第一个例子:小明准备从家里出发去市中心购物,那么他就得先明确起始地和目的地,起始地是家,目的地是商场。可想而知,小明在去之前,就必须得规划好路线。坐公交车、坐地铁、或坐出租车…假设他坐地铁,而坐地铁又分为很多种路线,可能先是 1号线 > 6号线 > 5号线,也有可能是 1号线 > 10号线 > 3号线 > 16 号线…他在去之前就能够规划好路线,以此来提高效率。

但是在 IP 协议中的路由选择与我们上面说的坐地铁选择路线之间有本质区别,更多的是一种 " 探索式 " 的过程。因为当数据到达某个路由器之后,路由器并不能立马为数据规划好一个整套的路线,路由器只能知晓它附近的情况,即它只知道相邻设备的情况这很好理解,毕竟路由器是一个物理层面的实体,它并不能掌控全局,它的存储空间有限,不可能通过一个路由器的路由表就保存整个互联网环境的所有情况。

举第二个例子:杰克第一次来到一个陌生的城市,他也准备去市中心购物。但这时候,他就只能向路人问路,但是路人每次只能列出一个大致的方向。

当杰克遇到第一个路人A,
路人A 说:我不知道商场在哪,但我知道你从这里坐 3号线坐到 xxx路,那里一定有购物的地方,即使没有,你也可以再问问别人…

之后杰克应了路人A 的话,坐了 3号线,当他从 3号线下来的时候,找了半天没找到商场,于是又问了路人B,
路人B 说:你从这里直走,走到头,再往左转,就能看到购物的地方。

于是杰克又应了路人B 的话,到了他说的地方,只是发现了服装专卖店,并不是商场,于是他又问了路人C

在刚刚的例子中,每一个路人,就相当于一个路由器。每个路人都有一个自己熟悉的范围,但一个路人并不知道一套完整的路线,只知道一个大致的方向。而这个例子,就类似于路由器中的一种核心数据结构:" 路由表 "。

二、IPv4 协议

在 IPv4 中,计算机主要是通过一个 32位 的二进制数来进行表示一个 IP 地址。

而为了给人们直观地观察 IP 地址,把这个 32位 整数表示成 " 点分十进制 " 的形式。三个点把32位整数分为4个部分,每个部分一个字节,每部分的取值范围是0-255(1111 1111)

例如:下面的就为人们日常使用的 IP 地址格式
192.168.1.102

 特殊地址

①网络号:

如果IP的主机号全为0,该IP就表示一个网络号(局域网中的一个正常设备,主机号不能为0)

②广播地址:

如果IP的主机号全为1,该IP就是一个"广播地址",往这个IP发送的消息,整个局域网都可以收到。

③环回IP:

如果IP地址是以127开头,就表示这是一个"环回IP",即表示主机自己

如果IP地址是10开头,或者192.168或者127.16-127.31开头的,表示该IP是一个局域网内部的IP(内网IP),剩下的IP被称为是外网IP(直接在广域网上使用的)。

注意:!!!

外网IP一定是唯一的,每个外网IP都会对应一个唯一的设备,而内网IP只在当前局域网内部是唯一的,但是在不同的局域网内可以有内网相同的IP设备。

关于 IP 地址,涉及一个较为重要的问题:IPv4 协议对应的 IP地址 够用吗?

IPv4 协议对应的 IP地址 实际上使用 32位 整数来表示的,而 32 位的二进制数最多也就只能表示 42亿9千万之多,这是因为当初设计者就是这么设计的,他们也没有想到今天这个时代,互联网发展的如此迅速。

所以说,针对一个城市、一个人口不那么多的国家,IP 地址或许已经够用了。
但如果要做到全球通信,就很困难了,因为可能我们每个人不止一个网络设备,公司也不可能按数量为员工分配刚刚好的设备。

三、如何解决 IP地址的不够用问题

1. 动态分配 IP

本质上说,动态分配 IP 的思想就是:一个设备接入网络了,就为其分配一个 IP,另一个设备没接入网络,就不为其分配 IP. 但是这种办法,终归治标不治本。
因为在当下社会,很多人手机可能就已经全天 24小时 开着网络了。

2. NAT 机制

NAT:Network Address Translation ( 网络地址转换 )

NAT 机制的思想实际上就是使用一个 全局的 IP 地址,来代表一批私有 IP 的主机。

(1) 根据例子理解 NAT 机制

在下图中,在局域网1 中,全局 IP 123.456.12.7 这个地址用来表示整个局域网内的主机地址。在局域网2 中,也是同样的操作。而由于不同的局域网可以使用重复的主机 IP,这样一来,就可以 " 重复使用相同的 IP地址了 ",以此间接达到地址复用的目的。

 在上图中,类似于 192.168.xxx.xxx 这样的 IP 是一个局域网内部的 IP,局域网内部的 IP 在同一个局域网内部不能重复,但两个不同的局域网可以使用重复的局域网 IP.

当使用局域网1 中的主机1 尝试发送请求,想与使用广域网范围的设备进行通信的时候,主机1 就要先将 IP 地址转换为路由器对应的 全局IP,通过这个 全局IP 再来和广域网范围的设备进行通信;而当广域网范围的设备返回响应的时候,也先是返回到路由器上,路由器再将 全局IP 转换为 主机1 的 私有IP,这样一来,主机1 最终才能获取响应。

简单说明通过 IP,发送与接收数据的过程:

主机1 发送数据,源 IP -> 目的 IP 的过程:

私有IP 192.168.0.10 -> 全局IP 123.456.12.7 -> 广域网的目的 IP

主机1 接收广域网返回响应的过程:

广域网的目的 IP -> 全局IP 123.456.12.7 -> 私有IP 192.168.0.10

举个例子:大学生在学校拿快递的时候,学校附近可能不止一家菜鸟驿站,而不同的菜鸟驿站中取件码可以相同,但这些菜鸟驿站基本上是围绕着大学的学生服务的。那么某某大学就相当于是一个广域网,某个菜鸟驿站就相当于某个局域网对应的 全局IP,菜鸟驿站中的取件码就相当于各个主机,因为各个取件码依赖着所属的菜鸟驿站,而快递员送快递的时候,根据快递类型又来放入不同的菜鸟驿站中。

(2) NAT 机制对应的模型

NAT 机制是当下互联网中解决 IP 地址不够分配的典型情况,也比较的适合当下的网络。

 对上图的发送数据与返回数据进行说明:

  • NAT 路由器发送数据时,将 源IP 从 10.0.0.10 替换成全局的IP 202.244.174.37;
  • NAT 路由器返回数据时,将 目标IP 从 202.244.174.37 替换回 10.0.0.10;
  • 在 NAT 路由器内部,有一张自动生成的,用于地址转换的表,当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系。

3. IPv6 协议

IPv4 是长度为 32位的数据,而 IPv6 是长度为 128位 的数据,读者可以使用计算器计算一下,IPv6 是一个巨大的数字。

IPv6 相当于釜底抽薪,它从根本上解决了 IPv4 协议的地址不够用问题。虽然 IPv6 已经提出了很多年了,但在当下的网络时代, IPv6 的普及程度,仍然相对较低,使用 IPv6 的 IP 远远少于使用 IPv4 的 IP.

原因就是 IPv6 和 IPv4 互不兼容,所以如果你要想升级成 IPv6,得把相关的网络设备,例如交换机、路由器、服务器…都得升级成 IPv6. 而这需要很大的一笔费用才能支持更换这些设备。此外,原先使用 IPv4 的网络设备使用寿命一般较长,也无需更换。


四.以太网协议 (数据链路层)

①什么是以太网协议?

以太网协议不仅仅规定了数据链路层的内容,也规定了物理层的内容。

②认识以太网数据帧:

  1.mac地址:

很多人在这里会感到困惑,明明已经有了IP地址,那么为什么还要有mac地址呢?

这是因为,在很久很久以前,网络层协议和数据链层协议都是独立研发出来的。因此,你是否会觉得当今来看的话有些重复,然而在如今,当然又有新的见解了咯。

如今,IP地址是用来表示一次传输过程中的起点和终点。

而mac地址是用来表示一次传输过程中的两个相邻节点的地址,也就是说,一个以太网数据帧每次转发的时候,它的源mac地址和目的mac地址均会发生改变。

举个通俗的例子:

我从成都到北京,源IP地址为成都,目的IP地址为北京。

而我先从成都到河北,再从河北到北京,就涉及到两组mac地址(源mac地址:成都,目的mac地址:河北 => 源mac地址:河北,目的mac地址:北京)

2.帧尾:

帧尾的功能同UDP中一致起的是校验的作用,它是基于CRC算法的校验和。

3.MTU:(46~1500表示数据的加载范围)

MTU表示一个以太网数据帧能够承载的数据范围。

而这个范围取决于硬件设备,而以太网也是和硬件设备密切相关的,而不同的数据链路层设备对应的协议可能不同,MTU也就不同。那么要是数据报超过了MTU怎么办?这就会用到我们前面讲的IP分包,IP分包的并不是给IP报头64k准备的,更多的是用于此处适应数据链路层的MTU。

MTU与TCP协议的联系:

MSS:是TCP在IP不分层的情况下,所能搭载的最大载荷。与此同时,MTU也取决于TCP和IP的报头长度(是可以变长的)。

而MTU和MSS的联系:

 4.ARP:(ARP报文不是用来传输数据的,而只是起到简单的辅助作用)

像路由器这样的设备在转发数据的时候,首先会拿到一个目的IP,通过这个目的IP来决定接下来的路怎么去走。而我们前面也讲到了每相邻路径实际是由mac地址来决定的,而目的mac是啥?这就要根据ARP协议,建立起IP=>mac这样的映射关系。

当设备启动的时候,就会向局域网中广播ARP报文,然后每个报文收到后都会给出一个应答,这个应答中就包含了自己的IP和mac地址,然后发起广播的一方就可以根据这些回应建立起这样的映射表了。

这里建立起这样的映射表,通俗一点来讲,还是用老例子:

成都到北京。这就建立起了成都=>河北=>北京这样的映射路线表了

五.DNS协议

①什么是DNS协议?

这是一个域名解析协议,位于应用层

简单来讲,DNS相当于一个翻译官,负责将域名翻译成ip地址

②为什么会有这个协议?

这是因为就算将IP地址点份十进制的形式,但是对于我们来记忆来说还是有一定难度。为了解决这个问题,就决定使用了一串英文字母来表示这个IP地址,而这串英文字母就是域名,类似于www.baidu.com这就是一个域名,而且域名和IP地址是一一对应的关系。

  ③ DNS在全球是如何进行推广使用的?

如今host文件也不再使用了,因为全世界的域名太多了,任凭这样改的话,是非常低效的,因此就成立了一个机构专门负责维护这里的域名和IP地址的对应关系,假如你想申请一个域名的话,就可以去这个机构报备一下就可以。

这个机构维护一组服务器就会把hosts文件存到这个服务器里面(域名解析服务器),要是自己想对其域名进行解析的话,就访问一下这个总的服务器就OK。

这个时候就会有人说,那这个多麻烦,每个设备上网要是都去访问这个解析服务器,那这个服务器的压力也太大了吧。

因此就把这个总的域名解析服务器设为根域名解析服务器,另外在每个国家每个地区都有各自的网络运行商,这些运营商就会就近架设域名解析镜像服务器(定时回合根域名解析服务器进行同步),像我们平时上网的话就会访问这些就近的镜像服务器。

④DNS遇到的问题:

不知道大家在上网的时候有没有遇到这样的问题:QQ能登录上,但是打不开浏览器。这就是因为就近的域名解析镜像服务器挂了(QQ使用的是自己写死的IP来访问QQ服务器,是不需要进行域名解析的)。

既然遇到了问题,那么我们该如何解决?

手动更改自己的域名解析服务器:打开我的电脑网络设置找到更改适配器选项,点击以太网属性,选择TCP/IP将自动获取域名解析服务器改成手动获取就可以。需要获取的域名解析服务器可以在网上进行搜索。

  每当我们查询了DNS后,主机会对其进行缓存一段时间,当我们下次访问同一域名,就可以省略查询DNS的过程了,对于DNS域名和IP的对应关系是很少会改变的。

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

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

相关文章

ChatGPT 存在很大的隐私问题

当 OpenAI 发布时 2020 年 7 月的 GPT-3,它提供了用于训练大型语言模型的数据的一瞥。 根据一篇技术论文,从网络、帖子、书籍等中收集的数百万页被用于创建生成文本系统。 在此数据中收集的是您在网上分享的一些关于您自己的个人信息,这些数据现在让 O…

YGG 代表 Web3 Gaming 参加 2023 年游戏开发者大会

Yield Guild Games(YGG)在 2023 年 3 月 20 日至 24 日在加州旧金山举行的游戏开发者大会(GDC)上大显身手,这是游戏开发者的重要交流学习活动。虽然 GDC 本身提供了多种多样的活动,包括讲座、小组讨论、圆桌…

基于html+css的盒子展示6

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

无公网IP?教你在外远程访问本地wamp服务器「内网穿透」

目录 前言 1.Wamp服务器搭建 1.1 Wamp下载和安装 1.2 Wamp网页测试 2. Cpolar内网穿透的安装和注册 2.1 本地网页发布 2.2 Cpolar云端设置 2.3 Cpolar本地设置 3. 公网访问测试 4. 结语 前言 软件技术的发展日新月异,各种能方便我们生活、工作和娱乐的新…

OA系统的功能和作用是什么(OA系统百科)

OA系统的功能和作用是什么(OA系统百科)。OA系统是一种非常实用的企业内部管理系统,它可以帮助公司实现各项管理工作,可以说是整个公司和团队的纽带,有助于提高工作效率和管理水平。 具体来说,OA系统的作用…

Linux运维进阶之路

前言 首先在我看来,不论你以后是做运维亦或者是做后端开发,云计算等。只要和后端搭边,Linux都是必会的基础知识。所以说Linux是伴随我们工作中一个特别重要的知识。 不过很多同学在初学Linux的时候,始终不得其法,发现…

科技赋能文旅:蓝海创意云携手苏州乐园打造“元宇宙灯会”

4月8日,苏州乐园“欢乐寻梦季”元宇宙灯会即将正式亮灯,这是一场以元宇宙技术为核心,结合现代灯展、数字科技、潮玩游乐等元素,打造的一场大型的沉浸式数字光影体验。 蓝海创意云作为苏州高新区元宇宙龙头企业,以多年…

量化择时——SVM机器学习量化择时(第1部分—因子测算)

文章目录机器学习在量化模型上的应用机器学习量化应用场景量化模型有效性的思考机器学习模型在量化择时中的应用训练与预测流程训练数据特征构造SVM模型与测算SVM训练与预测效果测算效果分析最近ChatGPT比较火,NLP的同学们感触肯定会更深。NLP的应用为人所知并积极部…

【电子学会】2022年12月图形化一级 -- 潜水

潜水 暑假小雨和爸爸去玩了潜水,他见到了各种各样的海洋生物。 1. 准备工作 (1)添加背景“Underwater 2”; (2)删除小猫角色,添加角色“Diver2”、“Fish”、“Jellyfish”、“Shark”; (3)为背景添加声音“Xylo2”。 2. 功能实现 (1)点击绿旗,播放背景音乐…

【chatGPT】chatGPT初步体验,赶快来学习吧

目录 1、什么是ChatGPT 2、我可以相信人工智能告诉我真相吗? 3、你会使用我的对话进行培训吗? 4、ChatGPT 接口参考 认证 请求组织 5、ChatGPT初体验 1、什么是ChatGPT ChatGPT的研究预览是免费使用的。 ChatGPT 是从 GPT-3.5 微调而来的&#x…

vue3+typescript+vant页面开发案例

文章目录效果index.vue页面template内容script内容index.ts页面效果 index.vue页面 template内容 <van-form submit"onSubmit"><van-cell-group inset><van-fieldv-model"providerApply.companyName"name"企业名称"label"企…

snipaste 截图工具——可以使图片悬浮在任何软件上,方便对比

一、下载 官网下载地址&#xff1a;Snipaste Downloads &#xff08;需要梯子&#xff09; CSDN下载地址&#xff1a;https://download.csdn.net/download/weixin_43042683/87671809 1. 下载 压缩包后&#xff0c;免安装&#xff0c;直接解压后既可以使用。 2. 点击Snipaste.…

【c语言】二维数组与指针 存储原理

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ…

Adaptive Weight Assignment Scheme For Multi-task Learning

Adaptive Weight Assignment Scheme For Multi-task Learning 题目Adaptive Weight Assignment Scheme For Multi-task Learning译题用于多任务学习的自适应权重分配方案时间2022年期刊/会议IAES International Journal of Artificial Intelligence (IJ-AI) 摘要&#xff1a;如…

UDS 14229-1标准加Trace ,两万字长文详细解读

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

比较系统的学习 pandas(5)

pandas 常见的高级操作 1、进行复杂查询 由于不好描述&#xff0c;就举几个栗子吧&#xff0c;不明白的可以私聊我 1、pnadas 支持逻辑计算与位运算 对DataFrame的一列进行逻辑计&#xff0c;会产生一个对应的由布尔值组成的Series&#xff0c;真假值由此位上的数据 是否满…

ArrayList的深入理解

ArrayList的源码解析1. 实例化无参构造器2. add&#xff08;&#xff09;方法2.1. add&#xff08;&#xff09;List的扩容3. get&#xff08;&#xff09;方法4. remove&#xff08;&#xff09;5. modCount 的作用(面试题)5. 手写简单List实现存储删除1. 实例化无参构造器 A…

Pandas 2.0 vs Polars:速度的全面对比

前几天的文章&#xff0c;我们已经简单的介绍过Pandas 和Polars的速度对比。刚刚发布的Pandas 2.0速度得到了显著的提升。但是本次测试发现NumPy数组上的一些基本操作仍然更快。并且Polars 0.17.0&#xff0c;也在上周发布&#xff0c;并且也提到了性能的改善&#xff0c;所以我…

Apple苹果开发者Certificates, Identifiers Profiles创建

1.创建Profile: 登陆Apple开发者账号,进入开发者后台,选择Profiles 然后点击Generate a Profile生成一个配置 选择配置类型 点击继续 选择APP ID 创建APP ID 注册一个新的APP id 选择应用类型,然后点击继续

两种事件处理模式:reactor/proactor

&#xff01;&#xff01;同步通常是reactor&#xff0c;异步通常是proactor reactor 要求主线程&#xff08;I/O处理单元&#xff09;只负责监听文件描述符上是否有事件发生&#xff0c;有的话就立即将该事件通知工作线程&#xff08;逻辑单元&#xff09;&#xff0c;将 so…