TCP协议-三次握手实验
TCP协议的基本概念
TCP(传输控制协议)是面向连接的可靠的基于IP的传输层协议,它的主要目的是为数据提供可靠的端到端的传输,它能够处理数据的顺序传输和错误恢复,并保证数据能够到达目的地。
UDP是无连接的传输层协议,提供面向事物的简单的不可靠的信息传输服务。
TCP和UDP在实际的使用中各有优势。
TCP协议(传输控制协议),所有TCP通信都会使用源端口和目的端口,这些信息都能在每个TCP包的头部找到,为了将数据传输到远程服务器或设备特定应用中去,TCP数据包必须知道远程服务所监听的端口,如果尝试连接不同于设置的端口,通信将会失败。通信中的源端口不重要,可以随机选择,在使用TCP通信中我们一共可以使用65535个端口,其中1-1023号端口属于标准的端口组,是特定的服务使用的,1024-65535端口是临时端口,需要使用的时候,操作系统会在通信的时候随机或采取一定的策略来选择。
实验准备
Wireshark软件,捕获数据包TCP。在捕获数据包之前,我们先打开IE浏览器输入www.sina.com.cn不要回车。然后打开Wireshark软件点击捕获,然后回到IE浏览器点回车,进入新浪网站,回到Wireshark停止捕获。导出捕获文件为TCP1。
双击打开我们导出的TCP1文件。
TCP协议分析
在开始分析数据包之前我们要先来看看TCP的报文头部的一些标志信息。
双击打开TCP1文件,然后筛选条件选择为ip.addr==115.238.190.240(新浪网解析的IP地址)回车。
这里Packet list界面就显示出跟115.238.190.240筛选条件相匹配的结果。
这里双击包号为217的数据包,打开Packet details界面。查看TCP协议的具体信息。
在这里我们可以看到这个数据包时由IP地址为192.168.20.23发往IP地址为115.238.190.240的。
我们点开TCP1。
可以看到TCP协议的具体内容。
源端口号为52212,这个是由系统自动分配的,属于临时端口。
目标端口号为80,是一个标准端口,通常提供使用HTTP的WEB服务器。
Wireshark自身会维护一个关联列表,记录这些端口关联的常用服务。
怎样打开这个关联列表呢,我们现在点开Wireshark左上角的编辑,然后点击首选项。
然后点击首选项弹出窗口左边窗口Name Resolution。
在Name Resolution右边选项里面,将Resolve transport names前面的勾勾上,然后点击OK保存退出,然后就可以打开传输端口解析。
这个时候我们再来看Packet Details界面里面,就会发现目的端口80前面多了一个HTTP。
我们先来看看217,218,219这三个包,这三个包就是TCP的三次握手。
什么是TCP三次握手。
利用TCP传输数据前,需要建立TCP连接,TCP连接的建立有3个主要的过程,叫做3次握手。
下面是TCP的3次握手图。
点开包号217的数据包我们来看看TCP的3次握手的第一次握手。
我们可以在217号数据包的Packet Details界面里面可以看到上面提到的源端口号和目的端口号。源端口号为52212,这时系统随机分配的一个临时端口号。目的端口号是一个标准端口号,端口号为80。
在图里可以看到第一次握手我们发送了一个SYN包给我们要连接的网站服务器,这里SYN=1(连接序号)表示连接请求。
点开包号为218的数据包,来查看TCP第二次握手的具体情况。我们可以在Packet Details界面看到这个数据包的具体信息,跟上图一样。在这里可以看到我们的SYN还是1,但是ACK变成了1,表示我们要连接的网站服务器确认了这个连接请求。
现在点开包号219的数据包,来看下TCP第三次握手的具体信息。
现在我们可以看到SEQ的数值已经变为1,SYN的值已经变为0了,ACK的值还是1。这里表示的是我们跟网页服务器再次回应服务器端一个ACK确认数据段。
从上面的图例我们可以总结TCP的3次握手规则是。
- 首先客户端发送一个SYN包给服务器,然后等待应答。
- 服务器收到SYN包,回应客户端一个ACK=X+1,SYN=1的TCP数据段(ACK表示确认序号有效,即收到上一个包)。
- 客户端必须再次回应服务器一个ACK确认数据段(这里SEQ为X+1)。
我们通过Wireshark更加直观的看到的TCP三次握手。