前言:计算机网络是指通过通信设备和通信线路将多台计算机互相连接起来,实现数据交换、资源共享和信息传递的系统。它可以分为局域网、城域网、广域网等不同的范围,也可以按照使用的协议划分为TCP/IP网络、OSI参考模型等不同类型。 计算机网络基础概念计算机网络是指将多台计算机互相连接起来,实现信息传输和资源共享的系统。以下是计算机网络的基础概念:
交换机和集线器在作用上确实相似,都是用来连接计算机网络中的设备。但是它们的工作方式和功能还是有所不同。集线器将多个设备的数据流汇聚到一起,所有设备共享同一个带宽。当一个设备发送数据时,所有连接在集线器上的其他设备都会收到这个消息,安全性较差,并且由于多个设备共享同一个带宽,可能会出现网络拥堵等问题。而交换机则可以通过记忆每个端口连接的MAC地址并建立转发表,根据目标MAC地址决定将数据包转发到哪个端口。这样可以避免广播风暴(即一个节点向其它节点发送大量无意义信息)和冲突等问题。此外,在交换机中各个端口之间是相互独立的,数据包可以同时进行双向传输,因此比集线器具有更高的传输速度和稳定性。总体来说,交换机更加智能化、灵活化和高效化,在现代计算机网络中得到了广泛应用。
多播:一对多通信方式,数据只发送给指定组内的设备。 任播:一种特殊的寻址机制,在互联网中被用于路由协议。 计算机网络应用层计算机网络应用层是网络协议栈中的最高层,为用户提供各种网络服务。以下是一些常见的应用层协议:
常见的应用程序体系结构有以下几种:
11.客户-服务体系:它是一种面向网络应用的体系结构。把系统中的不同端系统区分为客户和服务器两类,客户向服务器发出服务请求,由服务器完成所请求的服务,并把处理结果回送给客户。在客户-服务器体系结构中,有一个总是打开的主机称为 服务器(Server),它提供来自于 客户(client) 的服务。我们最常见的服务器就是 Web 服务器,Web 服务器服务于来自 浏览器 的请求。 12.P2P 体系:P2P (Peer-to-Peer) 体系结构是一种分布式计算模型,它不同于传统的客户端-服务器架构,在这种模型中每个节点都可以充当客户端和服务器角色,彼此之间互相通信和协作。P2P网络没有集中的控制机构,所有节点平等地参与到网络中,从而形成一个去中心化的网络。 P2P网络通常可以分为以下几类:
P2P网络具有以下优点:
13.进程:进程其实就是运行在端系统的程序,应用程序进行通信的最基本单位就是进程。 14.分布式应用程序:多个端系统之间相互交换数据的端系统被称为分布式应用程序。 15.套接字接口:指的就是 socket 接口,这个接口规定了端系统之间通过因特网进行数据交换的方式。 客户端:在客户-服务器架构中扮演请求方的角色,通常是 PC,智能手机等端系统。 服务器:在客户-服务器架构中扮演服务方的角色,通常是大型服务器集群扮演服务器的角色。 IP 地址:IP 地址就是网际协议地址,在互联网中唯一标识主机的一种地址。每一台入网的设备都会有一个 IP 地址,这个 IP 又分为内网 IP 和公网 IP。 端口号:在同一台主机内,端口号用于标识不同应用程序进程。 URI:它的全称是(Uniform Resource Identifier),中文名称是统一资源标识符,使用它就能够唯一地标记互联网上资源。 URL:它的全称是(Uniform Resource Locator),中文名称是统一资源定位符,它实际上是 URI 的一个子集。 HTML:HTML 称为超文本标记语言,是一种标识性的语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的 Internet 资源连接为一个逻辑整体。HTML 文本是由 HTML 命令组成的描述性文本,HTML 命令可以说明文字,图形、动画、声音、表格、链接等。 Web 页面:Web 页面也叫做 Web Page,它是由对象组成,一个对象(object) 简单来说就是一个文件,这个文件可以是 HTML 文件、一个图片、一段 Java 应用程序等,它们都可以通过 URI 来找到。一个 Web 页面包含了很多对象,Web 页面可以说是对象的集合体。 Web 服务器:Web 服务器的正式名称叫做 Web Server,Web 服务器可以向浏览器等 Web 客户端提供文档,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。目前最主流的三个 Web 服务器是 Apache、 Nginx 、IIS。 CDN:CDN 的全称是Content Delivery Network,即内容分发网络,它应用了 HTTP 协议里的缓存和代理技术,代替源站响应客户端的请求。CDN 是构建在现有网络基础之上的网络,它依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。 专用 CDN:由内容提供商特有 CDN 。 第三方 CDN:它代表多个内容提供商提供服务。 WAF:WAF 是一种 应用程序防护系统,它是一种通过执行一系列针对 HTTP / HTTPS的安全策略来专门为 Web 应用提供保护的一款产品,它是应用层面的防火墙,专门检测 HTTP 流量,是防护 Web 应用的安全技术。 WebService :WebService 是一种 Web 应用程序,WebService 是一种跨编程语言和跨操作系统平台的远程调用技术。 HTTP: TCP/IP 协议簇的一种,它是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。 Session:Session 其实就是客户端会话的缓存,主要是为了弥补 HTTP 无状态的特性而设计的。服务器可以利用 Session 存储客户端在同一个会话期间的一些操作记录。当客户端请求服务端时,服务端会为这次请求开辟一块内存空间,这个对象便是 Session 对象,存储结构为 ConcurrentHashMap。 Cookie:HTTP 协议中的 Cookie 包括 Web Cookie 和浏览器 Cookie,它是服务器发送到 Web 浏览器的一小块数据。服务器发送到浏览器的 Cookie,浏览器会进行存储,并与下一个请求一起发送到服务器。通常,它用于判断两个请求是否来自于同一个浏览器,例如用户保持登录状态。 SMTP 协议 :提供电子邮件服务的协议叫做 SMTP 协议, SMTP 在传输层也使用了 TCP 协议。SMTP 协议主要用于系统之间的邮件信息传递,并提供有关来信的通知。 POP3:邮件访问协议,协议较为简单,功能有限。 DNS 协议:由于 IP 地址是计算机能够识别的地址,而我们人类不方便记忆这种地址,所以为了方便人类的记忆,使用 DNS 协议,来把我们容易记忆的网络地址映射称为主机能够识别的 IP 地址。 根 DNS 服务器:最顶级的 DNS 服务器,全世界有 400 多台根域名服务器,由 13 个不同的组织管理,根域名服务器提供 TLD 服务器的 IP 地址。 顶级域 DNS 服务器:这个我们比较熟悉,像是常见的顶级域(如 com、org、net、edu 和 gov)和所有的国家顶级域(uk、fr、ca 和 jp),TLD 服务器提供了权威 DNS 服务器的 IP 地址。 权威 DNS 服务器:这个服务器就是因特网上具有公共可访问主机的 DNS 记录的服务器。 本地 DNS 服务器:一般来说,每个 ISP 都有一台本地 DNS 服务器,本地 DNS 服务器会临近主机端。 TELNET 协议:远程登陆协议,它允许用户(Telnet 客户端)通过一个协商过程来与一个远程设备进行通信,它为用户提供了在本地计算机上完成远程主机工作的能力。 SSH 协议:SSH 是一种建立在应用层上的安全加密协议。因为 TELNET 有一个非常明显的缺点,那就是在主机和远程主机的发送数据包的过程中是明文传输,未经任何安全加密,这样的后果是容易被互联网上不法分子嗅探到数据包来搞一些坏事,为了数据的安全性,我们一般使用 SSH 进行远程登录。 FTP 协议:FTP (File Transfer Protocol) 协议是一种用于文件传输的标准协议,它通过 TCP/IP 协议栈进行数据传输。FTP 协议包括两个主要组件:客户端和服务器。 FTP 客户端通常由用户使用的文件管理器或 FTP 客户端软件实现,它可以连接到一个远程 FTP 服务器,并且允许用户在本地计算机和远程服务器之间上传、下载、删除等操作。 FTP 服务器则负责提供文件存储和传输服务,它需要安装在远程计算机上,并且配置相应的用户账号和权限控制来保证安全性。 FTP 协议工作流程如下:
FTP 协议具有以下优点:
但是 FTP 协议也存在一些缺点,例如安全性较差、不支持加密传输等问题。因此在实际应用中需要结合具体需求选择合适的文件传输协议。 MIME类型,它表示的是互联网的资源类型,一般类型有 超文本标记语言文本 .html text/html、xml文档 .xml text/xml、普通文本 .txt text/plain、PNG图像 .png image/png、GIF图形 .gif image/gif、JPEG图形 .jpeg,.jpg image/jpeg、AVI 文件 .avi video/x-msvideo 等。 多路分解:在接收端,运输层会检查源端口号和目的端口号等字段,然后标识出接收的套接字,从而将运输层报文段的数据交付到正确套接字的过程被称为多路分解。 多路复用:在发送方,从不同的套接字中收集数据块,然后为数据块封装上首部信息从而生成报文段,然后将报文段传递给网络层的过程被称为多路复用。 周知端口号:在主机的应用程序中,从 0 - 1023 的端口号是受限制的,被称为周知端口号,这些端口号一般不能占用。 计算机网络传输层计算机网络中,传输层是 OSI 模型和 TCP/IP 模型中的一层,主要负责应用程序之间的数据传输。 在 OSI 模型中,传输层的作用是为运行在不同主机上的进程提供端到端的可靠数据传输服务。其中最重要的两个协议是 TCP (Transmission Control Protocol) 和 UDP (User Datagram Protocol)。TCP 协议提供面向连接、可靠性高、流控制和拥塞控制等服务,适合于需要保证数据完整性和顺序性的应用场景。UDP 协议则是无连接、不可靠但速度较快,并且可以支持广播和多播等特殊功能,适合于实时性要求较高但允许少量数据丢失或者乱序的应用场景。在 TCP/IP 模型中,传输层主要负责将上层协议(如 HTTP、FTP 等)产生的数据进行分段并添加首部信息(如源地址、目标地址、序列号等),然后通过 IP 层进行路由转发。接收方通过接收到的分段进行重新组装,并交给上层协议处理。此外,还有一些其他常见协议也工作在传输层,例如 SCTP (Stream Control Transmission Protocol)、DCCP (Datagram Congestion Control Protocol) 等。这些协议都是为了满足不同的应用场景和需求而设计的。 可靠数据传输是指在网络中传输数据时,保证数据的完整性、正确性和顺序性。为了实现可靠数据传输,需要考虑以下几个方面: 1. 容忍丢失的应用:对于一些允许少量数据丢失或乱序的应用(如视频流、音频流等),可以采用非可靠传输方式。 2. 非持续连接:TCP 协议采用非持续连接方式,即每次发送数据时都要进行连接建立和释放操作。 3. 持续连接:UDP 协议则采用持续连接方式,即不需要进行连接建立和释放操作,适合于需要频繁发送小量数据的场景。 4. 传输控制协议(TCP):TCP 是一种面向连接的、可靠的传输协议,它通过三次握手建立连接,并使用冗余 ACK 快速重传和选择确认等技术来保证数据的正确性、完整性和顺序性。 5. 用户数据包协议(UDP):UDP 是一种无连接、不可靠但速度较快的传输协议,适合于实时性要求较高但允许少量数据丢失或者乱序的应用场景。 6. 三次握手:TCP 连接建立过程中采用三次握手机制来确保双方都能够正常通信。 7. 最大报文段长度(MSS):TCP 在发送数据时需要将大的数据分成若干个小的报文段,而 MSS 就是指每个报文段中的最大数据量。 8. 最大传输单元(MTU):MTU 是指在网络中可以传输的最大数据包大小,一般为 1500 字节左右。 9. 冗余 ACK 快速重传:当接收方连续收到相同的 ACK 时,说明前面一个报文段可能丢失了,此时就会触发冗余 ACK 快速重传机制。 10. 选择确认:TCP 中使用选择确认技术来减少重复传输和提高吞吐量,即只对接收方还未收到的数据进行确认。 11. 拥塞控制:TCP 采用拥塞控制算法来避免网络拥塞情况下出现过多的丢包、延迟等问题。 12. 四次挥手:TCP 连接释放过程中采用四次挥手机制来确保连接正常关闭。 13. 发送缓存:发送方在发送数据时会先将数据缓存在发送缓存中,等待网络空闲后再进行发送操作。 14. 接收缓存:接收方在接收数据时会先将数据缓存在接收缓存中,等待所有相关的数据都到齐后再进行处理操作。 15.SYN:Synchronize Sequence Numbers,是 TCP/IP 建立连接时发送的数据包,这个数据包就是一个同步序列号,标识客户端发送的是哪个请求。 16.ACK:Acknowledge character,ACK 是对请求进行响应的数据包。 17.FIN:Finish ,带有 FIN 标志位的数据包表示客户端希望断开连接。 18.三次握手中的状态变化,在 TCP 的三次握手过程中,客户端和服务器之间会进行状态的变化。具体的状态变化如下:
这样就完成了三次握手过程。在此之后,客户端和服务器之间就可以进行数据传输了 19.四次挥手中的状态变化,在 TCP 的四次挥手过程中,客户端和服务器之间会进行状态的变化。具体的状态变化如下:
这样就完成了四次挥手过程。可以看出,相比于三次握手,在四次挥手中多了一步“TIME-WAIT”阶段来确保所有数据都被成功传输完毕并避免重复连接的发生。 20.滑动窗口:英文 sliding window,它是一种流量控制技术,在互联网早期,通信双方通常不会考虑网络情况,一般都会直接进行通信,同时发送数据,很容易导致阻塞,谁也发不了数据,针对这种现象,提出了滑动窗口,通过滑动窗口,接收方会告诉发送方自己能够接收多少数据。 21.窗口长度:窗口长度指的是已发送但还未确认的分组范围,如下图中的发送窗口结构就是窗口长度。 22.累积确认:TCP 规定在一段时间内发送方只要收到最后一条接收方返回的确认 ACK ,而不用重传报文段。 23.冗余ACK:由于 TCP 采用的是累计确认机制,即当接收端收到比期望序号大的报文段时,便会重复发送最近一次确认的报文段的确认信号,我们称之为冗余 ACK。 24.选择确认:可选择性的确认失序报文段,而不是重传最后一个报文段。 计算机网络网络层网络层的重要概念 网络层介于传输层和数据链路层之间,其主要作用是实现两个网络系统之间的数据透明传送,具体包括路由选择,拥塞控制和网际互连等。 网络层的两个层面(路由器之间传送的信息有两类) (1)转发源主机和目的主机之间所传送的数据:把源主机所发送的分组,像接力赛跑一样从一个路由器转发到另一个路由器,最后把分组传送到目的主机。 (2)传送路由信息:根据路由选择协议所使用的路由算法,彼此不断地交换路由信息分组,目的是为了在路由器中创建路由表,并由此导出为转发分组而用的转发表。这一类信息的传送是为第一类数据的传送服务的。 网际协议IP 网际协议IP是TCP/IP体系中两个最主要的协议之一,主要为IPV4,较新版本IPV6与协议IP配套使用的还有三个协议: 地址解析协议ARP 网际控制报文协议ICMP 网际组管理协议IGMP 从一般的概念来讲,将网络互连起来要使用一些中间设备。根据中间设备所在的层次,可以有一下四种不同的中间设备: (1)物理层使用的中间设备叫做转发器(repeater),比如中继器、集线器(Hub); (2)数据链路层使用的中间设备叫做网桥或桥接器(bridge); (3)网络层使用的中间设备叫做路由器(router); (4)在网络层以上使用的中间设备叫做网关(geteway)。用网关连接两个不兼容的系统需要在高层进行协议的转换。 TCP/IP的虚拟互连方式 所谓虚拟互连网络,它的意思就是互连起来的各种物理网络的异构性本来是客观存在的,但是我们利用IP协议就可以把这些性能各异的网络在网络层看起来好像是一个统一的网络。 这种使用IP协议的虚拟互连网络可简称为IP网,使用IP网通信的好处是:当IP网上的主机进行通信时,就好像在一个单个网络上通信一样,他们看不见互连的各网络的具体异构细节(如具体的编址方案、路由选择协议、等等) 互联网的源主机H1把一个IP数据报发送给目的主机H2根据分组交换分组转发概念,主机H1先要查找自己的路由表,看目的主机是否就在本网络上。如是,则不需要经过路由器而是直接交付,任务就完成了。如不是,则必须把IP数据报发送给某个路由器(图中R1)。R1在查找了自己的路由表后,知道应把数据报转发给R2进行交接交付,这样一直转发下去,最后由路由器R5知道自己是和H2连接在一个网络上,不需要再使用别的路由器转发了,于是就把数据报直接交付到目的主机H2。 这里强调的是:互连网可以由多个异构网络组成。 IP地址 IP作用于OSI参考模型中的网络层,在终端通信中作为唯一标识,便于确定数据的传递目标。 IP地址分为:IPv4 、IPv6 大众熟知且流行的IPv4是用点分四组十进制的表示方法展示的 IPv4是32位的。而IPv6的位数就比较大了,是128位的,长度是IPv4的4倍,并且其表示方式是分块的八组四个十六进制数 IP是作为终端的唯一表示,因此只有当保证每个IP都不同时,才能保证IP的唯一性。其中,IPv4地址的长度为32位,因此就有 2^32 种可能的地址,那么同理,IPv6地址的长度为128位,因此就有 2^128 种可能的地址。 这些地址就是作为数据包发送的目的地址,当然每个地址都会有它们各自的含义,例如单播 、组播 、广播等 单播可以理解为一台主机发送单一的数据包给另一台主机; 组播可以理解为一台主机发送单一的数据包给多台主机; 广播可以理解为一个节点向其它所有的节点发送数据包; IPv4种大多的数的地址都为单播 在识别IP地址时,就是先通过识别IP地址中的网络号来确认目的地址处于哪个网络区域,然后再识别主机号,来确认这个网络中特定的主机。 将IPv4地址用二进制表示,一段地址的网络号和主机号分类可以分为5类:A类 、B类 、C类 、D类 、E类, A类 :网络号共8位,首位固定为 0 ,接下来连续的7位可以自由设定;主机号为24位。 B类 :网络号共16位,前两位固定为1 0 ,接下来连续的14位可以自由设定,主机号为16位。 C类 :网络号共24位,前三位固定为1 1 0 ,接下来连续的21位可以自由设定,主机号为8位。 D类 :为组播地址,共32位,前四位固定 1 1 1 0 。 E类 :为保留地址,共32位,前四位2固定为 1 1 1 1 。 A类地址网络号共8位,其中首位固定为 0,那么还有7位可以自由设定,那么就共有 2^7个网络数。 B类地址网络号共16位,其中首位固定为 1 0,那么还有14位可以自由设定,那么就共有 2^14个网络数。 C类地址网络号共24位,其中首位固定为 1 1 0,那么还有21位可以自由设定,那么就共有 2^21个网络数。 A类地址的网络号字段占1个字节,只有7位可供使用(该字段的第一位已固定为0, 网络号为全0的IP地址有特殊的用途,它表示“本网络”; 网络号为127(即01111111)保留作为本地软件环回测试本主机的进程之间的通信之用,若主机发送一个目的地址为环回地址(即127.0.0.1)的IP数据报,则本主机的协议软件就处理数据报中的数据,而不会把数据报发送到任何网络。因此,A类地址可指派的网络号有126个。
无分类编址CIDR 在IP地址即将枯竭时,一种新的无分类编址方法问世。 (1)网络前缀:CIDR把网络号改称为网络前缀,用来指明网络,剩下的后面部分仍然是主机号,用来指明主机网络前缀n不是固定的数。CIDR使用 “斜线计法” ,即IP地址后面是网络前缀所占的位数。 (2)地址块:CIDR把网络前缀都相同的所有连续的IP地址组成为一个“CIDR地址块”,一个CIDR地址块包含的IP地址数目,取决于网络前缀的位数,我们只要知道CIDR地址块中的任何一个地址,就可以知道这个地址块的起始地址(即最小地址)和最大地址,以及地址块中的地址数。 IP数据报的格式 IP协议提供不可靠无连接的数据报传输服务,IP层提供的服务是通过IP层对数据报的封装与拆封来实现的。IP数据报的格式分为报头区和数据区两大部分,其中报头区是为了正确传输高层数据而加的各种控制信息,数据区包括高层协议需要传输的数据。 IP数据报首部的固定部分中的各字段 (1)版本:占4位,指IP协议的版本。通信双方使用的IP协议版本必须一致。日前广泛使用的 IP协议版本号为 4 (即 IPv4)。IPv6目前还处于起步阶段。 (2)报头长度:占4位,该字段的单位是32位字(1个32位字长是4字节),因此当IP报头长度为1111时,报头长度就达到最大值60字节。当IP分组的首部长度不是4字节 的整数倍时,就需要对填充域加以填充。最常用的报头长度为20位(报头长度值为0101),这时不使用任何选项。 (3)区分服务(服务类型):占8位,在一般情况下都不使用这个字段。 (4)总长度:指报头和数据之和的长度,单位是字节。总长度字段为16位,故IP数据报的最大长度为65535。 每一种数据链路层都有其自己的帧格式,其中包括帧格 式中的数据字段的最大长度,这称为最大传送单元MTU。当IP数据报封装成链路层的帧时,此数据报的总长度不能超过对应MTU的值。若数据报长度超过对 MTU的值,就将数据报进行分片处理,此时数据报首部中的“总长度“字段是指分片后的每一个分片的报头长度和数据长度之和。 (5)标识:占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并赋给标识字段。当数据报进行分片处理后,每个分片的标识值都与原数 据报的标识值相同,则在接收端具有相同标识值的分片就能最终正确的重装成为原来的数据报。 (6)标志:占3位,但目前只有两位有意义。 最低位记为MF。MF=1即表示后面”还有分片“的数据包。MF=0表示这已是若干数据包片中的最后一个。 中间位记为DF,意思是”不能分片“。只有当DF=0时才允许分片。 (7)片偏移:占13位。表示每个数据报的分片在原数据报中的相对位置。片偏移以8个字节为偏移单位,即每个分片的长度一定是8字节的整数倍。 计算机网络数据链路层和物理层计算机网络中的数据链路层和物理层是 OSI 模型中的前两个层,负责传输数据的实际物理连接和处理
计算机网络安全计算机网络安全是指在计算机网络中保护信息系统和数据的完整性、可用性和保密性,以及预防未经授权的访问、使用、修改、破坏或泄漏信息的一系列技术和管理措施。 计算机网络安全主要包括以下几个方面:
网络核心网络核心(Network Core)是指计算机网络中传输数据的主干部分,包括了各种设备和协议,如路由器、交换机、光纤等。网络核心连接了不同地点的边缘设备,使得整个网络能够快速可靠地传输数据。在计算机网络中,数据通过边缘设备(如电脑、手机等)进入到网络核心中进行传输。在传输过程中,路由器和交换机等设备将数据从一个节点转发到另一个节点。这些设备使用一系列协议来确保数据在传输过程中的正确性和可靠性,并防止数据丢失或被损坏。在实际应用中,网络核心扮演着非常重要的角色。它决定了整个计算机网络的速度、稳定性以及安全性。因此,在设计和维护计算机网络时需要注重对网络核心的优化和管理。 网络的核心是由因特网端系统和链路构成的网状网络,下面这幅图正确的表达了这一点: 那么在不同的 ISP 和本地以及家庭网络是如何交换信息的呢?信息交换主要分为两种方式 分组交换分组交换(Packet Switching)是一种在计算机网络中传输数据的方式,它将数据分成若干个固定大小的数据包(packet),每个数据包携带有关该数据包发送和接收的信息,并独立传输。这些数据包通过网络核心按照不同路径进行转发,直到最终到达目的地。 在分组交换中,每个数据包都被标记了其目标地址和源地址,并通过路由器等设备转发。当一个路由器接收到一个数据包时,它会查找目标地址并确定应该将该数据包传递给哪个下一个路由器。如果某个路由器拥塞或出现故障,则可以使用其他路径来重新发送丢失的数据包。 与电路交换相比,分组交换具有更高效、更灵活、更适用于异构网络和资源共享等优点。而互联网也是基于分组交换技术建立起来的。 虽然分组交换已经成为现代计算机网络通信的主要方式之一,但它仍存在着一些问题,如延迟、丢失和重复等。因此,在设计和实现计算机网络时需要考虑这些问题,并采取相应的措施来解决它们。 存储转发传输存储转发传输(Store and Forward Transmission)是一种数据传输方式,在该方式中,数据在发送前首先被存储,并在接收方接收到完整的数据包后才开始进行处理。具体而言,发送方将数据分成若干个固定大小的数据包,每个数据包都会在发送前被缓存起来并等待确认接收方已经正确接收了前一个数据包后再发送下一个。 当所有的数据包都被成功传输到接收方之后,接收方开始处理这些数据包。这种方式可以保证传输的可靠性,因为如果某个数据包丢失或损坏,则会重新请求发送该数据包。此外,由于采用了存储转发机制,所以即使网络中存在短暂的拥塞也不会影响整体传输速度和质量。 存储转发传输广泛应用于计算机网络中各种协议和技术中,如电子邮件、文件传输协议(FTP)、简单邮件传输协议(SMTP)等。其中最典型的就是电子邮件系统,在该系统中,邮件服务器会把用户发送的邮件先缓存起来,并根据目标地址把邮件转发到相应的目标邮箱服务器上。 虽然存储转发传输提供了一定程度上的可靠性和稳定性,但是它也会增加数据传输的延迟,因为每个数据包都需要被缓存起来并等待确认后再进行发送。 排队时延和分组丢失排队时延和分组丢失是计算机网络中两个常见的问题。 排队时延指在网络传输过程中,由于路由器等设备的缓存区已满,导致数据包需要等待一段时间才能被处理的现象。这种时延会影响到数据传输的实时性,对于一些要求实时响应的应用程序(如在线游戏、视频会议等)而言,排队时延可能会导致严重的质量问题。 分组丢失则是指在网络传输过程中,某个数据包由于各种原因没有到达目标地址,从而使得数据无法被完整地接收。分组丢失可能会导致数据损坏或者无法正常使用。例如,在文件传输过程中如果有一个数据包没有到达就意味着整个文件无法被完整地恢复。 为了解决这些问题,计算机网络设计了许多协议和技术。例如,在处理排队时延方面可以采用流量控制、拥塞控制等技术来限制网络流量并保证网络稳定运行;而在避免分组丢失方面,则可以采用错误检测和纠错码等技术来确保数据正确传输。此外,在实际应用场景中还可以结合其他优化策略,如数据压缩、负载均衡等技术来进一步提高网络性能和可靠性。 下图说明了一个简单的分组交换网络: 在上图中,分组由三位数据平板展示,平板的宽度表示着分组数据的大小。所有的分组都有相同的宽度,因此也就有相同的数据包大小。下面来一个情景模拟: 假定主机 A 和 主机 B 要向主机 E 发送分组,主机 A 和 B 首先通过100 Mbps以太网链路将其数据包发送到第一台路由器,然后路由器将这些数据包定向到15 Mbps的链路。如果在较短的时间间隔内,数据包到达路由器的速率(转换为每秒比特数)超过15 Mbps,则在数据包在链路输出缓冲区中排队之前,路由器上会发生拥塞,然后再传输到链路上。例如,如果主机 A 和主机 B 背靠背同时发了5包数据,那么这些数据包中的大多数将花费一些时间在队列中等待。实际上,这种情况与许多普通情况完全相似,例如,当我们排队等候银行出纳员或在收费站前等候时。 转发表和路由器选择协议转发表和路由器选择协议是计算机网络中两个重要的概念。 转发表(Forwarding Table)是指存储在路由器中的一张表格,用于将收到的数据包转发到正确的目标地址。该表格记录了目标地址与对应下一跳地址之间的映射关系,当一个数据包到达路由器时,路由器会根据目标地址在转发表中查找对应的下一跳地址,并将数据包发送给该地址。通过使用转发表,路由器能够快速而准确地完成数据包转发工作,提高网络性能和可靠性。 路由器选择协议(Routing Protocol)则是一种协议,用于实现不同路由器之间的通信和信息交换,以便共同构建一个完整的网络拓扑结构。常见的路由器选择协议有RIP、OSPF、BGP等。这些协议采用不同的算法和策略来确定最佳路径,并更新各自所维护的路由表。当网络出现故障或者新设备加入时,这些协议会及时调整路由路径以保证数据能够正常传输。 总之,转发表和路由器选择协议都是计算机网络中非常重要的概念。通过合理设计和使用这些技术手段,可以有效提高网络的性能、可靠性和稳定性。 电路交换在计算机网络中,另一种通过网络链路和路由进行数据传输的另外一种方式就是 电路交换(circuit switching)。电路交换在资源预留上与分组交换不同,什么意思呢?就是分组交换不会预留每次端系统之间交互分组的缓存和链路传输速率,所以每次都会进行排队传输;而电路交换会预留这些信息。一个简单的例子帮助你理解:这就好比有两家餐馆,餐馆 A 需要预定而餐馆 B 不需要预定,对于可以预定的餐馆 A,我们必须先提前与其进行联系,但是当我们到达目的地时,我们能够立刻入座并选菜。而对于不需要预定的那家餐馆来说,你可能不需要提前联系,但是你必须承受到达目的地后需要排队的风险。 下面显示了一个电路交换网络: 在这个网络中,4条链路用于4台电路交换机。这些链路中的每一条都有4条电路,因此每条链路能支持4条并行的链接。每台主机都与一台交换机直接相连,当两台主机需要通信时,该网络在两台主机之间创建一条专用的 端到端的链接(end-to-end connection)。 分组交换和电路交换的对比 分组交换的支持者经常说分组交换不适合实时服务,因为它的端到端时延时不可预测的。而分组交换的支持者却认为分组交换提供了比电路交换更好的带宽共享;它比电路交换更加简单、更有效,实现成本更低。但是现在的趋势更多的是朝着分组交换的方向发展。 分组交换网的时延、丢包和吞吐量 因特网可以看成是一种基础设施,该基础设施为运行在端系统上的分布式应用提供服务。我们希望在计算机网络中任意两个端系统之间传递数据都不会造成数据丢失,然而这是一个极高的目标,实践中难以达到。所以,在实践中必须要限制端系统之间的 吞吐量 用来控制数据丢失。如果在端系统之间引入时延,也不能保证不会丢失分组问题。所以我们从时延、丢包和吞吐量三个层面来看一下计算机网络 分组交换中的时延 计算机网络中的分组从一台主机(源)出发,经过一系列路由器传输,在另一个端系统中结束它的历程。在这整个传输历程中,分组会涉及到四种最主要的时延:节点处理时延(nodal processing delay)、排队时延(queuing delay)、传输时延(total nodal delay)和传播时延(propagation delay)。这四种时延加起来就是 节点总时延(total nodal delay)。 如果用 dproc dqueue dtrans dpop 分别表示处理时延、排队时延、传输时延和传播时延,则节点的总时延由以下公式决定: dnodal = dproc dqueue dtrans dpop。 时延的类型 下面是一副典型的时延分布图,让我们从图中进行分析一下不同的时延类型: 分组由端系统经过通信链路传输到路由器 A,路由器A 检查分组头部以映射出适当的传输链路,并将分组送入该链路。仅当该链路没有其他分组正在传输并且没有其他分组排在该该分组前面时,才能在这条链路上自由的传输该分组。如果该链路当前繁忙或者已经有其他分组排在该分组前面时,新到达的分组将会加入排队。下面我们分开讨论一下这四种时延 节点处理时延 节点处理时延分为两部分,第一部分是路由器会检查分组的首部信息;第二部分是决定将分组传输到哪条通信链路所需要的时间。一般高速网络的节点处理时延都在微妙级和更低的数量级。在这种处理时延完成后,分组会发往路由器的转发队列中 排队时延 在队列排队转发过程中,分组需要在队列中等待发送,分组在等待发送过程中消耗的时间被称为排队时延。排队时延的长短取决于先于该分组到达正在队列中排队的分组数量。如果该队列是空的,并且当前没有正在传输的分组,那么该分组的排队时延就是 0。如果处于网络高发时段,那么链路中传输的分组比较多,那么分组的排队时延将延长。实际的排队时延也可以到达微秒级。 传输时延 队列 是路由器所用的主要的数据结构。队列的特征就是先进先出,先到达食堂的先打饭。传输时延是理论情况下单位时间内的传输比特所消耗的时间。比如分组的长度是 L 比特,R 表示从路由器 A 到路由器 B 的传输速率。那么传输时延就是 L / R 。这是将所有分组推向该链路所需要的时间。正是情况下传输时延通常也在毫秒到微妙级 传播时延 从链路的起点到路由器 B 传播所需要的时间就是 传播时延。该比特以该链路的传播速率传播。该传播速率取决于链路的物理介质(双绞线、同轴电缆、光纤)。如果用公式来计算一下的话,该传播时延等于两台路由器之间的距离 / 传播速率。即传播速率是 d/s ,其中 d 是路由器 A 和 路由器 B 之间的距离,s 是该链路的传播速率。 传输时延和传播时延的比较 计算机网络中的传输时延和传播时延有时候难以区分,在这里解释一下,传输时延是路由器推出分组所需要的时间,它是分组长度和链路传输速率的函数,而与两台路由器之间的距离无关。而传播时延是一个比特从一台路由器传播到另一台路由器所需要的时间,它是两台路由器之间距离的倒数,而与分组长度和链路传输速率无关。从公式也可以看出来,传输时延是 L/R,也就是分组的长度 / 路由器之间传输速率。传播时延的公式是 d/s,也就是路由器之间的距离 / 传播速率。 排队时延 在这四种时延中,人们最感兴趣的时延或许就是排队时延了 dqueue。与其他三种时延(dproc、dtrans、dpop)不同的是,排队时延对不同的分组可能是不同的。例如,如果10个分组同时到达某个队列,第一个到达队列的分组没有排队时延,而最后到达的分组却要经受最大的排队时延(需要等待其他九个时延被传输)。 那么如何表征排队时延呢?或许可以从三个方面来考虑:流量到达队列的速率、链路的传输速率和到达流量的性质。即流量是周期性到达还是突发性到达,如果用 a 表示分组到达队列的平均速率( a 的单位是分组/秒,即 pkt/s)前面说过 R 表示的是传输速率,所以能够从队列中推出比特的速率(以 bps 即 b/s 位单位)。假设所有的分组都是由 L 比特组成的,那么比特到达队列的平均速率是 La bps。那么比率 La/R 被称为流量强度(traffic intensity),如果 La/R > 1,则比特到达队列的平均速率超过从队列传输出去的速率,这种情况下队列趋向于无限增加。所以,设计系统时流量强度不能大于1。 现在考虑 La / R <= 1 时的情况。流量到达的性质将影响排队时延。如果流量是周期性到达的,即每 L / R 秒到达一个分组,则每个分组将到达一个空队列中,不会有排队时延。如果流量是 突发性 到达的,则可能会有很大的平均排队时延。一般可以用下面这幅图表示平均排队时延与流量强度的关系 丢包 我们在上述的讨论过程中描绘了一个公式那就是 La/R 不能大于1,如果 La/R 大于1,那么到达的排队将会无穷大,而且路由器中的排队队列所容纳的分组是有限的,所以等到路由器队列堆满后,新到达的分组就无法被容纳,导致路由器 丢弃(drop) 该分组,即分组会 丢失(lost)。 计算机网络中的吞吐量 计算机网络中的吞吐量(Throughput)是指在一定时间内网络传输的数据量。它通常用比特每秒(bits per second,bps)或字节每秒(bytes per second,Bps)来表示。 在网络中,数据包需要经过多个节点才能到达目标主机。因此,吞吐量不仅受限于发送端和接收端的带宽限制,还受到路由器、交换机等设备的转发速度、网络拥塞程度等因素影响。如果其中某个节点处理速度较慢或者出现拥塞,则会降低整个网络的吞吐量。 为了提高网络吞吐量,可以采取以下措施:
协议层次以及服务模型 协议层次是指计算机网络中不同协议的分层结构,每一层都有特定的功能和服务模型。常见的协议层次体系包括TCP/IP协议族和OSI模型。 TCP/IP协议族包含以下四个层次:
OSI模型包含以下七个层次:
服务模型是指每一层的功能和所提供的服务。通常分为面向连接和无连接两种模式。面向连接模式要求在数据传输前建立连接并进行握手,确保数据的可靠性和完整性,如TCP协议。无连接模式则不需要建立连接,直接发送数据包,速度较快但可靠性低,如UDP协议。 五层网络协议的示意图如下: 从图中可以一眼看出,OSI 要比上面的网络模型多了 网络攻击 在计算机高速发展的 21世纪,我们已经越来越离不开计算机网络,计算机网络在为我们带来诸多便利的同时,我们也会遭受一些网络攻击,下面我们就一起来认识一下网络中的攻击有哪些 植入有害程序 因为我们要从因特网接收/发送 数据,所以我们将设备与因特网相连,我们可以使用各种互联网应用例如微信、微博、上网浏览网页、流式音乐、多媒体会议等,网络攻击很可能在这时不知不觉的发生,通过在这些软件中植入有害程序来入侵我们的计算机,包括删除我们的文件,进行活动监视,侵犯隐私等。我们的受害主机也可能成为众多类似受害设备网络中的一员,它们被统称为 僵尸网络(botnet),这些攻击者会利用僵尸网络控制并有效的对目标主机开展垃圾邮件分发和分布式拒绝服务攻击 大多数有害程序都具有自我复制(self-replicating)的功能,传播性非常强,一旦它感染了一台主机,就会从这台感染的主机上寻找进入因特网的其他主机,从而感染新的主机。有害应用程序主要分为两种:病毒(virus) 和 蠕虫(worm),病毒是一种需要某种形式的用户交互来感染用户的计算机,比如包含了病毒的电子邮件附件。如果用户接收并打开感染病毒的电子邮件的话,就会以某种方式破坏你的计算机;而蠕虫是一种不需要用户交互就能进入计算机的恶意软件,比如你运行了一个攻击者想要攻击的应用程序,某些情况下不需要用户干预,应用程序就可能通过互联网接收恶意软件并运行,从而生成蠕虫,然后再进行扩散。 攻击服务器和网络基础设施 另一种影响较大的网络攻击称为拒绝服务攻击(Denial-of-Service Dos),这种网络攻击使得网络、主机、服务器、基础网络设施不能常规使用。Web 服务器、电子邮件服务器、DNS 服务器都能成为 Dos 的攻击目标。大多数因特网 Dos 攻击分为以下三类 弱点攻击。这涉及向一台目标主机上运行的易受攻击的应用程序或操作系统发送制作精细的报文,如果适当顺序的多个分组发送给一个易受攻击的应用程序或操作系统,该服务器可能停止运行。 带宽洪泛。攻击者通过网络向主机或服务器发送大量的分组,分组数量太多使得目标接入链路变得拥塞,使得合法分组无法到达服务器。 连接洪泛。和上面的带宽洪范攻击性质相似,只不过这次换成了通过创建大量的 TCP 连接进行攻击。因为 TCP 连接数量太多导致有效的 TCP 连接无法到达服务器。 互联网中攻击最多的就属于带宽洪泛攻击了,可以回顾一下我们上面讨论的时延和丢包问题,如果某服务器的接入速率为 R bps,那么攻击者则需要向服务器发送大于 R bps 的速率来产生危害。如果 R 非常大的话,单一攻击源可能无法产生足够大的流量来伤害服务器,所以还需要产生多个数据源,这就是屡见不鲜的 分布式Dos(Distributed Dos,DDos) 。 攻击者通过控制多个数据源并让每个数据源发送大量的分组来致使服务器瘫痪。如下图所示 嗅探分组 今天许多用户通过无线设备接入因特网。例如 WiFi 连接的计算机或者使用蜂窝因特网连接的手持设备。在带来便利的同时也会成为易受攻击的目标。在无线传输设备的附近放置一台被动的接收机,该接收机就能够得到传输的每个分组的副本!这些分组中包含了各种敏感信息,例如口令、密码等,记录每个流经分组副本的接收机被称为分组嗅探器(packet sniffer)。分组嗅探也能够应用于有线环境中,可以用 Wireshark 实验来进行模拟 IP 伪装 生成具有任意源地址、分组内容和目的地址的分组,然后将这个分组传输到互联网中。这种将虚假源地址的分组注入因特网的能力被称为 IP 哄骗(IP spoofing)。为了解决这个问题,我们需要采用 端点鉴别,它是一种使我们能够确信真正源目的地的机制。我们后面会再探讨这些机制。 |
|