我喜欢月亮,月亮不知道
文中小鲨鱼是指Wireshark软件
本文参考教材是四川轻化工大学陈年老师所编著的"TCP/IP协议分析教程与实验"
目的:在真实网络中使用telnet程序访问dbs站点,观察分析捕获到的tcp通信报文,理解掌握tcp协议的原理和telnet协议工作特点
(1)小鲨鱼过滤tcp.port==23
nslookup bbs.newsmth.net 得到ip为120.92.212.76
telnet bbs.newsmth.net
(2)首先看到从本机到telnet服务器的第一次握手的tcp报文
端口号是23,序列号为0,说明是相对序列号,首部为32字节,是一个有选项的tcp首部
flag中只有syn为1,window size通告tcp通信的本端可以接收数据大小为64240
紧急指针为0,表示没有紧急数据
mss最大报文段长:1460
window scale 窗口因子:8,表示窗口大小左移8位(乘256)
SACK选择确认许可
第二次
是从服务器发回给本机的
源端口23,序列号为0,确认序列号为1
ack为1,syn为1,窗口大小为8129
mss是1324,窗口因子为5,选择确认许可SACK
第三次
本机发往服务器
序列号和确认序列号为1
这时,连接就建立好了
(3)点开服务器发的第一个telnet报文
发送方希望接收方确定终端类型
push置1,因为telnet希望tcp能尽快把协商工作方式命令发送出去
pc继续向服务器发送telnet
有两条协商命令,确定终端类型,协商窗口大小(终端的命令行方式的窗口大小)
命令部分有子选项,在刚才确定终端类型的命令基础上要求接收方发来自己的终端类型
echo(回显):服务器希望把接收到的回显给pc
suppress go ahead和echo结合:实现一次一字方式
数据部分就是我们在程序执行时看到的图案的编码
(4)pc向服务器发一个tcp的确认报文,只有54字节,tcp里面数据部分是没有的,ack为1,向它的接收方却认1424序号以前的报文
(5)服务器继续发来后面的telnet数据,以及一个tcp确认报文
(6)pc向服务器发送telnet报文完成前面的有关协商
第一个子选项确定终端类型,pc向服务器发送自己的终端ansi,同意了suppress go ahead和echo和binary
协商出了窗口大小的宽和高
(7)服务器最后发一个tcp确认报文
(8)在命令行输g,捕获到四个报文,有两个为telnet,两个为tcp
本机发过去的telnet:只有一个数据g,服务器返回的也一样,验证了一次一字
tcp报文都没有数据
(9)输guest
可以看到社区可以用光标键操作,可以从报文里看到数据,服务器会把有关的数据信息传回来
(10)
把光标放到"离开水木"点回车,就可以退出
然后会得到tcp四次挥手报文
首先服务器发了一个fin置位的报文,这个报文没有数据,作用是通过首部标志位fin置位通知tcp连接的另一端拆除tcp连接
然后pc给出响应,再发起一个fin置位报文,通告服务器自己也要拆除连接
然后服务器给出响应,就断开站点
目的:通过捕获观察在上网时产生的http数据报文更好的理解http协议工作过程
(1)随便选一个站点访问,nslookup www.cnpaf.net,得到ip
过滤(tcp || http) && (ip.addr==123.56.44.131),打开浏览器访问 www.cnpaf.net
(2)首先是pc向服务器发起两次tcp连接请求,分别是64418和64419向web服务的80端口发的syn置1的报文,目的是提高页面数据的传输速率
(3)三次握手之后,浏览器可以通过64425建立的连接发起http请求
第一部分是请求行
请求方法是get,表示是从服务器是取得相应的资源
请求URI是/,表示根,要和后面的请求头中的主机名称结合起来,描述要访问的资源,在web服务器主机上的位置
版本号是HTTP/1.1,
第二部分是请求头
accept表示终端支持数据类型和语言
UIR表示终端浏览器支持https
user-agent表示终端软件类型
accept encoding表示终端浏览器支持压缩方式
host表示访问名称
connection是keep-alive,表示在一次http请求响应完成后,tcp连接还要持续
响应是在6641帧中
(4)点开6641
第一部分是状态行
RV是响应版本
SC是状态码,表明服务器处理请求的状况,取值为302,定义是found
RP说明信息现在是redirect,是重定向,指出请求的那个URI位置的资源已经被重定向,迁移到新的位置,新位置在响应头中
第二部分
location:index.html,表示请求的URI资源迁移到这里
下面还写了下一个请求的帧在哪里
这时pc再次发出get请求,
请求行URI为/index.html,就是重定向调整后的URI
full request URI给出了完整的请求URI
后面的http响应报文由21个tcp报文段重组而成,状态码为200,表明数据传输是成功的
总结:在get请求之后,服务器发回的响应报文是由多个tcp段构成
通信中可能有多个tcp连接以及一个tcp连接中产生多次报文交互,这样报文相互错杂,可用小鲨鱼的追踪流观察
(5)刷新网页
pc在多个端口上向服务器发起tcp连接,里面的get操作和之前分析的差不多,响应报文状态码是304,表明网页没有修改,浏览器会从本地缓存提取网页数据,可提高通信效率
(6)关闭网页
pc在所有端口上向服务器发出RST置1的报文,通知服务器拆除连接
(1)在防火墙里允许"文件传送程序"
nslookup 一个网址 获得ip
nslookup ftp.sjtu.edu.cn
(2)过滤(tcp || http) && (ip.addr==202.38.97.230 )
命令行输ftp,再open 202.38.97.230
三次握手之后的第一个ftp响应报文
报文由响应行组成,
响应码是220,表示服务就绪
响应传输,表示服务器使用的软件名称
源端口21,目的端口56025
(3)匿名登录
先看用户user报文,user命令表示要登录,参数是用户名
然后服务器给出响应,331是允许匿名登录
然后输入口令,参数是口令
(4)执行各种命令
pwd:看服务器所处位置
cd一个目录,报文里的命令就变成了cwd,切换到该目录下
下载文件,报文中可以看到pc高段端口和服务器的21端口建立连接,pc输入口令,执行CWD/,再执行type A,用ascll传输数据,pc再发出pasv命令,希望ftp工作在被动方式,执行list命令,服务器把数据传过来,然后拆除tccp连接
下一篇:分享两套WMS仓储管理系统源码