【Linux网络编程】网络知识相关说明
目录
1,计算机网络
2,网络协议
3,网络分层
4,网络与系统之间的关系
5,网络通信
6,端口号
7,网络字节序
1,计算机网络
首先,我们要明白,计算机之间都是相互独立的,想要将各个计算机之间连接在一起实现数据共享,这里就需要网络,比如:访问百度,打开淘宝等,这中间都需要跑网络。
网络是由多个计算机或其他设备通过通信线路连接在一起,实现资源共享和信息传递的系统。通过计算机网络,计算机之间能够实现资源共享、远程访问、信息传递等。然而,网络覆盖的面积划分,我们可将网络划分为局域网和广域网。
局域网(LAN):局域网是指在一个相对较小的地理范围内(如一个办公室、一栋楼或一个校园内)连接起来的计算机和其他设备的网络。
广域网(WAN):广域网是指覆盖较大地理范围(如城市、地区、国家甚至全球)的计算机网络。
2,网络协议
由于网络是远程计算机之间的连接,这就导致了在传输数据时会出现一系列问题,而网络协议如同计算机之间的约定,专门用于解决网络中遇到的一些问题。
网络中的设备需要遵循一定的规则进行通信,这些规则称为协议。网络协议就是网络中进行通信的计算机之间需要共同遵守的一组规则、标准或约定。
网络协议通常被划分为几个不同层次,即网络分层,这些层次反映了不同级别的网络功能。
网络分层的主要意义在于将复杂的网络通信问题分解为多个相对简单的子问题,每个子问题由不同的网络层次来处理。这样,每个层次都可以专注于自己的任务,而不需要关心其他层次的工作细节。这种分层设计使得网络通信更加高效、可靠和易于管理,便于维护。
网络分层模型主要有两种:OSI七层模型和TCP/IP四层(或五层)模型。
3,网络分层
OSI七层模型:
OSI七层模型也被称为OSI参考模型(开放式系统互联参考模型),是一个概念性框架的设计方法,用于帮助不同类型的主机实现数据传输。这个模型将网络通信过程划分为七个层次,每个层次都有特定的功能和协议。OSI七层模型分别是:1,物理层。2,数据链路层。3,网络层。4,传输层。5,会话层。6,表示层。7,应用层
OSI七层模型的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整。通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,但是,它既复杂又不实用,其中会话层、表示层、应用层更是可以划分为一层——应用层,从软件层面来将又不包括物理层,所以通常实践时是按照TCP/IP四层或五层(物理层属于硬件,通常不用考虑)模型来实现的。
TCP/IP四层(或五层)模型:
TCP/IP模型是计算机网络中广泛使用的参考模型,它既可以分为四层,也可以分为五层。TCP/IP五层模型有:物理层、数据链路层、网络层、传输层、应用层。TCP/IP四层模型没有物理层。
4,网络与系统之间的关系
网络与系统对应的关系如下图:
其中,物理层是硬件层,其它几层结构是与系统软件层息息相关的。虽然当今有各种各样的系统,但它们之间遵循的网络部分都是相同的(具体来说是遵循的相关协议),这样才能保证不同系统之间能够实现通信。
5,网络通信
MAC地址:
MAC地址是网络设备(如网卡、路由器、交换机等)在网络通信中用于唯一标识每个设备的物理地址,即网络设备的唯一身份标识符,确保数据能够准确地发送到目标设备(其它功能这里先不做说明)。它就如同行车在行驶中遇到的不同停车站。
MAC地址长度为48位(6个字节),一般用16进制数字加上冒号的形式来表示。例如:08:00:27:03:fb:19
MAC地址是固化在硬件中的,是全球唯一的标识符,每台主机都有自己的MAC地址。如果一台主机只有一个网络接口(如一个网卡),那么这台主机只有一个唯一的MAC地址;如果一台主机配置了多个网络接口,那么这台机器就有多个唯一的MAC地址。若没有MAC地址,那么网络设备将不会连接到网络进行网络通信。
注意:MAC地址在网卡出厂时就确定了,不能修改。mac地址通常是唯一的。现在普遍用的虚拟机中的mac地址不是真实的mac地址,可能会冲突。
同一个网段内的两台主机进行文件传输:
发送方发送数据及接收方接收数据的过程如上图般。具体流程是,应用层数据(也叫有效载荷)通过协议栈发到网络上时,每层协议都会加上一个数据首部,即封装。这些首部信息中包含了一些类似于首部有多长,载荷有多长,上层协议是什么等信息。其中,不同的协议层对数据包有不同的称谓,如:在传输层叫做数据段,在网络层叫做数据报,在链路层叫做数据帧。数据封装成帧后将会发到传输介质上,到达目的主机后每层协议会剥掉相应的首部,然后根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理。
跨网段的主机的文件传输:
IP地址:
P地址是指互联网协议地址,是分配给网络上设备的数字标签地址,如同起始车站与终点车站般,用于标识网络中不同主机的位置,从而允许设备之间互相通信。
IP地址有两个版本,IPv4和IPv6。一般所提到IP地址,没有特殊说明的,默认都是指IPv4,而对于IPv4来说,IP地址是一个4字节(32位)的整数。通常使用 "点分十进制" 的字符串表示IP地址,例如:192.168.0.1。用点分割的每一个数字表示一个字节,范围是 0 - 255。
路由器:
我们再来认识下路由器。路由器一般至少要横跨两个子网,且路由器一般至少要横跨两个子网,使不同网络之间隔离。
路由器的功能之一就是用于不同网络之间的通信,路由器通过路径选择,接收来自源设备的数据包,并根据路由表中的信息将其转发到目标设备或下一个路由器,使我们可以通过路由器访问不同的网络。
路由转发:
跨网段的主机的文件传输是指数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器。其中,MAC地址在路由器转发过程中会发生变化,但IP地址保持不变,原理如下:
变化原理:当数据包从一个广播域传输到另一个广播域时,由于不同广播域内的设备MAC地址不同,因此数据包在传输过程中,其MAC地址会发生相应的变化。这一变化由路由器负责完成,路由器在转发数据包时,首先会解析数据包提取出目的IP地址,然后根据目标IP地址查找路由表,并选择合适的接口进行转发,确定下一跳的IP地址和对应的出口接口。在转发过程中,路由器会重新封装数据包,即将新的出口接口的MAC地址作为源MAC地址,将下一跳设备的MAC地址作为目的MAC地址。同时,在路由器转发数据包的过程中,源IP地址和目的IP地址不变,因为IP地址可看成行走的起点地址和终点站地址,而路由器只是在网络中进行数据包转发的设备,这就导致了MAC地址会不断发生变化,但IP地址不会发生变化。
注意:路由器接收到来自源设备的数据包,该数据包包含源MAC地址、源IP地址、目的MAC地址(通常是路由器的某个接口的MAC地址,因为数据包在到达路由器之前已经经过了若干次MAC地址的变更)、目的IP地址等信息。MAC地址在路由器转发过程中会发生变化,但IP地址保持不变,这一变化是路由器进行数据包转发时的正常操作过程,特殊情况可能有所不同。
6,端口号
我们平常上网无非就两种动作:要么就是把远处的数据资源提取到本地(比如:访问百度时,这里是通过网络将远程的百度服务器相关的数据资源提取到本地中),要么就是把本地的数据资源发送到远处(本地主机相当于服务器)。对于网络通信,无论是客户端还是服务端,都是通过进程发送的,将数据包传递给对方。
端口号(一个2字节16位的整数)是传输层协议的内容,是计算机网络中用于区分不同网络服务或应用程序,每个端口号都唯一地对应一个服务或应用程序,使不同的应用程序可以在同一台计算机上并行运行而不会相互干扰。当进程访问一台服务器中的应用程序时,进程是通过应用程序对应的端口号获取相关数据资源的。比如:当我们访问一个网站时,我们的主机通过进程会向目标计算机的指定端口发送请求,成功后进程通过该端口号获取网页内容。通俗来讲,端口号就相当于应用程序或网络服务的 “门牌号” ,不同的端口号可区分不同的应用服务或服务,从而区分它们之间的通信。
7,网络字节序
计算机内存中的多字节数据相对于内存地址有大端和小端之分,磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分,网络数据流同样有大端小端之分。
由于不同系统可能使用不同的端序存储数据(大端序或小端序),直接传输可能导致数据被错误解释,确保数据以相同的字节顺序(通常是网络字节顺序,即大端序)在所有系统之间传输是非常重要的,因此, TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节。不管这台主机是大端机还是小端机,都会按照这个TCP/IP规定的网络字节序来发送或接收数据;如果当前发送主机是小端,就需要先将数据转成大端,否则就忽略。
为使网络程序具有可移植性,使同样的C代码在大端和小端计算机上编译后都能正常运行,可以调用以下库函数做网络字节序和主机字节序的转换。
头文件:
#include <arpa/inet.h>
函数说明:
将主机字节序的 32 位无符号整数转换为网络字节序
uint32_t htonl(uint32_t hostlong);
将主机字节序的 16 位无符号整数转换为网络字节序
uint16_t htons(uint16_t hostshort);
将网络字节序的 32 位无符号整数转换为主机字节序
uint32_t ntohl(uint32_t netlong);
将网络字节序的 16 位无符号整数转换为主机字节序
uint16_t ntohs(uint16_t netshort);
参数说明:
要转换对应位数无符号整数的字节序
这些函数的名字来源于 "host to network" 和 "network to host" 的缩写,以及它们处理的数据长度("l" 表示 32 位长整型,"s" 表示 16 位短整型)。