
序言:
在我们之前的学习中深度学习了Linux,我们的个人电脑在网络的世界里就像是一个个节点,计算机网络是如何把这一个个的独立的点先连成线再由线变成面的?下面这篇博客将带领各位读者对计算机网络有一个大概的了解。
一、网络的历史背景
1. 1950-1960 年代:萌芽期 ------ 单机时代的 "连接渴望"
早在上世纪 50 年代,计算机还是体积庞大、价格昂贵的 "稀有设备"(如 ENIAC),一台机器往往要供多个用户共享。当时人们通过 "分时系统"(比如 IBM 的 CTSS)让多台终端连接到单台主机,这算是 "网络的雏形"------ 但本质仍是 "多终端连一机",而非 "多机互联"。
真正的转折点在 1960 年代:冷战背景下,美国军方担心 "单一指挥中心被摧毁后,通信系统会彻底瘫痪"。1969 年,美国国防部高级研究计划局(DARPA)启动了 "阿帕网"(ARPANET)项目,首次实现了 4 台主机的跨地域互联(分别位于加州大学洛杉矶分校、斯坦福研究院等 4 个节点)。这是全球第一个分组交换网络 ------ 所谓 "分组交换",就是把数据拆成小块(分组)传输,再在接收端重组,这种方式比早期 "电路交换"(如电话网)更灵活,也为后来网络的抗故障能力打下基础。
2. 1970-1980 年代:突破期 ------ 协议诞生与网络 "标准化"
ARPANET 虽已连通,但早期不同节点的计算机用的是各自的通信规则,就像 "说不同语言的人没法对话"。1973 年,Vint Cerf 和 Robert Kahn 提出了 "传输控制协议"(TCP)的雏形,后来又补充了 "网际协议"(IP),形成了 TCP/IP 协议簇 ------ 这套规则统一了数据的传输格式、地址标识(如 IP 地址)和路由方式,就像给全球计算机制定了 "通用语言"。
1983 年,ARPANET 正式全面采用 TCP/IP 协议,这一天也被视为 "互联网诞生的重要标志"。同年,另一个关键突破出现:域名系统(DNS)诞生。在此之前,人们要记主机的 IP 地址(如 192.168.1.1)才能访问,DNS 则把 "好记的域名"(如www.baidu.com)和 IP 地址对应起来,大大降低了使用门槛 ------ 这就像我们记 "朋友名字" 比记 "身份证号" 容易一样。
值得一提的是,1980 年代后期,Linux 的雏形(1991 年正式发布)也在这个阶段酝酿 ------ 此时的网络已从 "军方 / 科研专用" 逐渐向高校、企业开放,为后来 Linux 系统能深度适配网络功能(比如我们之前聊的ifconfig、iptables)埋下了伏笔。
3. 1990 年代至今:普及期 ------ 从 "专业工具" 到 "全民互联"
1990 年,英国科学家 Tim Berners-Lee 在欧洲核子研究中心(CERN)发明了 "万维网"(WWW)------ 他提出了 HTML(网页标记语言)、HTTP(超文本传输协议)和 URL(统一资源定位符),让网络从 "只能传输文字数据" 变成 "能展示图文、链接跳转的可视化页面"。在此之前,访问网络需要敲复杂的命令(类似我们在 Linux 终端操作),而万维网让普通人通过浏览器就能轻松上网,直接推动了网络的全民普及。
之后的故事大家就熟悉了:宽带网络、无线网络(Wi-Fi)、移动互联网(3G/4G/5G)相继出现,网络速度从 KB 级提升到 GB 级,连接的设备也从计算机扩展到手机、智能家居、物联网。
看完上面的历史我们想几个问题:
1、计算机网络出现是必然的吗?
这个答案是肯定的:是的,为什么?有些同学可能会说当我们没有网络的情况下我们的电脑也可以处理一些任务啊!为什么是必然的呢?因为计算机是被当成一种工具的它可以帮我们人类去解决问题,我们人类需要去协作工作,当然我们的计算机的也必然会进行数据的交流帮助我们人类实现协作的目的,所以网络的出现的必然的因为我们人类是协作工作的。
二、网络的划分
1、局域网

