应用层是为了解决某一类应用问题,而问题的解决又是通过位于不同主机中的多个应用进程之间的通信和协同工作来完成的。这些服务通常使用对应的协议,常见的几种服务协议有(HTTP,FTP/TFTP, TELENT)无论是哪种服务,都需要域名服务器(DNS)来解析ip地址才能通信以提供服务。

域名系统

功能

DNS是域名系统(DomainNameSystem)的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务,可以简单地理解为将URL转换为IP地址域名是由圆点分开一串单词或缩写组成的,每一个域名都对应一个惟一的IP地址,在Internet上域名与IP地址之间是一一对应的,DNS就是进行域名解析的服务器。DNS命名用于Internet等TCP/IP网络中,通过用户友好的名称查找计算机和服务。

体系结构

域名

任何一个连接在因特网上的主机或者路由器,都是有一个唯一的层次结构的名字,即域名(domain name)。域可以分为顶级域、二级域、三级域等等。DNS规定,域名中的标号都是有英文字母和数字组成,每一个标号不超过63个字符(为了方便记忆最好不要超过12个字符),也不区分大小写字母。标号中除连字符(-)外不能使用其他的标点符号。级别最低的域名写在最左边,而级别最高的顶级域名则写在左右边。由多个标号组成的完整域总共不超过255个字符。

其中顶级域名服务器分为三大类:

  • 国家顶级域名nTLD。如cn,us,uk….
  • 通用顶级域名gTLD。如com,net,org……
  • 基础结构域名(infrastructure domain):这种域名只有一个,即arpa,用于反向域名解析,因此又称为反向域名。

域名服务器


域名服务器:
(1)根域名服务器(root name server)
(2)顶级域名服务器TLD
(3)权限域名服务器
(4)本地域名服务器(local name server)

域名解析过程

主机向本地域名服务器的查询采用递归

本地域名服务器向根域名服务器的查询通常采用迭代

当DNS客户机需要在程序中使用名称时,它会查询DNS服务器来解析该名称。客户机发送的每条查询信息包括三条信息:包括:指定的DNS域名,指定的查询类型,DNS域名的指定类别。基于UDP服务,端口53. 该应用一般不直接为用户使用,而是为其他应用服务,如HTTP,SMTP等在其中需要完成主机名到IP地址的转换。

总的流程总结如下:

常用服务和协议

FTP/TFTP文件传送协议

FTP

件传送协议FTP(file transfer protocol)是英特网上使用得最广泛的文件传送协议。
网络文件系统NFS,允许应用进程打开一个远地文件,并能在该文件的某一个特定的位置上开始读写数据。,它使用TCP来确保文件传输的可靠性

TFTP

简单文件传送协议TFTP(trivial file transfer protocol)。有两个优点

  • TFTP可用于UDP环境。
  • TFTP代码所占内存较小。这对较小的计算机或某些特殊用途的设备是很重要的,这些设备不需要硬盘,只需要固化TFTP和UDP以及IP的小容量只读存储器即可。

TFTP主要特点

(1)每次传送的数据报文中有512字节的数据,但最后一次可不足512字节。
(2)数据报文按序编号,从1开始。
(3)支持ASCⅡ码或二进制传送。
(4)可对文件进行读或写。
(5)使用简单地首部。

远程终端协议TELNET

TELNET又称为终端仿真协议。它定义了数据和命令应怎样通过因特网,这些定义就是所谓的网络虚拟终端NVT(network virtual terminal)。所有的通信都是用8位一个字节,在运转时,NVT使用7位ASCⅡ码传送数据,而当高位置1时用作控制命令。

WWW万维网

万维网使用统一资源定位符URL(uniform resource locator)来标志万维网上的各种文档。使用超文本传送协议HTTP实现交互。http是一个应用层协议,它使用TCP连接进行可靠的传送。

统一资源定位符URL

对应例如:http://localhost:8080/AIR/index.jsp端口和路径有时可以省略。

http协议

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。

http协议操作流程

http是面向事务的应用层协议,http协议是无状态的。万维网的工作过程如下图:


这是一个逻辑上的通信过程,实际通信还依赖下三层(物理层,数据链路层,网络层)

http和https的区别

http有以下缺点:
a、通信使用明文不加密,内容可能被窃听
b、不验证通信方身份,可能遭到伪***r> c、无法验证报文完整性,可能被篡改

http1.0和http2.0的区别

