更多有关Wireshark的教程、软件下载等,请见:http://www.52im.net/thread-259-1-1.html,本文只做简要介绍。
html
Wireshark 是最著名的网络通信抓包分析工具。功能十分强大,能够截取各类网络封包,显示网络封包的详细信息。
你能够把网络包分析工具当成是一种用来测量有什么东西从网线上进出的测量工具,就好像使电工用来测量进入电信的电量的电度表同样(固然比那个更高级)。过去的此类工具要么是过于昂贵,要么是属于某人私有,或者是两者兼顾。 Wireshark出现之后,这种现状得以改变。 Wireshark可能算得上是今天能使用的最好的开源网络分析通信抓包分析工具软件。
安全
Wireshark能够用在许多场合下,如下只是典型的使用对象举例:
服务器
使用wireshark的人必须了解网络协议,不然就看不懂wireshark了。听说,华为、中兴的大部分工程师都会用到wireshark。网络
你也可查看即时通信网(52im.net)的另外一篇同类文章《理论经典:TCP协议的3次握手与4次挥手过程详解》:http://www.52im.net/thread-258-1-1.html
更多资料请查阅《TCP/IP 详解》这本书,目前即时通信网(52im.net)已整理出了在线阅读版。经典著做,值得收藏和随时查阅,地址是:http://www.52im.net/topic-tcpipvol1.htmltcp
TCP/IP是一个协议族,一般分不一样层次进行开发,每一个层次负责不一样的通讯功能。包含如下四个层次:
1. 链路层:
也称做数据链路层或者网络接口层,一般包括操做系统中的设备驱动程序和计算机中对应的网络接口卡。它们一块儿处理与电缆(或其余任何传输媒介)的物理接口细节。
2. 网络层:
也称做互联网层,处理分组在网络中的活动,例如分组的选路。网络层协议包括IP协议(网际协议)、ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议)。
3. 运输层主要为两台主机上的应用程序提供端到端的通讯:
在TCP/IP协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP为两台主机提供高可靠性的数据通讯。他所做的工做包括把应用程序交给它的数据分红合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。因为运输层提供了高可靠性的端到端通讯,所以应用层能够忽略全部这些细节。而另外一方面,UDP则为应用层提供一种很是简单的服务。它只是把称做数据报的分组从一台主机发送到另外一台主机,但并不保证该数据报能到达另外一端。任何须须的可靠性必须由应用层来提供。
4. 应用层负责处理特定的应用程序细节:
包括Telnet(远程登陆)、FTP(文件传输协议)、SMTP(简单邮件传送协议)以及SNMP(简单网络管理协议)等。
wireshark抓到的包与对应的协议层以下图所示:
1. Frame: 物理层的数据帧概况
2. Ethernet II: 数据链路层以太网帧头部信息
3. Internet Protocol Version 4: 互联网层IP包头部信息
4. Transmission Control Protocol: 传输层的数据段头部信息,此处是TCP
5. Hypertext Transfer Protocol: 应用层的信息,此处是HTTP协议。
(TCP/IP协议族关系图高清珍藏版下载:http://www.52im.net/thread-180-1-1.html)工具
TCP是一种面向链接(链接导向)的、可靠的基于字节流的传输层通讯协议。TCP将用户数据打包成报文段,它发送后启动一个定时器,另外一端收到的数据进行确认、对失序的数据从新排序、丢弃重复数据。
TCP的特色有:
学习
TCP报文首部,以下图所示:(您也可参见《TCP/IP详解》这本书里的对应介绍:http://docs.52im.net/extend/docs/book/tcpip/vol1/17/#h17_3)
1. 源端口号:数据发起者的端口号,16bit
2. 目的端口号:数据接收者的端口号,16bit
3. 序号:32bit的序列号,由发送方使用
4. 确认序号:32bit的确认号,是接收数据方指望收到发送方的下一个报文段的序号,所以确认序号应当是上次已成功收到数据字节序号加1。
5. 首部长度:首部中32bit字的数目,可表示15*32bit=60字节的首部。通常首部长度为20字节。
6. 保留:6bit, 均为0
7. 紧急URG:当URG=1时,表示报文段中有紧急数据,应尽快传送。
8. 确认比特ACK:ACK = 1时表明这是一个确认的TCP包,取值0则不是确认包。
9. 推送比特PSH:当发送端PSH=1时,接收端尽快的交付给应用进程。
10. 复位比特(RST):当RST=1时,代表TCP链接中出现严重差错,必须释放链接,再从新创建链接。
11. 同步比特SYN:在创建链接是用来同步序号。SYN=1, ACK=0表示一个链接请求报文段。SYN=1,ACK=1表示赞成创建链接。
12. 终止比特FIN:FIN=1时,代表此报文段的发送端的数据已经发送完毕,并要求释放传输链接。
13. 窗口:用来控制对方发送的数据量,通知发放已肯定的发送窗口上限。
14. 检验和:该字段检验的范围包括首部和数据这两部分。由发端计算和存储,并由收端进行验证。
15. 紧急指针:紧急指针在URG=1时才有效,它指出本报文段中的紧急数据的字节数。
16. 选项:长度可变,最长可达40字节。
wireshark捕获到的TCP包中的每一个字段以下图所示: 测试
TCP创建链接时,会有三次握手过程,以下图所示,wireshark截获到了三次握手的三个数据包。第四个包才是http的,说明http的确是使用TCP创建链接的。
下面来逐步分析三次握手过程。
操作系统
客户端向服务器发送链接请求包,标志位SYN(同步序号)置为1,序号为X=0。
.net
服务器收到客户端发过来报文,由SYN=1知道客户端要求创建联机。向客户端发送一个SYN和ACK都置为1的TCP报文,设置初始序号Y=0,将确认序号(Acknowledgement Number)设置为客户的序列号加1,即X+1 = 0+1=1, 以下图。
客户端收到服务器发来的包后检查确认序号(Acknowledgement Number)是否正确,即第一次发送的序号加1(X+1=1)。以及标志位ACK是否为1。若正确,服务器再次发送确认包,ACK标志位为1,SYN标志位为0。确认序号(Acknowledgement Number)=Y+1=0+1=1,发送序号为X+1=1。客户端收到后确认序号值与ACK=1则链接创建成功,能够传送数据了。
TCP断开链接时,会有四次挥手过程,以下图所示,wireshark截获到了四次挥手的四个数据包。
下面来逐步分析四次挥手过程。
客户端给服务器发送TCP包,用来关闭客户端到服务器的数据传送。将标志位FIN和ACK置为1,序号为X=1,确认序号为Z=1。
服务器收到FIN后,发回一个ACK(标志位ACK=1),确认序号为收到的序号加1,即X=X+1=2。序号为收到的确认序号=Z。
服务器关闭与客户端的链接,发送一个FIN。标志位FIN和ACK置为1,序号为Y=1,确认序号为X=2。
客户端收到服务器发送的FIN以后,发回ACK确认(标志位ACK=1),确认序号为收到的序号加1,即Y+1=2。序号为收到的确认序号X=2。
http://blog.csdn.net/yanxi252515237/article/details/51955675