深入解析网络通信关键要素:IP 协议、DNS 及相关技术

news2024/9/27 15:21:19

我的主页:2的n次方_   

在这里插入图片描述

1. IP 协议报头结构

4 位版本:表示 IPv4 / IPv6

4 位首部长度:表示 IP 报头的长度,以 4 字节为单位

8 位服务类型:包括 3 位优先权字段(已弃用),4 位 TOS 字段和 1 位保留字段(必须置为 0),4 位 TOS 字段分别表示:最小延时(数据从 A 到 B 消耗时间短),最大吞吐量(数据从 A 到 B单位时间内传输数量多),最高可靠性,最小成本(设备上消耗的资源少),这四个相互冲突,只能选择一个

16 位总长度:IP 数据报的长度

虽然说设置了数据报的长度,但是并不是只能传 64KB 的数据,IP 协议中内置了拆包组包机制,单个 IP 数据报确实不能超过范围,不过 IP 协议会自动把大的数据包拆成多个 IP 数据报携带传输,在接收方再进行拼接

同一个载荷被拆成多份,交给多个 IP 数据报来携带,这些数据报的 16 位标识是相同的,13 位片偏移决定组包的时候数据包的位置,3 位标志中只有两个有效,一个表示当前包是否需要组包,另一个表示当前包是不是组包的最后一个单位。

8 位生存时间(TTL):一个数据包在网络中最大存活时间。TTL 的单位是次数,发送一个 IP 数据报的时候,会有一个初始的 TTL 值(32,64,128...)数据报每经过一个路由器转发,TTL 的值就会 -1(经过交换机不减),一旦减到 0,此时这个数据包就会被当前的路由器直接丢弃掉。

8 位协议:描述了 IP 数据报中携带的载荷是哪种传输层协议的数据报,以此来确定接下来由哪种协议解析数据

16 位首部检验和:验证数据在传输中是否出错(只是针对首部,IP 报头),载荷部分 TCP/UDP 已经有自己的校验和了

IP 地址也就是用来标识互联网设备的,但是 32 位 IP 放在今天就不够用了,为了解决这个问题,有以下三种方法:

  1. 动态分配 IP 地址:如果当前设备上网就分配 IP ,不上网就不分配,但是这种方面明显不能解决问题,只能说是有所缓解
  2. NAT 网络地址切换:一个设备在进行上网的时候,IP 数据报中的 IP 地址就会被 NAT 设备(通常就是路路由器)进行自动修改。用一个 IP 代表一大波 IP,把 IP 分为了两类:内网(私网)和外网(公网),要求公网 IP 必须是唯一的,但是私网 IP 是可以重复的(在不同的局域网中)

在同一个局域网内,主机 A 访问主机 B 不会涉及到 NAT 机制

公网上的设备 A 访问公网上的设备 B 不会涉及到 NAT

一个局域网中的主机 A 访问另一个局域网的主机 B 在 NAT 机制中是不允许的

NAT 机制主要是针对局域网内部的设备 A ,访问公网上的设备 B 这种情况设置的

当发送方的数据报发送到运营商路由器后就会修改源 IP 为运行商具有的公网 IP( 修改 IP 时会记录相应的映射关系,以便传输回来的时候可以找到原来局域网的 IP )目标公网服务器收到的也是这个 IP ,同时 NAT 不仅可以转换 IP 地址,也可以转换端口号,通过这个方式,多个设备就可以共享一个公有 IP 地址同时访问网络

NAT 虽然可以解决 IP 不够用的问题,但是机制过于复杂,每一次转发都要记录并查询相应的映射关系,所以有了第三种方式:

  1. IPv6。从根本上解决问题,IPv6使用 128 位 16 个字节来表示 IP 地址。

2. IP 地址中的网段划分

IP 地址由网络号和主机号两部分组成,左半部分是网络号,右半部分是主机号,需要通过子网掩码来区分出哪里是网络号,哪里是主机号,子网掩码也是 32 位整数,左半部分都是 1,右半部分都是 0,例如,子网掩码 255.255.255.0 表示前 24 位是网络号,后 8 位是主机号,IP 地址 192.168.1.100 和子网掩码 255.255.255.0 进行逻辑与运算后得到网络地址 192.168.1.0,这就确定了该 IP 地址所在的网段。

