从零开始学安全(四十四)●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是一个协议族,通常分不同层次进行开发,每个层次负 ...
随机推荐
- 深入理解Java虚拟机 第三章 垃圾收集器 笔记
1.1 垃圾收集器 垃圾收集器是内存回收的具体实现.以下讨论的收集器是基于JDK1.7Update14之后的HotSpot虚拟机.这个虚拟机包含的所有收集器有: 上图展示了7种作用于不同分代的收集 ...
- kubernetes 微服务西游记(持续更新中...)
随着微服务架构的流行,迈向云原生的趋势,容器化微服务就成为了持续集成最好的手段,镜像成为了持续交付最好的产物,容器成为了镜像运行最好的环境,kubernetes成了部署容器最好的生态系统和规范.实践出 ...
- 【STM32H7教程】第11章 STM32H7移植SEGGER的硬件异常分析
完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第11章 STM32H7移植SEGGER的硬 ...
- UML用法及状态图,活动图介绍
统一建模语言UML(Unified Modeling Language)是非专利的第三代建模和规约语言.UML是一种开放的方法,用于说明.可视化.构建和编写一个正在开发的.面向对象的.软件密集系统的制 ...
- 从壹开始微服务 [ DDD ] 之十一 ║ 基于源码分析,命令分发的过程(二)
缘起 哈喽小伙伴周三好,老张又来啦,DDD领域驱动设计的第二个D也快说完了,下一个系列我也在考虑之中,是 Id4 还是 Dockers 还没有想好,甚至昨天我还想,下一步是不是可以写一个简单的Angu ...
- github下载和上传项目
git下载和上传项目 下载: git clone +地址 上传: 1.git init 在当前项目的目录中生成本地的git管理(多一个.git文件夹,为隐藏文件) 2.git add .(注意最后面有 ...
- java游戏开发杂谈 - 游戏编程浅析
每个游戏,你所看到的它的一切,都是计算机画出来的! 地图是画出来,人物是画出来的,树木建筑是画出来的,菜单按钮是画出来的,滚动的文字.闪烁的图标.云雾烟火,都是画出来的. 游戏编程,所要做的,就是控制 ...
- 设计模式 | 抽象工厂模式(abstract factory)
定义: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类. 结构:(书中图,侵删) 这个图相对来说有一点点复杂,其实就是在工厂方法模式的基础上做了一些扩展,工厂方法模式只用于生成一种 ...
- 交给子类: Template Method(模板方法模式)【PHP】
Template Method(模板方法模式) ---- 将具体处理交给子类 Template Method 就是定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构可 ...
- Vue.js 学习笔记 第3章 计算属性
本篇目录: 3.1 什么是计算属性 3.2 计算属性用法 3.3 计算属性缓存 模板内容的表达式常用语简单的运算,当其过长或逻辑复杂时,会难以维护,本章的计算属性就是用于解决该问题的. 3.1 什么是 ...