【计网】应用层概述

89 阅读10分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情

概览

2.1 Principles of network applications
Application layer protocol and Underlying transport protocol (such as SMTP, POP3,Telnet, HTTP, FTP )
Transport service requirements of common apps

2.2 Web and HTTP
Function of URL
What is the transport layer protocol of HTTP?
Process of requesting objects by HTTP

2.5 DNS
Functions of DNS: hostname to IP address translation
Why not centralize DNS?
What are the DNS servers that are queried (in order) to find an specified IP address

Web 和 HTTP

首先是一些行话(jargon)

  • 网页由对象组成
  • 对象可以是HTML文件,JPEG图像,Java小程序,音频文件,... 网页由基本HTML文件组成,其中包括几个引用的对象
  • 每个对象都可以通过 URL 进行寻址
  • 网址示例:

image.png

HTTP: hypertext transfer protocol 超文本传输协议 客户端/服务器模型

  • 客户端:请求、接收、“显示”Web 对象的浏览器
  • 服务器:Web 服务器发送对象以响应请求

HTTP使用TCP作为支持的运输层协议
Uses TCP: 三次握手

  • 客户端启动 TCP 连接(创建套接字)到服务器,端口 80
  • 服务器接受来自客户端的 TCP 连接
  • 在浏览器(HTTP 客户端)和 Web 服务器(HTTP 服务器)之间交换的 HTTP 消息(应用层协议消息)
  • TCP 连接已关闭

HTTP是“无状态的” ,HTTP服务器不维护有关过去客户端请求的信息

维护“状态”的协议很复杂! 必须维护过去的历史记录(状态) 如果服务器/客户端崩溃,他们的“状态”视图可能不一致,必须进行协调

非持续连接和持续连接

  • Non-persistent HTTP 非持续连接
    • 最多通过 TCP 连接发送一个对象
    • HTTP/1.0 使用非持久性 HTTP
  • Persistent HTTP 持续连接
    • 可以通过客户端和服务器之间的单个 TCP 连接发送多个对象
    • HTTP/1.1 在默认模式下使用持久连接

非持续HTTP

假设用户访问 www.someSchool.edu/someDepartm…
1a. HTTP 客户端在端口 80 上的 www.someSchool.edu 处启动与 HTTP 服务器(进程)的 TCP 连接
1b. 主机 www.someSchool.edu 的 HTTP 服务器在端口 80 处等待 TCP 连接。 “接受”连接,通知客户端
2. HTTP 客户端将 HTTP 请求消息(包含 URL)发送到 TCP 连接套接字。消息指示客户端需要的对象
3. HTTP服务器接收请求消息,形成包含请求对象的响应消息,并将消息发送到其套接字中
4. HTTP 服务器关闭 TCP 连接(非持续连接发完一个就关闭了)。
5. HTTP 客户端接收包含 html 文件的响应消息,显示 html。 解析 html 文件,找到引用的对象

往返时间 Round-Trip Time(RTT)的定义:发送小数据包(短分组,不考虑传输时延,但是包含传播时延、交换机路由器排队时延、分组处理时延)从客户端到服务器再返回的时间。
响应时间:

  • 一个 RTT 用于启动 TCP 连接
  • 一个 RTT 用于 HTTP 请求,返回 HTTP 响应的前几个字节
  • 文件传输时间 总计=2RTT+传输时延总计 = 2RTT+ 传输时延

非持久性 HTTP 缺点:

  • 每个请求的对象都要建立和维护一个全新连接
    • 每个对象 2 个 RTT (一个创建TCP一个传数据)
    • 每个 TCP 连接的操作系统开销
  • 浏览器通常打开并行 TCP 连接来获取引用的对象

持续 HTTP

服务器在发送响应后保持连接打开状态,通过开放连接发送同一客户端/服务器之间的后续 HTTP 消息

  • Persistent without pipelining: 非流水线
    • 仅当收到以前的响应时,客户端才会发出新请求
    • 每个引用的对象对应一个RTT
  • Persistent with pipelining:流水线
    • HTTP/1.1 中的默认值
    • 客户端在遇到引用的对象时立即发送请求
    • 对于所有引用的对象,只需一个 RTT

HTTP报文

编码(扩展内容)

在不同的网络层中,数据以不同的编码传输

