基于Wireshark的TCP协议工作过程分析
2019-05-23左晓静赵永乐王荣
左晓静 赵永乐 王荣
摘要:TCP/IP协议在网络连接中应用越来越广泛,而该协议的核心协议TCP就变得更加重要了。通过Wireshark工具软件抓包对TCP的三次握手进行分析,根据每次握手的具体数据分析每次握手的意义,使学习者对TCP有较深的认识。
关键词:Wireshark;TCP协议;抓包分析
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2019)05-0067-02
我们都知道计算机联网的靠的就是协议,在不同的网络中使用的网络协议也不相同,常用的网络协议有OSI参考模型协议、TCP/IP协议、X.25协议等。在这些网络协议中最常用的是TCP/IP协议。虽然OSI是国际标准化部门制定的,但这种协议在实用应用中的价值并不大,在现实中只能作为参考模型来用。而具有实用价值的就是TCP/IP协议,这种协议的应用非常广泛,最初只应用在局域网中,随着它的发展,现在也已应用到了城域网以至于广域网中。并且TCP/IP协议对其他协议也有很好的兼容性。
1 TCP协议概述
TCP(传输控制协议)是TCP/IP协议栈中的传输层协议,它通过序列确认以及包重发机制,提供可靠的数据流发送和到应用程序的虚拟连接服务。与 IP 协议相结合,TCP 组成了因特网协议的核心。[1]
TCP有三个特点,一是面向连接,二是提供端到端的可靠传输,三是端到端流量控制。[2]
TCP协议在通信前先要建立连接,在通信结束后还要拆除连接。它使用3次握手建立一条连接,这三次握手中初始化了传输可靠性以及数据传送顺序等必要的信息,并分配相应资源。数据通信完成后TCP使用4次挥手拆除一条连接,为何需要4次呢?因为TCP是一个全双工协议,数据的传送是双向的必须对每个方向的信道都进行拆除,最后收回资源。提供端到端的可靠传输是靠确认号来实现的,TCP在发送数据时发送端每发送一个数据包,就要等待接收端发来的确认信息,只有收到接收端的确认信息后发送端才能发送下一个数据包。如果在规定时间RTT中没有收到确认信息,则该数据包重发。在这个技术中发送方的等待时间RTT是个关键,RTT设置过长会影响网络速度,过短会出现数据包重复发送现象。端到端的流量控制是使用窗口机制来实现的。TCP协议里窗口机制有2种:一种是固定的窗口大小;一种是滑动的窗口。这里所说的窗口大小就是TCP一次传输的数据个数。在传送数据前对所有数据帧按顺序编号,发送方在发送数据时始终保持着一个发送窗口,只有把数据帧放在发送窗口内才允许被发送;同时接收方也始终保持着一个接收窗口,接收端只能接收窗口内的数据帧。这样通过调整发送方窗口和接收方窗口的大小就能实现流量控制。
2 TCP的工作过程分析
2.1 Wireshark简介
Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。网络管理员使用Wireshark来检测网络问题,网络安全工程师使用Wireshark来检查资讯安全相关问题,开发者使用Wireshark来为新的通讯协定除错,普通使用者使用Wireshark来学习网络协定的相关知识。[3]
2.2 TCP三次握手
TCP是一个面向连接的协议,它使用三次握手来建立连接,如图1所示。
下面我们通过访问网站来使用Wireshark工具抓包来分析TCP的三次握手。首先打开Wireshark软件,打开浏览器输入http://www.cr173.com,在wireshark中输入http过滤, 然后选中GET /tankxiao HTTP/1.1的那条记录,右键然后点擊"Follow TCP Stream",和网站进行数据包传送。打开Wireshark我们可以看到建立连接时的三次握手,如图2所示。
在三次握手后才开始http的数据包传送。展开Wireshark中的记录可能看到每次握手的详细信息(这里不再展示),三次握手的详细信息如表1所示。
2.3 过程分析
三次握手的主要任务是进行一些初始化,包括通信双方序列号、确认号、窗口大小等信息。
第一次握手是由client发起的,client向server发送一个SYN的TCP报文,其中包含连接的初始序列号x和一个窗口大小(用来控制端到端流量控制)。
第二次握手是由server发起的,server收到client发送过来的SYN申请连接报文后,向client发送一个含有SYN+ACK的TCP确认报文,该报文中服务器的初始序列号为y、把客户端的序列号x+1作为对client的确认号和一个窗口大小。
第三次握手是由client发起的,client接收到server返回的SYN+ACK确认报文后,再向server发送一个确认号y+1和序号x+1的ACK报文,连接就建立了。
2.4 四次挥手
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这就是为什么建立连接要三次,拆除连接要四次。拆除连接的过程:(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1,和SYN一样,一个FIN将占用一个序号。(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。[4]
3 小结
TCP是TCP/IP协议中常用的一个协议,也是最复杂的网络协议之一,在实际应用中它有很多优点,能提供面向连接的,可靠的传输,还能对数据流量进行控制。但正是它基于连接,所以影响了传输速度比较适合大数据的传输,对小量实时数据的传输则不适用。
参考文献:
[1] 冯建文,董剑.改进的TCP应用层协议在远程实验系统中的应用[J].计算机应用与软件,2018(12):29-32.
[2] 陈娟.基于TCP/IP的局域网通信系统的设计与实现[J].信息与电脑(理论版),2018(22):99-101.
[3] 百度百科-Wireshark.https://baike.baidu.com/item/Wireshark/10876564?fr=aladdin.
[4] 百度百科-tcp四次握手.https://baike.baidu.com/item/Wireshark/10876564?fr=aladdin.
【通联编辑:代影】