局域网:计算机的数量多起来,通过交换机和路由器链接在一起。
2、广域网

广域网:将很远的计算机连在一起。

计算机网络的划分是按从小到大的范围来划分的,这也揭示了网络发展的规律:由点到线,由线到面的过程。网络先是在一些军队和研究机构内使用,后来再到多个机构协同工作多个机构使用,再推广到民用再推广到全球使用。
三、初始协议
可能在我们没有学习网络的时候我们就听过TCP/IP等等不同的协议,那什么是协议呢?这个好像没有人和我们解释清楚。
协议:通俗的来说就是一种共识的 "约定",比如今天你和女朋友约定晚上7点去看电影,那么这就是一种协议,你们两方都要遵守这个约定。
在计算机中我们约定高电频为1,低电频为0,那么这就是协议大家都要遵守。
那么协议是由谁去制定的?
可以制定协议的人或者机构是在业内被大家共识的 "大佬" ,它要有先进的技术和专利(比如美国高通),足够的市场份额。这样它定出来的约定和标准别人才会去执行。如果有公司不去遵守,那么它的市场份额就会被其他的公司蚕食,慢慢失去市场被时代被淘汰。
协议有什么优势?
能被大家都遵守的协议是得到市场验证的,它有足够的优势,大家都去按照这一套协议标准去生产可以节约资源,避免大家各自为营浪费资源。
四、OSI七层模型
OSI七层模型是1984 年 ISO (国际标准化组织)制定的网络通信标准,下面我们来看一下它是如何来制定标准的:

下面我们来解释它们每一层的作用:
应用层:特定的应用协议。
表示层:设备固有的数据格式和网络标准数据格式的转化。
会话层:用于通信管理。负责建立和断开通信的链接和管理传输层一下的分层。
传输层:管理两个节点之间的数据传输。
网络层:地址管理和路由的选择。
数据链路层:互连设备之间传送和识别数据帧。
物理层:以"0" ,"1"代表电压的高低,灯光的闪灭。
在我们的课本上可能说OSI模型既复杂又不实用,但其实在网络的角度OSI七层模型的设定的完美的,只是应用层,会话层和表示层不能实现在我们的操作系统的内核中,需要我们程序员自己去实现,在真实的工程中用到的是五层模型。
上面的文字对于新手来说不太能理解这是很正常的,等到我们把计算机网络学完之后再看这里我们将会豁然开朗。
五、TCP/IP五层模型
1、概念
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议族。

在我们的学习中我们以这种模型为主,我们不考虑物理层所以它就变成了四层模型。
物理层: 负责光/电信号的传递⽅式. ⽐如现在以太⽹通⽤的⽹线(双绞 线)、早期以太⽹采⽤的的同
轴电缆(现在主要⽤于有线电视)、光纤, 现在的wifi⽆线⽹使⽤电磁波等都属于物理层的概念。物
理层的能⼒决定了最⼤传输速率、传输距离、抗⼲扰性等. 集线器(Hub)⼯作在物理层。
数据链路层: 负责设备之间的数据帧的传送和识别. 例如⽹卡设备的驱动、帧同步(就是说从⽹线上
检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就⾃动重发)、数据差错校验等⼯
作. 有以太⽹、令牌环⽹, ⽆线LAN等标准. 交换机(Switch)⼯作在数据链路层。
⽹络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识⼀台主机, 并通过路由表的
⽅式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)⼯作在⽹路层。
传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送
到⽬标主机。
应⽤层: 负责应⽤程序间沟通,如简单电⼦邮件传输(SMTP)、⽂件传输协议(FTP)、⽹络远
程访问协议(Telnet)等. 我们的⽹络编程主要就是针对应⽤层。
2、协议和操作系统的关系?
我们上面说了业内的"大佬"组织和公司定制了协议,制定出来的协议需要各个相关行业都需要遵守,比如硬件的制造厂商,操作系统公司和组织等都需要去执行,硬件我们先不谈,我们来谈一下操作系统,无论是Linux还是Windows,它们操作系统的差异可能是很大的,但它们的网络部分的内容是一样的因为它们需要去遵守协议,这也为我们不同操作系统的平台可以去通信提供了前提。
六、再次理解协议
下面我们来想一个问题:
为什么我们要有TCP/IP这些协议?
上面我们说了网络的出现是为了进行协作,那么我们的数据在传输的过程中会不会出现问题?在长距离传输的过程中会不会丢失,会不会光电信号被干扰发生错误?,这就是我们需要协议的理由,协议就是为了解决这些问题的。
TCP/IP协议的本质就是一种网络长距离传输通信的解决方案。
在TCP/IP中它的应用层解决的是:如何处理数据的问题,传输层解决的是:数据丢了怎么办的问题,互联网层解决的是:如何定位目标主机的问题,数据链路层解决的是:怎么解决当下下一跳的问题。
那么到底什么是协议?
上面我们说了协议是一种"约定",这个过于抽象那能不能形象一点,我们的操作系统都是C/C++语言编写的,在我们的语言中我们如何实现"约定"呢?其实结构体不就是一个很好的约定的载体吗?
我们两者约定好结构体的结构体变量,这不就相当于我们做好了约定。

