计算机网络概述
前言 & 课程介绍
课程目标与收益:建立对计算机网络的整体认知,对计算机网络中的各种概念(网络分层、网络协议、网络应用等)有初步的理解。 进而可以在后续的实际工作中能高效解决网络问题。
分析方法
- 自底向上
- 从简单开始,逐渐变复杂
- 将模块逐步拼凑成一个系统
- 自顶向下
- 从复杂开始,逐渐变简单
- 从复杂的系统问题入手,拆分为模块问题
蟹堡王帝国
- 蟹堡王顾客:客户端
- 蟹堡王分店:服务端
- 小区转发点和蟹堡王城市转发分店:路由器
- 转发表格:网络协议
计算机网络基础
网络组成部分
- 主机:客户端和服务端
- 路由器
- 网络协议
网络结构
- 比奇堡和小区网络:本地网络
- 北京和上海分店+比奇堡:三个本地网络节点的网络
- 全国通信网络:本地网络的网络
- 区域网络、城域网和广域网
电路交换和分组交换
电路交换和分组交换是两种不同的通信传输方式。
电路交换是指在通信双方建立连接后,使用一条物理电路来保持通信连接,直到通信结束。在这个过程中,该电路将被专门保留,不允许其他用户使用。这种方法适用于需要长时间、高可靠性的通信,例如电话系统。但它也有缺点,比如由于电路只能用于两个节点之间的通信,所以当网络流量较大时会出现拥塞。
分组交换是指发送数据时将数据分为若干个数据包(即分组),并通过网络单独传输,接收方再将这些分组重新组装成完整的信息。这种方式可以实现多个用户同时共享一条物理链路,因此具有更高的效率和灵活性。但是,分组交换不能保证实时传输,并且由于每个分组都经过不同的路径传输,因此可能存在分组丢失或乱序的问题。
总体而言,电路交换适用于需要长时间、高可靠性的通信,而分组交换适用于短时间、高效率的通信。
网络分层
- 计算机网络的七层结构是指OSI(Open System Interconnection)参考模型,它把计算机网络通信的过程分为七层。下面是这七层的概述:
- 物理层(Physical Layer):物理层是计算机网络的最底层,它负责传输比特流(bitstream)并管理物理设备,如网线、光缆和无线电频谱等。在这一层,数据被表示为电气或光信号,并以二进制传输。
- 数据链路层(Data Link Layer):数据链路层负责将比特流划分成帧(frames),并提供可靠的点对点传输。该层主要解决了物理层进行简单的比特传输后可能出现的差错和重复问题。
- 网络层(Network Layer):网络层负责寻址和路径选择,以便将数据包(packet)从发送方传递到接收方。在互联网中,IP协议就是网络层的基础协议。
- 传输层(Transport Layer):传输层负责为端到端的数据传输提供可靠性和流量控制。常用的传输层协议有TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)。
- 会话层(Session Layer):会话层负责建立、管理和终止应用程序之间的会话。在这一层,可以实现对数据交换过程的控制,如同步、检查点和恢复。
- 表示层(Presentation Layer):表示层负责将数据转换为应用程序能够理解的格式,并进行加密和压缩等操作。
- 应用层(Application Layer):应用层是最高层,由各种应用程序组成,例如Web浏览器、电子邮件和文件传输协议等。 总体来说,OSI参考模型提供了一种基本的分层架构,不同层次之间相互独立,可以简化开发和维护网络系统的复杂度。
- 在实际应用中,网络模型经常会简化为五层模型。五层模型与 OSI 七层模型的主要区别在于它将会话层、表示层和应用层合并为一个层次,并将物理层和数据链路层合并为一个层次。
- 物理层和数据链路层(Physical and Data Link Layers): 这个层次结合了 OSI 模型中的物理层和数据链路层,负责处理数据链路的建立、维护和断开,以及物理介质上的比特流传输和信号编码等任务。
- 网络层(Network Layer): 网络层与 OSI 模型中的网络层相同,负责处理网络寻址和路由选择,以确定数据包从源节点到目的节点的最佳路径。
- 传输层(Transport Layer): 传输层与 OSI 模型中的传输层相同,负责提供端到端的通信服务,包括数据的分段、传输、重组和确认。传输层还负责处理流量控制和差错控制。
- 应用层(Application Layer): 这个层次结合了 OSI 模型中的会话层、表示层和应用层,负责处理与特定应用程序相关的通信任务,以及数据的表示和编码问题。
网络协议
协议定义了在两个或多个通信实体之间交换的报文的格式和顺序,以及报文发送或接受一条报文或其他事件所采取的动作。
计算机网络中的网络协议是指计算机之间交流和传输数据时所遵循的规则和标准。网络协议可以分为多个层次,每个层次负责不同的功能,从而实现数据在网络中的可靠传输。
常见的网络协议包括:
应用层协议:HTTP、FTP、SMTP、POP3等,用于应用程序之间的通信。
传输层协议:TCP、UDP等,用于建立端到端的连接,并确保数据传输的可靠性和完整性。
网络层协议:IP、ICMP等,用于实现不同计算机之间的通信和路由。
数据链路层协议:Ethernet、PPP、ARP等,用于实现本地计算机与直接相连的网络设备(如网卡)之间的通信。
物理层协议:RS-232、V.35等,用于控制物理层面上的数据传输。
这些协议共同构成了计算机网络的基础框架,使得不同计算机之间的数据可以顺利传输,并且实现了网络上各种应用和服务的互联互通。
标头和荷载
收件人、寄件人关注:
- 收件地址、寄件地址
- 收件人、寄件人的姓名和电话
- 包裹内容
快递公司关注“
- 收件人、寄件人关注的东西
- 该由哪个集散点发出,哪个集散点收
- 哪个网点派送
在计算机网络中,标头(Header)和荷载(Payload)是网络数据包的两个主要组成部分。
标头是在传输过程中附加到数据包前面的元数据信息。它包含了发送者和接收者的地址、协议类型、序列号等网络相关的必要信息,用于控制传输过程和确保数据包能够正确到达目的地。
荷载则是指传输过程中携带的具体数据,也称为有效载荷(Data Payload)。荷载可以是各种不同类型的数据,例如文本、图像、音频或视频等。荷载的大小取决于传输的内容和使用的协议。
总之,标头和荷载是网络通信中不可或缺的两个组成部分,它们共同构成了网络数据包,确保数据能够在网络中被正确处理和传输。
小结
- 网络组成部分:由主机、路由器、交换机等组成
- 网络结构:网络的网络
- 信息交换方式:电路交换和分组交换
- 网络分层:分清职责,物理层、链路层、网络层、运输层和应用层
- 网络协议:标头和载荷
Web中的网络
HTTP连接模型
-
无连接模型: 在早期的 HTTP/1.0 版本中,HTTP 使用无连接模型。这意味着每个 HTTP 请求和响应都需要建立一个新的 TCP 连接。在处理完一个请求后,服务器会关闭连接。这种模型简单易实现,但在高延迟和大量并发请求的场景下,性能较差。每个连接的建立和关闭都会消耗资源和时间,导致延迟增加和服务器负载过高。
-
持久连接模型: 为了解决无连接模型的性能问题,HTTP/1.1 引入了持久连接(Persistent Connection)模型,也称为 Keep-Alive 连接。在持久连接模型中,客户端和服务器可以在一个 TCP 连接上发送多个 HTTP 请求和响应。这种模型减少了 TCP 连接的建立和关闭次数,降低了延迟和服务器负载,提高了性能。持久连接在 HTTP/1.1 中是默认启用的,可以通过 Connection 请求头部的值(Keep-Alive 或 close)进行控制。
-
管道化连接模型: HTTP/1.1 还引入了管道化(Pipelining)连接模型,它允许客户端在收到上一个请求的响应之前,连续发送多个请求。服务器会按照请求的顺序依次处理,并按顺序返回响应。这种模型进一步提高了连接的利用率和性能。但由于实际部署中的兼容性和实现问题,HTTP/1.1 的管道化并未广泛应用。
CDN & DNS
当用户访问网站时,他们发送请求到网站的服务器上获取网站内容。但是,如果该服务器距离用户太远,那么这些请求的响应时间就会很长,给用户带来不好的体验。此时,可以使用 CDN 和 DNS 技术来加速网站加载和提升性能。
CDN(Content Delivery Network)是指一组分布在世界各地的服务器集合,它们可以缓存和分发静态资源(如图片、样式表、脚本等),使这些资源更快地加载到用户的设备上。当用户请求网站内容时,CDN 会自动将用户请求的内容分发到距离用户最近的服务器上,从而减少响应时间并提高网站性能。
DNS(Domain Name System)则是一种用于将域名转化为 IP 地址的技术。当用户在浏览器中输入一个网站的域名时,DNS 会通过查询域名系统中的记录来找到对应的 IP 地址,进而将用户的请求传递给正确的服务器。由于 DNS 查询时间通常很短,因此使用高效的 DNS 可以加速网站加载并提高性能。
CDN:DNS劫持
- 域名解析一般由网站自己处理
- 要加速的域名则重定向到CDN厂商的域名解析服务处理(通常不是由自己来解析,而是由CDN厂商来做)
- CDN厂商根据来源确定最近的CDN服务器的IP
- 用户直接访问最近的CDN服务器
CDN 有两种基本的缓存策略:拉取策略(Pull)和推送策略(Push)。
- 拉策略
- 默认情况下什么也不做
- 谁需要了,先看看仓库有没有
- 有,直接给
- 没有,你等着,我去买个橘子
- (每隔几天)这都啥啊,丢了
- 推策略
- 大哥说今天你存这些,明天存那些
- 谁需要了,先看看仓库有没有
- 有,直接给
- 没有,你等着,我去买个橘子
- 大哥说这个、这个还有这个,丢了
拉取策略:
优点:
- 可以实时获取最新数据,不需要手动推送数据。
- 可以有效地缓解源站的访问压力,节省带宽和资源。
- 部署简单,不需要与源站建立链接。
缺点:
- 访问速度可能较慢,特别是在访问量较大时。
- 需要源站保持开放状态,以便 CDN 节点随时请求数据。
推送策略:
优点:
- 访问速度较快,因为数据已经预先推送到了 CDN 节点。
- 可以减轻源站的访问压力,提高网站的稳定性和可靠性。
缺点:
- 需要手动推送数据到 CDN 节点。
- 可能会出现数据不一致问题,需要定期同步数据。
- 部署和维护较为复杂,需要建立预先配置好的链接。
WebSocket
WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信,即允许服务器主动发送信息给客户端。因此,在WebSocket中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输,客户端和服务器之间的数据交换变得更加简单。
网络安全
网络安全:三要素
- 机密性:攻击者无法获知通信内容
- 完整性:攻击者对内容进行篡改时能被发现
- 身份验证:攻击者无法伪装成通信双方的任意一方与另一方通信
网络安全:对称加密和非对称加密
- 对称加密:加密、解密用同样的密钥
- 非对称加密:加密、解密使用不同的密钥(公钥和私钥),而且公钥加密只能用私钥解密、私钥加密只能用公钥解密
网络安全:密码散列函数(哈希函数)
- 输入:任意长度的内容
- 输出:固定长度的哈希值
- 性质:找到两个不同的输入使之经过密码散列函数后有相同的哈希值,在计算上是不可能的
网络安全:机密性
- 加密需要加密算法和密钥等信息(统称为秘密信息)
- 网络是明文的,不安全
网络安全:完整性和身份验证
完整性和身份验证相互关联。
-
蟹老板向银行发起了转账请求
-
银行需要确认
- 这个请求真的是蟹老板发起的
- 目标账户和转账金额没有被篡改
如何实现机密性
- 已知:网络是明文的
- 如果双方可以通过明文通信商量出秘密信息,那么攻击者也可以
- 所以想要通过明文通信交换秘密信息,通信双方需要先有秘密信息,意思就是我们想要通过明文来交换密钥,就得有不会被攻击者知道的秘密信息
如何实现完整性
- 密码散列函数性质:找到两个不同的输入使之经过密码散列函数后有相同的哈希值,在计算上是不可能的
- 有明文m,密码散列函数H
- 计算H(m)获得哈希值h
- 将m和h组合成新信息m+h
- 接收方拆分m+h,重新计算H(m)得h',对比h'和h
如何实现身份验证
-
签名:用于鉴别身份和防止伪造
-
非对称加密性质:加密、解密使用不同的密钥(公钥和私钥),而且公钥加密只能用私钥解密、私钥加密只能用公钥解密
-
蟹老板用自己的私钥对信件进行加密,并发送给海绵宝宝
-
海绵宝宝使用蟹老板的公钥进行解密,获得原文
-
保证了机密性、完整性和身份验证
-
数字签名:对明文内容的哈希值使用私钥加密,验证者使用公钥验证
-
数字签名(指纹) = 私钥加密(密码散列函数(原文))
-
消息 = 原文 + 数字签名
-
一般用于对公开内容(如包含公钥的证书)进行数字签名,防止篡改
-
可信的人验证蟹老板的公钥
-
那谁验证可信的人的公钥?
-
根证书是证书链的尽头
-
验证的一连串证书称为证书链
-
分发证书、验证证书的基础设施称为PKI,Public Key Infrastructure
-
所以想要实现身份验证,通信双发需要先有私密信息,即根证书中的公钥
网络安全:HTTPS
把HTTP的明文换成密文,再验证身份,即HTTPS。 HTTPS = HTTP + TLS TLS = 身份验证 + 加解密 身份验证靠PKLI,客户端身份验证靠HTTP协议。
小结
-
网络安全三要素:机密性、完整性和身份验证
-
在没有提前交换秘密信息的前提下,无法在不安全的信道交换秘密信息
-
PKI保证了普通用户不需要“面对面”和根证书机构交换根证书
-
HTTPS使用PKI完成了除客户端身份验证以外的特性,客户端身份验证靠HTTP协议实现