物理层(曼彻斯特代码)

image.png 数据链路层: Character stuffing字符填充

image.png bit stuffing位填充

image.png

应用层:文本编码(ASCII、UTF-8、UTF-16)
Base64编码可用于在HTTP环境下传递较长的标识信息 base64_百度百科 (baidu.com) ASCII 到 Base64 3 字节到 4 字节 小于 3 字节 用“=”填充

image.png

请求报文

ASCII编码(易读)

报文格式:

GET /somedir/page.html HTTP/1.1   \r\n   #请求行request line,包含方法字段、URL字段和HTTP版本字段
Host: www.someschool.edu             #第二行及以后为首部行header lines
User-agent: Mozilla/4.0
Connection: close 
Accept-language:fr    
CRLF#最后一行再加一个回车

请求报文格式:

  • SP:Space 空格键\0
  • CR:Carriage Return,对应ASCII中转义字符\r,表示回车
  • LF:Linefeed,对应ASCII中转义字符\n,表示换行
  • CRLF:Carriage Return & Linefeed,\r\n,表示回车并换行 image.png

HTTP/1.0

  • GET url的问号后面的信息往往就是提交的信息,提交信息也可以GET
  • POST 网页通常包含表单输入,输入上传到实体正文中的服务器
  • HEAD (通常用来故障检测)不返回请求对象

HTTP/1.1 GET, POST, HEAD PUT 上传对象到Web服务器上的URL指定地址 DELETE 删除URL指向对象

响应报文

HTTP/1.1 200 OK    #status line状态行(协议、状态码、状态信息)
Connection close    #header lines后面首部行
Date: Thu, 06 Aug 1998 12:00:15 GMT 
Server: Apache/1.3.0 (Unix) 
Last-Modified: Mon, 22 Jun 1998 …... 
Content-Length: 6821 
Content-Type: text/html

data data data data data ...    #entity body 实体体,POST方法时才有

一些状态码:

  • 200 确定OK 请求成功,此消息后面的请求对象
  • 301 永久移动Moved Permanently 请求的对象已移动,此消息指定了新位置 - - 400 错误请求Bad Request 服务器无法理解的请求消息
  • 404 未找到Not Found 在此服务器上找不到请求的文档
  • 505 HTTP 版本不受支持 HTTP Version Not Supported

Cookies

用来保持用户和服务器间的“状态”,携带在HTTP报文当中

四个组成部分: 1) HTTP 响应消息的 cookie 首部行 2) HTTP 请求消息中的 Cookie 首部行 3)保存在用户主机上的cookie文件,由用户的浏览器管理 4)网站的后端数据库

首次访问特定网站 当初始 HTTP 请求到达站点时,站点会创建: 唯一标识 ID 的 该ID的后端数据库入口(create entry)

web缓存(代理服务器)

不涉及源服务器的情况下满足客户端需求

  • 用户设置浏览器:通过缓存进行 Web 访问
  • 浏览器将所有 HTTP 请求发送到缓存
    • 如果是缓存中的对象:缓存返回对象
    • 如果不是,从源服务器缓存请求对象,然后将对象返回到客户端 image.png

好处:

  • 减少客户端请求的响应时间
  • 减少机构接入链路上的流量。
  • 缓存密集的互联网:使“poor”内容提供商能够有效地交付内容(但P2P文件共享也是如此)

总时延 = 互联网时延 + 接入延时 + 局域网时延 如果接入链路传输速度慢,流量强度太大,则接入时延大大增加

但是提升接入链路传输速度成本高,因此采用web缓存,访问缓存中有的内容时只有局域网时延,如CDN(Content Distribution Network)内容分发网络

条件GET方法:

HTTP的一种机制,用于允许缓存器证明它的对象是最新的

目标:如果缓存具有最新的缓存版本,则不发送对象

实现动作: web缓存:在 HTTP 请求中指定缓存副本的日期,条件GET的首部行中包含 If-modified-since: <date> Microsoft Office Translator

服务器:如果缓存的副本是最新的,则响应不包含任何对象(实体为空),状态行显示为: HTTP/1.0 304 Not Modified 如果不是,则状态行 正常显示 HTTP/1.0 200 OK'

DNS(Domain Name System)域名系统

