文档库

最新最全的文档下载
当前位置:文档库 > 用wireshark学习TCP协议

用wireshark学习TCP协议

用wireshark学习TCP协议

Wireshark是一款网络分析器,它从网络接口(网卡接口)上捕获数据包。wireshark只能观察在网口过往的数据,它本身不发送任何数据,更不会进行攻击。

我们现在来学习一下TCP协议。学习TCP协议,我们分两步:1、先了解什么是TCP协议,2、透过wireshark来观察TCP是怎样进行三次握手的。

什么是TCP协议?

TCP出现的目的只有一个,就是保证到达目的地的数据的完整性。

用wireshark学习TCP协议

注意在TCP里是不包含源IP地址和目的IP地址,它们是是IP协议首部里的内容。

源端口和目的端口都是16位的,是两个通信程序的端口(从汇编的角度来说,它们就是通信两台主机主板上或扩展卡上的寄存器的地址)。

在TCP中每个传输的字节都被计数,序号是发送数据包中第一个字节的序列号。确认号包含发送确认的一端所期望收到的下一个序号。因此,确认号是上次已成功收到数据字节序号加1。

现在来看看“数据偏移”:TCP选项部分最长可以达到40byte(字节),再加上固定的20byte(字节),就是说TCP最长的首部可达60byte。实际的TCP首部总长度可以通过TCP首部中的“数据偏移“来查看(提醒:TCP偏移量的单位是32位,即4byte,而偏移量共占4bit,取最大的1111来计算即十进制的15,15*4=60byte,这就是TCP首部不超过60byte的原因了)。“窗口“:表示接收缓冲区的空闲空间占16位,用来告诉TCP连接对端自己能够接收的最大数据长度。

接下来就是6个标志位了,各占1bit,我认为比较重要,接下来看看它们是如何的重要:URG的值为1时,紧急指针字段有意义;

ACK的值为1时,确认号字段这时才有意义;

PSH的值为1时,表示“催促“接收方应该尽快将这个报文段交给应用层。Push功能;

RST的值为1时,表示重建连接;

SYN(synchronous)是TCP/IP建立连接时使用的握手信号。客户机首先发出一个SYN 消息,服务器使用SYN+ACK应答表示接收到了这个消息,最后客户机再以ACK消息响应。这样可靠的TCP就建立起来了,数据可以传送啦!

FIN表示没有数据需要发送了(在关闭TCP连接的时候使用):任何一方都可以关闭一个TCP连接,要求双方发送一个FIN信号关闭自己的通讯频道。一方可以在另一方之前关闭,或者双方同时关闭TCP连接。因此,当一方发送一个FIN信号时,另一方可发送“FIN+ACK”,开始关闭自己一方的通信并且确认收到了第一个FIN信号。发送第一个FIN信号的人接下来再发送一个“FIN+ACK”信息,确认收到第二个FIN信号。另一方就知道这个连接已经关闭了,并且关闭了自己的连接。发送第一个FIN的人没有办法收到最后一个ACK信号的确认信息。这时它会进入“TIME_WAIT”(等待时间)状态并启动一个定时器,防止另一方没有收到ACK信息并且认为连接仍是打开的。一般来说,这个状态会持续1至2

分钟。

2、透过wireshark来观察TCP是怎样进行三次握手的。

我通过访问省执法系统来说明三次“握手”过程(HTTP协议(应用层)是用TCP(传输层)链接的),下图中129.168.1.5是客户端,121.33.200.117是服务器,先开启wireshark捕捉数据,再打开浏览器打开省执法系统,然后,观察捕捉到的数据进行分析:

(1)客户端首先将SYN=1的同步信息发给服务器;

用wireshark学习TCP协议

(2)服务器将SYN、ACK的值置成1,用以应答表示接收到了这个消息;

用wireshark学习TCP协议

(3)最后客户端再以ACK=1消息响应。

用wireshark学习TCP协议

完成上面三步,可靠的数据链路就建立好了。