从零开始学安全(四十四)●TCP三次握手四次挥手
wireshark:Beyond Compare是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换,是目前全世界最广泛的网络封包分析软件
了解TCP端口
TCP的全称是Transmission Control Protocol,即传输控制协议。它在RFC 793中被定义。所有TCP通信都会使用源端口和目的端口,这些信息可以在每个TCP数据包的头部找到。而为了能够将数据传输到远程服务器或设备的特定应用中去,TCP数据包必须知道远程服务所监听的端口。如果想要尝试连接一个不同于所设置的端口,那么这个通信就会失败。一般来说,TCP通信中的源端口并不重要,可以随机选择。而在使用TCP通信的时候,我们一共可以使用65535个端口。其中1至1023号端口属于标准端口组,往往是特定的服务所使用的。而1024至65535号端口则是临时端口,需要使用时,操作系统会在通信时以随机的方式或者采用一定的策略进行选择。

我们来查看一下第一个数据包的TCP头部。可以看到这个数据包是从IP地址为172.16.16.128发往212.58.226.142的,它的源端口号是2826,属于临时端口,它是由操作系统选取的。目的端口是80端口,这是一个标准端口,这个端口通常提供给使用HTTP的Web服务器。其实Wireshark自身会维护一个端口列表,记录这些端口关联的常用服务,我们可以选择菜单栏的“Edit”->“Preference”->“Name Resolution”,勾选“Resolve transport names”,就可以打开传输端口的解析。但是有些时候开启解析可能会对我们的分析造成困扰,因此希望大家按照实际情况使用。
第二个数据包是从IP地址为212.58.226.142发往172.16.16.128的,除了IP地址相反之外,源端口和目标端口也是相反的:

事实上,所有基于TCP的通信都以相同的方式工作:选择一个随机的源端口与一个已知的目标端口进行通信。在发出数据包之后,远程设备就会与源设备使用建立起的端口进行通信
了解TCP的三次握手原理
由于TCP提供的是可靠的数据传输,因此在传输之前,需要与目标主机建立连接。而所有基于TCP的通信都需要以两台主机之间的握手开始。这里我们结合下图进行分析:

请大家注意的是,上图中的seq表示的是请求的序列号,ack表示确认序列号,SYN和ACK为控制位。 1、第一次握手 在第一次握手建立连接时,客户端会向服务器发送SYN数据包(SYN=1,seq=x),并进入SYN_SENT状态,等待服务器的确认。 2、第二次握手 第二次握手其实是分为两步来完成的,即SYN加上ACK,也就是请求和确认数据包。 (1)服务器收到了客户端的请求,向客户端回复一个确认信息(ack=x+1)。 (2)服务器再向客户端发送一个SYN包(seq=y)从而建立连接请求,此时服务器进入了SYN_RCVD状态。 3、第三次握手 第三次握手时客户端收到服务器的回复,也就是SYN加上ACK数据包。此时,客户端也要向服务器发送确认数据包(ACK)。发送完毕之后,客户端和服务器就进入了ESTABLISHED的状态,从而完成了三次握手。那么接下来,客户端和服务端就可以开始传输数据了。

需要说明的是,Wireshark为了让我们分析更加简便,引入了一个新的特性,可以自动将TCP数据包的序列号替换为相对值。但是这里我们不需要这个功能,我们希望看到原始值,可以选择菜单栏的“Edit”->“Preference”,展开窗口左侧的“Protocols”并选择“TCP”,然后取消勾选“Analyze TCP sequence numbers”,再单击OK即可。
这个捕获文件的第一个数据包就是初始的SYN数据包,它从172.16.16.128发往212.58.226.142的80号端口。可以看到它的序列号是3691127924。第二个数据包是从212.58.226.142发出的SYN/ACK响应:

这个数据包里面包含有这台主机的初始序列号(233779340),以及一个确认号(3691127925),注意这个确认号比上一个数据包的序列号大1,因为这个域是用来表示主机所期望得到的下一个序列号的值,有助于数据包的顺序传输。 第三次握手的数据包是从172.16.16.128发出的ACK数据包:

这个数据包正如所期望的那样,包含有之前数据包的确认号域所定义的序列号3691127925,通过这个序列号,就可以知道数据的传输顺序没有问题。只要网络中存在有TCP通信,那么我们都会看到这个模式的三次握手
了解TCP的断开过程
在TCP通信中,每次握手之后都会有断开的操作,一旦TCP通信结束,就会使用4个数据包以及一个FIN标志表明连接的结束。如下图所示:

