【TCP/IP网络协议】(七)应用层协议

应用层协议

在传输层之上,便是应用层。传输层的UDP报文和TCP报文段的数据部分就是应用层交付的数据。
不同类型的网络应用有不同的通信规则,因此应用层协议都是多种多样的,比如DNS、FTP、Telent、SMTP、HTTP、RIP、NFS等协议都是用于解决其各自的一类问题。

一、DNS协议

DNS(域名服务)协议基于UDP,使用端口号53.
由数字组成的IP地址很难记忆,所以我们上网使用网站IP地址的别名——域名。实际使用中,域名与IP地址是对应的,这种对应关系保存在DNS服务器之中。

在浏览器中输入一个域名后,会有DNS服务器将域名解析为对应的IP地址。注意这和网络层的ARP协议的不同之处:DNS提供的是域名与IP地址的对应关系,而ARP提供的是IP地址与MAC地址的对应关系。

1.1 DNS服务器

DNS服务器是个分层次的系统:

  • 根DNS服务器:全世界共有13台根域名服务器,编号A到M,其中大部分位于美国;
  • 顶级(TLD)DNS服务器:负责如com、org、edu等顶级域名和所有国家顶级域名(如cn、uk、jp)。
  • 权威DNS服务器:大型组织、大学、企业的域名解析服务;
  • 本地DNS服务器:通常与我们主机最近的DNS服务器。

而域名解析的过程,有迭代查询和递归查询两种方式:
在这里插入图片描述

1.2 host命令

在Linux系统中,可以使用host命令进行DNS查询,查看一个指定域名的IP,比如要查询baidu.com的IP地址:
host www.baidu.com

1.3 DNS报文

主机向DNS服务器发出的查询叫做DNS报文,问答报文的内容,都是IP和域名的对应信息,问题中包含域名、类型、类信息,回答中包含指针,类型,类,TTL,长度,IP地址信息。

1.4 DNS缓存和hosts文件

之前DNS解析查询过程的图中,共发出了8分DNS报文,这是非常消耗时间的,所以实际应用中使用DNS缓存:当一个DNS服务器收到一个DNS回答后,会将信息缓存一段时间,当再有一个对相同域名的查询,便可直接回复。
通过DNS缓存,其实很多查询都只需要本地DNS服务器便可完成。
hosts文件可以看做是一个小型的DNS服务器。
使用命令打开hosts文件
sudo gedit /etc/hosts
查看文件内容,可以发现里面全是类似下图中的IP与域名对应记录;
在这里插入图片描述
在实际上网过程中,域名解析的优先顺序是:先在DNS缓存查询,若没有查到记录,再查询hosts文件,若还是没有找到记录,再向DNS服务器发出DNS查询报文。

我们可以用dig命令进行域名查询

# 查询 www.shiyanlou.com 的 ip 地址, +noedns 是不显示edns信息`
dig www.shiyanlou,com +noedns

输出信息:
在这里插入图片描述
输出信息解析:

# 这一部分为应答的统计信息
 - QUERY:查询任务个数,这里为1一个;
 - ANSWER:查询到几条A记录(IP地址),这里为1条;
 - AUTHOROTY:几个权威域名服务器,这里为0个;
 - ADDITIONAL:几个附加信息,这里为0个。

# 这一部分为问题片段,意思是查询 www.shiyanlou.com的A记录
 - ;; QUESTION SECTION
 - ;www.shiyanlou.com 

# 这一部分为应答片段,意为查询到的IP为121.40.227.60
 - ;;ANSWER SECTION:
 - www.shiyanlou.com. 587 IN A 121.40.227.60

# 这部分为查询的任务统计信息,比如查询花了多少时间,执行查询的时间等
- ;; Query time: 22 msec

1.5 捕获DNS

下面用tcpdump来捕获DNS,首先执行命令:
sudo tcpdump -nt udp port 53

端口53是DNS服务器所开放的端口

此时还没有任何捕获信息,因为我们还没有进行DNS查询,可以使用host命令进行域名查询,新开一个终端执行
host www.shiyanlou.com
得到输出
在这里插入图片描述
第一个数据包,是由本机向首选DNS服务器100.100.2.13853端口发送的DNS查询报文,9909是查询报文的标识值,+代表启用递归查询标志。A?表示使用A类型的查询方式。www.shiyanlou.com为查询的域名,35代表DNS查询报文的长度为35字节。

第二个数据包为应答报文,可看出标识值和第一个报文的标识值是一样的,1/0/0表示报文包含1个应答资源记录,0个授权资源记录,0个额外信息记录。51代表应答报文的长度为51字节。

后面的数据包同理。

我们也可以用
sudo tcpdump -nn -vvv -X udp port 53
查看以十六进制输出的报文内容:
在这里插入图片描述
对于第一个数据报,呈现的报文内容实际上是IP数据报,包含了IP首部,UDP首部和DNS报文。我们之前知道IP首部是20字节,即从4500028a部分,UDP首部是8个字节,也就是bd5251d6的部分,剩下的也就是DNS请求报文,一共35字节,与括号中的35相吻合。