域名系统:

  • 分层的DNS服务器实现的分布式数据库
  • 是一个应用层协议,使主机能够查询分布式数据库(地址/名称转换)
    • 核心互联网功能,作为应用层协议实现
    • 网络“边缘”的复杂性 ,DNS正式采用边缘的客户端和服务器来实现地址/名称转换
  • 运行在UDP之上

提供的服务:

  • 主机名到 IP 地址的转换
  • 主机别名/规范(Canonical)主机名转换
  • 邮件服务器别名/规范主机名转换
  • 负载均衡:
    • 复制的 Web 服务器:一个规范名称的 IP 地址集
    • 不同时刻访问同一个网址,所访问的IP可能不同

集中式的缺点:

  • single point of failure 单点故障
  • traffic volume 通信容量
  • distant centralized database 数据库距离太远
  • maintenance 维护成本

分布式、层次数据库

3种类型的DNS服务器:根DNS服务器、顶级域(Top-Level Domain如com、org、cn、jp、edu等等)DNS服务器、权威DNS服务器(机构提供公开可访问的DNS记录)

客户希望找到www.amazon.com 的IP:(从后往前,最开始是根服务器)

  • 客户端查询根服务器以查找 com DNS 服务器
  • 客户端查询 com DNS 服务器以获取 amazon.com DNS 服务器
  • amazon.com DNS 服务器进行客户端查询以获取 www.amazon.com 的 IP 地址

本地DNS:

  • 严格来说不属于层次结构
  • 每个ISP(住宅ISP,公司,大学)都有一个, 也称为“默认名称服务器”
  • 当主机进行 DNS 查询时,查询将发送到其本地 DNS 服务器。充当代理,将查询转发到层次结构中

根DNS:

  • 与 UDP 端口 53 通信(576 字节,在 IPv4 中还有 20 字节IP header和 8 字节UDP header)
  • 为了获得最佳兼容性,DNS报文特意限制为 512 字节

查询过程:使用了递归查询(从请求主机到本地服务器)和迭代查询(其他)
迭代查询: 已联系的服务器回复要联系的服务器的名称
递归查询: 将名称解析的负担放在联系的名称服务器上
image.png

DNS缓存

一旦(任何)域名服务器learn域名/地址映射,它就会缓存映射 一段时间后缓存超时(消失) 通常缓存在本地DNS服务器中的 TLD(顶级域) 服务器 因此,根域名服务器不经常访问

DNS记录

分布式数据库存储资源记录resource records (RR)

image.png

  • Type=A
    • name is hostname
    • value is IP address
  • Type=NS
    • name is domain(域) (e.g. foo.com)
    • value is hostname of authoritative name server for this domain(知道如何获取该域的权威DNS主机名)
  • Type=CNAME
    • name是别名
    • value is canonical name(规范的名字)
  • Type=MX
    • name是别名
    • value is canonical name of mailserver associated with name

具体实践:

  • 通常在某特定主机名的权威DNS服务器中,应该只包含A类型记录
  • 其他DNS服务器包含NS记录和包含权威DNS服务器IP地址的A记录
  • 包含CNAME、MX别名类型的,也应包含一个A类型记录用于找对应主机的IP地址 例子: image.png

在DNS数据库中插入记录

例如:公司“Ubipass” 在 DNS 注册商处注册名称 ubipass.com

  • 提供权威名称服务器的名称、IP 地址(主服务器和辅助服务器)
  • 注册商将两个RR插入到com TLD(顶级域)服务器(非权威含NS和A)中: (ubipass.com,dns1.ubipass.com,NS) (dns1.ubipass.com, 212.212.212.1, A
  • www.ubipass.com 创建权威服务器 A 型记录,插入 mail.ubipass.com 的 MX 记录

DNS报文

  • identification:16位数字用于查询,回复查询使用相同的数字
  • flags:
    • query or reply (1 bit) 是查询报文还是回复报文
    • recursion desired 是否希望递归
    • recursion available 是否支持递归
    • reply is authoritative 是否是权威服务器的响应
  • questions:包含正在进行的查询的名称字段、类型字段
  • answers:包含对最初请求的响应RR(请求的主机有多个IP也就有多条RR)
  • authority:包含了其他权威服务器的记录
  • additional:包含其他有帮助的记录 image.png