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)下载并保持模式:
客户端下载邮件不删除该邮件
- 优点:不同的客户端都可以保留邮件的拷贝
- 缺点:占用大量空间