其他数据包同理。

二、FTP(文件传输)协议

FTP协议基于TCP,使用端口号20(数据)和21(控制)。
它的主要功能是减少或消除在不同操作系统下处理文件的不兼容性。以达到便捷高效的文件传输效果。

  • FTP只提供文件传输的基本服务,它采用客户端-服务器的方式,一个FTP服务器可同时为多个客户端提供服务;
  • 在进行文件传输时,FTP的客户端和服务器之间会建立两个TCP连接:21号端口建立控制连接,20号端口建立数据连接
  • FTP的传输有两种方式:ASCII传输模式和二进制数据传输模式。

我们直接下载一个FTP报文信息示例包ftp.pcap,然后用tcpdump解析。

# 下载ftp.pcap文件
wget http://labfile.oss.aliyuncs.com/courses/98/ftp.pcap
# 然后用tcpdump命令解析
sudo tcpdump -r ftp.pcap

在这里插入图片描述
前面三帧是客户端与服务器的三次握手,连接服务器的ftp端口(21),客户端ip是192.168.0.114,服务器ip是192.168.0.193

01:24:40.499548 IP 192.168.0.114.1137 > 192.168.0.193.ftp: Flags [S], seq 3753095934, win 16384, options [mss 1460,nop,nop,sackOK], length 0
01:24:40.501867 IP 192.168.0.193.ftp > 192.168.0.114.1137: Flags [S.], seq 3334930753, ack 3753095935, win 16384, options [mss 1452,nop,nop,sackOK], length 0
01:24:40.501886 IP 192.168.0.114.1137 > 192.168.0.193.ftp: Flags [.], ack 1, win 17424, length 0

第四帧时服务器向客户端发送相关信息:
01:24:40.503947 IP 192.168.0.193.ftp > 192.168.0.114.1137: Flags [P.], seq 1:31, ack 1, win 65535, length 30
此时控制连接建立完成。再下面的部分就是客户端向服务器端发送请求,然后服务器端响应客户端的过程,比如登录,输出所在路径等操作。

在后面的输出中,还能找到客户端与服务器端建立数据连接时三次握手的过程:

01:24:43.163553 IP 192.168.0.114.1140 > 192.168.0.193.7254: Flags [S], seq 464133708, win 32768, options [mss 1460,nop,nop,sackOK], length 0
01:24:43.164508 IP 192.168.0.193.7254 > 192.168.0.114.1140: Flags [S.], seq 3937374868, ack 464133709, win 16384, options [mss 1452,nop,nop,sackOK], length 0
01:24:43.164521 IP 192.168.0.114.1140 > 192.168.0.193.7254: Flags [.], ack 1, win 32768, length 0

我们这里看到服务器端开放端口号不是20,是因为FTP的工作模式是被动模式(PASV),被动模式中,服务器端会创建一个新的随机的非特权端口P(P >= 1023)与客户端建立数据通道连接。

三、HTTP(超文本传输)协议

HTTP超文本协议是基于TCP,使用端口号80或8080.每当你在浏览器里输入一个网址或点击一个链接时,浏览器就通过HTTP协议将网页信息从服务器提取再显示出来。这是现在使用频率最大的应用层协议。

3.1 原理

  • 点击一个链接后,浏览器向服务器发起TCP连接;
  • 连接建立后浏览器发送HTTP请求报文,然后服务器回复响应报文;
  • 浏览器将收到的响应报文显示在网页上;
  • 报文收发结束,关闭TCP连接。

HTTP报文会被传输层封装为TCP报文段,然后再被IP层封装为IP数据报。

HTTP请求报文结构:
在这里插入图片描述
HTTP响应报文结构:
在这里插入图片描述
可见报文分为3部分:

  • 开始行:用于区分是请求报文还是响应报文,请求报文中开始行叫做请求行,而响应报文中,开始行叫做状态行。在开始行的三个字段之间都用空格分开,结尾处CRLF表示回车和换行;
  • 首部行:用于说明浏览器、服务器或报文主体的一些信息;
  • 实体主体:请求报文中通常不用实体主体

请求报文的方法字段是对所请求对象进行的操作,而响应报文的状态码是一个3位数字,分为5类33种:

  • 1xx:通知信息,如收到或正在处理;
  • 2xx:成功接收;
  • 3xx:重定向;
  • 4xx:客户的差错,如404表示网页未找到;
  • 5xx:服务器的差错,如常见的502Bad Gateway

我们可以使用浏览器的开发者工具来查看状态码,首先使用浏览器随便访问一个网页,按F12进入开发者工具
在这里插入图片描述
随意打开一个记录,比如第一个,然后点击消息头就可以看到消息头的信息:
在这里插入图片描述
开发者工具对消息做了一些处理,使输出更为易读,如果我们想查看原始头的信息,可以点击原始头按钮,可以看到消息的请求头和响应头,请求头里包含请求的网址,请求方法,协议版本等,响应头里包含了消息类型,编码,时间等信息。

