目录
背景介绍
网络协议
OSI七层模型
TCP/IP五层模型
TCP/IP协议与OS的关系
网络协议的本质
数据在局域网传输的基本流程
MAC地址
报文的封装和解包
补充内容
数据的跨网络传输基本流程
IP地址
IP地址和MAC地址的区别
背景介绍
网络的发展经理了四个阶段:独立模式、网络互联、局域网、广域网
注意事项:一台电脑主机内的CPU、显卡等设备都是由一条总线连接起来的,所以可以将一台计算机的内部也看作是一个小型网络结构
网络协议
基本概念:网络协议是指用于在计算机网络中传输数据的规则和标准,它规定了设备如何相互通信、数据格式、传输过程中的错误处理等
产生原因:
- 互操作性:确保不同设备和系统能够相互通信
- 可靠传输:保证数据完整性和正确性,处理传输错误
- 安全性:保护数据在传输中的隐私和安全
- 管理网络流量:优化资源,避免拥堵
OSI七层模型
基本概念:也叫做开放式系统互联参考模型,是一个用于定义网络通信的分层框架,它将网络通信过程分为七个不同的层次,每一层都有特定的功能和作用以及相对应的物理设备(路由器、交换机等)
模型的提出和实现者是不同的,理想很丰满现实很骨感
优点:
标准化通信:OSI模型为网络通信提供了一个通用的参考框架,标准化了设备之间的通信过程,确保不同厂商的产品能够互操作。
分层设计:通过将通信过程分为七个层次,每一层专注于特定的任务,简化了网络设计、开发和故障排查。每一层可以独立修改,而不影响其他层。
模块化和灵活性:每一层的功能相对独立,可以根据需要进行更新或替换,增强了网络架构的灵活性。
促进互操作性和兼容性:由于模型为每一层定义了明确的接口和标准,它能够确保不同协议和设备之间的互操作性。
故障诊断方便:通过分层模型,网络管理员能够更容易地定位和诊断问题所在的层次,简化了故障排除过程。
支持新技术:模型的分层设计使得新技术能够无缝集成到现有网络中,只需修改对应层次而不需要对整个系统进行改动。
缺点:
理论性强,实践应用少:虽然OSI模型为理解网络通信提供了很好的参考,但在实际应用中,TCP/IP模型更为流行,OSI模型更多是用于教学和理论参考。
层次划分复杂:某些功能划分到多个层次中,增加了复杂性。例如,数据加密既可以在表示层实现,也可以在应用层或传输层实现,这使得模型在某些情况下不够清晰。
实现效率较低:在实际应用中,完全按照OSI模型的七层来处理通信会增加额外的开销,影响通信效率。许多网络协议简化了这个过程,例如TCP/IP模型只用了四层。
过于理想化:OSI模型虽然提供了一个完整的理论框架,但很多现代网络技术和协议并没有完全遵循它的设计,导致它在实际使用中显得过于理想化。
- 在实际操作中,会话层和表示层是没有实现的,实际中只有五层:物理层、数据链路层、网络层、传输层、应用层(应用、表示、会话层被归为了一层),这五层模型也叫做TCP/IP五层模型
TCP/IP五层模型
产生原因:通信主机间的距离变远,不同类型的网络和系统之间存在互通问题(因为不同的网络通常使用各自的协议和技术,这些系统通常不能直接进行数据交换)
特点:包含5层,每层都有许多不同的网络协议
模型具体内容不再展示,随便一搜都可以搜到
为什么要分层:两个相隔很远的主机进行通信时需要经历重重问题的阻碍,解决完一个新的问题就会有下一个问题出现,因此对于不同类型的问题,要进行分别对待,即分层
- 主机A要与主机B进行通信,首先要把自己想发给主机B的数据发给跟自己连接的路由器,该怎么发送?
- 网络中有很多的主机如何定位到主机B?
- 如果主机A发送给主机B的数据在传输过程中丢失了怎么办?
- 主机B接收到主机A的数据后,如何知道该数据如何处理?
结论:TCP/IP协议的本质就是一种解决方案,需要分层就是因为上述的这些问题可以分层
TCP/IP协议与OS的关系
基本概念:在网络通信中,尽管各主机上安装的OS可以不同(实际上,操作系统在不同设备间通常是不同的,因为没有统一的操作系统标准),但所有主机上的网络协议栈必须按照相同的标准进行实现。这确保了不同操作系统之间的主机能够相互通信。
网络协议栈:是一组网络协议的集合,这些协议按照层次排列,并协同工作来完成从发送端到接收端的通信任务。每一层都有明确的功能,并依赖于上一层和下一层来完成其任务(传输层依赖于网络层将数据包路由到目标主机,而应用层则依赖传输层来确保数据的可靠性和完整性)
为什么叫做TCP/IP网络协议栈:是因为其中传输层的核心协议是TCP(Transmission Control Protocol,传输控制协议),它负责确保数据的可靠传输;而网络层的核心协议是IP(Internet Protocol,互联网协议),它负责为数据包的路由选择和地址管理。在TCP/IP五层模型中,传输层和网络层是两个关键的层,它们负责从数据的路由到可靠传输的核心功能。这两个层次的功能必须在操作系统的内核中实现,这是因为它们直接与硬件交互,管理数据包的传输、路由和网络接口
(因为除了计算机早期为了适应更多的网络连接需求,所以出现了TCP和IP协议,慢慢的基于这两个协议有进行了相关的补充最后才形成了当今的TCP/IP网络协议栈,且当前正常情况下所有的主机只会使用该网络协议栈)
网络协议的本质
问题:假设进行通信的两台主机A和主机B使用了不同的OS,同时在传输层中都定义了一个结构体protocol,此时主机A发送结构体对象data给主机B,主机B是否能识别这一内容?
回答:可以,主机A通过网络协议栈发送这个结构体数据给主机B。虽然两个主机的操作系统不同,但因为双方都使用相同的网络协议栈,所以接收方(主机B)能够正确解析这个结构化数据,确保数据能够准确无误地传输并被解读
结论:网络协议的本质就是通信算双方都认识的数据结构(协议定义了通信双方都能识别的结构化数据类型,即便操作系统不同,通过标准的协议解析,数据传输也不会出错)
举例说明:快递 = 快递单 + 物品,快递单上的寄件人姓名、地址等需要填写的信息就类似于一个数据结构,寄件人(主机A)在发送快递时要填写这些内容(结构体中的变量),然后和物品(要发送的数据)一起进行传递出去,快递员(主机B的网络协议栈)在派送快递时会读取快递单上的内容最后将快递中的物品交给收件人(主机B)
概念替换:在网络的数据传输中,快递被叫做报文,快递单叫做包头、物品叫做有效载荷
- 报文:也称数据包,是传输的完整单元,由包头和有效载荷构成
- 包头:位于报文的前端,提供报文如何传输的元数据信息,例如源地址、目标地址、协议类型、校验信息等,可能有多个包头用于处理不同协议层间数据的传输
- 有效载荷:紧随包头之后,包含了实际传输的数据,例如要发送的某个文件的具体内容
注意事项: 一个完整的报文可能包含多个包头(有时也称报头,二者是一样的)
当一个TCP报文通过IP层传输时,它的结构大致如下:
[IP包头] [TCP包头] [有效载荷(实际数据)]
数据在局域网传输的基本流程
基本概念:两台主机在同一局域网内,可以进行通信(教室里老师可以和你进行交流),并且每台主机在局域网上都要有一个唯一的标识,来保证当前主机在局域网内的唯一性,这一标识也叫做mac地址
MAC地址
基本概念:用于唯一标识网络中的每个设备的网卡或网络接口,每个网络设备的MAC地址在制造时就被烧录在其网络接口中,因此理论上每个设备的MAC地址都是全球唯一的
以太网:以太网是实现局域网的技术之一,但局域网可以通过不同的技术来实现,比如有线和无线
注意事项:在以太网中任何时刻只允许一台机器向网络中发送数据,如果有多台同时发送会发生数据干扰,我们称之为数据碰撞,所有发送数据的主机要进行碰撞检测和碰撞避免,没有交换机的情况下,一个以太网就是一个碰撞域,局域网通信的过程中,主机对收到的报文确定是否是发送给自己的,是通过发送者的目标mac地址判定的
报文的封装和解包
基本概念:从逻辑层面来讲,每一层协议都认为自己是在与对等层的协议直接通信(因为网络协议提出的的每一层都专注于处理特定的功能,而不需要了解其他层的具体实现,比如应用层协议HTTP认为它与另一端的应用层协议直接通信,而不必了解下层的传输细节),但在实际的传输过程中,数据并不是直接从一台设备的某层传送到另一台设备的相同层,而是通过逐层封装和解封装进行传递
封装:应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部,称之为封装,并且在数据向下封装时每一层都不关心上一层发来的数据是什么,只会把它当作有效载荷,然后在该有效载荷的头部加上自己层独有的报头后继续向下传递数据
解包和分用:不断去除原始数据包中的之前各个层添加的报头并取出有效载荷的过程叫做解包(或者解封装),将接收到的数据正确地交给合适的上层协议进行处理的过程叫做分用(因为每一层中都会有很多的协议,通常情况下数据包在封装过程中就会对当前封装时使用的是什么协议进行标识,便于后续解包过程中的分用)
- 这也是为什么称这些每个层中的网络协议的集合为网络协议栈的原因:先进后出
注意事项:数据在网络中发送时,最终一定是在硬件上传递的
假设有一个HTTP请求从主机A传递到主机B:
传输过程(主机A到主机B):
- 主机A的应用层生成HTTP请求数据。
- 传输层(TCP)将HTTP请求数据封装为TCP段,添加TCP包头(如源端口、目的端口)。
- 网络层(IP)将TCP段封装为IP数据包,添加IP头(如源IP地址、目标IP地址)。
- 数据链路层将IP数据包封装为以太网帧,添加以太网头(如源MAC地址、目的MAC地址)。
- 物理层通过网络介质(如网线或无线)传输这些数据。
接收过程(主机B):
解包:主机B接收到数据后,物理层开始接收信号,逐层解包:
- 数据链路层去掉以太网头,提取出IP数据包;
- 网络层去掉IP头,提取出TCP段;
- 传输层去掉TCP头,得到HTTP请求数据。
分用:解包过程中,分用操作会根据不同的标识符将数据传递给相应的协议或应用程序:
- 数据链路层通过以太网帧中的EtherType字段,将IP数据包交给IP协议进行处理;
- 网络层通过IP头中的协议字段,将TCP段交给TCP协议进行处理;
- 传输层通过TCP头中的端口号,将HTTP请求数据交给Web服务器进行处理。
补充内容
- 不同的协议层对数据包有不同的叫法,在传输层叫做段、在网络层叫做数据报、在数据链路层叫做帧
- 首部(报头)信息中包含了一些类似于首部有多长、有效载荷有多长、上层协议是什么等信息
- 在学习网络协议的过程中,我们应该从以下两个层面来看待一个网络协议:
- 从解包层面来看:当前的协议是如何解包的?
- 从分用层面来看:当前协议是如何将自己的有效载荷交付给上层协议的?
数据的跨网络传输基本流程
大多数时候数据都不是在局域网中传输的而是范围更大的跨网络传输(互联网/广域网)
基本概念:跨网络的主机的数据传输,数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器
IP地址
基本概念:是IP协议中用于标识网络中不同主机的数字地址,理论上在全球网络中每台主机的IP地址都是独一无二的(实际中还有局域网中的私有IP,它就不是了独有的,多个局域网中可以存在相同的私有IP,只要符合规定即可),分为IPv4(4字节、32位的整数)和IPv6(16字节,128位的整数),通常用"点分十进制"的字符串来表示IP地址(例如192.168.10.1)用点分割的每一个数字表示一个字节,范围是0-255
意义:屏蔽底层网络的差异,从应用层来看所有的网络都是IP网络
IP地址和MAC地址的区别
基本概念:IP地址存放的是源目标和最终目标,MAC地址存放的是上一个和下一个目标的地址,数据在经过路由器的时会根据源IP和目的IP在路由表中进行查找,并及时更换自己的MAC地址
补充内容:IP地址用于标识主机的唯一性(在公网IP中每台主机是唯一的,但是在两个不同的局域网中可以存在相同的IP地址),而MAC虽然也可以用于标识主机的唯一性但是是在其所在的局域网中无法跨网段标识
~over~