Linux网络编程:网络协议及网络传输的基本流程

目录

一. 计算机网络的发展

二. 网络协议的认识

2.1 对于协议分层的理解

2.2 TCP/IP五层协议模型

2.3 OSI七层模型

三. 网络传输的流程

3.1 同一网段中计算机通信的流程

3.2 不同网段中计算机设备的通信

3.3 对于IP地址和MAC地址的理解

3.4 数据的封装和解包

四. 总结 


一. 计算机网络的发展

独立模式:每一台计算机之间都是相互独立的,如果几台计算机要协同工作,需要相互之间传输数据,那么就需要人工将数据从一台计算机拷贝到另一台计算机。

Linux网络编程:网络协议及网络传输的基本流程_第1张图片 图1.1 网络互联

网络互联:将多台计算机连接在一起实现数据共享。

Linux网络编程:网络协议及网络传输的基本流程_第2张图片 图1.2 网络互联

局域网:随机互联网技术的发展,计算机数量的增多,通过交换机和路由器,将一定区域内的所有计算机连接起来,让他们可以相互通信。

Linux网络编程:网络协议及网络传输的基本流程_第3张图片 图1.3 局域网

广域网:随着计算机数量的增多,将更大范围、更多计算机连接起来的网络,可称为广域网。广域网和局域网是相对的概念,在中国境内,我们可以认为,每个省的网络属于局域网,而全国范围的网络是广域网,而在全球范围内,又可以认为中国的网络属于局域网。

Linux网络编程:网络协议及网络传输的基本流程_第4张图片 图1.4 广域网

二. 网络协议的认识

2.1 对于协议分层的理解

软件的设计是分层的,分为前端和后端,前端就是给用户的界面,后端进行数据处理、数据运算等工作,用户要通过前端将信息交付给后端进行处理,后端也要将处理结果反馈给前端,前端和后端,就可以被视为软件的两层。网络协议的设计也是分层的

分层设计的好处在于:(1). 更好的适应复杂的场景。 (2).实现不同功能之间的解。

以图2.1所示的用户通信场景为例,上层用户遵循语言协定(汉语、英语等),下层的通信设备也遵守各自的协议,如:采用电脑发微信,不同电脑之间就要遵守特定的电脑协议。此时,如果两名老外要通过英语发送信息,那么就只需要改变上层的用户协议,而底层通信设备的协议不用修改,再比如通信设备变为了卫星电话,那么只需改变通信设备之间的协议即可,用户层协议无需修改。这就是协议的分层设计,能够实现不同功能间的解耦。

Linux网络编程:网络协议及网络传输的基本流程_第5张图片 图2.1 分层设计协议

2.2 TCP/IP五层协议模型

TCP/IP是一组协议的代名词,TCP表示传输层协议,IP表示网络层协议。TCP/IP协议可分为以下五层,每一层都呼叫下一层网络来实现自身需求。

  • 物理层:负责通过光/电信号来传输数据,如光纤、集线器、调制解调器,都属于物理层的设备,集线器的工作是将信号放大,以便实现远距离数据传输,调制解调器则对信号进行变频、转化等操作。
  • 数据链路层:负责设备之间数据帧的传送和识别,执行数据帧同步、冲突检测、数据校验等工作,遵循以太网、无线WIFI、令牌环网等标准,交换机是运行在数据链路层的硬件设备,可以通过报文交换实现接受数据和发送数据到指定的计算机网络设备中。
  • 网络层:负责明确发送数据的源地址和接受数据的目标ip地址,明确数据传输所经历的路由器路径,路由器就是运行在网络层的设备。
  • 数据传输层:负责主机之间的数据传输,如用户数据报协议UDP、控制传输协议TCP。
  • 应用层:负责上层用户使用的应用软件间的通信,如电子邮件传输协议SMTP、文件传输协议FTP、远程网络访问协议Telnet。

