1.应用层概述
应用层(Application Layer)
属于计算机网络体系结构中的最顶层,直接面向用户,提供各种网络服务和应用程序的接口
本文主要的学习内容如下:
(1)网络应用进程通信方式
- 客户端-服务器方式
- 点对点方式
- 混合方式
(2)网络应用的需求与传输层服务
- 可靠性
- 带宽
- 延迟
(3)各种网络应用及协议
- Web应用 -> HTTP
- Email应用 -> SMTP、POP
- P2P应用
(4)Socket编程
- TCP
- UDP
2.网络应用进程通信方式
进程:
主机上运行的程序
Question1:
同一主机上运行的进程之间如何通信?
Answer:
同一主机上运行的程序通过操作系统提供的进程间通信机制进行通信,这里不展开介绍
Question2:
不同主机上运行的进程之间如何通信?
Answer:
消息(数据)交换。主要有电路交换、报文交换和分组交换
Question3:
如何定位不同主机上运行的进程?
Answer:
不同主机的不同进程都拥有唯一的标识符,进程的标识符 = IP地址 + 端口号
注意1:
网络应用通信需要遵守应用层协议,协议主要定义了以下规范
消息的类型(type):
请求消息、响应消息消息的语法格式(syntax):
消息中有哪些字段,每个字段如何描述/采取什么结构字段的语义(semantics):
字段中信息的含义规则(rules):
应用何时发送/接收消息,应用如何发送/接收消息
下面是网络应用中的主要通信方式
2.1 客户端-服务器方式(Client-Sever,CS)
服务器:
接受请求返回响应的终端
- 7*24(007)小时提供服务
- IP地址/域名长期固定
- 利用大量服务器实现可扩展性
客户端:
发起请求接收响应的终端
- 与服务器通信,使用服务器提供的服务
- 间歇性接入网络(不是一直在线)
- IP地址不固定(IP地址动态分配,网络层在详细介绍)
- 不会与其他客户端直接通信
2.2 点对点方式(Peer-to-Peer,P2P)
- P2P结构中的每个节点都可以充当客户端或服务器的角色
- 任意节点之间可以直接通讯
- 节点间歇性接入网络
- 节点IP地址不固定
2.3 混合方式
Question:
能不能结合以上两种方式的优点,规避缺点,设计一种新的通信方式/模型?
以Napster为例:
Napster 在文件传输和文件搜索方面采用了混合架构,结合了P2P和客户端-服务器两种结构。这种混合架构在当时是一个创新设计,既利用了P2P的优势,又通过中央服务器提高了效率和可控性
(1)客户端-服务器(CS)结构用于文件搜索:
- 中央服务器:Napster 使用一个中央服务器来维护一个所有共享文件的索引目录。当用户想要查找某个文件时,他们会向中央服务器发送搜索请求
(2)对等网络(P2P)结构用于文件传输:
- 直接连接:一旦用户选择了要下载的文件,Napster 会直接连接文件所有者的计算机,建立点对点连接
- 文件传输:文件直接从文件所有者的计算机传输到请求者的计算机,而不经过中央服务器。这种方式大大提高了传输效率,并减轻了中央服务器的负担
3.Web应用
3.1 Web应用结构与协议
Web应用
使用客户端-服务器通信方式,客户端与服务器之间使用HTTP/HTTPS协议进行通信
服务器:
接受并处理HTTP请求,返回HTTP响应。主要包括:
- Web页面(HTML文档):包含多种对象和链接‘
- Web对象(静态/动态对象):可以是HTML文档、图像文件、视频文件、音频文件等
- URL(统一资源定位符):对象之间的寻址依靠URL
客户端:
发送请求,接受并解析响应
3.2 HTTP协议
3.3 HTTPS协议
3.4 Web缓存技术
目的:
在不访问服务器的情况下满足客户端的HTTP/HTTPS请求
意义:
- 缩短客户端的响应时间
- 减少服务器的并发量
在客户端-服务器中间架设代理服务器用来保存缓存
- 当clientA发起HTTP请求某资源时,该HTTP会先到达代理服务器,代理服务器优先在自己的数据库中查找。如果有相应资源,直接返回给clientA;如果没有,则向原始服务器发送HTTP请求,原始服务器返回响应后,代理服务器先缓存该资源,再返回给clientA
- 当clientB再次请求相同资源时,HTTP请求将不会到达原始服务器,而是由代理服务器返回资源,一定程度上减轻了服务器的压力
Question1:
如果当clientB发送请求时,该资源已经经历了一次版本更新,如何保证获取到最新版资源?
Answer1:
当代理服务器收到HTTP请求时,代理服务器会一个HTTP请求检测该资源的版本是否和原始服务器中的一致。如果版本一致,原始服务器会返回304 Not Modified
,告诉代理服务器版本一致;如果版本不一致,原始服务器会返回最新版资源,代理服务器缓存后再返回给clientB
Question2:
既然每次代理服务器收到请求之后都会跟原始服务器检测版本,会不会加重服务器负担?
Answer2:
当版本一致时,原始服务器只会返回304 Not Modified
,并不携带额外资源,相较于客户端直接访问服务器的负担会小很多
4.Email应用
4.1 Email应用的构成
Email应用的构成
- 邮件客户端(user agent):撰写、发送、接收和管理电子邮件的应用程序
- 邮件服务器:处理电子邮件的传输和存储的计算机,负责在用户之间传递邮件,并储存用户的邮件数据
- SMTP协议(Simple Mail Transfer):定义了邮件在互联网上传输的标准
4.2 Email应用示例
A想发送一封邮件给B,该邮件会先传输到A对应的服务器③,再传输给B对应的服务器⑤,等到B上线的时候再接收邮件
Question:
为什么邮件不能直接发送到B?
Answer:
因为B不一定在线。想直接发送到B的前提是A和B要建立连接,但如果B不在线就无法建立连接,所以无法直接发送到B。但是B对应的服务器⑤一定在线,服务器⑤会保存该邮件等到B来接收
4.3 SMTP协议
概述:
- SMTP协议:简单邮件传输协议
- 使用C/S结构工作在TCP的25号端口
- 持久连接
交互过程:
- 三次握手建立连接(传输层再详细介绍)
- 身份认证
- 邮件传输
- 断开连接
命令/响应交互模式
- 命令(command):ASCII文本
- 响应(response):状态代码和语句
协议格式:
头部(header):
包含邮件的元信息,如发件人、收件人、主题等。常见头部字段如下:
- From:发件人邮箱
- To:收件人邮箱
- Subject:邮件主题
- Date:发送日期
- Contect-Type:正文类型(body中的格式)
空行:
用于分割头部和body
正文(body):
邮件的实际内容
注意:根据RFC5321规定,传统的SMTP协议使用7为ASCII字符集进行通信,这意味着所有的SMTP命令、响应和header都必须是ASCII字符。因为SMTP协议必须使用ASCII字符集,直接传输非ASCII数据(如二进制文件)时会出问题,为了解决这个问题。引入了MIME(多用途互联网邮件扩展),允许在电子邮件中使用非ASCII数据
4.4 POP3
客户端向服务器发送电子邮件的时候使用SMTP协议,但客户端读取服务器中的邮件时使用邮件访问协议(Post Office Protocol),本文介绍POP3协议
概述:
- POP3:邮局协议版本3(Post Office Protocol-Version 3)
- 作用是将存储在邮件服务器上的电子邮件离线下载到本地
- 使用C/S结构工作在TCP的110号端口
交互流程:
Question:
为什么上面获取某一封邮件后,要删除该邮件呢?
Answer:这和POP3协议的访问模式有关
访问模式:
(1)下载并删除模式:
客户端下载邮件后删除该邮件
- 优点:节省空间
- 缺点:如果用户换了客户端,就无法重读该邮件
(2)下载并保持模式:
客户端下载邮件不删除该邮件
- 优点:不同的客户端都可以保留邮件的拷贝
- 缺点:占用大量空间
5.P2P应用
5.1 文件分发耗时分析
Question:
从一个服务器向N个节点分发一个文件需要多长时间?
客户端-服务器结构
- 服务器向网络核心中串行地发送N个文件,所需时间:N×F/us
- 节点i下载,所需时间:F/min(di)
该结构所需时间dcs =
max{N×F/us,F/min(di)}
P2P结构
- 服务器必须向网络核心中发送一个副本,所需时间:F/us
- 节点i下载,所需时间:F/min(di)
- 总下载量:NF,总上传速率: U s + ∑ u i Us+\sum_{}^{} u_i Us+∑ui
该结构所需时间dP2P = max{F/us,F/min(di), N ∗ F / ( U s + ∑ u i ) N*F/(Us+\sum_{}^{} u_i) N∗F/(Us+∑ui)}
客户端-服务器结构 VS P2P结构
随着节点数量的不断增加,C/S结构完成文件转发所需的时间线性增长,P2P结构完成文件转发所需的时间趋于不变
5.2 P2P文件分发协议:BitTorrent
概述:
BitTorrent是最广泛使用的P2P文件分发协议之一。它通过将文件分割成小块(pieces),并允许多个用户同时下载和上传这些小块,从而实现高效的文件分发
工作原理:
- 种子文件(.torrent): 包含有关要下载的文件的信息,如文件大小、名称、tracker服务器的地址等
- Tracker服务器: 跟踪参与下载的peer,并帮助peer之间建立连接。
- peer:BitTorrent网络中任何一个正在下载或上传文件的节点
- chunk:在BitTorrent协议中,文件被分割成多个较小的部分,每个部分称为一个chunk
场景假设:
现在有一个peer(Alice)加入该torrent组,一开始Alice没有任何chunk,随着时间的推移会逐渐积累。Alice会向tracker注册并获取节点清单,与某些节点建立连接以获取目标chunk(稀缺优先),在获取chunk的同时Alice也会向其他peer发送chunk(tit-for-tat)
Question:
上述提到的稀缺优先和tit-for-tat是什么?
5.3 索引
P2P结构中的
索引
:信息到节点位置(IP地址+端口号)的映射
应用场景:
(1)文件共享
- 利用索引动态跟踪节点所共享的文件的位置
- 节点告诉索引它拥有哪些文件
- 节点搜索索引,从而获知能够得到哪些文件
(2)即时消息(QQ)
- 索引负责将用户名映射到位置
- 当用户开启即时通讯(Instant Message)应用时,需要通知索引它的位置
- 节点检索索引,确定用户的位置
5.3.1 集中式索引
- 节点加入时,向中央目录服务器登记本节点的IP地址和拥有的资源
- 节点在中央目录服务器中搜索索引,从而获知目标资源在哪个节点中
- 节点之间直接建立连接来请求资源
缺点:
-
单点失效问题:中央服务器崩溃会导致整个网络无法搜索资源
-
性能问题:中央服务器需要处理所有请求,导致负载过高
5.3.2 分布式索引
- 每个节点对它共享的文件进行索引,且只对它共享的文件进行索引
- 所有节点构成分布式网络:任意两个节点间有TCP连接,则构成分布式网络的一条边
- 节点通过洪泛式查询搜索资源
缺点:
-
网络拥塞:在大规模网络中,大量的查询请求会导致网络拥塞
-
资源消耗:每个节点都需要处理大量的查询请求
-
重复查询:同一个查询可不能会被多次处理,导致不必要资源浪费
5.3.2 混合式索引
介于集中式索引和分布式索引的方法
- 整个网络中分为普通节点和超级节点
- 超级节点和其子节点(普通接待你)之间维持TCP连接,超级节点之间维持TCP连接
- 超级节点负责跟踪子节点的内容