Linux网络(一):揭秘从网络发展哲学到 TCP/IP 协议栈分层设计的设计哲学


◆ 博主名称: 小此方-CSDN博客 大家好,欢迎来到小此方的博客。
⭐️网络系列个人专栏: 【主题曲】计算机网络
⭐️此方的GitHub: github_此方
⭐️ 我们思考 (Rethink) · 我们重建 (Rebuild) · 我们记录 (Record)


文章目录


概要&序論

------踏入计算机网络世界------

  Hello,大家好,我是此方 。伴随着Linux专栏逐渐收入尾声(仍在持续更新),我们也将正式开启全新的《计算机网络》系列。有言道:系统网络不分家。如果说 Linux 带我们认识了操作系统如何管理计算机,那么计算机网络将带我们探索数据如何跨越万千设备完成通信。本专栏将坚持由浅入深、结合原理与实践,带大家一步步走进计算机网络的世界。

一、计算机网络的发展历史

1.1从独立,局部,再到整体

  最早的时候,计算机与计算机之间是相互独立的,

  那个时候,我们的数据交换使用的是软盘。

  网络互联:多台计算机连接在一起,完成数据共享。

  局域网LAN:计算机数量更多了,通过交换机和路由器连接在一起。

  广域网出现,让远隔千里的计算机之间建立联系。

  局域网和广域网是一个相对的概念,比如我们国家的广域网,也可以理解为世界互联网的一个比较大的局域网。

1.2为什么会这样:网络发展历史背后的哲学

  计算机是人类的工具,从远古时代开始人与人就需要协作,决定了计算机之间必然要进行协作,因此网络的产生是必然的。

网络的发展遵循着从局部到整体的客观规律:

  • 局部产生:早期网络仅在局部区域或机构内独立产生。
  • 走向整体 :局部网络互相连接并不断扩大,最终在全局层面只能有一个统一的标准。

从发展历史来看:

  • 保密阶段:早期以阿帕网为代表,属于内部保密项目。
  • 公开与普及:到了 90 年代左右逐步解密公开,随后由美国人组建互联网,并在 92~93 年以及 97、98 年快速演进发展。

从产业生态视角来看:

  • 基础设施建设:做通信工具的公司与运营商进行了大量的网络基础设施建设,并接入了无数用户。
  • 上层服务赋能:互联网公司基于这些完善的基础设施,才得以快速爆发并提供丰富的网络服务。

二、初步认识协议

2.1建立初步认识------什么是协议

2.1.1协议就是约定

  计算机之间的传输媒介是光信号和电信号 . 通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息. 要想传递各种不同的信息, 就需要约定好双方的数据格式.

  协议的本质是一种约定 ,目的是减少通信成本 、快速形成共识。

思考: 只要通信的两台主机, 约定好协议就可以了么?

  • 定好协议, 但是你用频率表示01, 我用强弱表示01, 就好比我用中国话, 你用葡萄牙语一样, 虽然大家可能遵守的一套通信规则, 但是语言不同, 即是订好了基本的协议, 也是无法正常通信的

  所以, 完善的协议, 需要更多更细致的规定, 并让参与的人都要遵守。

  • 计算机生产厂商有很多;
  • 计算机操作系统, 也有很多;
  • 计算机网络硬件设备, 还是有很多;
  • 如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准, 大家都来遵守, 这就是 网络协议;

  计算机之间通过建立统一的协议标准进行交互。比如ISO国际标准化组织制定的OSI标准。

2.1.2科普内容:能定制协议标准的组织或者公司

  一般具有定制协议或者标准的资格的组织或者公司都必须是业界公认或者具有江湖地位的组织或者公司, 下面是Gemini生成 的标准制定组织, 大家看一下就可以

2.2协议分层

2.2.1初步理解什么是协议分层

  协议本质也是软件,为了更好的实现模块化和解耦合,被设计为层状结构。所有的软件本质上都是层状、模块化的,网络协议栈也不例外。

  • 两种视角:普通用户视角(只关心上层应用)与工程师视角(关注底层实现)。
  • 同层通信:在逻辑上,同层之间是在直接进行通信。
  • 分层解耦:分层之后,可以无障碍替换任意一层,极大地降低了系统维护与演进的成本。

2.2.2科普内容:OSI七层模型

  • OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;
  • 把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;
  • OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
  • 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
  • 但是,它既复杂又不实用;所以我们按照TCP/IP四层模型来讲.
  • 其实在网络角度,OSI定义的协议7层模型其实非常完善,表现在实际操作的过程中,会话层、表示层是不可能接入到操作系统中的,所以在工程实践中,最终落地的是5层协议。
  • 但是要理解上面的话,需要我们学习完网络才可以理解,这里就知道就可以。