TCP/IP的5层协议在计算机体系中的实现如图2.2所示,操作系统至少要实现从数据传输层到物理层、路由器至少要实现从网络层到物理层、交换机至少要实现从数据链路层到物理层、而集线器则是仅仅实现在物理层。

Linux网络编程:网络协议及网络传输的基本流程_第6张图片 图2.2 TCP/IP五层协议与计算机体系中每部分的对应关系

2.3 OSI七层模型

OSI七层模型从逻辑上将网络通信分为了七层,每一层都有对应的功能、硬件设施以及协议。

  • 物理层:各种底层设备,负责光/点信号的传输,光纤、集线器、调制解调器都属于物理层。
  • 数据链路层:负责各个主机之间数据帧的传输,负责帧同步、冲突检测以及准确性校验等工作,这一层的标准有以太网标准、无线WIFI标准、令牌环网标准。交换机是工作在数据链路层的设备。
  • 网络层:负责地址的管理和路由的选择,路由器是工作在网络层的设备。
  • 传输层:负责主机之间的数据传输,如用户数据报协议UDP、控制传输协议TCP。
  • 会话层:对通信进行管理,负责通信的建立、终止和维持。
  • 表示层:实现上层设备数据和网络标准数据格式之间的转换。
  • 应用层:针对特定应用的协议,如文件传输协议FTP、电子邮件传输协议SMTP、远程网络访问协议Telnet。

综上我们发现,OSI七层模型和TCP/IP五层模型的低四层几乎是相同的,差别在于上层,OSI在操作系统之上的用户层面,划分出了会话层、表示层和应用层,而TCP/IP则直接归一化成应用层,OSI是一种非常理想的理论指导模型,TCP/IP是一种已经在网络工程中被成熟应用的设计模型,这是因为在操作系统之上的用户软件,场景非常复杂,难以同一制定协议,因此上层协议的维护便交给了用户来实现,就有了TCP/IP五层协议模型。

图2.3展示了OSI七层模型每层对应的TCP/IP模型及在计算机体系中的位置。

Linux网络编程:网络协议及网络传输的基本流程_第7张图片 图2.3 OSI七层模型与TCP/IP五层模型及计算机体系结构的对应关系

三. 网络传输的流程

3.1 同一网段中计算机通信的流程

在我们的一般性认识中,同一网段的计算机能够实现直接通信,如电视机投屏,只要手机和电视连接在同一网络下,就可以直接投屏,从手机向电视投屏,本质就是同一网段中的计算机通信。

图3.1展示了统计网段中计算机设备通信的具体流程,可见,两台设备的通信并不是一台设备直接将数据发送给另一台设备,而是要经过层层传输才能够到达。根据TCP/IP五层模型,发送数据的设备,数据压从上层传递至下层,通过以太网将数据发送至另一台设备,另一台设备也要从下层到上层逐步获取数据。

Linux网络编程:网络协议及网络传输的基本流程_第8张图片 图3.1 同一网段中计算机通信的流程

如图3.2所示的常见,同一网段中,可能存在多台计算机设备,那么如何确保同一网段中两台设备之间通信,其余的计算机设备不受干扰呢?

这就要涉及到主机的地址了,在局域网中,每台主机都有唯一的Mac地址,用于标识主机的唯一性,可用于识别数据链路层中相连的节点, 假设图3.2中的设备A要给设备C发送信息,设备B由于处于同一网段中,也会看到设备A发送的信息,但是设备A在传送信息的时候,会带上目标设备的Mac地址,设备B在检测到信息不是发送给它的时候,就会将信息自动屏蔽。

如果某个网络中两台设备一同发生数据,导致数据信号在网络传输中发生碰撞,就会出现数据冲突问题,数据传输层要负责进行冲突检测,如果发生冲突,数据就要重发。如果向某个网络中传入大量垃圾数据,就会不断造成数据冲突,这就是网络攻击的一种方式。

