
📃博客主页: 小镇敲码人
💚代码仓库,欢迎访问
🚀 欢迎关注:👍点赞 👂🏽留言 😍收藏
🌏 任尔江湖满血骨,我自踏雪寻梅香。 万千浮云遮碧月,独傲天下百坚强。 男儿应有龙腾志,盖世一意转洪荒。 莫使此生无痕度,终归人间一捧黄。🍎🍎🍎
❤️ 什么?你问我答案,少年你看,下一个十年又来了 💞 💞 💞

【网络编程】之网络基础(一)
- 什么叫网络
- 网络的分类
- 浅谈协议
- 协议的概念
- 为什么要存在协议
- 网络的分层结构
- 网络和协议的关系
- 为什么要分层
- 网络分层模型
- OSI模型
- TCP/IP模型
- TCP/IP 模型与 OSI 模型的对比
- OS与网络的关系
- 重新理解协议
本篇文章旨在对网络编程中涉及到的一些概念和知识做一个铺垫,可以让你对网络有一个整体的认识。
什么叫网络
计算机是一种工具,我们前面学习了在同一主机内进程的通信,比如经典的IPC通信:共享内存、消息队列、信号量。那不同主机的进程想要通信应该如何实现呢?因为有时候不同地区的两个人想要依靠计算机来完成通信,网络应运而生,它提供了一个媒介,可以让不同主机的进程实现通信。这是维基百科给出的概念:

网络的分类
-
按照覆盖范围分类:
- 个人区域网(PAN,Personal Area Network):
- 定义:覆盖距离很近的距离,通常为个人身边几米的范围。
- 应用场景:连接个人设备,如手机、电脑、穿戴手表。
- 技术:ZigBee、蓝牙、WIFI Direct。
- 局域网(LAN,Local Area Network):
- 定义:覆盖较小的地理区域,如办公室、家庭、学校。
- 应用场景:用于内部通信和资源共享,如打印机访问、文件共享。
- 技术:以太网、Wi-Fi。
- 城域网(MAN,Metropolitan Area Network):
- 定义:覆盖一个大城市或者大都市。
- 应用场景:连接多个局域网,提供很大的覆盖范围。
- 技术:光纤、高速电缆、无线宽带。
- 广域网(WAN,Wide Area Network):
- 定义:覆盖较大的地理区域,如国家、洲际、甚至全球。
- 应用场景:连接不同地区的局域网或城域网,支持远程访问和数据传输。
- 技术:互联网、卫星通信、DSL、光纤。
- 虚拟专用网(VPN,Virtual Private Network):
- 定义:通过公共网络(如互联网)创建的安全私有连接。
- 应用场景:用于远程办公、安全访问企业内部资源。
- 技术:IPSec、SSL/TLS、L2TP。
- 个人区域网(PAN,Personal Area Network):
-
按传输技术分类:
- 有线网络:
- 使用物理介质(光纤)进行数据传播。
- 优点:稳定、高速、安全性高。
- 例子:以太网、光纤通道。
- 无线网络:
- 使用无线电波、红外线或者其它电磁波进行数据传播。
- 优点:易于部署、灵活。
- 例子:WIFI、蓝牙、蜂窝网络(如4G、5G)、卫星通信。
- 有线网络:
-
按拓朴结构分类:网络的拓扑结构描述了节点之间的物理或逻辑连接方式:
-
星型拓扑(Star Topology):
-
所有的网络节点都连接到了一个中央节点上(如集线器、交换机)。
-
优点:容易管理、故障隔离性好。
-
缺点:中央节点瘫痪,整个网络就瘫痪了。

-
-
总线拓扑(Bus Topology):
-
所有的节点通过一条电缆(总线)连接。
-
优点:简单、成本低。
-
缺点:效率低,不适合大规模网络。

-
-
环型拓扑(Ring Topology):
-
节点形成一个闭合的环路,数据沿着一个方向传播(防止冲突)。
-
优点:带宽利用率高。
-
缺点:单点故障会影响整个网络。

-
-
网状拓扑(Mesh Topology):
-
每个节点都直接连到多个其它节点。
-
优点:高可靠性、冗余性好。
-
缺点:复杂、成本高。

-
-
树形拓扑(Tree Topology):
- 分层结构,每个层级上的节点连接到上一层级的节点。
- 优点:扩展性强。
- 缺点:依赖于根节点,根节点出故障,整个网络都会受到影响。