在网络中规定,同一个局域网中的设备,网络号必须相同,主机号必须不同,两个相邻的局域网的网络号必须不同

在一个局域网中,如果某个设备的网络号不相同或者和别的主机重复都无法上网

3. 特殊的 IP 地址

  1. 主机号全为 0,此时这个 IP 就是表示当前网段(相当于网络号),因此给局域网中的某个设备分配 IP 地址的时候,不能把主机号全设为 0。
  2. 主机号为全 1,比如子网掩码是 255.255.255.0,IP 就是 192.168.0.255,称为广播 IP,往这个 IP 上发送数据包,就相当于给整个局域网中所有的设备都发送了一次数据包,但其实很多“业务上的广播”都是通过应用层编写代码来实现的,而不是借助广播 IP。用到广播 IP 的例子可以是手机投屏这种,可以知道局域网中有多少个设别允许投屏,在投屏时往对应的广播 IP 上发送一个数据包(UDP,TCP 不支持广播)如果有投屏功能就会返回一个响应
  3. 127.*(环回 IP),往这个 IP 上发一个数据,设备就会从这个 IP 中再收到同一个数据,一般都使用 127.0.0.1,环回 IP 一般用于测试客户端和服务器之间能否正常交互

4. 路由选择的大致流程

由于网络是一个非常复杂的网状结构,一台设备发送大另一台设备可能会存在多条路线

  1. 当源设备有数据要发送时,它会将数据封装成数据包,数据包中包含源 IP 地址、目的 IP 地址、数据内容等信息。
  2. 源设备首先查询自己的路由表(路由器内部维护的重要的数据结构),以确定如何将数据包发送到目的地址。路由表中包含了不同目的网络的信息以及到达这些网络的下一跳地址。如果在路由表中找到与目的 IP 地址匹配的条目,源设备将根据该条目确定下一跳地址,并将数据包发送给该地址,如果没有查到路由表就会有一个默认的表项(指向更高级层路由器)

接下来看数据链路层的协议

目的地址和源地址:这里的地址存储的是 MAC 地址,并不是之前的 IP 地址,

关于 MAC 地址和 IP 地址:在网络通信中,MAC 地址和 IP 地址相互配合,共同完成数据的传输。当一个设备要发送数据时,它会首先使用目标设备的 IP 地址来确定数据包的传输路径。然后,它会将自己的 MAC 地址作为源地址添加到数据包中,并将目标设备的 MAC 地址作为目的地址添加到数据包中。

  1. MAC 地址使用 6 个字节表示,一般一个网卡在出厂的时候,MAC 地址就被分好了,并且不能修改,MAC 地址可以作为设备的身份标识
  2. MAC 地址使用在数据链路层,用来实现相邻设备之间的数据转发,IP 地址使用在网络层,立足于整个转发流程,进行路径规划

以太网数据帧里面的 MAC 地址随着转发的过程,时刻都在变化(每经过一个交换机/路由器都会发生上述变化)

MTU(最大传输单元)和硬件直接相关,不同的硬件设备,对应到了不同的数据链路层协议,也对应了不同的 MTU,以太网的 MTU是非常短的,只有 1500 字节,此处 MTU 的限制就会对上层协议(例如 IP 协议)产生直接影响,当一个 IP 数据包达到 1500 字节以上,就会自动拆包了

类型:表示以太网帧格式中的帧格式类型

这里是十六进制的表示,ARP 数据报 / 协议,可以视为是让当前设备获取到周围设备 IP 地址和 MAC 地址之间的映射关系,在 IP 协议路由转发的过程中,是根据 IP 地址来进行查路由表的,得到的是“网络接口”,具体点就是传输给哪个 MAC 地址的设备,这个环节就涉及到了 IP 到 MAC 地址的转换,ARP 协议就是用来建立上述的映射关系的,当前设备接入网络的时候,就会往广播地址发送 ARP 报文,收到 ARP 请求的设备就会返回响应,响应中告知自己的 IP 和 MAC 地址

5. DNS 协议

DNS 是应用层的协议,也可以理解为一套系统(域名解析系统),主要负责将易于人类理解的域名(如 www.aaa.com)转换为计算机可识别的 IP 地址(如 192.168.1.1),域名和 IP 地址存在对应关系,一般是一个域名对应一个或多个 IP,也可能多个域名对应一个 IP。

