应用层

概述

• 每个应用层协议都是为了解决某一类应用问题,而问题的解决又往往是通过位于不同主机中的多个应用进程之间的通信和协同工作来完成的。应用层的具体内容就是规定应用进程在通信时所遵循的协议。

• 应用层的许多协议都是基于客户服务器方式。客户(client)和服务器(server)都是指通信中所涉及的两个应用进程。客户服务器方式所描述的是进程之间服务和被服务的关系。客户是服务请求方,服务器是服务提供方。

• 常用端口:

域名系统 DNS

DNS 是一个分布式数据库,提供了主机名和 IP 地址之间相互转换的服务。这里的分布式数据库是指,每个站点只保留它自己的那部分数据。

域名具有层次结构,从上到下依次为:根域名、顶级域名、二级域名…

动态主机配置协议DHCP

DHCP (Dynamic Host Configuration Protocol) 提供了即插即用的连网方式,用户不再需要手动配置 IP 地址(DHCP 配置的内容不仅是 IP 地址,还包括子网掩码、网关 IP 地址)等信息。

DHCP 服务器分配给 DHCP 客户的 IP 地址的临时的,因此 DHCP 客户只能在一段有限的时间内使用这个分配到的 IP 地址。DHCP 协议称这段时间为租用期。

• DHCP 服务器被动打开 UDP 端口 67,等待客户端发来的报文。
• DHCP 客户从 UDP 端口 68发送 DHCP发现报文(DHCPDISCOVER)。该报文被放入 UDP 中,广播到同一个子网的所有主机上。如果客户端和 DHCP 服务器不在同一个子网,就需要使用中继代理。
• 凡收到 DHCP 发现报文的 DHCP 服务器都发出 DHCP 提供报文(DHCPOFFER),因此 DHCP 客户可能收到多个 DHCP 提供报文。
• DHCP 客户从几个 DHCP 服务器中选择其中的一个,并向所选择的 DHCP 服务器发送 DHCP 请求报文(DHCPREQUEST)
• 被选择的 DHCP 服务器发送确认报文DHCPACK,进入已绑定状态,并可开始使用得到的临时 IP 地址了。

文件传送协议 FTP

文件传送协议 FTP (File Transfer Protocol) 是因特网上使用得最广泛的文件传送协议, FTP使用两个TCP连接:TCP控制链接、TCP数据连接:

  • 控制连接:标准端口为21,在整个会话期间一直保持打开,FTP 客户发出的传送请求通过控制连接发送给服务器端的控制进程,但控制连接不用来传送文件。
  • 数据连接:标准端口为20,实际用于传输文件。

根据数据连接是否是服务器端主动建立,FTP 有主动和被动两种模式:

  • 主动模式:服务端从20端口主动向客户端发起连接。
  • 被动模式:服务端在指定范围内的某个端口被动等待客户端发起连接

注意:主动模式要求客户端开放端口号给服务器端,需要去配置客户端的防火墙(需要在防火墙上开放20和21端口)。被动模式只需要服务器端开放端口号即可,无需客户端配置防火墙。但是被动模式会导致服务器端的安全性减弱,因为开放了过多的端口号。

按远程终端协议 TELNET

TELNET 是一个简单的远程终端协议,也是因特网的正式标准。

• TELNET 用于登录到远程主机上,并且远程主机上的输出也会返回。
• TELNET 可以适应许多计算机和操作系统的差异,例如不同操作系统系统的换行符定义。

电子邮件协议(SMTP, POP3, IMAP)

  • 发送邮件的协议:SMTP使用TCP 25端口。
  • 读取邮件的协议:POP3 使用110端口和 IMAP使用的端口是143。

SMTP:SMTP 只能发送 ASCII 码,而互联网邮件扩充 MIME 可以发送二进制文件。MIME 并没有改动或者取代 SMTP,而是增加邮件主体的结构,定义了非 ASCII 码的编码规则。

POP3:POP3 的特点是只要用户从服务器上读取了邮件,就把该邮件删除。但最新版本的 POP3 可以不删除邮件。

IMAP:IMAP 协议中客户端和服务器上的邮件保持同步,如果不手动删除邮件,那么服务器上的邮件也不会被删除。IMAP 这种做法可以让用户随时随地去访问服务器上的邮件。

超文本传送协议 HTTP

在万维网客户程序与万维网服务器程序之间进行交互所使用的协议,是超文本传送协议 HTTP (HyperText Transfer Protocol)。

HTTP 是一个应用层协议,它使用 TCP 连接进行可靠的传送。

URL

使用统一资源定位符 URL (Uniform Resource Locator)来标志万维网上的各种文档。URL有如下一般形式:

<协议>://<主机>:<端口>/<路径>

• <协议> ftp、http、News…
• <主机> 是存放资源的主机在因特网中的域名;
• <端口>/<路径> 有时可省略;

请求web服务的过程:

HTTP的报文结构:

HTTP 有两类报文:

• 请求报文——从客户向服务器发送请求报文。
• 响应报文——从服务器到客户的回答。
由于 HTTP 是面向正文的(text-oriented),因此在报文中的每一个字段都是一些 ASCII 码串,因而每个字段的长度都是不确定的。

报文由三个部分组成,即开始行、首部行和实体主体。在请求报文中,开始行就是请求行。包含了方法字段。

响应报文的开始行是状态行。状态行包括三项内容,即 HTTP 的版本,状态码,以及解释状态码的简单短语。

• 1xx :Informational(信息性状态码),表示通知信息的,如请求收到了或正在进行处理。

  • 100 Continue :表明到目前为止都很正常,客户端可以继续发送请求或者忽略这个响应。

• 2xx :Success(成功状态码),表示成功,如接受或知道了。

  • 200 OK
  • 204 No Content :请求已经成功处理,但是返回的响应报文不包含实体的主体部分。一般在只需要从客户端往服务器发送信息,而不需要返回数据时使用。
  • 206 Partial Content :表示客户端进行了范围请求,响应报文包含由 Content-Range 指定范围的实体内容。

• 3xx :Redirection(重定向状态码),表示重定向,表示要完成请求还必须采取进一步的行动。

  • 301 Moved Permanently :永久性重定向
  • 302 Found :临时性重定向
  • 303 See Other :和 302 有着相同的功能,但是 303 明确要求客户端应该采用 GET 方法获取资源。
  • 注:虽然 HTTP 协议规定 301、302 状态下重定向时不允许把 POST 方法改成 GET 方法,但是大多数浏览器都会在 301、302 和 303 状态下的重定向把 POST 方法改成 GET 方法。
  • 304 Not Modified :如果请求报文首部包含一些条件,例如:If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since,如果不满足条件,则服务器会返回 304 状态码。
  • 307 Temporary Redirect :临时重定向,与 302 的含义类似,但是 307 要求浏览器不会把重定向请求的 POST 方法改成 GET 方法。

• 4xx :Client Error(客户端错误状态码),表示客户的差错,如请求中有错误的语法或不能完成。

  • 400 Bad Request :请求报文中存在语法错误。
  • 401 Unauthorized :该状态码表示发送的请求需要有认证信息(BASIC 认证、DIGEST 认证)。如果之前已进行过一次请求,则表示用户认证失败。
  • 403 Forbidden :请求被拒绝。
  • 404 Not Found

• 5xx :Server Error(服务器错误状态码),表示服务器的差错,如服务器失效无法完成请求。

  • 500 Internal Server Error :服务器正在执行请求时发生错误。
  • 503 Service Unavailable :服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。