应用层

学习《计算机网络——自顶向下方法》的总结,留以自用,打好基础


应用层协议原理

网络应用程序体系结构
主要有三类:
1.客户-服务器结构(Client-Server Architecture)
主要应用有:Web、FTP、Telnet、电子邮件等;

2.对等P2P结构(Peers-to-Peers Architecture)
文件共享(BitTorrent)、p2p下载加速器(迅雷)、网络电话(Skype)等;

3.混合(Client-Server + P2P)
即时通信应用——服务器跟踪用户IP地址,用户之间通过P2P直接发送接收报文(message)。

进程通信
网络中进行通信是实际是进程,不同主机的不同进程之间交换报文(message)来相互通信。

  • 主机(host):可以被分配到IP地址的设备就可以认为是主机(host)或端系统(end system)
  • 进程(process):可以认为程序是指令、数据及其组织形式的描述,进程是程序的实体

客户和服务器进程
一般情况下,我们可以认为发起通信的进程标识为客户(client),等待联系的进程是服务器(server)
例如:

  • 浏览器 - Web服务器交换报文
  • P2P 文件从一个对等方的进程传输到另一个counterpart的进程

进程与计算机网络之间的接口

  • 套接字(Socket),是同一台主机内应用层与传输层之间的接口,是应用程序和网络之间的API

进程寻址
主机地址(IP地址)+ 接收进程标识符(端口号)

Internet提供的传输层协议

  • TCP服务——面向连接,全双工,可靠的数据传送服务,提供拥塞控制

  • UDP服务——无连接,不可靠数据传送服务
    注意TCP和UDP都无加密机制,但TCP可以附加安全套接字层SSL加密,SSL实现在应用层。
    Internet传输层协议不提供的服务

  • 能为时间敏感应用提供满意的服务,但不提供任何定时(timing,感觉这个概念更接近于网络延时log)或带宽(throughput)保证
    常见应用所需应用层协议
    常见应用所需应用层协议

应用层协议定义
定义了运行在不同端系统上应用程序进程如何相互传递报文

  • 报文类型,如请求报文,响应报文
  • 报文类型的语法
  • 报文的字段含义
  • 何时、如何发送报文,响应规则

一些应用层具体应用

Web、FTP、电子邮件、DNS、BitTorrent、DHT
这些是应用层的一些具体应用


Web和HTTP


统一资源定位符(URL Uniform Resource Locator)
作为文件,网页需要有一个唯一的标识符来和其他网页区别开,为了定义一个网页,我们需要4个标识符:获取网页的协议、主机、端口、路径。
如下所示:

scheme://host.domain:port/path/filename

  • scheme - 定义Internet服务的类型。最常见的类型是 http
  • host - 定义域主机(http 的默认主机是 www)
  • domain - 定义Internet域名,比如 w3school.com.cn
  • :port - 定义主机上的端口号(http 的默认端口号是 80)
  • path - 定义服务器上的路径(如果省略,则文档必须位于网站的根目录中)。
  • filename - 定义文档/资源的名称
    URL Schemes

HTTP概况

  • HTTP:The HyperText Transfer Protocol
  • Web的应用层协议是超文本传输协议(HTTP),HTTP采用client-server结构,通过交换HTTP报文进行会话,使用80端口
  • HTTP通过URL定位web服务器资源(网页、图片等)。URL地址包括主机名和路径名,Web服务器用于存储Web对象,每个对象由URL寻址
  • HTTP使用TCP作为其支撑传输层协议
  • HTTP是无状态协议(stateless protocol),即不保存client的信息

非持续连接和持续连接

  • Non-persistent:每次的请求、响应在不同的TCP连接中
  • persistent:每次的请求、响应在同一个TCP连接中
  • Round-trip time(RTT)往返时间——packet-propagation delays + packet queuing delays + packet-processing delays
    请求与接收一个HTML对象所需的时间,如下图所示。一个TCP连接时间:2个RTT+传输HTML文件的时间

简单示意图请求与接收一个HTML对象的时间

1.采用非持续连接的HTTP

  • 每个TCP连接只传输一个请求报文和一个响应报文
  • 每个连接在客户和服务器都要分配TCP的缓冲区和保持TCP变量
  • TCP连接三次握手,第三次握手向TCP连接发送一个HTTP请求报文
  • 缺点:
    ​ 1.必须为每个请求建立和维护一个全新的连接,可能会给Web服务器带来严重的负担
    ​ 2.每一个对象经受两倍RTT的交付时延,一个用于创建连接,一个用于请求和接收一个对象

2.采用持续连接的HTTP(default)