2.2.3TCP/IP五层模型

太罗嗦了这里,扫一遍过去得了。

  TCP/IP是一组协议的代名词, 它还包括许多协议, 组成了TCP/IP协议簇.

  TCP/IP通讯协议采用了5层的层级结构, 每一层都呼叫它的下一层所提供的网络来完成自己的需求.

  • 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞线)、早期以太网采用的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.
  • 数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
  • 网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网络层.
  • 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
  • 应用层: 负责应用程序间沟通, 如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层.

  物理层我们考虑的比较少,我们只考虑软件相关的内容. 因此很多时候我们直接称为 TCP/IP四层模型.。

  一般而言

  • 对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容;
  • 对于一台路由器, 它实现了从网络层到物理层;
  • 对于一台交换机, 它实现了从数据链路层到物理层;
  • 对于集线器, 它只实现了物理层;

  但是并不绝对. 很多交换机也实现了网络层的转发; 很多路由器也实现了部分传输层的内容(比如端口转发);

三、深化对协议的认知

3.1为什么要有TCP/IP协议

  多台主机通过网络通信,本质上也是设备到设备的通信。

  • 本地通信 vs 网络通信:所有设备都是通过"线"连接起来的。计算机内部(如 CPU、内存、磁盘等)基于冯诺依曼体系,本身就是一个网络结构。
  • 核心区别 :网络通信相比于本地通信,唯一的区别就是单纯的传输距离变长了。

  由于通信距离变长,引出了新的问题:

  • 如何处理数据?
  • 数据丢了怎么办?
  • 怎么定位目标主机?
  • 怎么解决当下立即要去哪里?

  有问题的产生,就必须有解决问题的方案。

  TCP/IP协议的本质:就是一种针对网络长距离通信的解决方案!

3.2所以什么是TCP/IP协议

  • TCP/IP协议的本质是一种解决方案。
  • TCP/IP协议能分层,前提是因为问题们本身能分层。

3.3TCP/IP协议与操作系统的关系

  这张图大家一定非常熟悉。我们在Re:Linux系统篇(十六) 进程篇 · 一中做了详细的讲解。

  操作系统的体系结构是层状的,注定网络协议栈也是层状了,因为网络是操作系统的一部分。

  应用层网络层传输层数据链路层分别解决的就是:

  于是,两种不同的操作系统,即使操作系统的底层原理多么千差万别,网络部分一定是一样的。

3.4所以究竟什么是TCP/IP协议

  协议的本质,就是约定好的结构体! ,结构体是协议约定的 计算机式的表达。

问题 : 主机B能识别data,并且准确提取a=10, b=20, c=30吗?

回答 : 答案是肯定的! 因为双方都有同样的结构体类型struct protocol。 也就是说,用同样的代码实现协议,用同样的自定义数据类型,天然就具有" 共识 ",能够识别对方发来的数据,这不就是约定吗?

关于协议的朴素理解: 所谓协议,就是通信双方都认识的结构化的数据类型

因为协议栈是分层的,所以,每层都有双方都有协议,同层之间,互相可以认识对方的协议。

  协议就像快递单,包装在数据外层,记录着源地址、目的地址等关键控制信息。


好的本期内容就到这里,如果对你有帮助,还不要忘记点赞三联支持。我是此方,我们下期再见。bye! Linux、C++、算法持续连载中,欢迎关注WeChat Official Account 【此方的技术栈】。

相关推荐
女神下凡7 分钟前
芯参谋(95):嵌入式文件系统_开发指南
linux·服务器·arm开发·驱动开发·设计规范
Java成神之路-1 小时前
TCP Socket 与 UDP Socket
tcp/ip·计算机网络·udp
且从容.4 小时前
Ubuntu安装flume
linux·ubuntu·flume
承渊政道4 小时前
Linux网络学习【Reactor反应堆模式】
linux·网络·学习·ubuntu·reactor
且从容.7 小时前
ubuntu安装flink
linux·ubuntu·flink
爱和冰阔落8 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
程序员沉梦听雨9 小时前
WSL2的安装与使用
linux·wsl
微小的鱼9 小时前
Linux的渲染与显示系统链路
android·java·linux
lisanmengmeng9 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
严肃小白兔9 小时前
Cloudflare 更新 API Token 管理:从最小权限到自动化凭据安全
网络·安全·自动化