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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
.cn 域名,1个 12个月
简介: 本文详细介绍了IP协议报头结构及其各字段的功能,包括版本、首部长度、服务类型、总长度、标识、片偏移、标志、生存时间(TTL)、协议、首部检验和等内容。此外,还探讨了IP地址的网段划分、特殊IP地址的应用场景,以及路由选择的大致流程。最后,文章简要介绍了DNS协议的作用及其发展历史,解释了域名解析系统的工作原理。

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 服务器,如果有数据变更,针对这种变更,需要约定某个服务器(根服务器)的数据为基准,一旦有变更,就修改这个基准的服务器,其他服务器从基准的服务器同步数据。

相关文章
|
1天前
|
监控 网络协议 网络性能优化
如何办理支持UDP协议的网络
在当今网络环境中,UDP(用户数据报协议)因传输速度快、延迟低而广泛应用于在线游戏、视频流媒体、VoIP等实时服务。本文详细介绍了办理支持UDP协议网络的方法,包括了解UDP应用场景、选择合适的ISP及网络套餐、购买支持UDP的设备并进行优化设置,以及解决常见问题的策略,帮助用户确保网络稳定性和速度满足实际需求。
|
1天前
|
网络协议 网络安全 网络架构
分布式基础-网络通信协议讲解
分布式基础-网络通信协议讲解
分布式基础-网络通信协议讲解
|
1天前
|
安全 算法 网络安全
无线网络中的WEP协议及其安全性问题
无线网络中的WEP协议及其安全性问题
5 0
|
1天前
|
存储 安全 网络安全
云计算与网络安全:构建安全云服务的技术策略
本文深入探讨了云计算技术在提升网络服务效率的同时,如何通过实施先进的安全措施来保障信息安全。文章详细介绍了云服务的概念、网络安全的重要性以及信息安全的关键要素,并从多个角度分析了如何构建一个既高效又安全的云计算环境。通过对当前技术的概述和未来趋势的预测,本文旨在为读者提供一个全面的视角,理解云计算与网络安全之间的紧密联系及其对现代信息技术领域的影响。
5 0
|
26天前
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件
|
1月前
|
存储 NoSQL Redis
redis 6源码解析之 object
redis 6源码解析之 object
55 6
|
11天前
|
存储 缓存 Java
什么是线程池?从底层源码入手,深度解析线程池的工作原理
本文从底层源码入手,深度解析ThreadPoolExecutor底层源码,包括其核心字段、内部类和重要方法,另外对Executors工具类下的四种自带线程池源码进行解释。 阅读本文后,可以对线程池的工作原理、七大参数、生命周期、拒绝策略等内容拥有更深入的认识。
什么是线程池?从底层源码入手,深度解析线程池的工作原理
|
15天前
|
开发工具
Flutter-AnimatedWidget组件源码解析
Flutter-AnimatedWidget组件源码解析
|
11天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
130 37
|
3天前
|
编解码 开发工具 UED
QT Widgets模块源码解析与实践
【9月更文挑战第20天】Qt Widgets 模块是 Qt 开发中至关重要的部分,提供了丰富的 GUI 组件,如按钮、文本框等,并支持布局管理、事件处理和窗口管理。这些组件基于信号与槽机制,实现灵活交互。通过对源码的解析及实践应用,可深入了解其类结构、布局管理和事件处理机制,掌握创建复杂 UI 界面的方法,提升开发效率和用户体验。
35 12