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

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

相关文章
|
11月前
|
机器学习/深度学习 PyTorch TensorFlow
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic,深度学习探索者。深耕TensorFlow与PyTorch,分享框架对比、性能优化与实战经验,助力技术进阶。
|
11月前
|
监控 负载均衡 安全
WebSocket网络编程深度实践:从协议原理到生产级应用
蒋星熠Jaxonic,技术宇宙中的星际旅人,以代码为舟、算法为帆,探索实时通信的无限可能。本文深入解析WebSocket协议原理、工程实践与架构设计,涵盖握手机制、心跳保活、集群部署、安全防护等核心内容,结合代码示例与架构图,助你构建稳定高效的实时应用,在二进制星河中谱写极客诗篇。
WebSocket网络编程深度实践:从协议原理到生产级应用
|
11月前
|
网络协议 Linux 虚拟化
配置VM网络:如何设定静态IP以访问主机IP和互联网
以上就是设定虚拟机网络和静态IP地址的基本步骤。需要注意的是,这些步骤可能会因为虚拟机软件、操作系统以及网络环境的不同而有所差异。在进行设定时,应根据具体情况进行调整。
718 10
|
12月前
|
机器学习/深度学习 人工智能 算法
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic带你深入卷积神经网络(CNN)核心技术,从生物启发到数学原理,详解ResNet、注意力机制与模型优化,探索视觉智能的演进之路。
963 11
|
安全 网络性能优化 网络虚拟化
网络交换机分类与功能解析
接入交换机(ASW)连接终端设备,提供高密度端口与基础安全策略;二层交换机(LSW)基于MAC地址转发数据,构成局域网基础;汇聚交换机(DSW)聚合流量并实施VLAN路由、QoS等高级策略;核心交换机(CSW)作为网络骨干,具备高性能、高可靠性的高速转发能力;中间交换机(ISW)可指汇聚层设备或刀片服务器内交换模块。典型流量路径为:终端→ASW→DSW/ISW→CSW,分层架构提升网络扩展性与管理效率。(238字)
2528 0
|
运维 架构师 安全
二层协议透明传输:让跨域二层协议“无感穿越”多服务商网络
简介:本文详解二层协议透明传输技术,适用于企业网工、运营商及架构师,解决LLDP/LACP/BPDU跨运营商传输难题,实现端到端协议透传,提升网络韧性与运维效率。
|
监控 安全 Go
使用Go语言构建网络IP层安全防护
在Go语言中构建网络IP层安全防护是一项需求明确的任务,考虑到高性能、并发和跨平台的优势,Go是构建此类安全系统的合适选择。通过紧密遵循上述步骤并结合最佳实践,可以构建一个强大的网络防护系统,以保障数字环境的安全完整。
307 12
|
XML JSON JavaScript
从解决跨域CSOR衍生知识 Network 网络请求深度解析:从快递系统到请求王国-优雅草卓伊凡
从解决跨域CSOR衍生知识 Network 网络请求深度解析:从快递系统到请求王国-优雅草卓伊凡
278 0
从解决跨域CSOR衍生知识 Network 网络请求深度解析:从快递系统到请求王国-优雅草卓伊凡
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
592 17

热门文章

最新文章

推荐镜像

更多
  • DNS