image.png
可见报文分为 3 部分:
开始行:用于区分是请求报文还是响应报文,请求报文中开始行叫做请求行,而响应报文中,开始行叫做状态行。在开始行的三个字段之间都用空格分开,结尾处 CRLF 表示回车和换行。
首部行:用于说明浏览器、服务器或报文主体的一些信息。
实体主体:请求报文中通常不用实体主体。
请求报文的方法字段是对所请求对象进行的操作,而响应报文的状态码是一个 3 位数字,分为 5 类 33 种:
1xx:通知信息,如收到或正在处理。
2xx:成功接收。
3xx:重定向。
4xx:客户的差错,如 404 表示网页未找到。
5xx:服务器的差错,如常见的 502 Bad Gateway。
我们可以通过浏览器的开发者工具来查看状态码,首先使用浏览器访问 ,然后通过如下图所示打开浏览器控制台,然后刷新页面,在网络标签里我们可以看到对应资源的获取状态码。
image.png
我们随意点击一个记录,然后点击消息头即可看到消息头的信息:
image.png
开发者工具对消息做了一些处理linux运维招聘,使输出更为易读,如果我们想查看原始头的信息,可以点击原始头按钮。
可以看到消息的请求头和响应头,请求头里包含请求的网址,请求方法,协议版本等。响应头里包含了消息类型,编码,时间等信息。Telnet 协议
Telnet 简介
Telnet 协议是 TCP/IP 协议族中的一员,是 Internet 远程登录服务的标准协议和主要方式,它基于 TCP 协议,使用端口 23。
终端使用者在本地电脑上使用 telnet 程序,用它连接到服务器,终端使用者可以在 telnet 程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。
Telnet 工作过程
使用 Telnet 协议进行远程登录时必须满足以下条件:
在本地计算机上必须装有包含 Telnet 协议的客户程序;
必须知道远程主机的 IP 地址或域名;
必须知道登录标识与口令。
Telnet 远程登录服务分为以下 4 个过程:
本地与远程主机建立连接。该过程实际上是建立一个 TCP 连接,用户必须知道远程主机的 IP 地址或域名;
将本地终端上输入的用户名和口令及以后输入的任何命令或字符以 NVT ( Net Virtual Terminal ) 格式传送到远程主机。该过程实际上是从本地主机向远程主机发送一个 IP 数据包;
将远程主机输出的 NVT 格式的数据转化为本地所接受的格式送回本地终端,包括输入命令回显和命令执行结果;
最后,本地终端对远程主机进行撤消连接。该过程是撤销一个 TCP 连接。
Telnet 连接远程主机
telnet 使用语法:telnet IP 端口(可选)。
shiyanlou:~/ $ telnet 127.0.0.1 22
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.8
Telnet 测试主机端口
telnet 可以测试目标机器的 TCP 端口是否开放。
例如 telnet IP地址 3389 是用来测试目标机器的 3389 端口是否开放,如果连接失败,可能是以下原因:
防火墙屏蔽
目标机器没有启用相关远程桌面服务(windows)
修改了默认占用 3389 端口。
下图示例使用 telnet 127.0.0.1 端口 测试本地环境端口开放性:
image.png
说明本地环境 3389 端口未开放 ,22 端口开放。
下图示例使用 netstat -pantu 验证以上结果(LISTEN 说明为开放状态):
image.png
TFTP 协议
TFTP 简介
TFTP( Trivial File Transfer Protocol )是 TCP/IP 协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务,它基于 UDP 协议,使用端口 69 。
此协议设计的时候是进行小文件传输的,与 FTP 相比少了许多功能linux 电子书,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证。
TFTP 也有着它自身的优点:
TFTP 可用于 UDP 环境;比如当需要将程序或者文件同时向许多机器下载时就往往需要使用到 TFTP 协议。
TFTP 代码所占的内存较小,这对于小型计算机或者某些特殊用途的设备来说是很重要的,TFTP 具有更多的灵活性,也减少了开销。
TFTP 报文格式
image.png
TFTP 数据报文有 5 种操作码,对应了 5 种报文格式(1、2 报文格式相同):
操作码为 RRQ :读文件请求,客户端请求读取位于服务器上的文件;
操作码为 WRQ :写文件请求,客户端请求写入位于服务器上的文件;
操作码为 DATA :数据包,用于传输数据文件;
操作码为 ACK :确认包,回应确认信息;
操作码为 ERROR :错误包,它用于服务器不能处理读请求或者写请求的情况。SMTP 协议和 POP3 协议
SMTP 简介
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式,它使用 TCP 协议ubuntu smtp服务器,使用端口 25。
SMTP 存在两个端:
在发信人的邮件服务器上执行的客户端;
在收信人的邮件服务器上执行的服务器端。
SMTP 的客户端和服务器端同时运行在每个邮件服务器上。当一个邮件服务器在向其它邮件服务器发送邮件消息时,它是作为 SMTP 客户在运行。
SMTP 的连接和发送过程
建立 TCP 连接
客户端向服务器发送 HELO 命令以标识发件人自己的身份ubuntu smtp服务器,然后客户端发送 MAIL 命令
服务器端以 OK 作为响应,表示准备接收
客户端发送 RCPT 命令
服务器端表示是否愿意为收件人接收邮件
协商结束,发送邮件,用命令 DATA 发送输入内容
结束此次发送,用 QUIT 命令退出
SMTP 协议详解及工作过程
POP3 简介
POP3(Post Office Protocol Version 3 )即邮局协议版本 3,是 TCP/IP 协议族中的一员 ,主要用于支持使用客户端远程管理在服务器上的电子邮件,使用 TCP 协议,使用端口 110 。
POP3 邮件服务器大都可以“只下载邮件,服务器端并不删除”,也就是改进的 POP3 协议。
POP3 工作过程
用户运行用户代理(如 Foxmail, Outlook Express)
用户代理(以下简称客户端)与邮件服务器(以下简称服务器端)的 110 端口建立 TCP 连接
客户端向服务器端发出各种命令,来请求各种服务(如查询邮箱信息,下载某封邮件等)
服务端解析用户的命令,做出相应动作并返回给客户端一个响应
上述的两个步骤交替进行,直到接收完所有邮件转到下一步,或两者的连接被意外中断而直接退出
用户代理解析从服务器端获得的邮件,以适当地形式(如可读)的形式呈现给用户
(参考邮件服务器之 POP3 协议分析)
POP3 和 SMTP 协同工作
一封邮件的发送过程:
image.png
通过 smtp 协议连接到 smtp 服务器,然后发一封邮件给 sohu 的 smtp 服务器;
通过 smtp 协议将邮件转投给 sina 的 smtp 服务器(邮件发送服务器);
将接收到的邮件存储到 这个邮件账号分配的存储空间中;
通过 POP3 协议连接到 POP3 服务器收取邮件;
从 账号的存储空间当中取出邮件;
POP3 服务器将取出来的邮件回送给 账户。作业
使用 host 命令查看常见网站的 IP 地址,用 tcpdump 抓取 DNS 报文做解读,并截图。参考:tcpdump 抓取命令:sudo tcpdump -vvv -X udp port 53
查看 Linux 的 hosts 文件,并截图。
使用 tcpdump 抓取 HTTP 报文做解读,并截图。参考:浏览器输入一个不存在的网址,抓取状态码为 404 报文。
使用 telnet 命令测试本地端口开放情况,并用 netstat -pantu 命令验证