这里总结了三种常见的应用层协议:HTTP、FTP、SMTP。供自己复习使用,也供大家参考!
一、HTTP协议
1、HTTP简介
—超文本传输协议(Hypertext transfer protocol)。是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。
—HTTP协议作为TCP/IP模型中应用层的协议也不例外。HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。如下图:
—HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。
—HTTP默认的端口号为80,HTTPS的端口号为443;
—浏览网页是HTTP的主要应用,但是这并不代表HTTP就只能应用于网页的浏览。HTTP是一种协议,只要通信的双方都遵守这个协议,HTTP就能有用武之地。比如常用的QQ,迅雷这些软件,都会使用HTTP协议(还包括其他的协议)。
2、HTTP的特点
—简单快速:客户像服务器请求服务时,只需传送请求方法和路径。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
—灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
—HTTP 0.9和1.0使用非持续连接:限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。HTTP 1.1使用持续连接:不必为每个web对象创建一个新的连接,一个连接可以传送多个对象,采用这种方式可以节省传输时间。
—无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
—支持B/S及C/S模式。即浏览器/服务器模式和客户端/服务端模式。
3、HTTP工作流程
一次HTTP操作称为一个事务,其工作过程可分为四步:
—首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。
—建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
—服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
—客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。
4、HTTP请求消息Request
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:
请求行、请求头部、空行和请求数据四个部分组成。
(1)GET请求
第一部分:请求行,用来说明请求类型,要访问的资源以及所使用的HTTP版本.
GET说明请求类型为GET,[/562f25980001b1b106000338.jpg]为要访问的资源,该行的最后一部分说明使用的是HTTP1.1版本。
第二部分:请求头部,紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息
从第二行起为请求头部,HOST将指出请求的目的地.User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础.该信息由你的浏览器来定义,并且在每个请求中自动发送等等
第三部分:空行,请求头部后面的空行是必须的
即使第四部分的请求数据为空,也必须有空行。
第四部分:请求数据也叫主体,可以添加任意的其他数据。
这个例子的请求数据为空。
POST请求
第一部分:请求行,第一行明了是post请求,以及http1.1版本。
第二部分:请求头部,第二行至第六行。
第三部分:空行,第七行的空行。
第四部分:请求数据,第八行。
5、HTTP响应消息Reponse
一般情况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
第一部分:状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。
第一行为状态行,(HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)
第二部分:消息报头,用来说明客户端要使用的一些附加信息
第二行和第三行和第四行为消息报头,
Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是ISO-8859-1
第三部分:空行,消息报头后面的空行是必须的
第四部分:响应正文,服务器返回给客户端的文本信息。
空行后面的html部分为响应正文。
6、HTTP状态码
状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
常见状态码:
7、HTTP请求方法
根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
8、HTTP工作原理
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
以下是 HTTP 请求/响应的步骤:
1、客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。
2、发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
3、服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
4、释放连接TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
5、客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
二、FTP协议
文件传输协议FTP(File Transfer Protocol)是因特网中使用最广泛的文件传输协议。FTP使用交互式的访问,允许客户指定文件的类型和格式(如指明是否使用ASCII码),并允许文件具有存取权限(如访问文件的用户必须经过授权,并输入有效的口令)。
文件传输协议有基于TCP的FTP和基于UDP的简单文件传输协议TFTP,它们都是文件共享协议中的一大类,即复制整个文件,其特点是:若要存取一个文件,就必须先获得一个本地的文件副本。如果要修改文件,只能对文件的副本进行修改,然后再将修改后的文件传回到原节点。
1、FTP基本工作原理
FTP屏蔽了各计算机系统的细节,因而适合在异构网络中人以计算机之间传送文件。FTP只提供文件传送的一些基本服务,它使用TCP可靠的传输服务,FTP主要功能是减小或消除在不同系统下处理文件的不兼容性。
FTP使用客户端-服务端模型,一个FTP服务器进程可以为多个客户进程提供服务。FTP服务器有两大部分组成:一个主进程,负责接受新的请求;还有若干从属进程,负责处理单个请求。主进程工作步骤:
打开熟知端口21,使客户进程能够连接上;
等待客户进程发送链接请求;
启动从属进程处理客户进程发送的连接请求,从属进程处理完请求后结束,从属进程在运行期间可能根据需要可创建其他一些子进程。
回到等待状态,继续接受其他客户进程发起的请求,主进程与从属进程的处理是并发进行的。
图为FTP工作时的情况:
使用两个TCP连接——
FTP连接在整个会话期间都保持打开,只用来发送连接/传送请求,当客户进程向服务器发送连接请求时,寻找连接服务器的熟知端口21,同时还要告诉服务器进程自己的另一个端口号码,用于建立数据传送连接。接着,服务器进程用自己传送数据的熟知端口20与客户进程所提供的端口号码建立数据传送连接,FTP使用了2两个不同的端口号,所以数据连接和控制连接不会混乱。
1.1 FTP数据表示
FTP协议规定了控制协议传送与存储的多种选择,在以下4个方面必须做出一个选择:
文件类型:ASCII码文件(默认的)/图像文件类型(二进制的)/本地文件类型(用于在具有不同字节大小主机间传送二进制数据)
格式控制:该选项针对ASCII类型文件适用,非打印(默认选择,文件中不包括垂直格式信息)/远程登录格式控制。
结构:文件结构(默认选择,文件被认为是一个连续的字节流,不存在内部的文件结构)/记录结构(用于文本文件)
传输方式:流方式(模式选择,文件以字节流方式传输,对于文件结构,发方在文件尾提示关闭数据连接,对于记录结构,有专用的两字节序列码记录结束和文件结束)/块方式(文件以一系列块来传送,每块前面有一个或多个首部字节)/压缩方式。
1.2 FTP命令和应答
命令和应答在客户和服务器的控制连接上以 NVT ASCII码形式传送。这就要求在每行结尾都要返回C R、 L F对(也就是每个命令或每个应答)。这些命令都是3或4个字节的大写ASCII字符,其中一些带选项参数。从客户向服务器发送的FTP命令超过30种。下图是比较常用的几种命令:
应答都是ASCII码形式的3位数字,并跟有报文选项。其原因是软件系统需要根据数字代码来决定如何应答,而选项串是面向人工处理的。由于客户通常都要输出数字应答和报文串,一个可交互的用户可以通过阅读报文串(而不必记忆所有数字回答代码的含义)来确定应答的含义。
2、FTP工作模式
两种工作模式:主动模式和被动模式;
主动模式:服务器主动连接客户端;
被动模式:客户端主动连接服务器。
3、问题
如何知道FTP传送一个文件结束?
解答:通用传输模式是流方式,并且文件的结尾是以关闭数据连接为标志,这意味着对每一个文件传输或目录列表来说都要建立一个全新的数据连接。一般过程如下:
—正由于是客户发出命令要求建立数据连接,所以数据连接是在客户端的控制下建立的;
—客户通常在客户端主机上为所在数据连接端选择一个临时端口号。客户从该端口号发布一个被动的打开;
—客户使用PORT命令从控制连接上把端口号发向服务器;
—服务器在控制连接上接受端口号,并向客户端主机上的端口发布一个主动的打开。服务器的数据连接段一直使用端口20.
给出了第 3步执行时的连接状态。假设客户用于控制连接的临时端口是 11 7 3,客户用于数据连接的临时端口是1174。客户发出的命令是PORT命令,其参数是6个ASCII中的十进制数字,它们之间由逗点隔开。前面 4个数字指明客户上的 I P地址,服务器将向它发出主动打开(本例中是 140.252.13.34),而后两位指明16 bit端口地址。由于16 bit端口地址是从这两个数字中得来,所以其值在本例中就是 4×256+150=1174。
下图给出了服务器向客户所在数据连接端发布主动打开时的连接状态。服务器的端点是端口20。
服务器总是执行数据连接的主动打开。通常服务器也执行数据连接的主动关闭,除非当客户向服务器发送流形式的文件时,需要客户来关闭连接。
三、SMTP协议
1、介绍
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议。它是一组用于由源地址到目的地址传送邮件
的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件
时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程
只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。SMTP
是一种TCP协议支持的提供可靠且有效电子邮件传输的应用层协议。
工作过程
首先,运行在发送端邮件服务器主机上的SMTP客户,发起建立一个到运行在接收端邮件服务器主机上的
SMTP服务器端口号25之间的TCP连接。如果接收邮件服务器当前不在工作,SMTP客户就等待一段时间后再
尝试建立该连接。
2、SMTP命令和应答
SMTP使用一些命令和应答,在MTA客户和MTA服务器之间进行之间传输报文。如下图所示,为SMTP主要的命令和应答:
3、邮件报文的封装和报文形式
SMTP协议可以将互联网邮件报文封装在邮件对象中。SMTP协议的邮件对象由两个部分组成:信封和内容。
信封其实是一种SMTP命令;
邮件报文是邮件对象中的内容,由首部和主体两个部分。
对报文格式的定义:
—所有报文都是由ASCII码组成;
—由报文行组成,各行之间用回车(CR)、换行(LF)符分隔
——报文的长度不能超过998个字符
——报文行的长度≤78个字符之内(不包括回车换行符)
——报文中可包括多个首部字段和首部内容
——报文可包括一个主体,主体必须用一个空行与其首部分隔
——除非需要使用回车与换行符,否则报文中不使用回车与换行符
4、邮件报文的传送过程
连接建立
SMTP客户和SMTP服务器首先要建立TCP连接。
1. 从客户端使用熟知端口号25建立与服务器的TCP连接,SMTP服务器向该客户送回应答码220,并且还为客户端提供了服务器的域名
2. 客户端收到应答码后,发送HELO命令,启动客户端和服务器之间的SMTP会话。该客户端发送的HELO用来向服务器提供客户端的标识信息
3. 服务器端回应应答码250,通知客户端:请求建立邮件服务会话已经实现
报文发送
在SMTP客户与SMTP服务器之间的连接建立之后,发信的用户就可以与一个或多个收信人交换邮件报文了。
1. 客户用“MAIL FROM”向服务器报告发信人的邮箱与域名
2. 服务器向客户回应应答码“250”,代表请求命令完成
3. 客户用“RCPT TO”命令向服务器报告收信人的邮箱与域名
4. 服务器向客户回应应答码“250”,代表请求命令完成
5. 客户用“DTAT”命令对报文的传送进行初始化
6. 服务器回应“354”,表示可以进行邮件输入了
7. 客户用连续的行向服务器传送报文的内容,每行以两字符的行结束标识(CR与LF)终止。报文以只有一个“.”的行结束
8. 服务器向客户回应应答码“250”,代表请求命令完成
连接终止
报文发送完毕后终止本次SMTP会话。
—客户端发送QUIT命令;
——服务器收到命令后,回应应答码“221”,并结束会话。
模拟上述三个步骤:
建立连接
传输报文
终止连接