Network Application Architectures
- C/S (client-server)
- 服务器始终运行,固定的IP地址和周知的端口,扩展性差
- 客户端主动与服务器通信,不直接与其他客户端通信
- P2P
- 没有一直运行的服务
- 每一个节点既是客户端也是服务端,具有自扩展性(self-scalability)
Common protocols of Application Layers
Application | Application-layer Protocol | Transport-layer Protocol |
Email | SMTP | TCP |
Remote Terminal Access | Telnet | TCP |
Web | HTTP | TCP |
File Transfer | FTP | TCP |
Streaming Multimedia | HTTP | TCP |
Internet telephony | SIP/RTP | UDP/TCP |
Web & HTTP
Web的应用层协议是超文本传输协议(HTTP)。HTTP由两个程序实现:客户程序和服务程序(C/S架构)。客户程序和服务程序运行在不同的端系统中,通过HTTP报文进行会话。
通常来说,Web浏览器实现了HTTP的客户端,Web服务器实现了HTTP的服务端
Introduction to HTTP
- HTTP采用TCP作为支撑传输协议
- 客户首先发起一个与服务器的TCP连接,服务器接受客户的TCP连接
- 在浏览器和Web服务器之间交换HTTP报文
- HTTP是无状态的:服务器不维护关于客户的任何信息
HTTP connection
- 非持续连接(non-persistent connection)
- 最多只有一个对象在TCP连接上发送
- 下载多个对象需要多个TCP连接
- Example : HTTP/1.0
假设用户输入网址
www.someSchool.edu/someDept/home.index
,包含一个HTML文件和10个JPEG图形,会发生的事件- HTTP客户端在端口号80发起一个到服务器的连接;位于主机的HTTP服务器在80号端口等待连接,接受连接并通知客户端
- HTTP客户端向TCP连接的套接字发送HTTP请求报文,报文表示可u后端需要对象
someDept/home.index
- HTTP服务器接收请求报文,检索出被请求的对象,并将对象封装在一个响应报文,通过其套接字向客户端发送
- HTTP关闭TCP连接
- HTTP客户端收到包含HTML文件的响应报文,并对文件进行检查,得到图片的引用
- 重复i - iv ,直到图片传输完成
往返时间RTT: 一个小的分组从客户端到服务器再回到客户端的时间。在上述例子中,一个RTT用来发起TCP连接,一个RTT用来HTTP请求并等待响应,所以每个对象的传输时间为 2RTT + 传输时间
- 持续性连接
- 非流水方式的持久HTTP
- 流水方式的持久HTTP:客户端遇到一个引用对象就立刻产生一个请求
- Example : HTTP / 1.1
服务器再发送响应后,仍保持TCP连接,在相同客户端和服务器之间的后续请求和响应报文通过相同的连接进行传送、
HTTP Message Format
HTTP Request Message
一个典型的HTTP请求报文
GET /somedir/page ・html HTTP/1.1 Host: www.someschool.edu.cn Connection: close User-agent: Mozilla/5.0 Accept-language: fr
- 报文使用ASCII码
- HTTP报文的第一行为请求行,其后继行为首部行
- 请求行有3个字段:方法字段、URL字段和HTTP版本字段
- 常用的方法字段:
GET
,POST
,HEAD
,PUT
,DELETE
- 首部行的作用:提供信息给Web代理高速缓存
Connection: close
: 告诉服务器不使用持续连接,服务器发送完请求的对象后就关闭连接
GET
和 POST
方法对比GET
有长度限制,因为其携带在url中
POST
比GET
安全,因为其数据放在request body中(两者都不安全,因为HTTP是明文传输)
GET
只支持ASCII码,只支持url编码
GET
会被浏览器主动缓存
GET
回退是无害的,POST
则是再次发送请求
HTTP Response Message
上述请求的响应报文
HTTP/1.1 200 OK Connection: close Date: Tue, 18 Aug 2015 15:44:04 GMT Server: Apache/2.2.3 (CentOS) Last-Modified: Tuer 18 Aug 2015 15:11:03 GMT Content-Length: 6821 Content-Type: text/html (data data data data data ...)
- 响应报文包含三个部分:状态行,首部行(6行),实体体
- 状态行有三个字段:协议版本字段、状态码和响应状态信息
常用状态码:
200 OK
, 301 Moved Permanently
, 400 Bad Request
, 404 Not Found
, 505 HTTP Version Not Supported
Cookie
- Cookies的作用:保存用户状态,进行用户验证
- Cookies的四个组成部分:
- 在HTTP响应报文中有一个cookie首部行
- 在HTTP请求报文中有一个cookie首部行
- 在用户端系统中保留有一个cookie文件,由用户的浏览器进行管理
- 在Web站点有一个后端数据库
Web cache & Proxy server
- 使用Web缓存的原因:不访问原始服务器,降低客户端请求的响应时间,大大减少机构内部网络与Internet接入链路上的流量
- 用户首先设置浏览器,通过缓存访问Web, 浏览器将所有的HTTP请求发送给缓存
- 如果该对象已经存储在缓存中,直接返回
- 如果对象不存在,则由代理服务器请求原始服务器,再将对象返回给客户端
- 缓存既是客户端,也是服务器
- 条件GET方法:验证缓存器中的对象是最新的
电子邮件是一种异步通信媒介,主要有三个组成部分:用户代理(user agent),邮件服务器(mail server) 和简单邮件传输协议(SMTP, Simple Mail Transfer Protocol)
- 用户代理:邮件阅读器,可以撰写编辑和阅读邮件,如Outlook,Foxmail等
- 邮件服务器:邮箱中管理和维护发送给用户的邮件,输出报文队列,保持待发送邮件报文
邮件的发送过程:从发送方的用户代理开始,传输到发送方的邮件服务器,再传输到接收方的邮件服务器,然后在这里被分发到接收方的邮箱中。当接收方要在他的邮箱中读取该报文时,包含他邮箱的邮件服务器使用用户名和口令来鉴别其身份。如果发送方的服务器不能将邮件交付给接收方的服务器,则发送方的邮件服务器在一个报文队列中保存该报文并在之后再次尝试发送。
SMTP Protocol
- SMTP使用TCP可靠数据传输服务,有两个部分:运行在发送方邮件服务器的客户端和运行在接收方邮件服务器的服务器端
- SMTP为直接传输,不适用中介服务器,从发送方服务器直接送到接收方服务器
- SMTP传输的3个阶段:握手连接、传输报文、关闭连接
- SMTP使用持久连接
- SMTP要求报文为7位ASCII码
例:Alice给Bob发送报文的过程
- Alice使用用户代理撰写邮件并发送给
bob@nju.edu.cn
- Alice的用户代理将邮件发送到她的邮箱服务器,邮件存储在报文队列中
- SMTP客户端打开到Bob邮件服务器的TCP连接
- SMTP客户端通过TCP连接发送Alice的邮件
- Bob的邮件服务器将邮件放到Bob的邮箱
- Bob调用他的用户代理阅读邮件
Comparison between SMTP & HTTP
- HTTP是从Web服务器向Web客户传送文件(pull),TCP连接由想接收文件的机器发起;SMTP从一个邮件服务器向另一个邮件服务器传送文件(push),TCP连接是发送该文件的机器发起
- 都是用持久连接
- SMTP要求每个报文都采用7bit ASCII码格式编码,HTTP数据不受此限制
- HTTP将每个对象封装在单独的响应报文中,SMTP将所有对象放在一个报文中
多媒体邮件扩展(MIME):来表示文档、文件或字节流的性质和格式。它在IETF RFC 6838中进行了定义和标准化。在报文首部使用额外的行申明MIME内容类型
Mail Access Protocols
SMTP的作用是将邮件报文从发送方投递到接收方的邮件服务器。在接收端需要有一个协议来读取邮件(retrieve the email)。常用的邮件访问协议由POP3, IMAP以及HTTP
POP3
POP3,即邮局访问协议,是一种非常简单的邮件访问协议。当客户打开了一个到邮件服务器110端口的TCP连接以后,POP3就开始工作了。
POP3按照三个阶段进行工作:特许、事务处理以及更新。
- 特许(authorization):客户端发送明文形式的用户名和口令以鉴别客户
- 事务处理(transaction):用户代理取回报文,同时对报文做删除(取消删除)标记,获取邮件的统计信息
- 更新:在用户发出quit命令后,结束POP3会话,邮件服务器删除被标记为删除的报文
下载并删除模式存在的问题:邮件接收方可能是移动的,希望从多个不同的机器访问邮件报文;可以采用下载并保留模式
POP3在会话中是无状态的
IMAP
即因特网邮件访问协议,将每个报文与一个文件夹联系起来,允许用户用目录来组织报文;在会话中会保留用户状态,即目录名、报文ID之间的映射
DNS
- DNS = Domain Name System 域名系统
- DNS服务的必要性:IP地址可以标识主机和路由器,但通常IP地址不好记忆;但路由器喜欢定长的、有层次结构的IP地址。域名系统就是一种进行主机名到IP地址转换的目录服务
- DNS的设计思路
- 分层的、基于域的命名机制
- 若干分布式的数据库完成名字到IP地址的转换
- 运行在UDP上端口号53
- DNS主要处理网络边缘,仍属于应用层协议
- DNS的工作流程
- 同一台用户主机上运行着DNS应用的客户端
- 浏览器从上述URL中抽取出用户名
www.nju.edu.cn/index.html
, 并将这台主机名转给DNS应用的客户端 - DNS客户向DNS服务器发送一个包含主机名的请求
- DNS客户最终会收到一份回答报文,其中含有对应于该主机名的IP地址
- 一旦浏览器接收到来自DNS的IP地址,就能够向位于该IP地址的80端口的HTTP服务器发起一个TCP连接
例:考虑运行某用户主机的浏览器请求URL www.nju.edu.cn/index.html
, 主机获取IP地址的过程
- DNS主要目的
- 主要目的:实现主机名-IP地址的转换
- 其它目的:主机别名的转换、邮件服务器别名的转换、负载均衡
负载均衡:DNS用于一些冗余的服务器进行负载分配。繁忙的站点分布在多个服务器上,每台服务器都有不同的IP地址,所以主机名会和一个IP地址集合相联系。当客户对映射到某个地址的集合的名字发出了一个DNS请求时,该服务器用IP地址的整个集合进行响应,但在每个回答中循环这些地址次序。换句话说,客户总是向IP地址排在最前面的服务器发送报文。所以DNS就在这些荣誉的Web服务之间循环分配了负载。
Overview of how DNS works
DNS Name Space
DNS使用了分布式、层次数据库,有三种类型的DNS服务器
- 根DNS服务器
- 顶级域(Top-Level Domain, TLD)服务器
- 权威DNS服务器
DNS采用层级树状结构的命名方法。从根向下划分为几百个顶级域名,每个子域下面都可以划分成若干子域。
需要注意的是,域和物理网络无关,域遵从组织界限
Name Server
中心化存在的问题:单点故障、通信容量、时延、维护成本高
DNS协议将名字空间划分成若干域(zone),区域的划分有区域管理者自己决定
每个区域都有一个名字服务器(权威域名服务器),维护者所管辖信息的权威信息(authoritative record)
TLD服务器负责顶级域名和所有国家的顶级域名
DNS Record
区域名字服务器维护资源记录(RR, Resource Record)
格式:
(name, ttl, type, class, value)
TTL
: 生存时间,决定了资源记录应当从缓存中删除的时间
class
: 类别,对于Internet,值为IN
Type
Type | Name | Value | Function |
A | 主机名 | 主机名对应的IP地址 | 提供标准主机名到IP地址的映 |
NS | 域 | 该域名的权威服务器的域名 | 沿着查询链来路由DNS查询 |
CNAME | 别名 | 对应的规范主机名 | 提供一个主机名对应的规范主机名 |
MX | 别名 | 对应的邮件服务器的名字 | 获得邮件服务器的规范主机名 |
DNS Workflow
三大过程:应用调用解析器(resolver), 解析器作为客户向Name Server发送查询UDP报文, Name Server返回响应报文
本地DNS服务器:每个ISP都有一台本地DNS服务器,当主机发出DNS请求时,该请求会被发往本地DNS服务器,起到代理的作用,并将该请求转发到DNS服务器层次结构中
域名解析的详细过程
- 主机先向本地DNS服务器进行递归查询
- 本地DNS服务器采用迭代查询,向一个根域名服务器进行查询
- 根域名服务器告诉本地DNS服务器,下一次应该查询的顶级域名服务器的IP地址
- 本地DNS服务器向顶级域名服务器进行查询
- 顶级域名服务器告诉本地DNS服务器器,下一步查询权威服务器的IP地址
- 本地DNS服务器向权威服务器进行查询
- 权威服务器告诉DNS服务器查询主机的IP地址
- 本地DNS服务器将查询结果告知主机
DNS Caching
当某DNS服务器接收到一个DNS回答(如某主机名到IP地址的映射),它能将映射缓存在本地存储器中。
根服务器通常都在本地服务器中缓存,这使得根服务器不用经常被访问
如果情况变化,缓存结果和权威资源记录可能不一致,所以通常设置TTL(2天)。
DNS Message
- DNS查询报文和回答报文格式相同
- 前12个字节为首部区域,分为标识符(16bit)、标志(查询应答、希望递归、递归可用、应答为权威)、问题数、回答RR数、权威RR数以及附加RR数
- 问题区域包含正在进行的查询信息,包括
- 名字字段:正在被查询的主机名字
- 类型字段:有关该名字的正被询问的问题类型(即RR中的Type)
- 回答区域:最初请求的名字的资源记录
- 权威区域:权威服务器的记录
- 附加区域:其他有帮助的记录
Insert new records
❗如何增加一个域?
- 在上级域的名字服务器中增加两条记录
- 新增子域的域名
- 域名服务器的地址
- 在新增自域的名字服务器上运行名字服务器,负责本域的名字解析