四、Telnet协议

Telent协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式,它基于TCP协议,使用端口23.
终端使用者在本地电脑上使用telent程序,用它连接到服务器,终端使用者可以在telent程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。

4.1 telent工作过程

使用Telent协议进行远程登录时必须满足以下条件:

  • 在本地计算机上必须装有包含Telent协议的客户程序;
  • 必须知道远程主机的IP地址或域名;
  • 必须知道登录标识与口令。

Telent远程登录服务分为以下4个过程:

  • 本地与远程主机建立连接。该过程实际上是建立一个TCP连接,用户必须知道远程主机的IP地址或域名;
  • 将本地终端上输入的用户名和口令及以后输入的任何命令或字符以NVT(Net Virtual Terminal)格式传送给远程主机。该过程实际上是从本地主机向远程主机发送一个IP数据包;
  • 将远程主机输出的NVT格式的数据转化为本地所接受的格式送回本地终端,包括输入命令回显和命令执行结果;
  • 最后,本地终端对远程主机进行撤销连接,该过程是撤销一个TCP连接。

4.2 Telent连接远程主机

telent使用语法:telent IP 端口(可选)

4.3 Telent 测试主机端口

telent可以测试目标机器的TCP端口是否开放。
例如telent IP地址 3389是用来测试目标机器的3389端口是否开放,如果连接失败,可能是以下原因:

  • 防火墙屏蔽;
  • 目标机器没有启用相关远程桌面服务(Windows)
  • 修改了默认占用3389端口。

可以使用netstat -pantu验证端口是否开放(LISTEN说明开放状态)

五、TFTP协议

TFTP是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务,它基于UDP协议,使用端口69.
此协议设计的时候是进行小文件传输的,与FTP相比少了许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证。
TFTP优点:

  • TFTP可用于UDP环境:比如当需要将程序或者文件同时向许多机器下载时就往往需要使用到TFTP协议;
  • TFTP代码所占的内存较小,这对于小型计算机或者某些特殊用途的设备来说是很重要的,TFTP具有更多的灵活性,也减少了开销。

5.1 TFTP报文格式

在这里插入图片描述
TFTP数据报文有五种操作码,对应了5种报文格式(1、2报文格式相同)

  • 操作码为RRQ:读文件请求,客户端请求读取位于服务器上的文件;
  • 操作码为WRQ:写文件请求,客户端请求写入位于服务器上的文件;
  • 操作码为DATA:数据包,用于传输数据文件;
  • 操作码为ACK:确认包,回应确认信息;
  • 操作码为ERROR:错误包,它用于服务器不能处理读请求或者写请求的情况。

六、SMTP协议和POP3协议

6.1 SMTP协议简介

SMTP即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式,它使用TCP协议,使用端口25.
SMTP存在两个端:

  • 在发信人的邮件服务器上执行的客户端;
  • 在收信人的邮件服务器上执行的服务器端。

SMTP的客户端和服务器端同时运行在每个邮件服务器上。当一个邮件服务器在向其他邮件服务器发送邮件消息时,它是作为SMTP客户在运行。

6.2 SMTP的连接和发送过程

  • 建立TCP连接
  • 客户端向服务器发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令
  • 服务器端以OK作为响应,表示准备接收
  • 客户端发送RCPT命令
  • 服务器端表示是否愿意为收件人接收邮件
  • 协商结束,发送邮件,用命令DATA发送输入内容
  • 结束此次发送,用QUIT命令退出

6.3 POP3简介

POP3即邮局协议版本3,是TCP/IP协议族中的一员,主要用于支持使用客户端远程管理在服务器上的电子邮件,使用TCP协议,使用端口110.
POP3邮件服务器大都可以“只下载邮件,服务器端并不删除”,也就是改进的POP3协议。

6.4 POP3工作过程

  • 用户运行用户代理;
  • 用户代理(以下简称客户端)与邮件服务器(以下简称服务器端)的110端口建立TCP连接;
  • 客户端向服务器端发出各种命令来请求各种服务(如查询邮箱信息,下载某封邮件等);
  • 服务器端解析用户的命令,左除相应动作并返回给客户端一个响应;
  • 上述的两个步骤交替进行,直到接收完所有邮件转到下一步,或两者的链接被意外中断而直接退出;
  • 用户代理解析从服务器端获得的邮件,以适当地形式(如可读)的形式呈现给用户。

6.5 POP3和SMTP协同工作

一封邮件的发送过程:
在这里插入图片描述
1、通过SMTP协议链接到SMTP服务器,然后发一封邮件给sohu的SMTP服务器;
2、通过SMTP协议将邮件转投给sina的SMTP服务器(邮件发送服务器)
3、将接收到的邮件存储到[email protected]这个邮件账户分配的存储空间中
4、通过POP3协议连接到POP3服务器收取邮件
5、从[email protected]账户的存储空间当中取出邮件
6、POP3服务器将取出来的邮件回送给[email protected]账户

完。

发布了96 篇原创文章 · 获赞 19 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Thera_qing/article/details/103708981