文章目录
Linux网络
1. 计算机网络背景和发展
开始的计算机都是独立模式(计算机之间相互独立):
由于每台计算机所存储和处理的数据都局限在本地,不同计算机之间难以直接交换和共享数据,所以提出了:网络互联(多台计算机连接在一起, 完成数据共享)。
网络互联打破了数据的孤立状态,使得不同计算机之间能够高效地交换信息和共享资源,但是需要对网络的管理复杂度增加了,所以又使用了:局域网LAN: (计算机数量更多了, 通过交换机和路由器连接在一起)。
但是局域网的覆盖范围还是有限,通常只能覆盖一个相对较小的区域,为了让范围在大些,又提出了使用:广域网WAN: (将远隔千里的计算机都连在一起)。
广域网(WAN)和局域网(LAN)主要有以下区别:
(1)覆盖范围:
局域网通常覆盖的区域较小,如一个办公室、一栋楼、一个校园等。
广域网的覆盖范围则广泛得多,可以跨越城市、国家甚至大洲,连接不同的局域网。
(2)传输速率:
局域网内的数据传输速率通常较高,一般能达到 100Mbps 甚至更高。
广域网由于距离远、中间经过的网络节点多,传输速率相对较低。
(3)网络所有权:
局域网通常为一个组织或个人所拥有和管理。
广域网则一般由电信运营商等服务提供商建立和运营。
(4)拓扑结构:
局域网的拓扑结构相对简单,常见的有星型、总线型和环形等。
广域网的拓扑结构较为复杂,通常是由多个不同的网络通过路由器等设备连接而成。
(5)成本:
构建和维护局域网的成本相对较低。
广域网的建设和运营成本较高。
(6)安全性:
局域网相对更容易控制访问权限和保障数据安全。
广域网由于范围广、涉及的用户多,数据在传输过程中面临的安全风险较大。
例如,一个公司内部的办公网络就是典型的局域网,而连接不同城市分公司的网络则属于广域网。
虽然有这么多差别,但其实所谓 “局域网” 和 “广域网” 也只是一个相对的概念。
2. 认识网络协议
“协议” 是一种约定。是计算机网络中进行数据交换和通信所遵循的规则、标准或约定的集合。
计算机之间的传输媒介是光信号和电信号。通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息。要想传递各种不同的信息,就需要约定好双方的数据格式。
简单的说:我们让这些不同厂商之间生产的计算机能够相互通信,所有的厂商就要约定一个共同的标准,大家都来遵守这一个共同的标准,这就是网络协议。
网络协议特点:
(1)标准化: 网络协议通常由标准化组织制定和发布,以确保不同厂商生产的设备和软件能够相互兼容和通信。
(2)分层结构: 常见的网络协议采用分层的架构,如 OSI 模型和 TCP/IP 模型,每一层负责特定的功能,并遵循相应的协议。
网络协议的作用:
(1)数据封装和解封装:在发送数据时,按照协议将数据进行封装,添加必要的控制信息;接收方则按照协议进行解封装,获取原始数据。
(2)错误检测和纠正:协议能够检测传输过程中出现的错误,并采取相应的纠正措施。
(3)流量控制:防止发送方发送数据过快,导致接收方无法及时处理
3. OSI七层模型
OSI七层模型在计算机网络中具有极其重要的地位。
OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范。
把网络从逻辑上分为了7层,每一层都有相关、相对应的物理设备,比如路由器,交换机。
OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输。
它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整。
通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
3.1 物理层
物理层是 OSI 七层模型中的最底层,它是整个网络通信的基础。
物理层主要负责在物理介质上传输未经处理的比特流,也就是 0 和 1 的电信号或光信号。
其主要功能包括:
定义了物理连接的特性,如连接器的类型、插头的规格、线缆的类型(如双绞线、同轴电缆、光纤等)以及接口的机械和电气特性。
规定了信号的传输模式,包括模拟信号和数字信号的传输方式,以及信号的编码和解码方式。
确定了数据传输的速率和带宽。
物理层的技术标准和规范非常多样化,以适应不同的应用场景和需求。例如:
在以太网中,常用的物理层标准有 10BASE-T(使用双绞线,传输速率为 10 Mbps)、100BASE-TX(双绞线,100 Mbps)等。
在无线通信中,如 Wi-Fi 技术,物理层规定了不同的频段、调制方式和传输功率等。
物理层的性能直接影响到整个网络的通信质量和效率。如果物理层出现问题,如线缆损坏、信号干扰等,将导致数据传输错误或中断。
3.2 数据链路层
数据链路层在 OSI 七层模型中位于物理层之上。它主要负责将物理层传输的比特流组合成帧,并进行差错检测和纠正,以在相邻节点之间可靠地传输数据。
其关键功能包括:
帧的封装与解封装: 将网络层传来的数据加上帧头和帧尾,封装成帧。接收方则进行相反的操作,解封装出原始数据。
差错控制: 通过使用循环冗余校验(CRC)等技术检测和纠正帧传输过程中产生的错误。
流量控制: 协调发送方和接收方的传输速率,防止接收方缓冲区溢出。
介质访问控制(MAC):在共享介质的网络中,确定节点何时能够访问介质进行数据传输,例如以太网中的 CSMA/CD 协议。
数据链路层的常见协议有:
以太网协议:这是应用最广泛的数据链路层协议之一。
PPP(Point-to-Point Protocol,点到点协议):常用于拨号连接和专线连接。
举例来说,当您通过以太网发送一份文件时,数据链路层会将文件分割成多个帧,并为每个帧添加控制信息。在接收端,数据链路层会检查帧是否有错误,如果有错误会请求重传,确保数据的正确传输。
3.3 网络层
网络层处于 OSI 七层模型中的第三层,它的主要职责是负责数据包的路由和转发,以实现不同网络之间的通信。
网络层的关键功能包括:
逻辑寻址: 为网络中的设备分配逻辑地址(如 IP 地址),以便识别和定位网络中的节点。
路由选择: 根据路由表和特定的路由算法,确定数据包从源节点到目标节点的最佳路径。
数据包的分段与重组: 当数据包的大小超过网络链路的最大传输单元(MTU)时,网络层负责将数据包分段,在目标节点再进行重组。
**拥塞控制:**监测网络的拥塞情况,并采取相应的措施来缓解拥塞,例如调整发送速率。
网络层的核心协议是 IP 协议(Internet Protocol),此外还包括 ICMP(Internet Control Message Protocol,互联网控制报文协议)、IGMP(Internet Group Management Protocol,互联网组管理协议)等。
例如,当您发送一封电子邮件从北京到纽约,网络层会根据目标地址和网络的拓扑结构,选择一系列的路由器和链路,将数据包逐步转发到目的地。
认识IP地址
IP协议有两个版本,IPv4和IPv6。
IP地址是在IP协议中,用来标识网络中不同主机的地址。
对于IPv4来说,IP地址是一个4字节,32位的整数。
我们通常也使用 “点分十进制” 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节,范围是 0 - 255。
认识MAC地址:
MAC地址用来识别数据链路层中相连的节点。
长度为48位,及6个字节。一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)。
在网卡出厂时就确定了, 不能修改。 mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址,可能会冲突,也有些网卡支持用户配置mac地址)。
3.4 传输层
传输层处于 OSI 七层模型的第四层,它起着承上启下的关键作用,为上层的应用层提供端到端的数据传输服务。
传输层的主要功能包括:
服务质量的定义: 根据应用程序的需求,提供不同质量的传输服务,如可靠的面向连接服务(TCP)或不可靠的无连接服务(UDP)。
端口号的分配: 通过端口号来标识不同的应用程序或进程,使多个应用程序能够同时共享网络连接。
分段与重组: 如果应用层传来的数据过大,传输层会将其分割成较小的段,并在接收端进行重组。
流量控制: 通过调整发送方的发送速率,确保接收方不会因为数据接收过快而缓冲区溢出。
差错控制: 对传输的数据进行差错检测,对于出错的数据进行重传。
常见的传输层协议有 TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protocol,用户数据报协议)。
TCP 提供可靠的、面向连接的、带有流量控制和拥塞控制的传输服务。 例如,在文件传输、电子邮件等对数据准确性要求高的应用中通常使用 TCP。
UDP 则提供不可靠的、无连接的、快速但尽力而为的数据传输服务。 像实时视频流、在线游戏等对实时性要求高而对少量数据丢失不太敏感的应用常使用 UDP。
举例来说,当您在浏览器中访问一个网站时,浏览器与服务器之间的通信就是通过传输层来完成的。传输层根据应用的需求选择合适的协议,并确保数据能够准确、有序地在两端之间传输。
传输层的有效工作使得各种应用能够在网络上稳定、高效地运行,满足了不同应用对数据传输的多样化需求。
3.5 会话层
会话层处于 OSI 七层模型的第五层,它主要负责在通信双方之间建立、管理和终止会话。
会话层的主要功能包括:
会话建立和维护: 在通信双方之间建立连接,并在通信过程中保持会话的活跃状态。
会话同步: 确保会话过程中数据的有序传输和完整性,处理因网络故障等原因导致的数据丢失或乱序问题。
令牌管理: 控制会话双方对共享资源的访问权限,避免冲突。
活动管理: 协调和管理会话中的各种活动,如数据交换、远程操作等。
会话层的作用在一些复杂的通信场景中尤为重要。例如,在远程数据库访问中,会话层确保了多个查询和操作的有序进行,并在网络中断后能够恢复会话状态,保证数据的一致性和完整性。
然而,在实际的网络通信中,会话层的功能在很多情况下被整合到了应用层或传输层中,其独立性相对较弱。
3.6 表示层
表示层位于 OSI 七层模型的第六层,主要负责处理数据的表示方式、格式转换、加密和解密等。
其重要功能包括:
数据格式转换: 将来自应用层的数据转换为适合网络传输的格式,或者将接收到的数据转换为应用层能够理解的格式。例如,将不同计算机系统中的字符编码进行转换。
数据压缩与解压缩: 减少数据的冗余,提高传输效率。
数据加密与解密: 对敏感数据进行加密,以保证数据在网络传输中的安全性,在接收端再进行解密。
语法选择:根据不同的应用需求选择合适的语法表示。
表示层的作用在以下场景中较为明显:
比如,当一个图像文件从一台计算机发送到另一台计算机时,发送方的表示层会将图像数据进行压缩和编码,使其适合在网络中传输;接收方的表示层则进行解压缩和解码,还原出原始的图像数据。
在现代网络通信中,由于很多表示层的功能已经被集成到应用程序中,或者通过特定的应用协议来实现,所以表示层的独立性不像其他层那么突出。
3.7 应用层
应用层是 OSI 七层模型中的最高层,它直接与用户和应用程序交互,为用户提供各种网络服务。
应用层的主要功能包括:
提供用户接口: 使得用户能够与网络进行交互,例如通过图形界面、命令行等方式。
识别和定义通信对象: 确定通信的目标和所需的服务。
应用程序服务:包含了各种各样的网络应用和服务,如网页浏览(HTTP)、电子邮件(SMTP、POP3 等)、文件传输(FTP)、远程登录(Telnet)、域名系统(DNS)等。
应用层的特点和重要性体现在以下几个方面:
多样性: 涵盖了众多不同类型和功能的应用,满足了用户在工作、学习、娱乐等方面的各种需求。
与用户需求紧密结合: 直接响应和满足用户的具体业务需求和操作习惯。
不断发展和创新: 随着技术的进步和用户需求的变化,新的应用和服务不断涌现。
举例来说,当您在浏览器中输入网址访问网站时,应用层的 HTTP 协议负责与服务器进行通信,获取网页内容并展示在您的屏幕上。又比如,您使用电子邮件客户端发送邮件时,SMTP 协议在应用层发挥作用,将邮件从您的计算机发送到收件人的邮件服务器。
应用层是网络通信与用户实际需求的直接接口,是整个网络体系中最贴近用户、最能体现网络价值的一层
4. TCP/IP四层模型
物理层: 负责光/电信号的传递方式。 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层。
数据链路层: 负责设备之间的数据帧的传送和识别。 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层。
网络层: 负责地址管理和路由选择。 例如在IP协议中, 通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由),路由器(Router)工作在网路层。
传输层: 负责两台主机之间的数据传输。 如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机。
应用层: 负责应用程序间沟通。如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。
物理层我们考虑的比较少,因此很多时候也可以称为TCP/IP四层模型。
一般而言:
(1)对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容。
(2)对于一台路由器, 它实现了从网络层到物理层。
(3)对于一台交换机, 它实现了从数据链路层到物理层。
(4)对于集线器, 它只实现了物理层。
但是并不绝对,很多交换机也实现了网络层的转发; 很多路由器也实现了部分传输层的内容(比如端口转发)。
5. 网络的传输
同一个网段内的两台主机进行文件传输。
数据包封装和分用
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame)。
应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。
首部信息中包含了一些类似于首部有多长,,载荷(payload)有多长,上层协议是什么等信息。
数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理。
下图为数据封装的过程: