大家好啊!!今天我们终于进入了网络编程的学习。
实际上,网络也属于操作系统的一环,我们想要学好操作系统,自然也需要去学习网络编程。
今天我们将会介绍一下网络的基础概念。
网络编程的学习与系统部分不一样,这一部分会多许多概念,我们学习的方式也更注重与概念而不是代码。
所以希望大家调整一下学习的思路。

同轴电缆:

双胶线:



此时的计算机数量更多了,我们通过交换机与路由器连接在一起。

所谓 " 局域网 " 和 " 广域网 " 只是一个相对的概念 . 比如 , 我们有 " 天朝特色 " 的广域网 , 也可以看做一个比较大的局域网。
计算机是人的工具,人要协同工作,注定了网络的产生是必然的。也象征着网络的发展历史。
在几十年前,当你考上大学时,就会远离家乡。此时你们的通信方式就是信封或者远古的那种电话,费用很高。
为了节省费用,你与家人约定:如果我们打电话过来,铃声响了一声,就是我在报平安,你们不要接电话 ;如果响了两声,就是我没有生活费了,你们给我打生活费;如果响了三声,就是我有事情,你赶紧接电话。
以上这件事情,你与家人之间就是做了一个约定。而这个约定,就是协议!!
协议,是一种约定!
计算机之间的传输媒介是光信号和电信号 . 通过 " 频率 " 和 " 强弱 " 来表示 0 和 1 这样的信息.。 要想传递各种不同的信息 , 就需要约定好双方的数据格式 .
那么通信的两台主机,只需要约定好写一就可以了吗?
虽然定好协议了,但是你用频率表示01,我用强弱表示01,就好比我在说中国话,你再说英语。虽然大家可能遵守的时一套通信规则,但是语言不同,即便是定好了基本的协议,也是无法正常通信的。
所以, 一个完善的协议,需要更多更细致的规定,并让参与的人都要遵守。、
一般具有定制协议或者标准的资格的组织或者公司都必须是业界公认或者具有江湖地位的组织或者公司。
如:
IEEE (电气和电子工程师协会) :这是一个由计算机和工程领域专家组成的庞大技术组织,在通信协议领域贡献突出。IEEE 制定了全世界电子、电气和计算机科学领域 30% 左右的标准,包括 IEEE 802 系列标准,这些标准涵盖了从局域网(LAN )到广域网( WAN )等多种网络技术。
○
ISO (国际标准化组织) : ISO 是由多个国家的标准化团体组成的国际组织,它在开放系统互连(OSI )模型方面的工作尤为著名。 OSI 模型定义了网络通信的七层协议结构,尽管在实际应用中,TCP/IP 协议族更为普遍,但 OSI 模型仍然在学术和理论研究中占有重要地位。
○
ITU (国际电信联盟) : ITU 是联合国下属的专门机构,负责制定电信领域的国际标准。ITU-T 制定的标准涵盖了电话和网络通信,与 ISO 合作确保了通信技术的全球兼容性和互操作性。
而协议的本质也是软件,在设计上为了更好的进行模块化,解耦合,也是被设计成为层状结构的协议。
如何让大家理解协议的分层呢?
请看这个例子:

分层之后,变更就只更一层有关了:
我们想用无线电通信了,就在通信设备层更改。我们想使用英语了,就把汉语协议改成英语协议。
在这个例子中,我们的协议只有两层:语言层,通信设备层。
但是实际的网络通信协议,会设计的更加复杂,需要分更多层。
通过上面的简单例子,我们应该能够理解,分层可以实现解耦合,让软件维护的成本更低。
OSI(Open Systems Interconnection)七层模型是国际标准化组织(ISO)提出的网络通信概念框架,它将网络通信过程划分为七个逻辑层次。虽然实际应用中更多采用TCP/IP五层模型,但OSI模型仍是理解网络协议栈的基础理论。
其被称为开放式系统互联参考模型,是一个逻辑上的定义和规范。
它把网络层逻辑上分为了7层,每一层都有相关、相对应的物理设备,比如路由器,交换机。
OSI七层模型是一种框架性的设计方法,其最主要的功能就是帮助不同类型的主机实现数据传输


