这里是Themberfue
在上一节中,我们了解到 网络 是如何顺应历史发展到至今的
今天我们将正式进入到 网络 的学习中~~~
网络通信
在早期的计算机中,每个计算机都是相互独立的,若想协同进行某一项目的开发时,必须等待另一台计算机的停止,本台计算机才能继续开发,这样的开发显然是非常缓慢的。
随着时代的发展,越来越需要多台计算机之间可以互相通信,共享数据或者软件,即以多个计算机协同工作来完成业务,就有了网络互连。
数据共享本质是网络数据传输,即计算机之间通过网络来传输数据,因此也称为网络通信。
根据网络连接的规模不同,可以将其分为 "局域网" 和 "广域网"
局域网
局域网(LAN,Local Area Network),局域网是覆盖范围较小的计算机网络,通常用于连接同一建筑物、校园或较小区域内的设备。
局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法进行通信的。
· 局域网组建网络的方式有多种:
1. 通过网线直接相连
2. 通过集线器组建
3. 通过交换机组建
4. 通过交换机和路由器组建
广域网
广域网(WAN,Wide Area Network),广域网是覆盖范围较大的网络,用于连接分布在不同地理区域的局域网或设备。
通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网。
在进行网络通信之前,还需知道我发的数据应该是给谁发的,不能说我的数据包本来是给小明的,结果跑到小勤的主机上~
IP地址
IP地址(Internet Protocol Address),是指互联网协议地址,其主要用于标识网络主机、其他网络设备的网络地址,IP地址通常用于定位主机的网络地址;简单来说,IP地址就好比你的家庭地址——江西省赣州市章贡区;注意,这里的家庭地址并非详细地址~~
有了IP地址,数据包就知道我的数据要发给谁了,就不会乱套了。
IP地址是⼀个32位的⼆进制数,通常被分割为4个 “8位⼆进制数”(也就是4个字节),如: 01100100.00000100.00000101.00000110。 通常用 “点分十进制” 的方式来表示,即a.b.c.d 的形式(a, b, c, d都是 0~255 之间的十进制整数), 如:127.0.0.1
端口号
在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程;端口号用于定位主机中的进程。
在一台计算机中,同时运行着不止一个进程,尽管知道了这台计算机的 IP 地址,但还不能确定是哪个进程需要发送或接受数据包,所以使用端口号来区分各个进程,端口号通常由操作系统自动分配;简单来说,好比上述例子:你的家庭地址——江西省赣州市章贡区,但这里并非详细地址,所以你还得告诉我你在哪个小区,哪栋楼,门牌号;这样,我才可以定位到你~~
端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定⼀个端⼝号,来发送及接收网络数据。
协议
在正式进入网络通信前,了解 “协议(protocol)” 这个概念是非常至关重要的。
在计算机网络与信息通信领域里,人们经常提及 “协议” 一词。互联网中常用的且具有代表性的协议有 IP、TCP、HTTP 等。而 LAN(局域网) 中常用的协议有 IPX/SPX 等。
简单来说,协议就是计算机与计算机之间通过网络实现通信时事项达成的一种 “约定”。这种 “约定” 使那些由不同厂商的设备、不同的CPU以及不同的操作系统组成的计算机之间能够实现通信;只要遵循相同的协议就能实现通信,如果使用的协议不同,那么就无法相互通信。
遵守相同的协议可以类比到人与人的沟通交流:有三个人 A、B、C;A 只会说汉语、B只会说英语、而C既会说汉语又会说英语。选择 A 与 B 要聊天,他们之间该如何沟通呢?若 A 与 C 要聊天,又会怎样?这时我们将汉语和英语当作 “协议”;将聊天当作 “通信”;将说话的内容当作 “数据”。
在上述情况下,A 与 B 交流,A 与 B 所会说的语言各不相同,哪怕说再多对方也不可能听懂在说啥,因为他们之间的谈话所用的协议(语言)不同,双方都无法将数据(所说的话)传递给对方,哪怕对方接受到了数据,也无法解析其真正的意思。
如果是 A 与 C 交流,两人都用汉语这个 “协议” 就能理解对方所要表达的具体含义了;也就是说 A 与 C 为了顺利沟通,采用同一种协议,使得他们之间能够传递或解析出真正含义的数据(所说的话)。
计算机之间,事先达成一个详细的约定,并遵循这一约定进行处理方可建立通信,这个约定就是 “协议”。
五元组
TCP/IP协议中,用五元组来标识一个网络通信:
1. 源IP:标识源主机
2. 源端口号:标识源主机中该次通信发送数据的进程
3. 目地IP:标识目的主机
4. 目地端口号:标识目的主机中该次通信发送数据的进程
5. 协议类型:标识发送进程和接收进程双方约定的数据格式
例如:贫僧(源端口号)自东土大唐(源IP)来,到西方(目的IP)拜佛(目的端口号)求经而去;至于协议类型的话:唐僧取经路上说的都是中文(佛法)~~~
协议分层
网络通信的过程是非常复杂的,涉及到的步骤也是很多的,如果只规定一个协议来完成整个通信的过程,那么该协议势必是非常庞大的、复杂的而且难以维护的
为了解决这个问题,我们引入了协议分层的概念,把一个大的协议拆成了一个个小的协议,模块化起来,将这些协议进行分层,上层调用下层,下层传递给上层,且不能跨层交互。
协议分层将网络通信功能划分为多个层次,每一层完成特定的功能,并与相邻的层次进行协作。其将网络通信的过程分解成一系列层次,每一层都实现特定的功能,并提供相应的接口供上下层使用
通过对话理解分层
关于协议的分层,我们再以 A 与 C 的对话为例说明。在此,我们只考虑语言层和通信设备层这两个分层的情况。
首先,以电话聊天为例,A 与 C 两个人正在通过电话(通信设备)和汉语(语言协议)聊天。
表面上看 A 跟 C 是在用汉语直接对话,但实际上 A 与 C 都是在通过电话机的听筒听取声音,都在对着麦克风说话。想象一下如果有一个素未见过电话机的人见到这个场景会怎么想?恐怕他一定会以 A 和 C 在跟电话机聊天吧。
其实,他们所用的语言协议作为麦克风的音频输入,在通信设备层被转换为电波信号传递出去了。传递到对方的电话机后,又被通信设备层转换为音频输出,传递给了对方。这便是整个通讯的大致过程。
在整个过程中,人们不需要关系电话机是如何实现的,只需要对着电话机提供的麦克风讲话就好了,好比上层调用下层的接口,下层给上层提供相应的服务。
尽管不是通过电话机通讯,换成无线电通讯,但是使用者仍然不需要关系无线电是如何实现的,只需要通过无线电提供的通讯就好了。
在进行分层后,可以灵活的替换某一层,而其他层不会产生太大或明显的变化。
为什么要协议分层
分层设计是为了简化网络通信的实现和维护,主要原因如下:
1) 模块化设计
- 分层让每一层专注于实现自身的功能,比如传输层负责可靠数据传输,网络层负责路由选择。
- 每层都可以独立开发、测试和优化,不影响其他层次。
2) 标准化
- 分层模型使得不同厂商的设备能够互通。只要符合相应层次的协议标准,就可以实现互操作(例如 TCP/IP 协议)。
3) 简化复杂性
- 网络通信本质上很复杂,分层将其分解为更小的、可管理的模块,方便理解和开发。
4) 提供灵活性
- 上层可以使用下层提供的服务,而不需要关心下层的具体实现(如应用层不需要了解传输层如何确保数据可靠)。
- 如果需要优化或升级某一层,只需替换该层的实现,其他层无需修改。
5) 便于排查问题
- 当出现通信问题时,可以快速定位问题所在的层次,从而更高效地解决问题。
使用协议分层好处
协议分层具有以下优点:
1) 易于开发和维护
- 开发人员可以只关注某一层的功能,而不需要理解整个网络系统的复杂性。
- 不同团队可以并行开发各层协议。
2) 易于理解和教学
- 分层模型将复杂的网络通信拆解为更小的逻辑单元,便于初学者理解。
3) 促进互联互通
- 分层设计遵循标准化协议,使得不同设备、不同厂商之间的设备可以兼容和互联。
4) 可扩展性
- 新的技术或协议可以在某一层实现,而不需要重新设计整个网络架构。例如,可以在应用层添加新协议(如 HTTP/3)而不影响底层协议。
5) 增强可靠性
- 每一层的独立性使得单层的问题不会轻易影响其他层。
- 即使某层协议失效,其他层次仍能正常工作(部分情况下)。
6) 简化技术更新
- 当需要引入新的技术时,只需调整相关层。例如,随着硬件升级,物理层技术(如光纤)可以被替换,而无需更改应用层协议。
OSI七层网络模型
OSI(Open System Interconnect),既开放式系统互联, 一般都叫OSI参考模型。是ISO组织在1985年研究的网络互连模型。该体系结构标准定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层和应用层),即OSI开放系统互连参考模型。
除了 OSI 模型外,还有 TCP/IP 四层/五层模型。
与 OSI 模型类似,TCP/IP 五层将应用层、表示层和会话层合并起来称作应用层,故分为五层。
与TCP/IP五层类似, TCP/IP 四层将数据链路层和物理层合并起来称作数据链路层或者网络接口层。
TCP/IP 五层模型
我们主要通过 TCP/IP 五层模型来进行讲解~~~
自底往上看,依次是 物理层、数据链路层、网络层、传输层和应用层,每一层都各司其职,发挥着不同的作用
应用层:
作用:主要是面向用户,提供网络服务的接口,负责处理特定的应用协议;定义应用程序如何发送和接受数据,拿到数据后如何处理以及使用。
常见协议:HTTP/HTTPS:用于网页浏览;FTP:文件传输协议;SMTP:邮件传输协议;DNS:域名解析协议。
传输层:
作用:负责端到端的通信,确保数据从发送端正确地传输到接收端;只关心两个设备之间的通信,不考虑其中间过程,只考虑起点和终点。
常见协议:TCP:传输控制协议;UDP:用户数据报协议。
网络层:
作用:主要负责在不同的网络之间传递数据包,找到源地址到目标地址的最佳路由;实现主机到主机的通信(逻辑寻址);两个设备如何进行通信,考虑中间传递数据的过程。
常见协议:IP:负责逻辑地址分配和路由选择;ICMP:用于诊断网络连接;ARP:将IP地址转换为物理地址。
数据链路层:
作用:负责在同一网络中传递数据帧,确保数据在两台设备之间可靠传输,这两台设备通常是相邻设备(比如你和你同桌传纸条);解决数据帧的传输错误检测与纠正。
常见协议:以太网协议;PPP:点对点协议。
物理层:
作用:物理层则接近硬件方面的处理了,主要负责实际的比特流(0 和 1)在传输介质上的传输;解决设备间的电气信号转换问题;约定某些硬件设施符合的要求,比如网线、WiFi、光猫、光纤之类的。
主要内容:定义硬件接口(插口、网线、信号电平);决定传输速率、传输方式(全双工、半双工)。
五层的分工与协作
在数据传输过程中,每一层都有自己的角色,层与层之间相互协作:
- 应用层将用户数据封装为应用协议数据。
- 传输层将数据分片,添加端口号,确保数据完整传输。
- 网络层决定路由和目标 IP 地址,传递数据包。
- 数据链路层通过 MAC 地址找到目标设备,传输数据帧。
- 物理层通过信号将比特流发送到目标设备。
通常也会将数据链路层和物理层合并,这两层都是个硬件有着直接或间接的联系,故也称之 ——TCP/IP 四层网络模型~~~
在日常开发中,主要涉及的还是应用层,通过调用传输层的接口编写网络相关的代码;这些接口都是操作系统内核实现好的。
在面试中,可能会考到三个设备所工作的层级:
主机:工作过程从 物理层 到 应用层。
路由器:从 物理层 到 网络层:组件局域网,进行网络数据包的转发。
交换机:从 物理层 到 数据链路层:扩展路由器的接口,不需要考虑组网的问题。
不过在现代社会中,路由器或者交换机的功能远远不止这些,交换机可能也有路由器的功能,路由器也可能在应用层活跃~~~
网络数据通信的基本流程
1. 数据生成(应用层)
这里我们以发送 QQ 聊天消息为例:
当我们发送消息:hello 时,应用程序会获取到该消息内容,随后构造一个应用层数据包,这个数据包的数据是遵守应用层协议的,应用层协议通常由开发人员编写。
应用层数据包通常是 "结构化数据";在发送数据时,将 结构化的数据 转化为 字符串/二进制 bit 流,这个过程称之为:序列化;在接收数据时,将 字符串/二进制 bit 流 转化为 结构化的数据,这个过程称之为:反序列化。
数据在网络中的传播本质就是 0101这样的二进制数据(网线:发送电信号,使用高低电平模拟01;光纤:发送光信号,使用高低频光模拟01;WiFi:发送电磁波:使用高低频电磁波模拟01)。
假设是这样的格式:发送者QQ号,接收者QQ号,发送时间,消息正文
2. 数据分段和端到端通信(传输层)
应用层的数据被传输层协议(如 TCP 或 UDP)进一步分段处理。
应用程序通过调用传输层的接口,将应用层数据包传输给传输层;传输层拿到数据后,将构造出传输层数据段。
同样的,传输层遵守传输层协议构造出传输层数据段;这里我们以 TCP 协议为例。
TCP数据段由 TCP报头(header) 和 TCP载荷(payload) 构成;TCP报头有着十分重要的属性,确保数据可靠传输的属性;TCP载荷则是应用层数据。
TCP数据段在这时候会加上五元组中的 源端口 和 目标端口,存在TCP报头里。
TCP报头里通常会包含应用层所使用的协议,方便后续接受解析。
3. 数据打包与寻址(网络层)
传输层的数据段被网络层处理,称为数据包(Packet)
传输层通过调用网络层的接口,将传输层数据段传输给网络层;网络层拿到数据后,将遵守网络层协议构造出网络层数据包。
网络层中最主要使用的协议就是 IP 协议,根据 IP 协议构造出网络层数据包。
与TCP数据包类似,IP数据包同样包含 IP报头 和 IP载荷;IP报头也包含着IP协议许多重要的属性,其中就包含五元组中的 源IP 和 目标IP。
IP 报头里通常会包含传输层所使用的协议,以方便后续的接受解析。
4. 数据帧封装与链路传输(数据链路层)
网络层的数据包在数据链路层被进一步封装为数据帧(Frame)。
网络层继续调用数据链路层的接口,将网络数据包传输给数据链路层;数据链路层拿到数据包后将遵守数据链路层协议构造出数据链路层帧。
数据链路层最主要的协议是 "以太网",根据 以太网 构造出 数据链路层帧
数据帧通常包含 帧头、载荷 和 帧尾;使用 MAC 地址标识发送方和接收方的物理地址;添加帧头和帧尾,支持错误检测(如 CRC 校验)。
数据帧里通常会包含网络层所使用的协议,以方便后续的接受解析。
5. 数据信号的物理传输(物理层)
数据帧被物理层转换为比特流(0 和 1)并通过物理介质(如网线、光纤、无线电波)发送
以太网将数据帧发送给硬件设备(网卡),随后将二进制数据转换为电信号、光信号或无线信号
6. 数据接收与解封装
接收方的流程与发送方相反:
物理层接收到信号,将其转换为比特流(01),传递给数据链路层。
数据链路层根据帧的 MAC 地址确认目标是否是本设备,验证帧是否有错误(CRC 校验),然后去除帧头帧尾。
网络层根据数据链路层的帧头知道通过 IP协议 解析数据包,查看目标 IP 地址是否匹配,如果匹配则继续处理,同样去除IP报头。
传输层根据网络层的报头知道通过 TCP协议 解析数据包,并根据端口号找到目标应用程序,重新组装数据段。如果是 TCP,会重新排序并检查数据完整性。
应用层将数据传递给目标应用程序;应用程序再按照应用层协议解析出数据。
我们发现,在整个通信的过程,涉及到许多 “基本数据单位”。
TCP通常使用数据段(segment),UDP使用数据报(Datagram),IP使用数据包(packet),数据链路层使用数据帧(frame)。
数据的封装分用
交换机在收到数据后,先后在物理层解析、数据链路层解析,就没它的事了,涉及到二层转发。交换机工作在数据链路层。
路由器在收到数据后,在物理层解析、数据链路层解析、网络层解析,就没它的事了,涉及到三层转发。 路由器工作在网络层。
毕竟不知后事如何,且听下回分解
❤️❤️❤️❤️❤️❤️❤️