服务器发送响应后保持该TCP连接打开,经过一定时间间隔(超时)未被使用,HTTP服务器关闭该连接

HTTP报文格式

——(request message)请求报文

GET /somedir/page.html HTTP/1.1---------------------------------Request line
Host: www.someschool.edu-----------------------------------------Header line
Connection:close-------------------------------------------------Header line
User-agent: Mozilla/5.0------------------------------------------Header line
Accept-language: fr----------------------------------------------Header line
...
  • Request line请求行

  • method field——主要GET, POST, HEAD, PUT, DELETE

    • GET 从指定的资源请求数据。
    • POST 向指定的资源提交要被处理的数据,例如表单
    • HEAD 与 GET 相同,但只返回HTTP报头,不返回文档主体。服务器会对请求HTTP报文产生响应,并不返回请求对象,用于调试跟踪
    • PUT 用于client上传对象
    • DELETE 删除web服务器上的对象
  • URL field

  • HTTP version field

  • Header lines首部行

  • Host: Web proxy caches需要(Web代理高速缓存使用)

  • Connection:close——浏览器告诉服务器使用No-persistent

  • User-agent:浏览器类型

  • Accept-language

  • cookies

  • Blank line空白行——\r\n

  • Entity body实体体——用于POST method

——(response message)响应报文

  • 状态行(status line)
    • 状态码(status code)200、301、400、404…详见此处
  • 首部行(header line)
  • blank line
  • entity body

用户与服务器的交互:cookie

服务器希望限制用户访问,或希望把内容与用户身份联系起来
用户第一次请求服务器—>响应报文的响应头(首部行)带一个cookie—>浏览器管理cookie—>请求报文带cookie—>服务器根据cookie识别用户

Keeping user state with cookies

Web缓存(proxy server代理服务器)

  • web cache是可以代表初始web服务器来满足HTTP请求的网络实体
  • web cache拥有自己的储存空间,并且将最近请求的对象保存在储存空间中
  • web cache既可以是server也可以是client
  • 可以显著的减少client的请求响应的时间
  • 大大减少接入链路到Internet的网络流量,同时整体上减少Internet上的web流量
    Clients requesting objects through a Web cache
    与CDN(内容分发网络)结合,使大量流量实现了本地化

条件Get方法
虽然web cache很有用,但会引入一个问题,储存在cache上的对象可能会过期,所以有了条件GET。
conditional GET:允许cache验证对象是否为最新的

web cache向server请求对象

GET /fruit/kiwi.gif HTTP/1.1
Host: www.exotiquecuisine.com
If-modified-since: Wed, 7 Sep 2011 09:23:24

若server对象无更新,server响应web cache

HTTP/1.1 304 Not Modified
Date: Sat, 15 Oct 2011 15:39:29
Server: Apache/1.3.0 (Unix)

(empty entity body)
  • 请求报文中包含“If-Modified-Since:” 位于header line
  • 304 Not modified

文件传输协议FTP


  • 基于TCP
  • FTP使用两个并行TCP连接传输文件
  • 控制连接(control connection):用于两主机之间传输控制信息,如:用户标识、口令、操作命令,贯穿整个用户会话期间,因此整个会话中,FTP服务器必须保存用户的状态信息
  • 数据连接(data connection):传输文件,一个文件一个连接,非连续
  • FTP的控制信息是带外传送的(如上),HTTP属于带内传送
    FTP

电子邮件


STMP

  • STMP:Simple Mail transfer Protocol
  • 很古老。。。
  • 需要将二进制多媒体数据编码为ASCII码,接收方再还原
  • port 25
  • persistent
  • 不使用中间邮件服务器发送邮件,若接收方邮件服务器没开机,报文会保留在发送方邮件服务器上等待新的尝试

SMTP与HTTP对比

  • HTTP是拉协议,SMTP是推协议
  • HTTP把每个对象封装到自己的相应报文中,SMTP把所有报文放在一个报文中

邮件访问协议

  • POP3:简单
  • IMAP:有各种文件操作
  • HTTP:基于Web的电子邮件

client的代理(qq邮箱客户端)—>SMTP/HTTP—>QQ邮箱服务器—>SMTP—>163邮箱服务器—>POP3/IMAP/HTTP—>client的代理(163邮箱Web端)


DNS:因特网的目录服务


  • DNS:Domain Name System
  • 一个由分层的DNS服务器实现的分布式数据库
  • DNS也是一个允许主机查询这个分布式数据库的应用层协议
  • DNS提供的服务:主机名—>IP地址转换的目录服务
  • DNS(域名系统) = DNS服务器 + DNS协议
  • DNS协议运行在UDP上,53号端口
  • 通常由其他应用层协议使用,包括HTTP、SMTP、FTP

