【USTC 计算机网络】第二章:应用层 - 应用层原理

本文进入计算机网络第二章的内容:应用层。本章的目标是弄明白网络应用的原理(网络应用协议的概念和实现)以及网络应用的实例(互联网流行的应用层协议)。

本文内容为应用层原理的介绍,首先介绍了网络应用三种不同的体系架构,接着介绍应用进程之间如何进行通信,应用层通过 Socket 使用传输层提供的服务,进而实现应用进程间的通信。

1. 网络应用的体系架构

(1)客户端-服务器(Client/Server,C/S)模式

在 C/S 模式下,系统分为客户端和服务器两部分。客户端主要负责用户界面、数据输入与展示,而服务器负责核心业务逻辑、数据存储和处理。

服务器一般先运行起来,且长期运行不中止,服务器具有固定的 IP 地址与约定好的端口号,客户端通过网络向服务器主动发送请求进行通信,服务器经过处理后返回相应结果给客户端,客户端不直接与其它客户端进行通信。

C/S 模式的优缺点如下:

  • 优点
    • 集中管理:数据和业务逻辑集中在服务器上,便于统一维护和安全管理。
    • 安全性高:可以在服务器端进行严格的访问控制和数据加密,保障信息安全。
    • 维护方便:升级和补丁只需在服务器端实施,无需逐一更新所有客户端。
  • 缺点
    • 扩展性受限:当并发访问量激增时,单台服务器容易成为瓶颈。
    • 可靠性较差:服务器单点故障可能导致整个系统不可用,必须采用冗余和负载均衡机制来提高系统稳定性。
    • 客户端依赖:客户端与服务器之间存在紧密耦合,客户端版本不匹配可能影响系统正常运行。

(2)点对点(Peer to Peer,P2P)模式

在 P2P 模式中,每个节点既可以作为客户端也可以作为服务器,直接与其他节点进行数据交换和资源共享。系统中没有单一的一直运行的中心服务器,而是通过分布式的方式实现资源的协同管理。

P2P 模式的优缺点如下:

  • 优点
    • 分布式资源:各节点共享计算和存储资源,可以充分利用每个节点的能力。
    • 高容错性:单个节点的故障不会导致整个系统的崩溃,网络具备更好的鲁棒性。
    • 可扩展性:节点数量增加时,整体系统的处理能力也随之增强,适用于大规模数据交换和分布式存储。
  • 缺点
    • 安全性问题:缺乏统一的控制和安全验证机制,容易受到恶意节点攻击和数据篡改。
    • 网络管理复杂:节点的动态加入和退出会给路由、寻址和数据一致性带来挑战。
    • 数据可靠性:数据冗余、备份和一致性需要通过复杂的协议来保证,否则容易出现数据丢失或重复传输的问题。

(3)混合体模式

混合体模式结合了 C/S 模式和 P2P 模式的优势,通常通过设立中心服务器来进行用户认证、协调管理和部分数据存储,同时利用 P2P 技术实现点对点的数据传输或资源共享。这种架构既能确保系统的安全和集中管理,又能发挥分布式网络的扩展性和高效性。应用场景如下:

  • 实时通信系统:如 Skype 等应用,利用中心服务器进行信令控制和用户管理,而实际音视频数据则通过 P2P 进行传输,从而降低延迟和服务器负担。
  • 内容分发网络(CDN):通过中心调度与边缘节点的协同,既保证了内容更新的及时性,又实现了大规模数据的高效分发。
  • 分布式存储:中心服务器负责索引和元数据管理,数据则以 P2P 方式在各个节点上存储和备份,提高了数据冗余性和系统容错性。

2. 进程通信

进程 是指在主机上运行的应用程序;客户端进程 是主动发起请求(通信)的进程,主要任务是向服务器请求特定服务或资源;服务器进程处于被动等待连接的状态,负责响应客户端的请求。

进程通信(Interprocess Communication,IPC)是指在操作系统中,不同进程之间交换数据和信息的机制。在同一个主机内,使用进程间通信机制 通信(由操作系统定义);不同主机按照应用协议交换报文(Message)进行通信(借助传输层提供的服务)。

分布式进程通信需要解决三个问题,首先第一个是进程标识与寻址,在分布式系统中,单个物理机上可能运行多个进程,因此必须有一套机制来唯一标识和定位每个进程。

