目录
0 引言
📜闲聊几句:最近导师给安排了一个任务,用 QT 写一个 HTTP Server服务器,用于接受HTTP客户端发送的POST请求。刚好自己计算机网络基础很差,借此机会快速学习一遍应用层的HTTP协议。加油!
1 概述(学习目标)
- 网络应用的原理:网络应用协议的概念和实现方面的内容
- 传输层的服务模型
- 客户端-服务器模式
- 对等模式(peer-to-peer)
- 内容分发网络
- 网络应用的实例:互联网流行的应用层协议
- HTTP
- FTP
- SMTP / POP3 / IMAP
- DNS
- 编程:网络应用程序
- Socket API
2 应用层原理
2.1 网络应用
2.1.1 网络应用的例子
网络应用的例子其实和我们近在咫尺,下面用一张图片来大致罗列一下:
同时应用层的协议种类也是最多的
2.1.2 创建一个新的网络应用
通过编程来创建一个新的网络应用
- 在不同的端系统上运行
- 通过网络基础设施提供的服务,应用进程彼此通信
- 如Web:Web服务器软件与浏览器软件通信
网络核心中没有应用层软件
- 网络核心没有应用层功能
- 网络应用只在端系统上存在,快速网络应用开发和部署。
2.1.3 网络应用的体系结构
可能的应用架构:
- 客户端-服务器模式( C/S:client/server )
- 对等模式(P2P:Peer To Peer)
- 混合体: 客户端-服务器和对等体系结构
(1)客户端-服务器模式
服务器
- 一直运行
- 固定的IP地址和周知的端口号(约定)
- 拓展性:服务器场
客户端
- 主动与服务器通信
- 与互联网有间接性的连接
- 可能是动态IP地址
- 不直接与其他客户端通信
优缺点:
(2)对等体P2P体系结构
P2P(点对点)是一种计算机网络通信模式,其中每个参与者都可以作为客户端和服务器角色进行通信和共享资源,而无需依赖中央服务器。在P2P模式中,数据和任务可以直接在参与者之间传输,而不需要经过集中的中间服务器。
P2P模式的优点:
- 分散化:P2P模式不依赖于集中的中央服务器,而是通过直接连接参与者之间的节点进行通信和资源共享。这种分散化的结构使得系统更加灵活和鲁棒,不容易出现单点故障。
- 高效性:P2P模式可以充分利用网络中的资源和带宽,因为每个节点都可以充当服务器提供资源,从而减轻了集中服务器的负载压力。同时,节点之间可以直接传输数据,加快了数据传输的速度。
- 可扩展性:由于P2P模式的节点具有相同的能力和特权,因此系统的容量和性能可以通过添加更多的节点来扩展。这种可扩展性使得P2P模式在大规模分布式系统中具有较好的适应性。
- 去中心化控制:P2P模式中的决策和控制权分散在各个节点上,没有单一的中心化机构控制整个系统。这样可以避免中心化机构的单点故障和单点攻击,提高了系统的安全性和可靠性。
P2P模式的缺点:
- 网络拓扑复杂:P2P模式中的节点之间需要建立直接的连接来进行通信和数据传输,这导致网络拓扑结构相对复杂。节点需要维护大量的连接,而且网络中的节点数量增加时,管理和维护这些连接的复杂度也会增加。
- 安全性挑战:P2P模式中的节点之间直接通信,容易受到恶意节点的攻击和欺骗。节点之间的身份验证和数据安全性成为了重要的挑战,需要采取相应的安全措施来保护系统的安全性。
- 可靠性问题:在P2P模式中,节点的可靠性和可用性是系统的关键因素。如果某个节点离线或故障,可能会影响到其他节点的正常运行和数据传输。因此,保证节点的可靠性和系统的稳定性是一个挑战。
- 难以管理:由于P2P模式的节点是平等的,没有中心化的管理机构,因此系统的管理和协调变得更加困难。节点的加入和退出、数据一致性和系统维护等问题需要进行有效的管理和协调。
- (几乎)没有一直运行的服务器
- 任意端系统之间可以进行通信
- 每一个节点既是客户端又是服务器(自拓展性,新peer节点带来新的服务能力,当然也带来新的服务请求)
- 参与的主机间歇性连接且可以改变IP地址(难以管理)
- 例子:Gnutella,迅雷
(3)C/S和P2P体系结构的混合体
2.2 分布式进程通信需要解决的问题
问题回答:
2.2.1 对进程进行编址(addressing)
问题一:
2.2.2 传输层提供的服务-需要穿过层间的信息
问题二:
为了减少层间接口信息的传输量,使用了socket作为代表。socket其实就是一个数
TCP Socket
UDP Socket
2.2.3 如何使用传输层提供的服务实现应用
问题三:
应用层协议
- 应用层协议定义了:运行在端系统上的应用进程如何相互交换报文
- 交换的报文类型:请求和应答报文
- 各种报文类型的语法:报文中各个字段及其描述
- 字段的语义:即字段取值的含义
- 进程何时、如何发送报文及对报文进行响应的规则
- 应用层协议仅仅是应用的一个组成部分(Web应用:HTTP协议、Web客户端、Web服务器,HTML)
- 公开协议
- 由RFC文档定义
- 允许互操作
- 如HTTP,SMTP
- 专有(私有)协议
- 协议不公开
- 如:Skype
应用需要传输层提供什么样的服务
不同的应用需要的服务特性是不一样的,从下面四个角度来分析:
- 数据丢失率
- 有些应用要求100%的可靠数据传输(如文件)
- 有些应用(如音频)能容忍一定比例以下的数据丢失- 公开协议
- 由RFC文档定义
- 允许互操作- 公开协议
- 由RFC文档定义
- 允许互操作- 公开协议
- 由RFC文档定义
- 允许互操作
Internet传输层提供的服务
- TCP服务
- 可靠的传输服务
- 流量控制:发送方不会淹没接收方
- 拥塞控制:当网络出现拥塞时,能
- 不能提供的服务:时间保证、最小吞吐保证和安全
- 面向连接:要求在客户端进程和服务器进程之间建立连接- UDP服务
- 不可靠数据传输
- 不提供的服务:可靠,流量控制、拥塞控制、时间、带宽保证、建立连接问题:为什么要有UDP?
思考:因为有些应用不需要可靠的传输服务,相反需要很低的传输延迟。所以TCP服务就不支持了,UDP就因此诞生。
安全TCP
- TCP & UDP
- 都没有加密
- 明文通过互联网传输,甚至密码- SSL
- 在TCP上面实现,提供加密的TCP连接
- 私密性
- 数据完整性
- 端到端的鉴别- SSL在应用层
- 应用采用SSL库,SSL库使用TCP通信- SSL socket API
- 应用通过API将明文交给socket,SSL将其加密在互联网上传输
- 详见后面章节