1. 什么是计算机网络
计算机网络指将地理位置不同的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
1.1 计算机网络分类
根据不同的方式,计算机网络可以分类如下:
网络节点
- 局域网:局域网是一种在小区域使用的网络,由多台计算机组成的网络。覆盖范围通常局限于10千米范围之内,属于一个单位或部门的小范围网络。
- 城域网:作用范围在局域网与广域网之间的网络。其覆盖范围通常可以延伸到整个城市,借助通信光纤将多个局域网联通公用城市网络形成大型网络,使得不仅局域网的资源可以共享,局域网之间的资源也可以共享。
- 广域网:广域网是一种远程网络,涉及长距离通信,覆盖范围可以是一个国家或者多个国家,甚至整个世界。由于起范围可以涉及几千千米,所以信息衰减严重,这种网络一般要租用专线,通过接口信息处理协议和线路连接起来,构成网状结构,解决寻径问题。
交换方式
- 线路交换: 线路交换是相对于分组交换的一个概念。电路交换要求在通信前首先建立连接通道,这个连接通道用于双方通信,并且一直维持到双方通信结束。整个通信过程始终占用通道、带宽、码字等资源。 优点:数据传输可靠、有序; 缺点:带宽固定,沿着一条链路通信,网络资源利用低,初始化连接建立慢;
- 报文交换: 报文交换是分组交换的前身,它的原理是:存储接收到的报文,判断其目标地址以选择路由,最后,在下一路由空闲时,将数据转发给下一路由。 优点:高效、灵活、迅速、可靠; 缺点:延时时间长且不定,通信不可靠,不适合计算机网络;
- 分组交换: 分组交换是将资料组合成适当大小的区块,称为封包,再通过网络来传输。这个传送封包的网络是共享的,每个单位都可以独立把封包再传送出去,而且配置自己需要的资源。 优点:多路复用,网络利用率高, 缺点:延迟大,实时性差,设备功能复杂
拓扑结构
计算机网络拓扑(Computer Network Topology)是指由计算机组成的网络,其中设备的分布情况以及连接状态,把它们画在图上就成了拓朴图,常见的拓扑结构如下:
计算机网络拓扑
- 总线型:
总线两端需要安装终端器或者接地。不然电信号传递到总线两端,由于介质不同,电信号反方向反弹就会造 成网络不稳定。
- 优点:成本低,易于扩展;
- 缺点:可靠性不高,维护困难,传输效率低;
- 星型:
- 优点:易于扩展;
- 缺点:线路利用率低; 星型拓扑最常见的应用场景就是交换机
- 树型:
- 优点:易于扩展;方便从某一个分支节点隔离故障;
- 缺点:节点对于根的依赖太大,若根发生故障,则全网不能工作;类似于星型拓扑结构
- 环形网络:
- 优点:成本低;
- 缺点:维护困难,如果环状网络上设备较多,会造成延迟;
- 全网状和部分网状:
- 优点:可靠性高,易于扩充,组网灵活;由于存在冗余线,其中一条网络断开,还有备用网络来实现通信;
- 缺点:成本高,结构复杂,维护困难
注意:生活中的计算机连接方式是将上面两种或多种共同使用,这样的方式称混合式拓扑结构。
1.2 计算机网络主要指标
速率
速率是指计算机网络中的主机在数字信道上,单位时间内从一端传送到另一端的数据量,即数据传输率,也称数据率或比特率。比特(bit)是数据量的最小单位,s(秒)是时间单位。速率的单位是bit/s,类似的有kb/s(k=103)、Mb/s(M=106)、Gb/s(G=109)、Tb/s(T=1012); 另外,字节(Byte)也是用于计量存储容量的一种计量单位,1个字节等于8个比特,即:1Byte=8bit 1B=8b 1B/s=8b/s(或1Bps=8bps)
带宽
带宽是计算机网络中的主机在数字信道上,单位时间内从一端传送到另一端的最大数据量,即最大速率。 在实际上网应用中,我们接入宽带网络时,速率却相差甚远,这主要是因为ISP提供的线路带宽使用的单位是比特,而一般下载软件显示的是字节(1字节=8比特),所以要通过换算,才能得实际值。 :::tips 我们以1M宽带为例,按照换算公式换算一下:1Mb/s=1000Kb/s=1000/8KB/s=125KB/s。而且,网络数据传输还要受到温度和传输环境的影响,导致电信号减弱,所以真实情况下,1M宽带的真实网速度比125KB/s还要小些。 :::
吞吐量
单位时间内通过某个网络(或信道、接口)的实际数据量。其绝对上限值等于带宽。
时延
数据(一个报文或分组、甚至比特)从网络(或链路)的一段传送到另一端的时间,也称延迟。
- 发送时延:主机或路由器发送数据帧所需的时间,也就是从发送数据帧的第一个比特算起,到该帧的最后一个比特发送完毕所需的时间。也成传输时延。
发送时延 = 数据帧长度(b) / 信道带宽(b/s)
- 传播时延:电磁波在信道中传输一定距离所需划分的时间。
传播时间 = 信道长度(m) / 电池波传输速率(m/s) - 处理时延:主机或路由器处理收到的分组所花费的时间。
- 排队时延:分组在输入队列中等待处理的时间加上其在输出队列中等待转发的时间。
综上:总时延 = 发送时延 + 传播时延 + 处理时延 + 排队时延。
注:对于高速网络链路,提高的是发送速率而不是传播速率。
时延带宽积
往返时间RTT
从发送方发送数据开始,到发送发收到接收方的确认为止,所花费的时间。
利用率
某信道有百分之几是被利用的(有数据通过)。而信道或网络利用率过高会产生非常大的时延。
当前时延=空闲时时延/(1-利用率)
1.3 计算机网络中数据换算率
比特:计算机网络中数据量的单位,也是信息论中信息量的单位,一个比特就是二进制数字中的1或0.
常用数据量单位:
8 bit=1byte KB=210B MB=KKB=210210B=220B GB=kMB=210220B=230B TB=kGB=210230 B=240B
速率:连接在计算机网络上的主机在数字信道上传输数据(比特)的速率,也成比特率或者数据率。
常用数据率单位:
bit/s (b/s bps) kb/s=103b/s Mb/s=kkb/s=103103b/s=106b/s Gb/s=kMb/s=103106b/s=109b/s Tb/s=kGb/s=103109b/s=1012b/s
案例1:
有一个待发送的数据块,大小为100MB,网卡的发送速率为100Mbps,则网卡发送该数据块需要多久?
通过上面的换算率可知:
案例2:
数据块长度为100MB,信道带宽为1Mb/s,传送距离为1000km。计算发送时延与传播时延。
已知:数据块长度:1MB=1220B , 1B=8bit 信道带宽=就是最大比特率(传输率)1Mb=106b/s 发送时延=数据块长度/比特率 假定电池波传输速率 2108m/s 可知: 所以:当前发送时延占主导
案例3:
数据块长度为1B,信道带宽为1Mb/s,传送距离为1000km。计算发送时延与传播时延。
已知:数据块长度:1MB=1220B , 1B=8bit 信道带宽=就是最大比特率(传输率)1Mb=106b/s 发送时延=数据块长度/比特率 假定电池波传输速率2108m/s 可知: 所以:当前传输时延占主导
2. 网络参考模型
2.1 OSI七层模型
开放系统互联参考模型(Open System Interconnect),简称OSI参考模型。其目的是为各种计算机互连提供一个共同的基础和标准框架,并为保持相关标准的一致性和兼容性提供共同的参考。OSI参考模型的分层示意图如下:
总结OSI参考模型的特点:
- 只是定义一种抽象结构,而并非具体实现的描述;
- 最上层应用层最接近用户,最下层物理层最接近实际的数据传递;
- 上三层用于为用户提供服务,下四层用于为实际数据传递提供服务;
2.2 TCP/IP四层模型
OSI七层参考模型是理论上的网络通信模型,而我们在实际的互联网络中使用的是TCP/IP四层模型,它们的对应关系如下:
网络接口层:
网络接口层与OSI参考模型中的物理层和数据链路层相对应;它负责监视数据在主机和网络之间的交换。事实上,TCP/IP本身并未定义该层的协议,而由参加互联的各个网络使用自己的的物理层和数据链路层协议,然后与TCP/IP的网络接入层进行连接。地址解析协议(ARP)工作在此层,即OSI参考模型的数据链路层。
网际互联层:
- 网际互联层对应OSI参考模型的网络层;
- 主要解决主机到主机的通信问题,它所包含的协议涉及数据包在整个网络上的逻辑传输。
- 该层有三个重要的协议:网际协议(IP)、互联网组管协议(IGMP)和互联网控制报文协议(ICMP)。
传输层:
- 传输层对应OSI参考模型的传输层;
- 为应用层实体提供端对端的通信功能更,保证了数据包的顺序传送及数据的完整性。
- 该层定义了两个主要的协议:传输控制协议(TCP)和用户数据包协议(UDP)。
应用层: 应用层对应OSI参考模型的应用层;为用户提供所需要的各种服务,例如:FTP、Telent、DNS、SMTP等。
2.3 总结:OSI参考模型与TCP/IP模型的异同
相同点:
1.OSI参考模型和TCP/IP参考模型都采用了层次结构概念;
2.都能够提供面向连接和无连接的的两种通信服务机制;
不同点:
1.可靠性要求不同,后者更高;
2.OSI模型是在协议开发之前设计的,具有通用性;TCP/IP协议是先有协议后建立的模型,不适用于非TCP/IP网络;
3.数据的封装过程
网络参考模型清晰的描述了网络中数据的传输过程,其中的每层都负责与其他机器的对等层进行通信,这也涉及到了数据的封装问题。现在,我们可以通过一个实例来具体分析数据封装的过程:
FTP服务器向员工主机发送数据分为两个阶段:FTP服务器发送数据、员工主机接收数据
FTP服务器发送数据:
1.应用层将数据(目标文件)传递给传输层,传输层为其添加TCP头部和端口信息,此时数据单元被称为段;
2.传输层将数据段传递给网络层,网络层再次封装添加IP头部,此时数据单元被称为包;
3.数据链路层接收网络层包,继续封装为其添加Mac头部和尾部,此时数据单元被称为帧;
4.物理层将接收到的数据转化为比特流,在网络中传送;
员工主机接收数据:
员工主机接收数据的过程与FTP服务器发送数据过程相反,刚好是逐层的解封装操作,最终在其应用层,用户可以得到目标文件数据;
4. 三次握手与四次挥手
在TCP/IP协议中,TCP协议用于提供可靠的连接服务,这其中涉及到了三次握手与四次挥手过程,现在对它们进行具体的分析。
4.1.理解三次握手
三次握手是为了建立一个可靠的连接,此过程可参考下图
第一次握手:
建立连接时,客户端发送SYN包(syn=x)到服务器,并进入SYN_SENT状态,等待服务器确认; SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:
服务器收到SYN包,必须确认客户的SYN(ACK=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态; ACK:确认字符(Acknowledgement),在数据通信中,接收站发给发送站的一种传输类控制字符。表示发来的数据已确认接收无误。
第三次握手:
客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态。
完成三次握手后,客户端与服务器开始传送数据。
4.2.四次挥手
四次挥手用于终止TCP连接,断开一个TCP连接需要客户端和服务端总共发送4个包,以确认连接的断开。
此过程可参考下图:
:::tips
“由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。” ——摘自百度
:::
第一次挥手:
客户端发送一个FIN,用来关闭客户到服务器的数据传送,并进入FIN_WAIT_1状态。
第二次挥手:
服务器收到客服端的FIN,发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。 服务器段进入CLOSE_WAIT状态。
第三次挥手:
服务器发送一个FIN,用来关闭服务器到客户端的数据传递,服务器端进入LAST_ACK状态。
第四次挥手:
客户端收到服务器的FIN后,进入进入TIME_WAIT状态; 客户端发送一个ACK给服务器,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
特别注意:上述是客户端主动关闭,服务器端被动关闭的情况,实际中还可能出现双方同时发起关闭的情况,具体的流程可参考下图:
4.3.三次握手、四次挥手的原因
为什么建立连接协议是三次握手,而关闭连接却是四次挥手呢?
对于建立连接的过程,服务器端在接收到客户端SYN请求报文后,可以把ACK和SYN(ACK起应答用,而SYN起同步作用)在一个报文里来发送。
而对于关闭连接的过程,当服务器端收到客户端的FIN报文时,它仅仅表示客户端不再发送数据了,但未必服务器端所有的数据全部发送给客户端了。所以,此时的服务器端可以立即关闭,也可以继续发送一些数据给客户端之后,再发送FIN报文给客户端,来表示同意关闭连接。因此断开连接,服务器端的ACK报文和FIN报文多数情况下都是分开发送的。
5. TCP与UDP协议
传输层有两个重要的传输协议,它们分别是传输控制协议TCP,用户数据包协议UDP
5.1 TCP协议
TCP (Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议;
TCP包头的结构如下图:
TCP协议的特点:
- TCP是面向连接的可靠的传输控制协议,建立连接需要三次握手,释放连接需要进行四次挥手。保证连接的建立,数据的同步传输。
- 面向字节流,会把从上层传输下来的数据当作是无结构的字节流。
- 只能一对一的通信。
TCP在IP协议的基础之上添加了序号机制,确认机制,超时重传机制,数据校验,从而保证传输的可靠性,同时保证不出现丢失或者是乱序。
5.2 UDP协议
UDP是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。UDP包头的结构如下图:
UDP协议的特点:UDP是面向无连接的数据包服务,一方向另一方发送数据不需要建立连接。相当于发短信,别人是否收到,短信信息是否丢失都不能知道。
- 面向报文,从上层接收的数据如果报文不大于传输限制,则直接加上首部传输,如果报文过大,则进行IP分片后,再分别加入首部进行传输。
- UDP协议可以一对一通信,也可以一对多通信。
- UDP仅仅是尽最大的努力进行交付,只是做比较初级的检查,比如端头检查,差错检测,往往在传输过程中会出现分组丢失、乱序、重复传输等问题。