每个进程通常会与主机的网络地址 (IP 地址)和 TCP 或 UDP 的端口号组合,形成一个唯一的"套接字地址",这种方式能够区分同一主机上的不同进程。仅有 IP 地址不能够唯一标识一个进程,因为在一台端系统上有很多应用进程在运行。

3. Socket

要解决的第二个问题是传输层向应用层提供了什么服务

应用层与传输层进行交互时层间接口必须要携带以下信息:

  • 要传输的报文:这里指的是上层传递下来的服务数据单元(SDU),也就是实际需要传输的数据内容。它不包含当前层要添加的控制信息,仅代表上层生成的原始数据。
  • 谁传的(发送方标识):这部分信息标识了数据的发送者,通常包括发送者的地址(IP)、TCP/UDP 端口号,用以明确指出数据是由哪一个实体发送的。
  • 传给谁(接收方标识):这部分信息指明了数据的目的地,通常包含接收者的地址(IP)、TCP/UDP 端口号,用以确保数据能准确路由到目标进程或主机。

传输层实体(TCP 或者 UDP 实体)根据这些信息进行 TCP 报文段(UDP 数据报)的封装并将其传递给下一层。

如果每次都需要在传输层和应用层之间显式地传递 IP 和端口号,这会显得非常繁琐易错,不便于管理。为了解决这一问题,操作系统提供了 Socket(套接字)机制,使得一次建立连接后,这些信息就内嵌在连接的状态中 ,应用只需要专注于数据的发送和接收,而不必每次都重复传递标识信息。

套接字就相当于是一个门户,发送进程将报文推出 门户,发送进程依赖于传输层设施在另外一侧的门将报文交付给接收进程;接收进程从另外一端的门户收到报文(依赖于传输层设施)。

需要注意的概念区分:Socket 是指网络通信中实际存在的通信端点 ,代表着一个独立的实体,而 Socket API 则是操作系统提供给应用程序调用的一组编程接口(函数),用于创建、配置、管理和使用这些通信端点。实际上,Socket 不仅封装了传输层的服务,还隐含地涉及了网络层(如 IP 协议)的功能,但在应用开发中,这些底层细节已被 Socket API 屏蔽,开发者可以专注于实现应用逻辑。

(1)TCP Socket

TCP Socket 是一种通过 TCP 协议实现的网络通信端点,它既是通信的抽象接口,也是操作系统为应用提供的一个句柄(通常是一个文件描述符),就像使用操作系统打开一个文件后,OS 会返回一个文件句柄,之后对文件的操作就是使用这个文件句柄,而不是使用这个文件的目录名、文件名。通过 TCP Socket,应用可以在网络上建立、管理和终止可靠的、面向连接的数据传输通道。

TCP 套接字通常以一个非负整数 来表示,这个整数就是文件描述符。操作系统内核会为该文件描述符关联一个数据结构,这个数据结构包含了用来唯一标识这条连接的四个关键要素,即四元组(源IP, 源Port, 目标IP, 目标Port)。应用程序通过这个文件描述符来进行后续的连接、数据发送和接收操作。

一旦建立连接后,TCP Socket 会在内部维护本地和远程的 IP 地址及端口信息,应用层不必在每次数据交换时重复传递这些信息,TCP 协议会通过序列号、确认应答、重传机制等保证数据的可靠传输,且 Socket 提供统一的 API(如 socket()bind()listen()accept()connect()),简化网络编程,使得应用可以像读写文件一样进行数据交换。

(2)UDP Socket

UDP Socket 是基于 UDP 协议的网络通信端点,它提供了一种无连接 (connectionless)且轻量级的数据传输机制。这意味着在数据传输前不需要建立连接。每个数据报(Datagram)都是独立发送的,前后报文可能给不同的分布式进程,不保证顺序与可靠性,也可能会重复。应用程序可以直接将数据报发送到指定的目标地址和端口,而无需经历像 TCP 那样的握手过程。

UDP Socket 每次发送或接收的数据都是一个完整的消息(数据报),应用层需要自己处理分片、重组和数据完整性检查等问题。