-
-
按照用途分类:根据网络的用途可以进行进一步的分类。
- 校园网(Campus Network):
- 服务于教育机构,如大学、学院。
- 特点:覆盖整个校园,支持教学、研究和管理需求。
- 企业网络(Corporate Network)
- 主要用于企业内部通信和资源共享。
- 特点:包括多个局域网、广域网连接,支持多种应用和服务。
- 政府网络(Government Network)
- 专为政府部门设计,确保信息安全和高效通信。
- 特点:高度安全、可靠,可能涉及敏感信息。
- 家庭网络(Home Network)
- 用于家庭环境,连接家用设备如电脑、智能电视、游戏机等。
- 特点:简单易配置,通常使用WIFI技术。
- 校园网(Campus Network):
浅谈协议
协议的概念
协议是一种约定,计算机的协议,就是计算机之间的约定。好的协议可以减少成本(沟通成本),提高通信效率。
为什么要存在协议
计算机网络中的协议是确保不同设备之间能够有效地进行通信和数据交换的关键。协议定义了通信规则、格式、过程和错误处理方法,使得来自不同制造商的设备和软件能够在没有预先安排的情况下协同工作。下面我们将具体阐述为什么要存在协议:
- 确保可靠性:网络的通信距离是可能很远的,可能你在A点,但是你想发送消息的对象在B点,你们之间可能隔了半个地球。数据如何可靠的传输,这是一个问题。协议包含机制来验证数据是否完整无误地到达目的地。例如,TCP 使用校验和和确认机制来确保数据包正确接收;如果出现错误,则请求重传。
- 确保安全性:数据同样存在被窃取的风险,现代网络协议还集成了加密、认证和其他安全功能,以保护数据免受窃听、篡改和未经授权的访问。
- 使用数据的问题:数据在传输过程中,到了某一个路由器节点之后,它该如何使用它呢?每个协议都明确规定了其职责范围,包括数据如何打包、传输、路由选择、错误检测与纠正等。这有助于提高效率并减少冲突。
- 主机定位的问题:协议规定了如何找到目标主机。
综上所述,协议其实是一种标准,是一种解决问题的标准,因为由于远距离通信、设备种类众多等问题,就必须出现一个统一的协议,只要大家都遵守它,就可以通信,而且可以很好的解决上述问题。
网络的分层结构
网络和协议的关系
我们刚刚不是在谈协议?怎么又开始谈网络的分层结构了,其实网络和协议有时候我们可以认为是一个东西,因为它们的关系是很密切的。
-
协议作为通信规则
- 定义通信规则:协议规定了网络中数据应该如何被格式化、编码、分段、打包以及解包。例如,HTTP 协议定义了 Web 浏览器和服务器之间如何交换网页内容。
- 设定通信过程:协议描述了通信双方如何建立连接、交换数据、确认接收以及关闭连接。例如:
TCP协议使用三次握手来建立连接。 - 保障通信质量:协议包含了确保数据完整性和安全性的机制,如校验和、重传请求、加密等。例如,TLS/SSL 协议为 HTTPS 提供了安全的数据传输通道。
-
网络作为协议的载体
协议不被应用于具体的网络,它就是一个文字,一个空壳。
- 提供物理介质:网络包括各种硬件设备(光纤、电缆、交换机、路由器)和无线技术(WIFI、蓝牙),它们构成了数据交换的物理路径。
- 构建逻辑架构:网络不仅涉及物理连接,还包括逻辑上的拓扑结构(如星型、环型、网状)和服务机制(如域名解析、路由选择)。这些逻辑元素由相应的协议来管理和控制。
- 实现分布式计算:现代网络允许不同地理位置的计算机协同工作,形成分布式系统。协议确保这些系统中的各个组件能够有效地协作和共享资源。
在计算机网络中,协议通常按照分层模型进行组织,每一层负责特定的功能,并且只与相邻层次交互。所以我们谈因为协议是组成计算机网络的重要部分,所以我们有时候说网络分层,其实就是在谈协议的分层。
为什么要分层
-
这个问题刚刚已经谈过了,具体的协议应用到网络中的设备(主机、路由器)里,其实就是数据(代码),这些数据是需要随时维护的,分层可以将一个大的问题转化为一个个小的问题,让开发人员可以专注于这个小的问题,而不需要考虑整个系统的复杂性。
-
分层也大大减少了维护成本,因为这些协议的层次是按照一定的逻辑顺序组织在一起的,每个层负责不同的任务,而不是随便组织的,层和层之间是松耦合的,可以随时替换。学习计算机网络,其实就是在学习不同的层次的协议,学习网络编程,理解各个层次的协议的功能也是很重要的。
网络分层模型
我们将介绍两个最著名的分层模型 OSI 模型和 TCP/IP 模型:
OSI模型
-
OSI模型一共有七层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层、用户层。这种协议只存在于文字中,实际的网络特别是互联网中,还是以TCP/IP模型为主,因为它的实现难度大,但是它经常在教学中出现。
-
物理层(Physical Layer):
-
功能:负责通过物理介质(电缆、光纤等)传输原始的比特流。下图是比特流与点信号之间的转换:

-
-
数据链路层(Data Link Layer):
-
功能:负责相连的设备之间的数据传输,以及识别数据帧。

-
-
网络层(Network Layer)
-
功能:负责路由选择和分组转发,确保数据包能够从源地址到达目的地址。

-
-
传输层(Transport Layer):
- 功能:提供端到端的通信服务,保证数据传输的可靠性、顺序性和完整性。
-
会话层(Session Layer):
- 功能:负责不同主机会话管理,包括建立、维护、终止连接。

-
表示层(Presentation Layer):
- 功能:处理不同设备与网络标准间的数据转换,确保兼容性。

-
应用层(Application Layer):
- 功能:面向用户,提供具体的服务,如电子邮件、文件传输等协议。