早期的域名解析系统非常简单,通过一个 hosts 文件来实现,记录了 IP 地址和域名的对应关系(现在这种方式已经不用了,网站和域名太多了,IP 地址也多,靠文件来维护不方便),为了解决这个问题,搭建了 DNS 服务器,把 hosts 文件放到 DNS 服务器中,当某个电脑需要进行域名解析,直接访问 DNS 服务器即可,但是一台服务器肯定不够用,所以就又有了许多镜像服务器,每个人上网时就会就近访问 DNS 服务器,如果有数据变更,针对这种变更,需要约定某个服务器(根服务器)的数据为基准,一旦有变更,就修改这个基准的服务器,其他服务器从基准的服务器同步数据。

在这里插入图片描述

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

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

相关文章

css基础知识(二)

“落座无言行三载,持笔无悔笑苍生!” 文章目录 前言文章有误敬请斧正 不胜感恩!1. 选择器类型标签选择器类选择器ID选择器通配符选择器复合选择器 2. 元素显示模式块级元素行内元素行内块元素 3. 背景属性4. 字体和文本属性5.垂直居中的实现方…

vue到出excel

安装 npm install exceljs npm install file-saver<template><button click"dade66">导出 66</button> </template><script> import ExcelJS from exceljs; import { saveAs } from file-saver;export default {data() {return {data…

Unity多语言插件I2 Localization国际化应用

【就不收费了&#xff0c;要个关注不过分吧】 【图片来自插件官网&#xff0c;侵删】 前言 目前游戏往往都不会仅局限于国内语言&#xff0c;为了适应产品都要做国际化适配&#xff0c;因此会用到这个插件&#xff0c;这个插件要付费&#xff0c;因此请前往unity官网进行下载…

Windows系统设置定时任务,周期性执行.bat文件

通过.bat清除注册表项 在 Windows 系统中&#xff0c;.bat 文件&#xff08;批处理文件&#xff09;是一个包含一系列命令的文本文件。这些命令会被 Windows 命令解释器 (cmd.exe) 依次执行。 你可以把它想象成一个简单的程序&#xff0c;但它不像 C 或 Python 那样需要编译&a…

Go容器化微服务系统实战

1-1 本课的go微服务有什么不同&#xff1f; 聚焦于容器化可观测的购物微服务系统实战&#xff0c;通过介绍Go语言的应用趋势、容器化优势及微服务适用性&#xff0c;旨在解决学习微服务过程中遇到的难点。课程内容涵盖微服务整体架构、技术工具框架及容器平台等关键技术&#…

Linux文件IO(九)-原子操作与竞争冒险

Linux 是一个多任务、多进程操作系统&#xff0c;系统中往往运行着多个不同的进程、任务&#xff0c;多个不同的进程就有可能对同一个文件进行 IO 操作&#xff0c;此时该文件便是它们的共享资源&#xff0c;它们共同操作着同一份文件&#xff1b;操作系统级编程不同于大家以前…

javase复习day33网络编程

网络编程 常见的软件架构 BS架构 CS架构 网络编程小结 网络编程三要素 三要素小结 IP IPV4 IPV6 IP小结 IPV4的地址分类形式 常用的CMD命令 小结 InetAddress的使用 public class Demo1 {public static void main(String[] args) throws UnknownHostException {//获取IP对象/*…

【EI会议大盘点!涵盖计算机图像视觉、机器学习等众多方向】

EI会议&#xff0c;作为全球知名的学术会议平台&#xff0c;以其广泛的影响力和严格的收录标准著称。 相较于SCI、核心期刊等期刊来说&#xff0c;EI会议的审稿周期更短&#xff0c;最快7天即可录用。 费用上也相对较低&#xff0c;这对于资金和时间双重压力的学生党来说&…

Rpc框架——服务端框架设计

目录 一、Network 二、Protocol 三、Dispatcher 四、RpcRouter 五、Publish-Subscribe 六、Registry-Discovery 七、Server 服务端的功能需求&#xff1a; 基于网络通信接收客户端的请求&#xff0c;提供rpc服务 基于网络通信接收客户端的请求&#xff0c;提供服务注…

【POJ-1061 青蛙的约会】

题目 代码 #include <bits/stdc.h> using namespace std; typedef long long LL; LL ex_gcd(LL a, LL b, LL &x, LL &y) {if (b 0){x 1;y 0;return a;}LL gcd ex_gcd(b, a % b, x, y);LL tmp x;x y;y tmp - a / b * y;return gcd; } int main() {LL x, y…

springboot实战学习(9)(配置mybatis“驼峰命名“和“下划线命名“自动转换)(postman接口测试统一添加请求头)(获取用户详细信息接口)

接着学习。之前的博客的进度&#xff1a;完成用户模块的注册接口的开发以及注册时的参数合法性校验、也基本完成用户模块的登录接口的主逻辑的基础上、JWT令牌"的组成与使用以及完成了"登录认证"&#xff08;生成与验证JWT令牌&#xff09;具体往回看了解的链接…

SpringBoot项目编译运行成功,但有些包名类名仍然下划线标红的解决方法 | Idea

目录 问题解决方案&#xff1a;方法一&#xff1a;方法二【我用这个成功的】 问题 如图&#xff0c;成功运行但有些包名类名仍然下划线标红&#xff0c;强迫症抓狂 成功运行&#xff1a; 有些包导入标红&#xff1a; 解决方案&#xff1a; 方法一&#xff1a; 点击fil…

K8S介绍---搭建集群

Kubernetes介绍 官网&#xff1a;https://kubernetes.io/ 一、应用部署方式演变 1、传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上 优点&#xff1a;简单&#xff0c;不需要其他技术的参与 缺点&#xff1a;不能为应用程序定义资源使用边界&a…

AXI4-Stream

AXI4-Stream 简介信号握手机制字节类型TKEEP和TSTRBAXI4-Stream Data FIFO正常模式packet模式 AXI4-Stream Interconnect 简介 这是一种连续流接口&#xff0c;不需要地址线&#xff08;很像 FIFO &#xff0c;一直读或一直写就行&#xff09;。对于这类 IP &#xff0c;ARM 不…

WebUI密码被锁定

锁定密码 打开-webui/打开-webui 讨论 #1027 (github.com) 当你忘记WebUI密码了

通信工程学习:什么是VPN虚拟专用网络

VPN:虚拟专用网络 VPN(Virtual Private Network),即虚拟专用网络,是一种通过公共网络(如互联网)建立私有网络连接的技术。以下是关于VPN的详细解释: 一、VPN虚拟专用网络的定义与原理 VPN通过公共网络(通常是互联网)建立一个临时的、安全的连接,形…

一维数组在内存中的存储

在之前的文章中&#xff0c;我已经介绍了一维数组的创建和初始化和一维数组的使用&#xff0c;今天我们来深入了解一下一维数组在内存中的存储形式。 首先我们先用代码打出数组元素的地址。 #include <stdio.h> int main() { int arr[8]{1,2,3,4,5,11,6,7,8}; int i0; …

单词记忆的化境:用思想的流水去淹没坚硬的石块

其实&#xff0c;鹅卵石通常都是很硬的。但是河底的石子&#xff0c;几乎大多都成了鹅卵石&#xff0c;它们被流水淹没&#xff0c;日复一日、夜以继日的冲刷着&#xff0c;没有了棱角。 在单词的记忆过程中&#xff0c;我们有太多的人&#xff0c;都有着不堪回首的往事&#x…

HDFS分布式文件系统01-HDFS JAVA操作与联邦机制

HDFS分布式文件系统 参考学习目标第三课时知识点1-HDFS的Java API介绍知识点2-案例-使用Java API操作HDFS 第四课时知识点1-Federation机制的实现原理知识点2-Federation机制的特点知识点3-Federation机制的实现知识点4-Erasure Coding 参考 maven的setting.xml配置文件详解 …

影刀RPA实战:网页爬虫之天猫商品数据

1.实战目标 1.1 实战目标 在电商行业&#xff0c;我们经常爬取各个平台的商品数据&#xff0c;通过收集和分析这些商品数据&#xff0c;企业可以了解市场趋势、消费者偏好和竞争对手的动态&#xff0c;从而制定更有效的市场策略。爬取商品数据对于企业在市场竞争中把握先机、…