在本地,一个 UDP Socket 通常由本地 IP 地址和端口号组成的二元组 来标识,即 (IP, Port)。这两部分信息足以唯一确定本机上的一个 UDP 端点,从而使操作系统能够正确地将收到的数据报交付给对应的应用程序,但每次发送数据报时通常需要显式指定目标主机的 IP 地址和端口号。

4. 应用层协议

最后一个问题是如何使用传输层提供的服务实现应用

要利用传输层提供的服务来实现应用,需要从以下多个方面进行设计和实现。首先我们需要定义应用层协议 ,应用层协议规定了运行在不同端系统上的应用进程在通信时如何相互交换报文。包括以下要素:

  • 报文类型:请求还是应答报文。
  • 报文格式:定义数据的组织结构,如字段的排列顺序、类型和长度等。
  • 语义:解释每个字段的含义,以及接收到特定报文后应采取的操作。
  • 时序:规定通信过程中消息交换的顺序和时机。

其中公开的应用层协议由标准化组织制定,旨在确保不同系统和应用之间的互操作性,比较常见的有 HTTP(超文本传输协议)、FTP(文件传输协议)、SMTP(简单邮件传输协议)等协议;私有协议是由组织或个人为特定应用或系统设计的协议,例如 Skype。

定义了协议后开发者还需要编写应用程序,通过操作系统提供的 API(如 Socket API)来使用传输层服务。应用程序通过这些接口发送和接收数据,实现应用层协议的功能。

那么应用可能需要传输层提供什么样的服务?不同的应用对传输层服务有不同的需求,主要包括以下几个方面:

  • 可靠性:某些应用需要确保数据准确无误地传输,如文件传输;而例如音频应用能够容忍一定比例以下的数据丢失。
  • 时延:有些实时应用对传输时延要求较高,有严格的时间限制,如视频会议、Internet 电话。
  • 吞吐量:多媒体应用可能需要较高的吞吐量以保证质量。
  • 安全性:用户在网上购物时涉及支付信息,必须确保交易过程和数据传输的安全性,防止支付信息被窃取或篡改。
  • 传输方式:有的应用需要一对一通信,有的则需要广播或组播功能。

Internet 传输层主要提供两种服务:TCP 服务与 UDP 服务。

TCP(传输控制协议)服务在传输数据前需要建立连接(面向连接),通过序列号、确认机制、重传和流量控制,能够确保数据无误且按序到达(可靠传输),还能够根据网络状况调整发送速率,防止网络拥塞(拥塞控制)。

UDP(用户数据报协议)服务无需建立连接,直接发送数据(无连接),不提供确认和重传机制,可能导致数据丢失或乱序(不保证可靠性),保留应用层数据的边界,一次发送一个完整的报文(面向报文),首部开销比 TCP 小,传输效率高。

尽管 UDP 不提供可靠性保障,但在需要低延迟、高效传输且对可靠性要求不高的应用中,UDP 具有不可替代的作用,并且 UDP 能够区分不同的进程,而 IP 服务不能。

相关推荐
吴梓穆24 分钟前
UE4学习笔记 FPS游戏制作10 制作UI准星
笔记·学习·ue4
nuc-1271 小时前
sqli-labs学习笔记3
数据库·笔记·学习·sqli-labs
狄加山6753 小时前
QT 学习笔记2
笔记·qt·学习
东阳马生架构4 小时前
Netty基础—7.Netty实现消息推送服务二
websocket·netty·消息推送
scdifsn4 小时前
动手学深度学习11.9. Adadelta-笔记&练习(PyTorch)
pytorch·笔记·深度学习·优化器·adadelta算法
天师电通电容爆破工程师4 小时前
Altium Design元件管理笔记
笔记
威桑5 小时前
HTTP/HTTPS 中 GET 请求和 POST 请求的区别与联系
网络协议·http·https
CryptoRzz6 小时前
对接股票金融数据源API
网络·python·websocket·网络协议·金融
沉默的煎蛋6 小时前
深入理解 TCP 三次握手与四次挥手
java·网络·数据结构·网络协议·tcp/ip
TSINGSEE6 小时前
EasyRTC嵌入式音视频通话SDK:微信生态支持、轻量化架构与跨平台兼容性(Linix/Windows/ARM/Android/iOS/LiteOS)
arm开发·网络协议·微信·架构·音视频·webrtc·智能硬件