如何做旅游计划的网站,企业为什么审计,南京各区房价一览表,360急速网址导航31.网络基础——协议与网络传输 文章目录31.网络基础——协议与网络传输协议第一层认识OSI七层模型TCP/IP五层(或四层)模型第二层认识网络传输的基本流程局域网传输的基本流程MAC地址局域网通信的碰撞检测局域网通信中的数据封装与解包过程整体复盘跨网络传输流程IP地址IP地址与…31.网络基础——协议与网络传输 文章目录31.网络基础——协议与网络传输协议第一层认识OSI七层模型TCP/IP五层(或四层)模型第二层认识网络传输的基本流程局域网传输的基本流程MAC地址局域网通信的碰撞检测局域网通信中的数据封装与解包过程整体复盘跨网络传输流程IP地址IP地址与MAC地址的区别路由器在网络通信中的角色与功能总结协议
第一层认识 协议是什么协议的本质是一种约定。计算机之间的通信需要类似的约定计算机相当于打电话的人和接电话的人网络通信必须有对应的约定。 计算机体系中的协议无处不在 在计算机体系中协议无处不在。即使不涉及网络计算机内部也存在协议比如CPU和内存之间的协议、内存和磁盘之间的协议。 磁盘设备有自己的协议比如通过LBA地址读取或写入数据。磁盘需要知道二进制序列中的哪些位表示读或写哪些位表示要访问的内存地址或磁盘的LBA地址。这些二进制序列的格式和含义就是磁盘的协议。 网络协议 在网络中不同的计算机硬件、操作系统和软件厂商非常多要让这些不同的计算机之间能够通信必须有一套共同遵守的标准。这套标准就是网络协议。网络协议的作用是将不同变为相同确保所有设备都能遵守同样的规则。 协议不仅存在于网络通信中也存在于计算机内部的各个硬件设备之间。每种硬件设备都有自己的协议网络协议只是其中之一。 协议分层这些约定分为很多层级比如硬件层面上如何识别光电信号有的计算机用光电信号的强弱表示0和1有的用有无信号表示0和1计算机设备在硬件层面上必须先做好对应的约定才能进行通信。除了硬件上的约定还有软件上的约定比如数据的编码格式、类型、大小、存储方式等。计算机内部存在若干协议包括硬件和软件上的协议。 软件分层的好处 软件分层是为了更好地进行模块化解耦协议作为软件的一部分也被设计成层状结构。分层使得层与层之间的调用关系清晰耦合度低便于上层调用下层接口下层支撑上层功能。软件分层的好处在于可以独立修改或替换某一层而不影响其他层提高了代码的可维护性。分层是解耦的有效方式层与层之间只有接口调用关系数据结构上相互独立实现了高内聚低耦合的设计原则 在面向过程的语言中函数调用体现了软件分层的思想函数调用的栈帧嵌套式调用就是分层的结果。继承和多态是面向对象语言中支持软件分层的特性继承体系本身就是分层的体现。
OSI七层模型
OSIOpen System Interconnection 开放系统互连 七层网络模型称为开放式系统互联参考模型 是一个逻辑上的定义和规范。OSI模型将网络协议分为七层物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。尽管OSI模型理论上完善但实际工程中因其复杂性通常采用TCP/IP四层模型链路层、网络层、传输层、应用层。定标准与实现标准的人可能不同但遵循同一套协议能确保不同系统如Windows、Linux、手机之间的兼容性。 TCP/IP五层(或四层)模型
TCP/IP 是一组协议的代名词 它还包括许多协议 组成了 TCP/IP 协议簇。TCP/IP 通讯协议采用了 5 层的层级结构物理层——负责光/电信号的传递方式数据链路层: 负责设备之间的数据帧的传送和识别网络层: 负责地址管理和路由选择传输层: 负责两台主机之间的数据传输应用层: 负责应用程序间沟通 TCP/IP协议的存在源于主机间通信距离变长带来的问题。TCP/IP协议的本质是网络通信的解决方案其分层设计的根本原因是通信距离的增加导致的问题分层
第二层认识
要对协议有更进一步的认识我们需要知道
网络通信的根本目的不是单纯的两台主机之间的数据传输而是主机上的用户或应用程序之间的交互。网络通信不仅需要解决数据传输问题还需要确保应用程序能够正确处理数据。应用层协议的存在就是为了实现这一目标。应用层协议确保数据在用户或应用程序之间能够被正确理解和处理。操作系统与网络协议栈之间存在紧密的关系。网络协议栈的实现必须遵循统一的标准例如tcpip协议。不同操作系统如linux和windows虽然内核实现不同但网络协议栈的部分必须保持一致以确保主机之间的通信。网络协议栈的分层结构与操作系统的分层结构相对应。物理层由硬件实现数据链路层由驱动程序实现网络层和传输层由操作系统内核实现应用层由用户程序实现。 协议本质上是操作系统之间为网络通信约定的数据结构即结构体。 网络协议是操作系统内核的一部分传输层和网络层协议在操作系统内核中实现。不同操作系统之间可以进行网络通信如Linux和Windows平台可以互相通信。协议本质上是操作系统之间为网络通信约定的数据结构即结构体。操作系统和网络协议大部分使用C语言编写不同操作系统的网络部分标准必须相同以确保通信。协议分层结构中同层协议可以互相识别对方的结构体类型。 协议在计算机中表现为结构体Windows和Linux主机通信时使用相同的数据结构。主机A定义结构体并填充数据后发送给主机B主机B能准确提取数据因为双方有相同的结构体类型。网络协议代码相同确保了结构体类型的一致性这是通信的基础。协议的结构体本质使得双方主机在数据通信时能正确解释数据内容。 以快递和快递单子比喻 发货时需要填写包含发货方、收货方信息等字段的单子这相当于对结构体进行实例化。收货方收到的物品比实际需要的多了一个快递单子这个单子就是协议结构体的体现。快递单子可以被发货方和收货方共同理解就像通信双方都能识别相同的协议结构体。虽然收货方最终只需要物品本身相当于应用数据但必须通过包含协议信息快递单子的完整包裹来传递。网络通信过程中发送信息时需要在前端附加一个称为协议报头的结构体变量这个结构体双方都认识使得接收方能够正确解析和处理报文。协议报头类似于快递单发货方和收货方都理解单子上各个字段的含义。
网络传输的基本流程
局域网传输的基本流程
MAC地址 局域网内的主机可以直接通信不需要经过复杂的网络路由。例如在家庭网络中电脑、手机等设备连接同一个路由器就属于同一个局域网使用手机热点时连接该热点的设备也属于同一个局域网。 在局域网中每台主机都有一个唯一的MAC地址作为标识。 MAC地址是网卡出厂时内置的48位固定序列值用于在局域网中唯一标识每台主机。 在局域网通信时发送的报文中会包含源MAC地址和目标MAC地址。所有主机都能收到这个报文但只有目标MAC地址与自身匹配的主机才会处理其他主机会丢弃该报文。 可以通过ifconfig命令查看Linux系统的MAC地址通常显示为以太网接口eth0或ens3的硬件地址。Windows系统则使用ipconfig命令查看显示为以太网适配器的物理地址。 局域网通信的原理类似于教室场景当老师点名时虽然所有人都能听到但只有被叫到名字的学生会回应。类似地在局域网中所有主机都能收到传输的报文但只有目标主机会处理。每台主机通过比较报文中的目标MAC地址与自身地址来决定是否处理该报文。 MAC的唯一性MAC地址内嵌在网卡中出厂时即确定一般不能修改具有唯一性。虚拟机使用的MAC地址并非真实而是通过虚拟化技术构建的。MAC地址的唯一性只需在局域网内保证即可因此可以在局域网内自行构建48比特位的16进制值只要不与局域网内其他地址冲突即可。
局域网通信的碰撞检测
早期使用集线器Hub 构建的共享式以太网局域网通信中任何时刻只允许存在一份有效报文否则会发生数据碰撞。例如主机A和主机B同时发送报文会导致光电信号干扰称为碰撞。发生碰撞后主机会执行碰撞检测和碰撞避免机制随机休眠一段时间后重发报文。这种机制可以避免持续冲突让其他主机在休眠期间正常通信。休眠期间其他主机可以正常通信从而释放网络资源。这种机制类似于在教室中多人同时说话导致混乱通过轮流发言避免干扰。
以太网局域网被定义为一个碰撞域其中多台主机共享通信资源。当多台主机同时发送数据时会发生数据碰撞导致互相干扰。发送主机需要进行碰撞检测和碰撞避免来确保通信可靠性。
从互斥的角度理解碰撞机制碰撞检测和避免的本质是保证以太网使用的唯一性。以太网被视为一种临界资源所有主机以互斥方式访问但采用的是特殊的不加锁方式即直接使用并在碰撞出错后再处理。主机发送数据时执行的代码被称为临界区通过碰撞检测和避免算法来保证临界资源使用时的数据读写原子性。
局域网通信中的数据封装与解包过程 数据通信是由用户层触发的自上而下的过程。当主机A要给主机B发送消息时消息从应用层开始经过传输层、网络层、数据链路层最终到达网卡。在这个过程中每一层都会添加自己的报头这个过程称为封装。报文从应用层开始每经过一层就添加该层的报头最终形成完整的链路层帧。接收数据时从链路层开始逐层剥离报头并向上交付。同层协议能够相互识别报头因为使用的是相同的结构体定义。 报文的组成是报头加有效载荷其中有效载荷包含上层传递下来的完整信息包括上层报头。当主机B收到数据时需要从下往上进行解包处理。解包的第一步是将报头和有效载荷分离这个过程称为解包。每一层协议都能识别同层的报头因为使用的是相同的结构体类型。 链路层在向上交付时需要确定将有效载荷交给网络层的哪个协议处理如IP、ICMP、IGMP等。每一层的报头都必须包含两个关键信息一是帮助分离报头和有效载荷的字段包括报头自身大小和有效载荷长度二是指示上层协议类型的字段这样接收方才能正确地将有效载荷交付给对应的上层协议处理。这些是几乎所有报头的共性特征。报头中必须明确标识上层协议的身份以便将有效载荷正确交付给上层协议。这个过程被称为分用。 下图为数据分用的过程 整体复盘 跨网络传输流程
IP地址 IP地址分为IPv4和IPv6两种通常默认指IPv4。IPv4地址是一个四字节32位的整数通常以点分十进制表示用点分隔成四部分每部分取值范围0-255。点分十进制表示法虽然直观但在实际网络编程中IP地址通常以32位二进制数或网络字节序的四字节形式处理 IP地址用于标识网络中的不同主机 跨网段的主机的数据传输. 数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器 IP地址分为公网IP和私有IP两种类型。云服务器提供的IP地址通常是公网IP而本地查看到的可能是内网或私有IP。云服务商会对IP地址进行转换使得用户看到的可能不是机器的真实IP地址。虚拟机的情况有所不同其IP地址通常与入网IP地址一致。公网IP是全球唯一的用于互联网上的通信而私有IP用于内部网络需要通过NAT转换才能访问互联网。
IP地址与MAC地址的区别 IP地址和MAC地址都能标识主机唯一性但两者有本质区别。通过唐僧西天取经的比喻来解释唐僧身上有两套地址一套是长期不变的东土大唐到西天类比IP地址另一套是阶段性变化的当前所在城池到下一站类比MAC地址。 IP地址用于跨网络通信的路由选择而MAC地址用于本地网络内的设备寻址。路由决策基于目的IP地址而不是MAC地址。路由就是路径选择的过程类似于唐僧每到一个城池询问下一站方向。网络中的路由器相当于城池路由算法相当于国王给出的方向建议。 IP地址具有层次结构便于路由聚合和寻址而MAC地址是扁平化的只在本地网络有效。在实际通信中源和目的IP地址在整个传输过程中保持不变而MAC地址则在每一跳都会变化。这种设计使得IP层能够实现全球范围的寻址和路由而MAC层负责本地网络内的实际数据传输MAC地址只在局域网内有效一旦离开局域网就会被替换。
总结
特性IP地址MAC地址工作层次网络层数据链路层地址性质逻辑地址由网络管理员或DHCP服务器分配物理地址由设备制造商固化在网卡中可变性可变取决于所在的网络环境基本不变除虚拟化等特殊情况作用范围全局用于在不同网络之间进行寻址和路由局部只在同一个局域网内有效在路由过程中的行为目的IP地址在整个通信过程中保持不变它定义了通信的最终目的地源和目的MAC地址在每一跳经过每个路由器都会改变它只标识当前链路的两个端点核心功能路径选择 的主要依据。类似于快递包裹上的最终收件人地址城市、街道、门牌号局域网内设备标识 的直接依据。类似于把包裹交给下一站快递员这个动作路由器在网络通信中的角色与功能 路由器作为连接不同子网的关键设备必须能够处理两个不同子网的通信需求。路由器必须同时具备连接两个不同子网的能力和相应的通信协议支持。从主机A的视角路由器就像是一台普通主机通信时数据发送到路由器的网卡一而从主机B的视角数据则发送到路由器的网卡二。 任何具有网络层功能的主机都具备基本的路由能力。路由器不仅提供路由功能还能构建子网。家庭或宿舍中的路由器会自动为连接设备分配IP地址用户通常不需要手动配置。 当主机A需要与不同子网的主机B通信时它首先会将数据发送给路由器。这个决策是由主机A的网络层做出的基于目的IP地址与本地IP地址的比对结果。如果目的地址不在同一子网主机A就知道需要通过路由器转发。主机A无法直接知道目的主机的具体位置但能判断出目的地址不属于本地子网。这种判断基于IP地址的结构差异。路由器作为子网的出口负责将数据转发到其他网络。 总结
IP网络通过分层设计有效屏蔽了底层网络的差异。IP网络成为全球跨网络通信的统一标准IP层之上的通信完全一致而IP层之下可以保持多样性。这种设计既尊重了历史发展形成的各种局域网标准又满足了跨网络通信的需求。虽然从技术上讲可以只用IP地址而取消MAC地址但为了保持向后兼容性MAC地址仍然被保留下来。这种设计使得现有的各种局域网设备能够继续工作同时支持跨网络通信