TCP的断开步骤如下:
- 1、客户端向服务器发送一个设置了FIN和ACK标志位的TCP数据包,告诉服务器通信完成。
- 2、服务器收到客户端发来的数据包后,发送一个ACK数据包来回应客户端。
- 3、服务器再向客户端传输一个自己的FIN/ACK数据包。
- 4、客户端收到服务器的
FIN/ACK数据包后,再向服务器发送一个ACK数据包,之后就结束通信过程。

通过查看第一个数据包的标志位可以发现,IP地址为67.228.110.120的设备通过发送含有FIN/ACK标志位的数据包来开启TCP断开的过程。接下来目标设备使用了一个ACK数据包来确认收到了数据包,并且发送了一个FIN/ACK数据包。最后,IP地址为67.228.110.120的设备发送了最后的ACK数据包后,宣告TCP正式断开。那么这两个设备之间的TCP通信就已经结束了,如果想要再继续进行通信,则必须完成新的握手操作。
了解TCP的重置
正常情况下,TCP通信的连接都会以TCP的四次握手断开。但是现实中,网络连接有时会出现断掉的情况。这有可能是遭受到了网络攻击,也有可能是出现了配置错误的情况。此时就需要使用设置了RST标志的TCP数据包,表示出现了连接被异常终止或拒绝连接的请求。

这个文件中的第一个数据包是从192.168.100.138发出的,并且尝试与192.168.100.1的80端口进行通信。但是由于目标主机并没有开启80端口,因此在第二个数据包中,就回应了一个RST数据包,告诉源主机80端口无法建立连接,那么通信也就终止了。由此可见,RST数据包可以在通信序列的开始或者在主机通信的过程中,将通信终止。
UDP数据包分析
UDP指的是User Datagram Protocol,即用户数据报协议,是在现代网络中最常使用的另外一种第四层的协议。如果说TCP是为了满足带有内在错误检测的可靠数据传输,那么UDP主要是为了提供高速的传输。出于这个原因,UDP是一种尽力服务,通常会被称为无连接协议。一个无连接协议并不会正式地建立和结束主机之间的连接,也不会像TCP那样存在握手和终止的过程。
无连接协议意味着它是一种不可靠的服务,这将使得UDP的流量一点都不稳定。但依赖于UDP的协议通常都会有其它的可靠性服务,或者使用ICMP的一些功能来保证连接更可靠一些。比如,应用层协议DNS和DHCP需要高度依赖数据包在网络上的传输速度,因此需要使用UDP协议,并利用它们自身的错误检查以及重传计时来保证数据的正确传输。