TCP/IP模型
TCP/IP 模型(Transmission Control Protocol/Internet Protocol Model)是互联网的基础通信协议模型,它定义了数据在网络中如何被封装、传输和解封装。与 OSI 模型相比,TCP/IP 模型更加简化,更贴近实际应用,并且是当前互联网通信的标准框架。
TCP/IP 模型通常分为四层,每一层都有特定的功能和职责。各个层的功能都与OSI的对应层类似。最大的变动在于OSI的会话层、表示层、应用层在TCP/IP中合并成了应用层。
-
物理层:负责管理光/电信号的传递方式,现在以太网通用的双绞线、有线电视使用的同轴电缆(早期以太网使用)、WIFI使用的电磁波都属于物理层的概念。**物理层的能力决定了最大传输率、传输距离、抗干扰性。**集线器(Hub)也工作在物理层。集线器(Hub)是早期局域网(LAN)中常见的网络设备,用于连接多个以太网设备,如计算机、打印机或其它网络节点。它工作在 物理层(Layer 1),主要用于信号的放大和再生,以便延长网络覆盖范围。然而,随着技术的发展,集线器逐渐被更高效的交换机所取代。

水晶头通过压线工具安装在双绞线电缆的两端,水晶头是用于连接双绞线电缆到网络设备的接口。

-
数据链路层:负责设备之间数据帧的可靠传送。例如帧封装、逻辑寻址(如 MAC 地址)、流量控制和错误检测、冲突检测(检测到冲突就自动重发)。以太网、令牌环网、交换机、无线局域网(WIFI)工作在数据链路层。数据链路层解决了数据报局域网转发的问题。
-
网络层:负责地址管理和路由选择。例如:在IP协议中,通过IP地址来标识一台网络中的主机,并通过路由表和路由算法规划出两台主机数据传输的线路。网络层解决了主机定位的问题,路由器工作在网络层。
-
传输层:负责两台主机之间的数据传输。如TCP协议中就规定了数据如何从一台主句可靠的传输到另一台主机。传输层解决了数据可靠传输的问题。
-
应用层:应用层实现了多种网络服务,使得应用程序能够通过网络与其他设备或服务进行交互。如 HTTP/HTTPS(超文本传输协议及其安全版本)、SSH协议(用于远程登录)。应用层解决了如何使用数据的问题,它定义了应用程序之间如何交换信息以及这些信息的格式和语义。
TCP/IP 模型与 OSI 模型的对比
| OSI 模型层次 | TCP/IP 模型层次 |
|---|---|
| 物理层 | 物理层 |
| 数据链路层 | 数据链路层 |
| 网络层 | 网络层 |
| 传输层 | 传输层 |
| 会话层 | 合并在应用层 |
| 表示层 | 合并在应用层 |
| 应用层 | 应用层 |
因为我们网络编程中很少考虑物理层,所以TCP/IP又叫做四层模型,网络编程针对的就是应用层。但是对于各层的重要协议,我们也要学习理解,这对我们网络编程是有帮助的。
OS与网络的关系
我们的操作系统难道与网络是独立的吗?网络的TCP/IP模型在OS中是如何体现的呢?一台主机想要联网通信,它内部肯定也要有协议,这个协议就是TCP/IP模型。我们常说的网卡不就是物理层中的设备吗?

重新理解协议
站在语言的角度重新理解协议,所谓的协议不就是使用C语言编写的一些代码吗?网络库也是使用C语言编写的,类比我们经典的IPC通信:
它们能通信的前提是都认识相同系统中的某些结构体(如消息队列中的struct msg_queue同一系统中的进程都认识它所以可以使用消息队列通信),现在到了网络间不同主机的进程通信,唯一变化的是距离变远了,但本质没有变:网络通信时不同的系统的进程也要都认识一些网络通信时要使用的数据结构和变量,所以即使OS有很大不同,但是它们只要想进行网络通信,它们一定都是TCP/IP协议,且这些协议的内容也一定一致,否则就会造成发送的数据和我解析出的数据不同等问题。
OS(Windows、Linux、MacOS)可以有很大不同(这是个性),所以它们系统编程部分是会有很大的不同的(接口、内核数据结构都可能不同),但是网络编程部分的接口以及数据结构一定相同(这是共性)!!因为系统中的不同进程想通过网络进行远距离不同OS间的进程通信!!!。
尽管不同操作系统中的进程数据结构(如 Linux 的 task_struct)各不相同,但它们仍然可以通过网络进行通信。这是因为网络通信依赖的是协议栈和标准化的接口,而不是操作系统的内部数据结构。
操作系统内部的数据结构(如 task_struct)主要用于内核空间的操作和管理,并不会直接影响用户空间的应用程序。网络通信通常发生在用户空间或通过操作系统提供的标准化 API 进行,因此不同系统的进程可以通过一致的 API 和协议进行交互。许多高级库和框架为网络编程提供了更高层次的抽象,隐藏了底层系统的复杂性和差异。
- 本人知识、能力有限,若有错漏,烦请指正,非常非常感谢!!!
- 转发或者引用需标明来源。

被折叠的 条评论
为什么被折叠?