主机A,B约定好结构体的内容,A向B中传输a = 10 ,sep = '\r',主机B用约定的结构体去接收能不能接收到数据,答案肯定是可以。
所以我们所说的协议是什么?
协议就是通信双方都认识的结构化的数据类型。
七、局域网的传输流程
1、什么是局域网
局域网(Local Area Network,简称 LAN )是指在较小地理范围 内(如一间办公室、一栋大楼、一个校园或一个家庭),将多台计算机、服务器、打印机、智能手机等终端设备,通过有线(如网线、光纤)或无线(如 Wi-Fi)通信线路及网络设备(如交换机、路由器)连接起来,形成的**封闭性计算机网络,**通俗一点来说局域网就是我们在家里连的WiFi等。
2、什么是MAC地址?
Windows > ipconfig/all

MAC 地址(Media Access Control Address,媒体访问控制地址)是网络设备(如网卡、交换机端口、路由器接口等)的物理地址,用于在数据链路层标识设备身份,是局域网内设备间通信的 "身份证"。
MAC地址是48比特,6个字节一般是由16进制数字加上冒号的形式来表示。
3、局域网的通信原理

在我们的局域网中我们的主机A向主机E发送一个报文,这个报文不仅被主机E收到也会被同一局域网下的其他的主机收到,但在报文中带有目的主机的MAC地址,其他主机如果收到的话发现目的主机不是自己将会将报文丢弃,只有确认是发给自己的报文才会继续向上层交付。
这种方式也会带来一些问题:如果在同一时刻大量主机发送数据,会不会造成影响?
答案是肯定会的,大家的数据会相互影响,我们把这种情况叫做数据碰撞,我们可以把信道当作一个共享资源,大家想要访问共享资源为了保证数据的可靠性要互斥的访问。
在没有交换机的情况下,一个局域网就是一个碰撞域,为了避免碰撞的发生,每个主机在发送数据之前都需要做碰撞检测和碰撞避免。
4、从系统的角度理解局域网通信

上面我们说过协议需要去解决长距离传输的问题,在TCP/IP模型中每一层都需要解决不同的问题,它们是如何去解决?通过添加自己的协议报头。
数据包封装和分用 :
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame)。
应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。
首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息.
数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 "上层协议字段" 将数据交给对应的上层协议处理 。
报文 = 报头 + 有效载荷
当用户A要将数据 "hello" 发送给另一台主机B,该数据需要先通过网络协议栈进行封装:(自顶向下)
数据包报先交给应用层,应用层添加上对应应用层协议的报头信息后,将数据再交给传输层。
传输层收到数据包后,再添加上对应传输层协议的报头信息,并将数据继续向下进行交付。
网络层收到数据包后,再添加上对应网络层协议的报头信息,接着将数据包再交给链路层。
链路层收到数据包后,最后再添加上对应链路层协议的报头信息,至此数据封装完毕。
为什么是数据封装自顶向下?
因为用户的数据在应用层而发送数据需要网卡的参与,所以必须要贯穿操作系统,也是为了添加不同协议的报头去解决长距离传输的问题。

=========================================================================
本篇关于Linux的文件理解与操作的介绍就暂告段落啦,希望能对大家的学习产生帮助,欢迎各位佬前来支持纠正!!!