可以看到,这个捕获文件是由DNS形成的。而UDP的内容也很简单,包含有源端口、目标端口、数据报的长度以及校验和等信息。
需要强调的是,UDP并不关心传输的可靠性,所以任何使用UDP的应用在必要的时候都需要采取特殊的步骤,从而保证传输的可靠性。
从零开始学安全(四十四)●TCP三次握手四次挥手的更多相关文章
- 对TCP三次握手四次分手还不清楚的速度进,超简单解析,明白了就很好记!
关于TCP三次握手四次分手,之前看资料解释的都很笼统,很多地方都不是很明白,所以很难记,前几天看的一个博客豁然开朗,可惜现在找不到了.现在把之前的疑惑总结起来,方便一下大家. 先上个TCP三次握手和四 ...
- [转]Linux服务器上11种网络连接状态 和 TCP三次握手/四次挥手详解
一.Linux服务器上11种网络连接状态: 图:TCP的状态机 通常情况下:一个正常的TCP连接,都会有三个阶段:1.TCP三次握手;2.数据传送;3.TCP四次挥手. 注:以下说明最好能结合”图:T ...
- 对TCP三次握手四次分手还不清楚,超简单解析
关于TCP三次握手四次分手,之前看资料解释的都很笼统,很多地方都不是很明白,所以很难记,前几天看的一个博客豁然开朗,可惜现在找不到了.现在把之前的疑惑总结起来,方便一下大家. 先上个TCP三次握手 ...
- TCP三次握手四次分手—简单详解
关于TCP三次握手四次分手,之前看资料解释的都很笼统,很多地方都不是很明白,所以很难记,前几天看的一个博客豁然开朗,可惜现在找不到了.现在把之前的疑惑总结起来,方便一下大家. 疑问一,上图传递过程中出 ...
- NO32 网络层次及OSI7层模型--TCP三次握手四次断开--子网划分
网络层次: OIS网络模型概念: OSI层次--应用层: OSI层次--表示层: OSI--会话层: OSI--传输层: OSI--网络层: IP地址的概念说明: OSI数据链路层: OSI= ...
- TCP三次握手/四次挥手详解
一. TCP/IP协议族 TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负责不同的通信功能.包含以下四个层次: 1. 链路层,也称作数据链路层或者网络接口层,通常包括操作系统中的设备驱动程 ...
- TCP三次握手四次挥手
看到一篇总结很好的TCP三次握手,学习一下,原文链接. 建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. 首先Client端发送连接请求报文,S ...
- TCP 三次握手四次挥手, ack 报文的大小.tcp和udp的不同之处、tcp如何保证可靠的、tcp滑动窗口解释
一.TCP三次握手和四次挥手,ACK报文的大小 首先连接需要三次握手,释放连接需要四次挥手 然后看一下连接的具体请求: [注意]中断连接端可以是Client端,也可以是Server端. [注意] 在T ...
- TCP三次握手四次挥手详解
转载 http://www.cnblogs.com/zmlctt/p/3690998.html 相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需 ...
- wireshark抓包直观图解 TCP三次握手/四次挥手详解
转http://www.seanyxie.com/category/linux/ 作者:seanyxie | 一. TCP/IP协议族 TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负 ...
随机推荐
- Python + Appium 获取当前屏幕的截图方法的封装
使用方法:get_screenshot_as_file(filename),来自于selenium\webdriver\remote\webdiver.py def take_screenShot(s ...
- 深入理解java虚拟机之java内存区域
java虚拟机在执行java程序的时候会把它所管理的内存分为多个不同的区域,每个区域都有不同的作用,以及由各自的生命周期,有些随着虚拟机进行的启动而存在,有些区域则依赖于用户线程的启动或结束而建立或销 ...
- .net core 中间件管道底层剖析
.net core 管道(Pipeline)是什么? 由上图可以看出,.net core 管道是请求抵达服务器到响应结果返回的中间的一系列的处理过程,如果我们简化一下成下图来看的话,.net core ...
- Gradle入门到实战(二) — ImageOptimization安卓图片转换压缩插件
上一篇我们了解了Gradle的各个方面,本篇介绍一款安卓图片优化转换插件,目前已在项目中使用,可一键批量转换压缩图片,webp转换与png/jpg压缩就是那么简单 GitHub项目地址:ImageOp ...
- 基础测试jmeter5.0+badboy(从小白到入门)
1]测试工具jmeter环境安装 1.1]安装jdk环境 1:必须安装jdk8.0(我尝试安装最新版本不行,好像当时没有配置好.之后安装8.0遍可以正常运行)下载地址:单击此段 配置jdk环境:鼠标右 ...
- 用css画一个哆啦A梦
原图: 效果图: 虽然说没用啥什么高级的技巧,但这让我感受到了CSS的乐趣! 好好学习,天天向上! <!DOCTYPE html> <html> <head> &l ...
- openlayers4 入门开发系列之批量叠加 zip 压缩 SHP 图层篇(附源码下载)
前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...
- Android studio简单布局之view基本属性
本人属于自学上路,目前是在入门阶段,所以有些内容实质性比较少,请各位大佬多多包涵. 视图view的基本属性: layout_margin:定义视图与周围视图之间的空白距离 layout_padding ...
- sql server2005安装时报 ‘服务无法启动’
SQL server服务无法启动的原因分析: 在安装SQL 2005标准版(不多于四个CPU)和企业版(无限制)时,CPU的总核数必须是2的n次方.即核心数为1,2,4,8,16,32依次类推.因BL ...
- Chrome内核浏览器打开网页报 错误代码: ERR_TIMED_OUT
升级win10之后如果出现chrome内核的浏览器网页总是打不开 打开很慢 而ie和edge是可以正常访问的 用这个方法可以 我弄了几天终于 搞好了我直接转载过来了近期,工程师收到大量反馈360浏 ...