其实在网络角度, OSI 定的协议 7 层模型其实非常完善,但是在实际操作的过程中,会话层、表示层是不可能接入到操作系统中的,所以在工程实践中,最终落地的是 5 层协议。
但是要理解上面的话,需要我们学习完网络才可以理解,这里就知道就可以。
TCP/IP 是一组协议的代名词,它还包括许多协议,组成了 TCP/IP 协议簇。
TCP/IP 通讯协议采用了 5 层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
其主要包含:
物理层 : 负责光 / 电信号的传递方式 . 比如现在以太网通用的网线 ( 双交线 ) 、早期以太网采用的的同轴电缆( 现在主要用于有线电视 ) 、光纤 , 现在的 wifi 无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器 (Hub) 工作在物理层 .
数据链路层 : 负责设备之间的数据帧的传送和识别 . 例如网卡设备的驱动、帧同步( 就是说从网线上检测到什么信号算作新帧的开始 ) 、冲突检测 ( 如果检测到冲突就自动重发) 、数据差错校验等工作 . 有以太网、令牌环网 , 无线 LAN 等标准 . 交换机(Switch)工作在数据链路层 .
网络层 : 负责地址管理和路由选择 . 例如在 IP 协议中 , 通过 IP 地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路 ( 路由 ). 路由器(Router)工作在网路层 .
传输层 : 负责两台主机之间的数据传输 . 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
应用层 : 负责应用程序间沟通,如简单电子邮件传输( SMTP )、文件传输协议(FTP )、网络远程访问协议( Telnet )等 . 我们的网络编程主要就是针对应用层 .

物理层我们考虑的比较少,我们只考虑软件相关的内容 . 因此很多时候我们直接称为TCP/IP 四层模型 .
一般而言:
对于一台主机 , 它的操作系统内核实现了从传输层到物理层的内容 ;
对于一台路由器 , 它实现了从网络层到物理层 ;
对于一台交换机 , 它实现了从数据链路层到物理层 ;
对于集线器 , 它只实现了物理层 ;
但是并不绝对 . 很多交换机也实现了网络层的转发 ; 很多路由器也实现了部分传输层的
内容 ( 比如端口转发 );
上面的内容,我们只是懂了一些基本概念,还是达不到我们的目标,下面我们再次重新理解协议和协议分层。
首先,即便是单机,你的计算机内部,其实都是存在协议的,比如:其他设备和内存通信,会有内存协议。其他设备和磁盘通信,会有磁盘相关的协议,比如:SATA, IDE , SCSI 等。只不过我们感知不到罢了。而且这些协议都在本地主机各自的硬件中,通信的成本、问题比较少。
其次,网络通信最大的特点就是主机之间变远了。任何通信特征的变化,一定会带来新的问题,有问题就得解决问题,所以需要新的协议咯。
而这个问题是怎样的你?我们来看这张图:


所以,为什么要有 TCP/IP 协议?本质就是通信主机距离变远了
这第一个问题,代表着物理链路层,第二个问题,属于网络层,第三个问题,属于传输层.....
所以问题其实就是分层的,而这,也正是协议进行分层的根本原因!!我们协议,就是来解决这些问题的!!
截止到目前,我们还没接触过任何协议,但是如何朴素的理解协议,我们已经可以试试了。 因为OS 源代码一般都是用 C/C++ 语言写的。
下面,仔细看看下面的图:

在网络传输中,我们的OS可以不同。但是我们的协议,也就是网络协议栈一定是相同的,约定好了!!(这也是不同系统的主机可以通信的原因)
这整个协议栈,既涉及到硬件,又涉及到驱动,又涉及到OS,甚至用户!所以,这个协议一定需要IT各行各业的配合与支持。
这里主机A给主机 B发送了一个信息,我想问一下主机B 能识别 data ,并且准确提取 a=10, b=20 , c=30 吗?
答案是肯定的!因为双方都有同样的结构体类型 struct protocol 。也就是说, 用同样的代码实现协议,用同样的自定义数据类型,天然就具有” 共识 “ ,能够识别对方发来的数据,这不就是约定吗?
关于协议的朴素理解:所谓协议,就是通信双方都认识的结构化的数据类型 。因为协议栈是分层的,所以,每层都有双方都有协议,同层之间,互相可以认识对方的协议。
请大家想一下,如果在买快递时,商家是直接把货物给你,而不是通过什么箱子包起来。
这合适吗?
不合适!
所以你在收快递时,会多收到一个盒子,还有一个快递单!这个快递单上面记录了收货人与发货人的信息。
我们在从菜鸟驿站拿快递时,就是通过快递单上的编号获取的。
这个快递单,就是协议报头,是双方建立的结构体对象暨协议。
协议报头(Protocol Header)是网络数据传输时附加在数据前面的控制信息,就像快递单贴在包裹上一样。它告诉网络设备如何处理这些数据,确保数据能准确送达目的地。
假设你要寄一个礼物给朋友:
没有快递单,快递员就不知道把包裹送到哪;同样,没有协议报头,网络设备就不知道数据该发给谁、怎么处理。
今天我们就把协议先认识一下,希望对大家有所帮助。概念难记很正常,我们需要多去理解