• 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的一些功能来保证连接更可靠一些。比如,应用层协议DNSDHCP需要高度依赖数据包在网络上的传输速度,因此需要使用UDP协议,并利用它们自身的错误检查以及重传计时来保证数据的正确传输。 

可以看到,这个捕获文件是由DNS形成的。而UDP的内容也很简单,包含有源端口目标端口数据报的长度以及校验和等信息。

需要强调的是,UDP并不关心传输的可靠性,所以任何使用UDP的应用在必要的时候都需要采取特殊的步骤,从而保证传输的可靠性

从零开始学安全(四十四)●TCP三次握手四次挥手的更多相关文章

  1. 对TCP三次握手四次分手还不清楚的速度进,超简单解析,明白了就很好记!

    关于TCP三次握手四次分手,之前看资料解释的都很笼统,很多地方都不是很明白,所以很难记,前几天看的一个博客豁然开朗,可惜现在找不到了.现在把之前的疑惑总结起来,方便一下大家. 先上个TCP三次握手和四 ...

  2. [转]Linux服务器上11种网络连接状态 和 TCP三次握手/四次挥手详解

    一.Linux服务器上11种网络连接状态: 图:TCP的状态机 通常情况下:一个正常的TCP连接,都会有三个阶段:1.TCP三次握手;2.数据传送;3.TCP四次挥手. 注:以下说明最好能结合”图:T ...

  3. 对TCP三次握手四次分手还不清楚,超简单解析

      关于TCP三次握手四次分手,之前看资料解释的都很笼统,很多地方都不是很明白,所以很难记,前几天看的一个博客豁然开朗,可惜现在找不到了.现在把之前的疑惑总结起来,方便一下大家. 先上个TCP三次握手 ...

  4. TCP三次握手四次分手—简单详解

    关于TCP三次握手四次分手,之前看资料解释的都很笼统,很多地方都不是很明白,所以很难记,前几天看的一个博客豁然开朗,可惜现在找不到了.现在把之前的疑惑总结起来,方便一下大家. 疑问一,上图传递过程中出 ...

  5. NO32 网络层次及OSI7层模型--TCP三次握手四次断开--子网划分

    网络层次: OIS网络模型概念:  OSI层次--应用层:  OSI层次--表示层:  OSI--会话层:  OSI--传输层: OSI--网络层: IP地址的概念说明: OSI数据链路层: OSI= ...

  6. TCP三次握手/四次挥手详解

    一. TCP/IP协议族 TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负责不同的通信功能.包含以下四个层次: 1. 链路层,也称作数据链路层或者网络接口层,通常包括操作系统中的设备驱动程 ...

  7. TCP三次握手四次挥手

    看到一篇总结很好的TCP三次握手,学习一下,原文链接. 建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. 首先Client端发送连接请求报文,S ...

  8. TCP 三次握手四次挥手, ack 报文的大小.tcp和udp的不同之处、tcp如何保证可靠的、tcp滑动窗口解释

    一.TCP三次握手和四次挥手,ACK报文的大小 首先连接需要三次握手,释放连接需要四次挥手 然后看一下连接的具体请求: [注意]中断连接端可以是Client端,也可以是Server端. [注意] 在T ...

  9. TCP三次握手四次挥手详解

    转载 http://www.cnblogs.com/zmlctt/p/3690998.html 相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需 ...

  10. wireshark抓包直观图解 TCP三次握手/四次挥手详解

    转http://www.seanyxie.com/category/linux/ 作者:seanyxie |   一. TCP/IP协议族 TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负 ...

随机推荐

  1. 深度学习之卷积神经网络(CNN)

    卷积神经网络(CNN)因为在图像识别任务中大放异彩,而广为人知,近几年卷积神经网络在文本处理中也有了比较好的应用.我用TextCnn来做文本分类的任务,相比TextRnn,训练速度要快非常多,准确性也 ...

  2. 从壹开始微服务 [ DDD ] 之一 ║ D3模式设计初探 与 我的计划书

    缘起 哈喽大家周四好!又是开心的一天,时间过的真快,我们的 <从壹开始 .net core 2.1 + vue 2.5>前后端分离系列共 34 篇已经完结了,当然以后肯定还会有更新和修改, ...

  3. CAP带你轻松玩转Asp.Net Core消息队列

    CAP是什么? CAP是由我们园子里的杨晓东大神开发出来的一套分布式事务的决绝方案,是.Net Core Community中的第一个千星项目(目前已经1656 Star),具有轻量级.易使用.高性能 ...

  4. HTML 练习绑定onclick事件

    方法一 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  5. ArcGIS API for JavaScript 4.x 本地部署之IIS法

    [导读] 关于如何在默认网站(Default Web Site,物理地址C:\inetpub\wwwroot\)启动,已有很多博客详尽地写好了. 本篇在自建网站(本机)中配置http而非https的j ...

  6. 驰骋工作流引擎-流程数据md5加密

    关键字:工作流程数据加密  md5  数据保密流程数据防篡改软加密设置方式: 对工作流引擎的数据加密研究, 流程数据的加密方案与实现过程.输入图片说明需求背景1, 流程数据加密是为了防止流程数据被篡改 ...

  7. Git使用详细教程(8):Git分支

    目录 创建分支 查看分支 切换分支 删除分支 分支合并 探寻分支本质 创建分支 当我们使用git init projectName命令的时候,Git就会默认帮我们创建一个分支,名字叫做master. ...

  8. node项目自动化部署--基于Jenkins,Docker,Github(1)安装Jenkins

    前言 每次项目代码更新后都要重新部署,如果只有一台服务器还好. 但是如果是分布式系统,动不动就很多台服务器,所以代码的自动部署就显得十分重要了. 这里用几篇文章来记录一下如何使用Jenkins,Doc ...

  9. SignalR使用笔记

    最近项目要求添加一个给用户发送消息的功能,就决定使用SignalR.翻到了以前学习SignalR的学习笔记,基本是官方文档的简版整理,便于快速阅览和实现. 1. nuget添加signalr引用: a ...

  10. 学习pwn的前提工作及部分解决方案

    一.Ubuntu 在VM安装64位的Ubuntu 二.pwntools 基本语法 sudo apt-get install libffi-dev sudo apt-get install libssl ...