1.HTTP2使用的是二进制传送,HTTP1.X是文本(字符串)传送。
大家都知道HTTP1.X使用的是明文的文本传送,而HTTP2使用的是二进制传送,二进制传送的单位是帧和流。帧组成了流,同时流还有流ID标示,通过流ID就牵扯出了第二个区别

2.HTTP2支持多路复用
因为有流ID,所以通过同一个http请求实现多个http请求传输变成了可能,可以通过流ID来标示究竟是哪个流从而定位到是哪个http请求

3.HTTP2头部压缩
HTTP2通过gzip和compress压缩头部然后再发送,同时客户端和服务器端同时维护一张头信息表,所有字段都记录在这张表中,这样后面每次传输只需要传输表里面的索引Id就行,通过索引ID就可以知道表头的值了

4.HTTP2支持服务器推送
HTTP2支持在客户端未经请求许可的情况下,主动向客户端推送内容

http报文

请求报文

请求报文的主要特点:请求报文的第一行“请求行”只有三个内容,即方法请求资源的URL,以及http的版本

响应报文

响应报文的主要特点:响应报文的第一行就是状态行。包含三个内容,http版本状态码以及解释状态码的简单短语
状态码的含义

  • 1XX Informational(信息性状态码)

  • 2XX Success(成功状态码)。例如:200 OK 表示从客户端发来的请求在服务器端被正常处理了。

  • 3XX Redirection(重定向状态码)例如:302,客户请求的文档转移到了一个新的地址,请求被重定向了。

  • 4XX Client Error(客户端错误状态码)。例如:404 Not Found 该状态码表明服务器上无法找到请求的资源。除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。

  • 5XX Server Error(服务器错误状态码)。例如:500 Internal Server Error 该状态码表明服务器端在执行请求时发生了错误。

http协议包括哪些请求

  • GET:请求读取由URL所标志的信息。
  • POST:给服务器添加信息(如注释)。
  • PUT:在给定的URL下存储一个文档。
  • DELETE:删除给定的URL所标志的资源。

HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的**查,改,增,删**4个操作。

POST 与 GET 的区别

  • Get是从服务器上获取数据,是安全的和幂等的,POST是修改服务器上的数据

    所谓 安全的 意味着该操作用于获取信息而非修改信息。换句话说,GET请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。
    幂等 的意味着对同一URL的多个请求应该返回同样的结果。

  • GET请求的数据会附在URL之后,POST把提交的数据则放置在是HTTP包的包体中。POST的安全性更高

  • GET方式提交的数据最多只能是2048字节,理论上POST没有限制,可传较大量的数据**

  • GET支持缓存(取到的资源),POST不支持缓存

总的来说,Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求。

邮件服务系统

个电子邮件系统有三个主要组成构件:用户代理邮件服务器,以及邮件协议(包括邮件发送协议,如SMTP,邮件读取协议,如POP3)。用户代理和邮件服务器都要运行这两种协议。

和下层的对接

除了DNS,上述需要提供服务的所有协议,都需要利用下层的通信。会将自己的请求或者响应数据等打包,例如上文提到的http报文。该包被封装到运输层里的UDP或者是TCP中的一种,并且有指明的端口号。至于使用哪种方式在运输层传输,可以从下表找到对应关系:

应用进程对应端口号是多少可从下表找到对应关系

一个小区里(主机)里住着很多住户(不同的应用进程),各自有门牌号(端口号),现在一个叫万维网的用户要给远方的另一栋楼里的万维网亲戚写信,就把信(请求报文)放到信封(端口号)里,并且告诉邮局对方的邮编(URL):http://www.baidu.com:80/index.jsp,邮局拿到邮编后首先查表(DNS域名服务器)将其解析为对方小区的具体地址(ip地址),选择好双方的连接方案(怎么送)。然后依据客户要求选择中国邮政EMS(提供tcp可靠分组交付),还是野鸡快递公司(udp不可靠面向报文)。

此时完整的信(TCP或UDP报文)包括:信封(源端口号,目的端口号)+身体部分(信的内容)。并且快递公司知道该怎么送到目的小区(这部分就是主机之间的通信,涉及到下三层),至于到了目的小区后怎么找到对应的住户,则又要依赖信封的头部了。

运输层在这里负责将应用层里进程的数据打上端口号,投放到小区门口的快递公司
运输层负责从小区门口的快递公司里拿到完整的信,按照端口号送给具体的应用进程

而应用进程只关心信的内容