计算机网络——应用层

计算机网络——应用层

应用层

常见的应用层协议

应用协议支持的传输层协议
电子邮件SMTPTCP
远程终端访问TelnetTCP
WebHTTPTCP
文件传输FTPTCP
流式多媒体HTTPTCP
网络电话RTP/SIPUDP
域名解析DNSUDP

HTTP

HTTP: HyperText Transfer Protocol 超文本传输协议

HTTP由两个程序实现:客户端和服务端。客户端和服务端通过交换HTTP报文进行会话。
HTTP使用TCP作为它的职称传输协议(而不是UDP)。

一端程序通过Socket接口发送HTTP报文给另一端,并从Socket接口中接受响应报文。
TCP为HTTP提供可靠的数据传输服务,我们不需要担心数据丢失,也不用担心乱序。

我们短时间多次向服务器请求同一个对象,服务端不会因为已经给客户端下发过该对象就不再做出反应。根据这种特性,我们称HTTP为无状态协议。

HTTP Request

HTTP请求报文格式

在HTTP/1.1协议中,定义了8种请求方法
GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT、PATCH
根据HTTP协议的设计初衷,不同的方法对资源有不同的操作方式

  • PUT:增
  • DELETE:删
  • POST:改
  • GET:查

HTTP Request Sample


  • 常用Request头部
    • Host Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。
    • Accept-Encoding:客户端能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间。
    • User-Agent:User-Agent头域的内容包含发出请求的用户信息。
    • Content-Length:表示请求消息正文的长度。
    • Connection:当前客户端和服务端通信使用持续连接or非持续连接。
    • Cookie:请求携带的Cookie信息
HTTP Response

HTTP响应报文格式

Status Code代表了响应码,一般响应码对应如下:

  • 1xx:信息响应类,表示接收到请求并且继续处理
  • 2xx:处理成功响应类,表示动作被成功接收、理解和接受
  • 3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
  • 4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
  • 5xx:服务端错误,服务器不能正确执行一个正确的请求

HTTP Response Sample


  • 常用Response头部
    • Server:服务器名字
    • Date:当前的GMT时间
    • Content-Encoding:文档的编码(Encode)方法。
    • Content-Length:表示内容长度。
    • Transfer-Encoding:响应内容的传输编码方式,通常有 chunked, deflate, gzip等。
    • Vary:用来指示缓存代理(例如squid)根据什么条件去缓存一个请求。
    • Set-Cookie:设置和页面关联的Cookie。
    • Cache-Control:页面缓存的配置相关
URI与URL

URI,Uniform Resource Identifier,统一资源标识符,用来唯一的标识一个资源

URI一般由三部组成:
①访问资源的命名机制
②存放资源的主机名
③资源自身的名称,由路径表示,着重强调于资源。

URL,Uniform Resource Locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。

URL一般由三部组成:
①协议(或称为服务方式)
②存有该资源的主机IP地址(有时也包括端口号)
③主机资源的具体地址。如目录和文件名等

从JDK1.5开始,java.net包对URL和URI作了非常明确的区分。

URI是个纯粹的句法结构,用于指定标识Web资源的字符串的各个不同部分。URL是URI的一个特例,它包含了定位Web资源的足够信息。

以下面这个URL为例,介绍下普通URL的各部分组成:

http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name

从上面的URL可以看出,一个完整的URL包括以下几部分:

  • 协议部分:该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符
  • 域名(Host)部分:该URL的域名部分为“www.aspxfans.com”。一个URL中,也可以使用IP地址作为域名使用
  • 端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口
  • 虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/news/”
  • 文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名。虚拟目录和文件名合称为路径(path)
  • 锚(anchor)部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分
  • 参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。
非持续连接or持续连接

持续每个请求/响应对是经一个单独的TCP连接发送,还是所有的请求及响应经相同的TCP连接发送,被称为非持续连接或持续连接。

Connection: Keep-Alive

Http 1.1以后都默认是持续连接的。以前的版本需要手动配置这个请求头,才是持续连接。

启用Keep-Alive模式肯定更高效,性能更高。因为避免了建立/释放连接的开销。但会让Client和Server之间的服务器不断开,即使它们之间没有数据传输。如果使用非常不频繁的时候保持着连接也增加了设备的功耗,所以需要服务端控制好这个链接闲置的时间(timeout),一旦闲置时间超出就立即关闭这个链接。