主机别名
邮件服务器别名,允许一个公司的邮件服务器和Web服务器使用相同主机名,可以利用主机别名来实现负载分配——一个站点若有多台服务器(多IP地址对应一个主机名),DNS服务器循环回答这些地址

DNS工作机理

分布式、层次数据库
DNS Architecture
层次结构

  • 根DNS服务器:13个根服务器(群),世界各地
  • 顶级域(DNS)服务器:com/org/edu/uk/cn,由世界各公司维护
  • 权威DNS服务器:自己维护,或存储在某服务提供商的一个权威服务器中
  • 本地DNS服务器:当主机发出DNS请求时,先发往本地服务器,若无缓存,转发到DNS服务器层次结构中的根DNS服务器,迭代返回各层次DNS服务器地址,最后才能直接查询主机名对应的IP地址

递归查询、迭代查询,通常从请求主机到本地DNS服务器的查询是递归的,其余的查询是迭代的

DNS缓存
允许本地DNS绕过查询链中的根DNS服务器
有缓存时间

DNS记录和报文

  • 资源记录(如果你在阿里的万网上注册一个域名,是需要这个配置的)
  • A:主机名-IP地址,如(relay1.bar.foo.com, 145.37.93.126, A)
  • NS:域名-DNS服务器主机名, 如(foo.com, dns.foo.com , NS)
  • CNAME:别名-其他服务规范主机名,如( foo.com, relay1.bar.foo.com,
    CNAME)
  • MX:别名-邮件服务器规范主机名(foo.com, mail.bar.foo.com, MX)
  • DNS报文
  • 查询报文
  • 回答报文

在DNS数据库中插入记录
向某注册登录机构注册域名时(如万网),需要提供基本和辅助权威DNS服务器的名字和IP地址

安全性

  • DDoS(分布式拒绝服务)带宽泛洪攻击:向处理如.com域的域名服务器发送大量DNS请求,使得大部分合法请求无法获得响应
  • DNS毒害(污染):给你返回假的或不能用的IP地址。比如中国的『墙』。所以如果你能拿到google的当前IP地址(百度搜的到),手动在hosts里配置,是可以做到直接访问谷歌服务器的。说到翻墙,一般大家都是用某种方法配置一台海外服务器当做中转(国家一般不墙这种个人服务器),来访问墙外服务器的,比如shadowsocks,shadowrocket之类的软件可以用来配置中转服务器。
  • DNS反射攻击:请求中冒充目标主机源地址,大量请求DNS服务器,DNS就大量向源地址主机发送回答,淹没目标主机

P2P应用


P2P文件分发(BitTorrent)

在P2P文件分发中,每个对等方能重新分发它所有的该文件的任何部分,可以协助服务器分发

P2P体系结构的扩展性
最小分发时间,对等方N越大,P2P的最小分发时间越小
对等方除了是比特的消费者外还是他们的重新分发者

BitTorrent

P2P文件共享协议,参与一个特定文件分发的所有对等方结合被称为一个洪流(torrent),在一个洪流的对等方彼此下载等长度的文件块,可以随时离开洪流,也可继续向其他对等方上载

  • Alice加入某洪流时,会在追踪器里进行注册,周期性通知追踪器它仍在洪流中。
  • 洪流随机从参与对等方的结合中选择一个子集,将他们的IP地址发给Alice,Alice维护这张对等方列表,视图与所有对等方建立并行的TCP连接。
  • Alice周期询问每个邻近对等方(连上的)他们有的文件块列表,她随时知道邻居有哪些文件块
  • Alice使用最稀缺优先技术,首先请求那些邻居们副本数量最少的块,使该文件块迅速分发,以均衡每个块在洪流中的副本数量
  • BitTorrent使用一种算法,Alice优先从像她传时速度最快的邻居(4个,每10s修改一次)那里获取文件块。
  • 每过30s,Alice也要随机选择另外一个对等方Bob,向他发送块。若Alice是Bob最快的前四快,Bob也是Alice的前4快,则Bob和Alice互相发送数据。
  • 每过30s换一个新的对象,互相交换数据(一报还一报),为了使对等方能够找到彼此协调的速率上传
  • BitTorrent其他机制和变种片、流水线、随机优先选择、残局模型、反怠慢等机制
  • 变种:P2P直播流式应用,如PPLive和PPstream

分布式散列表(DHT)

  • 分布式、P2P版本的key-value数据库,在大量对等方上存储key-value值(键值对)
  • 分布式数据库用来定位拥有某key-value的对等方,然后向查询方返回该键值对
  • 环形DHT、对等方扰动