1. 常见的应用层协议
① 常见应用层协议
- TCP之上的应用层协议有:
FTP(File Transfer Protocol
,文件传输协议
)
TELNET(远程登录协议
)
HTTP(HyperText Transfer Protocol
,超文本传输协议
)
SMTP(Simple Mail Transfer Protocol
,简单邮件传输协议
) - UDP之上的应用层协议有:
SNMP(简单网络管理协议
)
TFTP(Trivial File Transfer Protocol
,简单文件传输协议
)
RIP(Routing Information Protocol
,路由信息协议
) - 二者之上的:DNS(
Domain Name System
,域名系统
)
② DNS(域名系统)
- DNS 是一个联机分布式数据库系统,使用C/S模式,使得大多数域名都在本地进行解析。
- DNS可以将域名解析为IP地址,具体的解析工作由域名服务器完成。
- 域名具有层次结构,从上到下依次为:根域名、顶级域名、二级域名、三级域名等。
- cctv邮件域名的构成:
- 常见的顶级域名:
.com:
表示商业机构.net:
表示网络服务机构.gov:
表示政府机构.edu:
表示教育机构.cn :
China,中国,国家顶级域名
- DNS 可以
使用 UDP 或者 TCP 进行传输
,使用的端口号都为 53
。大多数情况
下 DNS使用 UDP 进行传输
,这就 要求域名解析器和域名服务器都必须自己处理超时
和重传
从而保证可靠性。 - 在两种情况下会使用 TCP 进行传输:
- 如果
返回的响应超过 512 字节
(UDP 最大只支持 512 字节的数据)。 - 区域传送(区域传送是
主域名服务器向辅助域名服务器传送变化的那部分数据
)。
③ FTP(文件传输协议)
- FTP 使用
TCP
进行连接,它需要两个连接来传送一个文件:
- 控制连接:
服务器
打开端口号 21
等待客户端的连接,客户端主动建立连接
后,使用这个连接将客户端的命令传送给服务器,并传回服务器的应答。 - 数据连接: 用来传送一个文件数据,如果是主动模式,数据连接的
端口号为20
;如果是被动模式,数据连接的端口号随机
。
根据数据连接是否是服务器端主动建立
,FTP 有主动和被动两种模式:
- 主动模式: 服务器端主动建立数据连接,其中
服务器端的端口号为 20
,客户端的端口号随机
,但是必须大于 1024
,因为 0~1023 是熟知端口号。 - 被动模式: 客户端主动建立数据连接,其中
客户端的端口号由客户端自己指定
,服务器端的端口号随机
。
- 二者的优劣:
- 主动模式要求客户端开放端口号给服务器端,
需要去配置客户端的防火墙
。被动模式只需要服务器端开放端口号即可,无需客户端配置防火墙
。 - 但是
被动模式
会导致服务器端的安全性减弱
,因为开放了过多的端口号。
④ TELNT(远程登录协议)
- 通过TELNET,用户可以通过TCP远程登录到其他主机,
在本地主机的击键能传到远程主机
,同时也能将远程主机的输出显示到本地主机屏幕上
。其实,就是我们在经常使用的远程桌面。 - 远程登录协议使用的
端口号为23
,具有以下的特点
- 这种服务是透明的,用户感觉就像在操作自己的本地主机一样,其实操作的是远程主机。
- TELNET 可以适应许多计算机和操作系统的差异,例如不同操作系统系统的换行符定义。
⑤ SMTP(简单邮件传输协议)
- 一个电子邮件系统由三部分组成:
用户代理
、邮件服务器
以及邮件协议
。 - 邮件协议包含发送协议和读取协议,发送协议常用
SMTP
(端口号25
),读取协议常用POP3
(端口号110
)和IMAP
(端口号143
)。
- 电子邮件的地址格式如下:
用 户 名 @ 邮 件 服 务 器 的 域 名 用户名@邮件服务器的域名 用户名@邮件服务器的域名
⑥ 常见的应用层协议及其使用的端口
2. HTTP
① HTTP中的URL
- URL(Uniform Resource Locator,统一资源定位符)用来表示从Internet上得到的资源的位置和访问这些资源的方法。
- URL的组成:
<协议>://<主机>:<端口>/<路径>
- HTTP的URL为:
http://<主机>:<端口>/<路径>
,由于http的默认端口号为80,可以省略;同时路径也可以省略。 - 常见的HTTP的URL的格式如下:
http://www.lib.uestc.edu.cn/
http://gr.uestc.edu.cn/jigou - 注意:
主机
就是HTTP服务器的域名
。
② HTTP的页面请求
以HTTP/1.0为例,用户鼠标点击了http://www.tsinghua.edu.cn/index.html
的链接,整个页面的请求过程如下:
- 浏览器分析链接指向页面的URL。
- 浏览器向DNS请求解析
www.tsinghua.edu.cn
的IP地址,DNS解析出清华大学服务器的IP地址为166.111.4.100
。 - 浏览器与清华大学服务器
建立TCP连接
(其中IP地址是166.111.4.100
,端口号为80) - 浏览器向清华大学服务器
发出HTTP GET报文
。 - 清华大学服务器收到该报文后,
生成HTTP响应报文
发回给浏览器,该报文的主体是index.html的内容
。 - 浏览器和清华大学服务器
断开TCP连接
。 - 浏览器抽取HTTP响应报文中index.html的内容,
渲染后显示该页面
。
HTPP的三次握手
- 所谓的HTTP的三次握手,其实是客户和服务器为了建立TCP,进行的三次握手。
- 第一次握手: 客户向服务器发送连接请求报文段,
SYN=1
,seq=x
。这时,客户进入SYN-SENT状态
。 - 第二次握手: 处于LISTEN状态的服务器收到客户的连接请求报文段后,如果同意建立连接便,则向客户发送确认,
SYN=1
,ACK=1
,seq=y
,ack=x+1
。这时,服务器进入SYN-RCVD状态
。 - 第三次握手: 客户在收到服务器的确认报文段后,立即向服务发送确认,
ACK=1
,seq=x+1
,ack=y+1
。这时,客户进入ESTABLISHED状态
。服务器在收到客户的确认报文段后,也进入ESTABLISHED状态
。 - 此后,客户便可以通过
HTTP GET报文
向服务器请求资源;服务器返回HTTP响应报文
,返回客户想要获取的资源。 - 注意:
- 《计算机网络教材》中说,在第三次握手时,客户向服务器发送的确认报文中就可以携带自己想要获取的资源。建立TCP连接后,服务器直接返回客户请求的资源。
- 通过WireShark抓包发现,当三次握手都完成后,客户和服务器之间才会有数据的传输。
② HTTP的报文结构
- HTTP有两类报文:请求报文、响应报文。
请求报文
- 包含三个部分:请求行、首部行(又叫请求头)、实体主体(又叫请求消息体,
请求报文通常不使用
)。
响应报文
- 包含三个部分:状态行、首部行(又叫响应头)、实体主体(又叫响应消息体,
有些响应报文不使用
)
二者的区别
- 请求报文和响应报文都包含三个部分:开始行、首部行、实体主体,在
请求报文
中开始行称为请求行
,在响应报文
中开始行称为状态行
。 - 请求报文中的请求行包含:方法、URL、HTTP版本,响应报文中的状态行包含:HTTP版本、状态码以及解释状态码的短语。
- HTTP报文的每个
内容之间
,都用空格隔开;该行结束
都用回车换行,而且首部行与实体主体之间都有一个空行。 就算是不带实体主体的请求报文
,最后也有一个空行
。下图是请求报文的例子:
③ HTTP中的方法
- 所谓的方法,其实是面向对象编程中的术语,
就是对所请求对象的操作
。而且,请求报文的类型
是由它所采用的方法决定
。
- GET方法: 获取资源。当前网络请求中,绝大部分使用的是 GET 方法。
- HEAD: 获取报文的首部。和 GET 方法类似,但是
不返回报文实体主体部分
,主要用于确认 URL 的有效性以及资源更新的日期时间等。 - POST方法: 给服务器添加信息。POST用于向服务器
传输数据
,GET用于从服务器获取资源
。 - PATCH方法: 对资源进行部分修改。PUT 也可以用于修改资源,但是只能
完全替代原始资源
,PATCH 允许部分修改
。 - PUT方法: 上传文件。自身不带验证机制,任何人都可以上传文件。因此,PUT方法存在安全性问题,一般不使用该方法。
- DELETE方法: 删除URL所标识的资源。与 PUT 功能相反,并且同样不带验证机制。
- OPTIONS: 查询指定的 URL 能够支持的方法。会返回
Allow: GET, POST, HEAD, OPTIONS
这样的内容。 - CONNECT方法: 用于代理服务器,要求在与代理服务器通信时建立隧道。使用 SSL(
Secure Sockets Layer
,安全套接层)和 TLS(Transport Layer Security
,传输层安全)协议把通信内容加密后
经网络隧道传输。 - TRACE: 追踪路径,服务器会将通信路径返回给客户端。发送请求时,在
Max-Forwards
首部字段中填入数值,每经过一个服务器就会减 1,当数值为 0 时就停止传输
。通常不会使用 TRACE,并且它容易受到 XST 攻击
(Cross-Site Tracing,跨站追踪)。
④ HTTP中的状态码
- 状态码都是三位数字,
分为5大类共33种
。 - 1XX表示
通知信息
的,如请求收到了或正在进行处理
。
100 Continue :
表明到目前为止都很正常,客户端可以继续发送请求或者忽略这个响应
。 - 2XX表示
成功
,如接受或知道了。
200 OK:
请求成功,一般用于GET与POST请求。
204 No Content :
请求已经成功处理,但是返回的响应报文不包含实体主体部分。一般在只需要从客户端往服务器发送信息,而不需要返回数据时使用。
206 Partial Content :
表示客户端进行了范围请求,响应报文包含由 Content-Range 指定范围的实体内容。 - 3XX表示
重定向
,如要完成请求必须采取进一步的行动。
301 Moved Permanently :
永久性重定向,请求的资源已被永久移动到新的URL,客户下次访问时使用新的URL。
302 Found :
临时性重定向,资源只是临时被移动,客户应继续使用原有URL。
307 Temporary Redirect :
临时重定向,与 302 的含义类似,使用GET请求重定向
。 - 4XX表示
客户的差错
,如请求中有错误的语法或不能完成
。
400 Bad Request :
请求报文中存在语法错误
,服务器无法解析。
401 Unauthorized :
该状态码表示发送的请求需要有认证信息
,如果之前已进行过一次请求,则表示用户认证失败。
403 Forbidden :
服务器拒绝执行客户的请求。
404 Not Found:
服务器无法根据客户的请求找到资源
(网页)。 - 5XX表示
服务器的差错
,如服务器失效无法完成请求。
500 Internal Server Error :
服务器内部错误,无法完成请求。
503 Service Unavailable :
由于超载或系统维护,服务器暂时的无法处理客户的请求。
⑤ HTTP的首部
- HTTP有4 种类型的首部字段:
通用首部字段
、请求首部字段
、响应首部字段
和实体首部字段
。 - 几种常见的首部字段:
Date:
创建报文的日期时间(通用首部字段)Accept-Charset:
优先的字符集Accept-Encoding:
优先的内容编码Max-Forwards:
最大传输逐跳数,TRACE方法中指定数值
,没经过一个服务器数值减1。(请求首部字段)Allow:
资源可支持的 HTTP 方法,在OPTION方法的响应报文中给出
Content-Encoding:
实体主体适用的编码方式Content-Length:
实体主体的大小Content-Type:
实体主体的媒体类型,如text/html
,image/jpeg
,video/mpeg4
等Last-Modified:
资源的最后修改日期时间(实体首部字段)