结论:在局域网中,通过Mac地址可以标识主机的唯一性,可用于识别数据链路层中相连的节点。

Linux网络编程:网络协议及网络传输的基本流程_第9张图片 图3.2 同一网段中多台计算机设备

3.2 不同网段中计算机设备的通信

在广域网中,每台计算机设备都与其专属的IP地址,用于确定不同网段中发送数据的源主机和接收数据的目标主机。如图3.3所示,不同网段中计算机设备的通信,需要由路由器充当连接各个网段的桥梁,实现跨网段的数据传输。

Linux网络编程:网络协议及网络传输的基本流程_第10张图片 图3.3 跨网段的计算机通信流程

3.3 对于IP地址和MAC地址的理解

对于IP地址的理解:

  • IP地址有IPv4和IPv6两种表达方式,主流采用IPv4。
  • IP地址用于标识网络中主机的唯一性。
  • 对于IPv4,其表达方式为:4个0~255的阿拉伯数字,每个数据之间用 . 分隔,如123.12.4.255就是一个合法的IPv4地址。

对于Mac地址的理解:

  • MAC地址用于标识数据链路层相连的节点。
  • MAC地址由48个二进制位构成,采用16进制数 + 冒号来表示,如 12:a8:bd:06:00:67 就是一个合法的MAC地址。
  • 一般来说,网卡出厂就配置好了MAC地址,但也有些网卡支持用户自行配置MAC地址,甚至在某些虚拟机中,会存在重复的MAC地址。

以图3.4的模型,解释IP地址和MAC地址的区别,在广域网中,我们希望将数据从主机A发送到主机B,那么,主机A和主机B的地址,就是在通信中所讲的IP地址。在数据链路层,主机A发送的数据要依次经过路由器1、2、3才能到达主机B,假设现在数据处于路由器1,那么路由器1的地址就称为当前的MAC地址,而接下来要经过的路由器2的地址,就称为下一个MAC地址。 

Linux网络编程:网络协议及网络传输的基本流程_第11张图片 图3.4 IP地址和MAC地址的区别

3.4 数据的封装和解包

源主机向下传输数据的时候,每一层都要添加一些属性信息,在每一层添加的信息被称为报头,自顶向下添加报头的过程,就是数据封装的过程。目标主机在自底向下接受数据的时候,在每一层都要去掉对应的报头,去掉报头的过程过程就是数据的解包过程。

如:源主机数据在经过网络层的时候,要添加对应的IP地址信息,用于查找目标主机,而数据链路层需要添加下一个MAC地址,以便于找到数据传输过程中下一个路由器的位置。

Linux网络编程:网络协议及网络传输的基本流程_第12张图片 图3.5 网络通信中数据的封装和解包

四. 总结 

  • 网络协议的设计是分层的,这样有利于适应复杂的场景,并且可以实现不同功能之间的解耦。
  • TCP/IP五层设计模型是工程实践中常采用的协议设计方案,自顶向下各层依次为:应用层、传输层、网络层、数据链路层和物理层,其中应用层为针对特定上层应用的协议,传输层负责主机之间数据的传输,网络层负责地址的管理和路由的选择,数据链路层负责各个主机之间数据帧的传输,物理层为底层的各种硬件设施。
  • OSI七层模型为一种理想的设计模型,其下五层与TCP/IP相同,依次为:传输层、网络层、数据链路层和物理层,差别在于上三层,OSI七层模型的上三层为:应用层、表达层、会话层。其中应用层为针对特定应用的协议,表达层负责向数据转化为网络能够识别的数据格式,会话层负责通信的建立、终止和维护。
  • IP地址负责在网络中标识主机的唯一性,MAC地址负责在数据链路层标识相连节点的地址。
  • 网络中,数据从上层向下层传输要添加报头,从下层向上层传输要去掉报头,添加报头的过程称为封装,去掉报头的过程称为解包。

你可能感兴趣的:(Linux系统和网络,网络,网络协议,linux)