协议分析—TCP/IP协议和邮件协议
一、TCP/IP
1、TCP/IP参考模型概述
1.1 常见不同层使用的协议
应用层:Telnet、FTP、TFTP、SNMP、HTTP、SMTP、NFS、DHCP
传输层:TCP、UDP
网络层:ICMP、ARP、RARP、IP
数据链路层:Ethernet、Fast Eth、TokenRing、FDDI
(1)应用层:
HTTP,开放端口为80,超文本传输协议,提供浏览网页服务
Telnet,开放端口为23,远程登陆协议,提供远程管理服务
FTP,开放端口为20、21,文件传输协议,提供互联网文件资源共享服务
SMTP,开放端口为25,简单邮件传输协议,提供互联网电子邮件服务
POP3,开放端口为110,邮局协议,提供互联网电子邮件服务
TFTP,开放端口为69 (UDP),简单文件传输协议,提供简单的文件传输服务
(2)传输层
TCP(传输控制协议)属于面向连接的网络协议
UDP(用户报文协议)属于无连接的网络协议
1.2 两者区别:
TCP:面向连接、可靠传输、只能一对一传输、面向字节流
UDP:无连接、不可靠传输、阔以一对一、一对多、多对一传输、面向报文
1.3 应用
TCP的应用:Web浏览器;电子邮件;文件传输程序
UDP的应用:域名系统(DNS) ;视频流;IP语音(VoIP)
1.4 TCP、UDP端口号
(1)源端口随机分配,目标端口使用知名端口;
(2)应用客户端使用的源端口号一般为系统中未使用的且大于1023 ;
(3)目的端口号为服务器端应用服务的进程。如telnet为23。
1.5 TCP Dump
(1)TCP Dump是Linux下命令行(CLI)形式的sniffer工具。Shell 下直接输入
TCP Dump即可启动抓包程序,当系统中存在多块网卡的时候,需要选择网卡:
(2)抓包选项:
-c:指定要抓取的包数量。
-i interface :指定tcpdump需要监听的接口。默认会抓取第一个网络接口
-n :对地址以数字方式显式,否则显式为主机名,也就是说n选项不做主机名解析。
-nn :除了-n的作用外,还把端口显示为数值,否则显示端口服务名。
-P :指定要抓取的包是流入还是流出的包。可以给定的值为"in"、“out"和"inout” ,默认为"inout"。
-s len :设置tcpdump的数据包抓取长度为len ,如果不设置默认将会是65535字节。对于要抓取的数据包较大时,长度设置不够可能会产生包截断,若出现包截断,输出行中会出现"[|proto]"的标志(proto实际会显示为协议名)。但是抓取len越长,包的处理时间越长,并且会减少tcpdump可缓存的数据包的数量,从而会导致数据包的丢失,所以在能抓取我们想要的包的前提下,抓取长度越小越好。
例:抓取到本机22端口包-----tcpdump -c 10 -nn -i ens33 tcp dst port 22
二、邮件传输协议
1、邮件传输协议概述
1.1 邮件传输过程
邮件传输过程:通常,一封电子邮件的发送需要经过用户代理、客户端邮件服务器和服务端邮件服务器等三个程序的参与,并使用邮件传输协议( SMTP,POP3或IMAP )来发送和获取邮件。
电子邮件从A发送到客户服务器是使用HTTP协议。两个邮件服务器之间的传送使用SMTP。邮件从服务端邮件服务器传送到B是使用HTTP协议。
电子邮件从A发送到客户服务器是使用SMTP协议。两个邮件服务器之间的传送使用SMTP。B从服务端邮件服务器获取邮件使用POP3或IMAP协议。常见的邮件客户端有Foxmail,Outlook Express等。
1.2 邮件服务器组件关系
●MUA(Mail User Agent) :用户代理,提供邮件编辑 ,查看功能 ;
●MTA(Mail Transfer Agent): 邮件传输代理,负责传送和接收邮件;
●MDA(Mail Dilivery Agent):邮件投递代理,负责将MTA接收到的
●邮件传递到用户邮箱或转递其他MTA ,兼具有过滤功能。
2、SMTP、MIME、POP3
2.1 SMTP -简单邮件传输协议
SMTP使用客户/服务器方式,负责发送邮件的SMTP进程是SMTP客户,而负责接收邮件的SMTP进程是SMTP服务器,当两个进程建立了TCP连接后,电子邮件就能通过该标准准确无误地传输;
SMTP协议是基于文本的协议,通过SMTP发送的电子邮件都是普通文本格式的,不支持声音、图像等非文本信息,但可以通过MIME标准将此类信息进行编码后再通过SMTP传输;
SMTP规定了14条命令和21种应答信息。每条命令用4个字母组成,而每一种应答信息一般只有一行信息,由一个3位数字的代码开始;
2.1.1 命令及概述:
HELO:用于启动邮件传输过程
MAIL FROM:用于标识发信人,为收信者回复时可用的电子邮件地址
RCPT TO:用于标识单个接收人,在MAIL命令后面可有多个RCPT命令
DATA:用于将邮件报文发送给服务器
QUIT:用于终止客户端与服务器之间的连接
RSET:用于中止当前的邮件事务并使两端复位
VRFY:用于验证指定的用户/邮箱是否存在,即验证接收方地址是否正确
NOOP:空操作命令
2.1.2 SMTP应答码
命令 | 概述 | 命令 | 概述 |
---|---|---|---|
211 | 系统状态或系统帮助响应 | 501 | 参数语法错 |
214 | 帮助信息 | 502 | 命令不支持 |
220 | 服务准备就绪 | 503 | 命令顺序错 |
221 | 关闭连接 | 504 | 命令参数不支持 |
250 | 请求操作就绪 | 550 | 操作未执行:邮箱不可用 |
251 | 非本地用户,转发到 | 551 | 非本地用户,请尝试 |
354 | 开始邮件输入,以.结束 | 552 | 操作中止:存储空间不足 |
421 | 服务不可用 | 553 | 操作未执行:邮箱名不正确 |
450 | 操作未执行:邮箱忙 | 554 | 传输失败 |
451 | 操作中止:本地错误 | ||
452 | 操作未执行:存储空间不足 | ||
500 | 命令不可识别或语法错 |
2.1.3 电子邮件格式
每一封电子邮件的结构格式为:
●报文头(Header)
●分隔邮件头与邮件体的空行
●-报文体(Body)
报文头是一些控制信息,它是由一系列的头字段组成,每个头字段的结构格式是:字段名(field-name) :字段体(field- body),包括收方和发方的地址,发送时间等,常用的头字段有:
-Date域:记录邮件发送日期(本地主机的日期和时间) ;
-Subject域:邮件主题;
-From域:发信人邮件地址;
-To域:收信人邮件地址;
等等
报文体是用户邮件内容,由用户自由撰写。但SMTP只支持传输7位ASCI码的英文字符,有很大局限性,后来邮件系统就扩展了MIME。
2.2 MIME
MIME扩展了基本的面向文本的Internet邮件系统,在不改动现有邮件协议的情况下,实现了用标准的文本格式邮件传输非文本(二进制)数据的功能。MIME的原理是将二进制数据转化为文本格式,然后再进行传输。
MIME扩包括三部分内容:新增了5个首部字段名,这些字段提供了邮件的主题信息;新增了许多邮件内容,对多媒体的表示方法进行标准化;定义了编码方法,可对任何内容进行准换。
2.3 POP3
POP是一种邮件接收协议,其作用是:当用户计算机与支持POP协议的电子邮件服务器连接时,把存储在该服务器的电子邮箱中的邮件准确无误地下载到用户的计算机中。POP3属于离线式协议,即不能对邮件进行在线操作,必须下载到本地才能进行处理。POP协议已发展到第三三版,称作POP3。
POP3与SMTP一样都是请求响应协议,命令与响应也都是用NVT ASCII格式的文本表示。POP3响应由一个状态码和其后的附加信息组成,只有两种状态码:“+OK" (正确)和“-ERR" (失败)。
2.3.1 POP3命令
USER username:指定用户名
PASS password:指定密码
STAT:询问邮箱状态(如邮件总数和总字节数等)
LIST[Msg#]:列出邮件索引(邮件数量和每个邮件大小)
RETR[Msg#]:取回指定的邮件
DELE[Msg#]:删除指定的邮件
NOOP:空操作
RSET:重置所有标记为删除的邮件,用于撤销DELE命令
QUIT:提交修改并断开连接