长连接与短连接

所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持。
短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接。
比如http,只是连接、请求、关闭,过程时间较短,服务器若是一段时间内没有收到请求即可关闭连接。
其实长连接是相对于通常的短连接而说的,也就是长时间保持客户端与服务端的连接状态。

通常的短连接操作步骤是:
连接→数据传输→关闭连接;

长连接通常就是:
连接→数据传输→保持连接(心跳)→数据传输→保持连接(心跳)→……→关闭连接;

Cookie

因为HTTP服务器是无状态的。但我们希望某些时候能够与用户相关联,即识别用户身份,那么就需要使用cookie。

Cookie通常也叫做网站cookie,浏览器cookie或者http cookie,是保存在用户浏览器端的,并在发出http请求时会默认携带的一段文本片段。它可以用来做用户认证,服务器校验等通过文本数据可以处理的问题。

Cookie是web server下发给浏览器的任意的一段文本,在后续的http 请求中,浏览器会将cookie带回给Web Server。同时在浏览器允许脚本执行的情况下,Cookie是可以被JavaScript等脚本设置的。

Cookie不是软件,所以它不能被携带病毒,不能执行恶意脚本,不能在用户主机上安装恶意软件。但它们可以被间谍软件用来跟踪用户的浏览行为。所以近年来,已经有是欧洲和美国的一些律师以保护用户隐私之名对cookie的种植宣战了。更严重的是,黑客可以通过偷取Cookie获取受害者的帐号控制权。

HTTP2.0

同时请求379张图片的耗时对比

相比 HTTP/1.x,HTTP/2 在底层传输做了很大的改动和优化:

二进制分帧:HTTP/2 采用二进制格式传输数据,而非 HTTP/1.x 的文本格式。 HTTP/2 中,同域名下所有通信都在单个连接上完成,该连接可以承载任意数量的双向数据流。每个数据流都以消息的形式发送,而消息又由一个或多个帧组成。多个帧之间可以乱序发送,根据帧首部的流标识可以重新组装。

头部压缩:HTTP/2 对消息头采用 HPACK 进行压缩传输,能够节省消息头占用的网络的流量。而 HTTP/1.x 每次请求,都会携带大量冗余头信息,浪费了很多带宽资源。头压缩能够很好的解决该问题。

多路复用:直白的说就是所有的请求都是通过一个 TCP 连接并发完成。HTTP/1.x 虽然通过 pipeline 也能并发请求,但是多个请求之间的响应会被阻塞的,所以 pipeline 至今也没有被普及应用,而 HTTP/2 做到了真正的并发请求。同时,流还支持优先级和流量控制。当流并发时,就会涉及到流的优先级和依赖。优先级高的流会被优先发送。

Server Push:服务端能够更快的把资源推送给客户端。例如服务端可以主动把 JS 和 CSS 文件推送给客户端,而不需要客户端解析 HTML 再发送这些请求。当客户端需要的时候,它已经在客户端了。
HTTP/2 主要是 HTTP/1.x 在底层传输机制上的完全重构,HTTP/2 是基本兼容 HTTP/1.x 的语义的

FTP

FTP:File Transfer Protocol 文件传输协议

FTP比较显著的特征是使用了两个并行的TCP连接来传输文件,一个是控制连接,一个是数据连接。

  • 控制连接,负责传输控制信息,比如用户表示、口令、改变目录、put\get指令。
  • 数据连接,用于实际发送一个文件。

在这里插入图片描述

FTP服务器在整个绘画期间保留用户的状态。

SMTP

SMTP:Simple Mail Transfer Protocol 简单邮件传输协议

SMTP用于从发送方的邮件服务器发送报文到接收方的邮件服务器。它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。

IMAP

IMAP:Internet Mail Access Protocol Internet邮件访问协议

它的主要作用是邮件客户端可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等

POP3

POP3:Post Office Protocol - Version 3 第三版邮局协议

它主要用于支持使用客户端远程管理在服务器上的电子邮件。

DNS

DNS:Domain Name System 域名系统

DNS作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过域名,最终得到该域名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值