精华内容
下载资源
问答
  • Wireshark抓包分析TCP协议 版权声明:本文为作者原创文章,可以随意转载,但必须在明确位置表明出处!!! 之前有一篇文章介绍了http协议「初识http协议」, http协议协议是基于tcp协议的,所以作者...

    Wireshark抓包分析TCP协议


    Wireshark抓包分析TCP协议

    版权声明:本文为作者原创文章,可以随意转载,但必须在明确位置表明出处!!!

    之前有一篇文章介绍了http协议初识http协议」, http协议协议是基于tcp协议的,所以作者觉得有必要针对tcp协议做一个介绍,希望各位读者能够静下心来认真阅读,也可以自己去看看TCP/IP协议详解这本书,一定要让自己成为那20%的人。

    TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,对TCP协议的文章网上已经很成熟了,今天我只是想总结一下知识,加深印象,所谓好记心不如烂笔头麻。

    TCP/IP分层结构

    TCP/IP协议栈主要分为4层:应用层,传输层,网络层,数据链路层

    • 应用层

    应用层负责处理特定的应用程序细节,像远程登陆,FTP传输,SMTP邮件传输,SNMP简单网络管理。

    • 传输层

    运输层主要提供两台主机之间端到端的通信,在TCP/IP协议族中,TCP和UPD是两种截然不同的传输协议,TCP(传输控制协议)为主机之间提供可靠传输,它把从应用层得到的数据分成适当的数据包交给下面的(IP)网络层,确定接收到的分组,设置发送最后确认分组的超时时钟等,因运输层提供了高可靠性的端到端的通信,应用层就不需要再去关注这些细节,而UDP(用户数据协议)提供的是不可能性的传输,它只负责从一台主机发送到另一台主机,并不保证此数据一定到达另一端主机,任何必需的可靠性必须由应用层来提供。

    • 网络层

    网络层主要处理分组在网络中的活动,网络层协议包涵IP,ICMP,IGMP协议。

    • 链路层

    链路层组要包涵网卡驱动程序,它处理和电缆或者其它传输介质的物理接口细节。链路层的主要目的有三个

    1. 为IP模块接收和发送IP数据报

    2. 为ARP模块发送ARP请求和接收ARP应答

    3. 为RARP模块接收RARP应答和发送RARP请求

    Wireshark抓包分析TCP协议

    所谓的协议就是通信双方都需要遵守的规则,这样才能明白对方要表达什么,就像两个人打电话一样,A说的是重庆话,B说的是广东话,这两人打电话肯定不知道对方说的是什么,这就叫他们没有遵守协议,若是都让他们说普通话这样俩儿人就都能听懂对方说的是什么意识了,普通话这里就相当于协议大家都要遵守。下面我将结合Wireshark抓包工具来分析TCP/IP协议

    封装

    数据进入协议栈的封装过程

    Wireshark抓包分析TCP协议

    当经过以太网层的封装后,就要通过网线或者其它传输介质把此封装好的数据报文发送到另一端去,另一段收到数据报后最先接触的是以太网层也就是我们的数据链路层协议,该层协议复制把以太网首部解析掉,让后把解析后的数据报上送到IP层,IP层把IP首部解析掉,然后上传到TCP层,依次类推每层协议解析其首部并判断其首部中的协议标识以确定接收数据的上层协议,然后上送到他的上一层。这就是封层结构的好处之一,每层协议只做自己的事,不是自己的事就交给别人去做。

    TCP报文格式

    Wireshark抓包分析TCP协议

    Wireshark的抓包结果

    Wireshark抓包分析TCP协议

    原端口/目的端口(16bit):

    我们都知道网络之前的通信是不通主机之间的通信,就windows系统而言通过查看任务管理器我们可以知道一台主机有许多进程,当我们发送数据时怎么知道要发送到对方主机那个进程里呢,所以这就是端口号的作用,在TCP报文中包涵了源端口/目的端口,源端口标识了发送进程,目的端口标识了接收方进程。在此报文中我们的源端口号是0x8572 = 34162, 目的端口是0x01bb = 443如下图所示

    Wireshark抓包分析TCP协议

    序列号(32bit)

    Sequence Number这个是发送序列号,用来标识从源端向目的端发送的数据字节流,它表示在这个报文端中的第一个数据字节的顺序号,系列好是32位的无符号类型,序号表达达到2^32 - 1后又从0开始, 当建立一个新的连接时,SYN标志为1,系列号将由主机随机选择一个顺序号ISN(Initial Sequence Number)。此报文中的序列号是0x9e546d6b早已超过了2^32 - 1 所以这里的序列号为0,如下图

    Wireshark抓包分析TCP协议

    确认号(32bit)

    Acknowledgment Number它包涵了发送确认一端所期望收到的下一个顺序号。因此确认序列号应当是上次成功接收到数据的顺序号加1。只有ACK标志为1时确认序号字段才有效。TCP为应用层提供全双工服务,这意味着数据能在两个方向上独立的进行传输,因此连接的两断必须要保证每个方向上的传输数据顺序。

    偏移(4bit)

    这里的偏移实际指的是TCP首部的长度,它用来表明TCP首部中32bit字的数目,通过它可以知道一个TCP包它的用户数据从哪里开始,这个字段占4bit,若此字段的值为1000,则说明TCP首部的长度是8 * 4 = 32字节,所以TCP首部的最大长度是该字段的值为1111 = 15, 15 * 4 =60字节。此报文我们的偏移量在0x80中,又因它占4bit,0x80等于二进制的1000 0000 所以我们的偏移量是 1000 = 8,所以我们的TCP报文头为8 * 4 = 32字节。

    Wireshark抓包分析TCP协议

    Reserved(6bit)

    目前没有使用,它的值都为0

    标志(6bit)

    在TCP首部中有6个标志比特,他们中的多个可同时被置为1

    • URG(Urgent Pointer Field Significant):紧急指针标志,用来保证TCP连接不被中断,并且督促中间设备尽快处理这些数据

    • ACK(Acknowledgement Field Signigicant):确认号字段,该字段为1时表示应答字段有效,即TCP应答号将包含在TCP报文中。

    • PSH(Push Function): 推送功能,所谓推送功能指的是接收端在接收到数据后立即推送给应用程序,而不是在缓冲区中排队。

    • RST(Reset the connection): 重置连接,不过一搬表示断开一个连接,如下图,主机192.168.3.27 访问主机211.150.84.8;但主机84.8并没有监听对于端口,这时它会向主机3.27发送一个RST位置的TCP包断开连接。

    Wireshark抓包分析TCP协议

    • SYN(Synchronize sequence numbers):同步序列号,用来发起一个连接请求

    • FIN(No more data from sender):表示发送端发送任务已经完成(既断开连接)

    窗口大小(16bit)

    表示源主机最大能接收多少字节。

    校验和(16bit)

    包含TCP首部和TCP数据段,这是一个强制性的字段,一定是由发送端计算和存储,由接收端进行验证

    紧急指针(16bit)

    只有当URG标志置为1时该字段才有效,紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。TCP的紧急方式是发送端向另一段发送紧急数据的一种方式。

    TCP选项

    至少1个字节的可变长字段,标识哪个选项有效。Kind=0:选项表结束, Kind=1:无操作, Kind=2:最大报文段长度,Kind=3:窗口扩大因子, Kind=8:时间戳。

    TCP的三次握手和四次挥手

    整个过程如下图所示

    Wireshark抓包分析TCP协议

    TCP的三次握手

    TCP的三次握手过程如下图所示,我们通过数据包来分析一下握手过程是不是和图中所画一致。

    Wireshark抓包分析TCP协议

    第一次握手

    主机192.168.3.27向主机111.13.100.91发起连接请求,可以看在这时的SYN被置为1了,序列号Seq = 0,如下图

    Wireshark抓包分析TCP协议

    第二次握手

    主机111.13.100.91应答主机192.168.3.27,可以看到这个时候的应答包含了SYN,ACK,ACK = Seq + 1 = 1, 这里的Seq是第一次握手发起请求的Seq值,并不是下图报文中红框表示的Seq值。

    Wireshark抓包分析TCP协议

    第三次握手

    主机192.168.3.27应答主机111.13.100.91,可以看到这个时候的应答包是ACK, ACK = Seq + 1 = 1,这里的Seq是第二次握手主机111.13.100.91产生的序列值

    Wireshark抓包分析TCP协议

    在回头看看我们的svr4.1037主机和bsdi.discard之前的连接建立是不是和我们的报文分析的一致,第一次握手 SYN Seq = 1415531521; 第二次握手 SYN ack = 1415531521 + 1 = 1415531522 Seq = 1823083521;第三次握手 ack = 1823083521 + 1 = 1823083522;到这里就可以看出此过程和我们的报文分析是一致的。

    可以看到三次握手后确定了双方包的序列号,最大接收数据的大小以及MSS(Maximum Segment Size)最大分片大小 MSS = MTU - IP头部长度 - TCP头部长度,MTU最大传输单元一班为1500字节,若TCP/IP报文都不带选项时MSS = 1500 - 20 - 20 = 1460,MSS的意思是最大分片大小,这里若是1460的话,那么若是应用程序发送大于1460个字节那么超过1460个字节数会分片为下一个包,下图是应用层发送4096个字节。

    Wireshark抓包分析TCP协议

    Wireshark抓包分析TCP协议

    由于数据大小是4096个字节,所以用了三次进行传递(1448 + 1448 + 1200)。细心的人会问为什么每次传送的最大数据大小不是1460个字节呢?因为这里的TCP携带可选项,TCP头长度 = 20 + 12(可选选项大小) = 32字节。 这样能传输的最大数据为:1500 - 20 - 32 = 1448个字节。

    TCP四次挥手

    Wireshark抓包分析TCP协议

    第一次挥手

    将设客户端首先发起断开连接,那么客户端回想服务端发送FIN置为1的TCP包,请求断开连接,意思就是我要断开和你的连接了,但是如果你还有数据没有发送完给我你不必立即关闭连接。

    第二次挥手

    服务端收到客户端的断开连接请求立即响应一个ACK报文,意思是告诉客户端你发起的断开连接请求我已经收到了,但是我还没有准备好,你在等一会,这个时候服务器端可能还有数据要发送给客户端,也可能正在准备释放资源。这个时候客户端进入FIN_WAIT状态,继续等待服务端的FIN报文。

    第三次挥手

    服务端确认已经发往客户端的数据已经发送完成,则向客户端发送FIN报文,告诉客户端我已准备好关闭连接了。

    第四次挥手

    客户端收到服务端的FIN报文后就知道可以关闭连接了,当时它还是不确定,怕服务端还是不知道我要关闭连接了,所以发送一个ACK包后进入TIME_WAIT状态,如果服务端没有收到ACK那么服务端则可以发起重传,如果收到了ACK报文,客户端等待2MSL后已然没有收到回复,则证明服务端已经正常关闭了,那我也就可以关闭连接了。

    展开全文
  • 文章目录一、TCP协议与通信过程讲解二、Wireshark抓包验证三、了解Fiddler四、Fiddler抓包五、总结六、参考 一、TCP协议与通信过程讲解 1、 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接...

    一、TCP协议与通信过程讲解

    1、
    TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的、可靠的、 基于IP的传输层协议。
    2、
    OSI的七层模型:
    在这里插入图片描述

    TCP工作在网络OSI的七层模型中的第四层——Transport层,IP在第三层——Network层,ARP 在第二层——Data Link层;在第二层上的数据,我们把它叫Frame,在第三层上的数据叫Packet,第四层的数 据叫Segment。

    3、
    TCP协议头部的格式
    在这里插入图片描述
    我们需要了解其中一些,比如:

    Acknowledgment Number:32位确认序列号包含发送确认的一端所期望收到的下一个序号,因此,确认序号应 当是上次已成功收到数据字节序号加1。不过,只有当标志位中的ACK标志(下面介绍)为1时该确认序列号的字 段才有效。主要用来解决不丢包的问题;

    Offset:给出首部中32 bit字的数目,需要这个值是因为任选字段的长度是可变的。这个字段占4bit(最多能 表示15个32bit的的字,即4*15=60个字节的首部长度),因此TCP最多有60字节的首部。然而,没有任选字段, 正常的长度是20字节;

    TCP Flags:TCP首部中有6个标志比特,它们中的多个可同时被设置为1,主要是用于操控TCP的状态机的,依次 为URG,ACK,PSH,RST,SYN,FIN。每个标志位的意思如下:

    URG:此标志表示TCP包的紧急指针域(后面马上就要说到)有效,用来保证TCP连接不被中断,并且督促 中间层设备要尽快处理这些数据;

    ACK:此标志表示应答域有效,就是说前面所说的TCP应答号将会包含在TCP数据包中;有两个取值:0和1, 为1的时候表示应答域有效,反之为0;

    PSH:这个标志位表示Push操作。所谓Push操作就是指在数据包到达接收端以后,立即传送给应用程序, 而不是在缓冲区中排队;

    RST:这个标志表示连接复位请求。用来复位那些产生错误的连接,也被用来拒绝错误和非法的数据包;

    SYN:表示同步序号,用来建立连接。SYN标志位和ACK标志位搭配使用,当连接请求的时候,SYN=1, ACK=0;连接被响应的时候,SYN=1,ACK=1;这个标志的数据包经常被用来进行端口扫描。扫描者发送 一个只有SYN的数据包,如果对方主机响应了一个数据包回来 ,就表明这台主机存在这个端口;但是由于这 种扫描方式只是进行TCP三次握手的第一次握手,因此这种扫描的成功表示被扫描的机器不很安全,一台安全 的主机将会强制要求一个连接严格的进行TCP的三次握手;

    FIN: 表示发送端已经达到数据末尾,也就是说双方的数据传送完成,没有数据可以传送了,发送FIN标志 位的TCP数据包后,连接将被断开。这个标志的数据包也经常被用于进行端口扫描。

    4、
    三次握手:
    在这里插入图片描述
    1.第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;

    2.第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;

    3.第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。
    5、
    四次挥手
    在这里插入图片描述

    1.第一次分手:主机1(可以使客户端,也可以是服务器端),设置Sequence Number和Acknowledgment Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了;

    2.第二次分手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我也没有数据要发送了,可以进行关闭连接了;

    3.第三次分手:主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入CLOSE_WAIT状态;

    4.第四次分手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。

    6、
    为什么要这么麻烦?
    三次握手在保证安全的同时,防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。防止了服务器端的一直等待而浪费资源。
    那么四次挥手呢,原因是TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工 模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2, 它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文 段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的;当主机2也发送了FIN 报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,之后彼此 就会愉快的中断这次TCP连接。

    二、Wireshark抓包验证

    用来验证的Tcp程序是一个C#网游客户端。

    三次握手:
    在这里插入图片描述
    第一次握手,SYN为1;
    第二次握手,SYN为1,ACK为1;
    第三次握手,ACK为1;

    四次挥手:
    在这里插入图片描述
    结束TCP连接时
    第一次握手,ACK = 1 ,FIN = 1;
    第二次握手,ACK = 1 ,FIN = 0;
    第三次握手,ACK = 1 ,FIN = 1;
    第四次握手,ACK = 1 ,FIN = 0;
    FIN:发送端完成发送

    三、了解Fiddler

    1、什么是Fiddler

    Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件)。 Fiddler 要比其他的网络调试器要更加简单,因为它不仅仅暴露http通讯还提供了一个用户友好的格式。

    2、Fiddler工作原理

    在这里插入图片描述

    通过显示所有的Http通讯,Fiddler可以轻松地演示哪些用来生成一个页面,通过统计页面(就是Fiddler左边的那个大框)用户可以很轻松地使用多选,来得到一个WEB页面的“总重量”(页面文件以及相关js,css等)你也可以很轻松地看到你请求的某个页面,总共被请求了多少次,以及多少字节被转化了。
    用户可以加入一个Inspector插件对象,来使用.net下的任何语言来编写Fiddler扩展。RequestInspectors 和 ResponseInspectors提供一个格式规范的,或者是被指定的(用户自定义)Http请求和响应视图。
    另外,通过暴露HTTP头,用户可以看见哪些页面被允许在客户端或者是代理端进行缓存。如果要是一个响应没有包含Cache-Control 头,那么他就不会被缓存在客户端。

    3、下载安装
    我的安装包来自于同学分享
    可以直接去官网下载https://www.telerik.com/fiddler
    安装过程没有特别注意的,在安装完成后需要进行配置
    Tools->Options->HTTPS
    在这里插入图片描述
    弹出证书确认,点击允许即可。
    配置完成之后需要重启程序。

    四、Fiddler抓包

    以CSDN为例,fiddler解密的HTTPS如下
    在这里插入图片描述
    通过imagview可以看到发过来的图片,比如访问百度
    在这里插入图片描述

    五、总结

    大概了解了网络的一些协议以及运作方式,通过这些工具的使用也让我不再是个小白。还是觉得只是停留在这些这是的表面没有太大的作用,想要在更进一步还是要学习原理。

    六、参考

    Fiddler抓包工具简介,安装及使用教程详解
    什么是TCP协议?

    展开全文
  • wireshark抓包分析——TCP/IP协议

    万次阅读 多人点赞 2018-08-29 09:32:22
    在本文中以TCP/IP协议为例,简单介绍TCP/IP协议以及如何通过wireshark抓包分析。Wireshark 是最著名的网络通讯抓包分析工具。功能十分强大,可以截取各种网络封包,显示网络封包的详细信息。Wireshark下载安装,略。...

    本文来自网易云社区


    当我们需要跟踪网络有关的信息时,经常会说“抓包”。这里抓包究竟是什么?抓到的包又能分析出什么?在本文中以TCP/IP协议为例,简单介绍TCP/IP协议以及如何通过wireshark抓包分析。

    Wireshark 是最著名的网络通讯抓包分析工具。功能十分强大,可以截取各种网络封包,显示网络封包的详细信息。

    Wireshark下载安装,略。注意,若在Windows系统安装Wireshark,安装成功后可能会出现Wireshark的两个图标,一个是Wireshark(中文版);另外一个是Wireshark Legacy (英文版)。下面的内容会以Wireshark Legacy为例介绍。

    打开Wireshark,开始界面如下:

    201808290919453f89cc82-9690-4099-addc-b44d84acb713.png  

    Wireshark捕获的是网卡的网络包,当机器上有多块网卡的时候,需要先选择网卡。开始界面中的Interface List,即网卡列表,选择我们需要的监控的网卡。点击Capture Options,选择正确的网卡,然后点击"Start"按钮, 开始抓包。

    2018082909200706917650-2573-4c03-bd01-0462e1c625b4.png  

    我们打开浏览器输入任意http网址,连接再关闭,比如:http://blog.csdn.net。然后,我们回到Wireshark界面,点击左上角的停止按键。查看此时Wireshark的抓包信息。在看抓包信息之前,先简单介绍下Wireshark界面的含义。其中,封包列表的面板中显示编号、时间戳、源地址、目标地址、协议、长度,以及封包信息。

    201808290920260f1a5e4b-8e4f-451d-8994-13764e426f10.png  



    封包详细信息是用来查看协议中的每一个字段。各行信息分别对应TCP/IP协议的不同层级。以下图为例,分别表示:传输层、网络层、数据链路层、物理层,一共四层。如果有应用层数据会显示第五层,即一共会出现五层。

    201808290920377bad3677-03bf-4151-97e7-5d6e09a89bc2.png  

    每一层都有一个字段指向上一层,表明上一层是什么协议。这大概是因为发包的时候会在数据上依次加上应用层、传输层、网络层、链路层的头部,但是对方收到数据包后是从最底层(链路层)开始层层剥去头部解包的,所以在每层上有一个字段指向上层,表明上层的协议,对方就知道下一步该怎么解包了。以TCP/IP协议为例,下图中分别是:IPv4、TCP。由于建立TCP连接用不到应用层协议,所以传输层就没有相应的指明上层(应用层)的字段了。

    2018082909205351047869-4d3c-45f7-b00b-00a7bce465f3.png

    在了解Wireshark界面后,我们来分析TCP协议。这里有很多数据包,我们需要先过滤,添加对应的过滤条件。比如,我添加了目标的ip地址和端口号:tcp and ip.addr==47.95.47.253 and tcp.port==53992,此时获取到的封包列表如下。

    2018082909210415dcc5c2-f999-4b48-a6eb-c02f09655d49.png  


    在此之前,看下TCP/IP报文的格式。

    20180829092121169ae1ab-761a-4861-8a9e-832f840ae973.png  

    根据上述报文格式我们可以将wireshark捕获到的TCP包中的每个字段与之对应起来,更直观地感受一下TCP通信过程。先看三次握手,下图中的3条数据包就是一次TCP建立连接的过程。

    20180829092130d0e2bd9e-7f6c-4a4a-8fad-d09fe445f6fb.png  

    第一次握手,客户端发送一个TCP,标志位为SYN=1,序号seq为Sequence number=0, 53992 -> 80,代表客户端请求建立连接;

    20180829092142452391a5-c140-4467-b2ce-ff0b84e74d44.png  

    第二次握手,服务器向客户端返回一个数据包,SYN=1,ACK=1,80 -> 53992,将确认序号(Acknowledgement Number)设置为客户的序号seq(Sequence number)加1,即0+1=1;

    201808290921493240a120-2f98-4ac0-864e-c5db11c990aa.png  

    第三次握手,客户端收到服务器发来的包后检查确认序号(Acknowledgement Number)是否正确,即第一次发送的序号seq加1(X+1= 0+1=1)。以及标志位ACK是否为1。若正确,客户端会再向服务器端发送一个数据包,SYN=0,ACK=1,确认序号(Acknowledgement Number)=Y+1=0+1=1,并且把服务器发来ACK的序号seq(Sequence number)加1发送给对方,发送序号seq为X+1= 0+1=1。客户端收到后确认序号值与ACK=1,53992 -> 80,至此,一次TCP连接就此建立,可以传送数据了。


    20180829092202fba5f063-758d-4963-b95e-dd50d5f821f5.png  

    还可以通过直接看标志位查看三次握手的数据包,如下图所示,第一个数据包标志位【SYN】,这是第一次握手;第二个数据包标志位【SYN,ACK】,这是第二次握手;第三个数据包标志位【ACK】,这是第三次握手。

    20180829092217b3c30db8-50f8-408c-8e5f-fb7f36fcd22c.png

    在三次握手的三个数据包之后,第四个包才是HTTP的, 这说明HTTP的确是使用TCP建立连接的。

    2018082909222318fe4621-6c39-4e2f-b06a-2bb77e0a609d.png  

    再往下看其他数据包,会发现存在大量的TCP segment of a reassembled PDU,字面意思是要重组的协议数据单元(PDU:Protocol Data Unit)的TCP段,这是TCP层收到上层大块报文后分解成段后发出去。

    201808290922459784ed3b-9f61-4188-b155-a0ab2d25d5f1.png  

          每个数据包的Protocol Length都是1502 Byte,这是因为以太网帧的封包格式为:Frame = Ethernet Header + IP Header + TCP Header + TCP Segment Data。即:

    1、Ethernet Header = 14 Byte = Dst Physical Address(6 Byte)+ Src Physical Address(6 Byte)+ Type(2 Byte),以太网帧头以下称之为数据帧。

    2、IP Header = 20 Byte(without options field),数据在IP层称为Datagram,分片称为Fragment。

    3、TCP Header = 20 Byte(without options field),数据在TCP层称为Stream,分段称为Segment(UDP中称为Message)。

    4、TCP Segment Data = 1448 Byte(从下图可见)。

    所以,每个数据包的Protocol Length = 14 Byte + 20 Byte + 20 Byte + 1448 Byte = 1502 Byte。

    201808290923017e9191f2-49c7-4fe0-8dc9-2f702434ace9.png  

          我们再来看四次挥手。TCP断开连接时,会有四次挥手过程,标志位是FIN,我们在封包列表中找到对应位置,理论上应该找到4个数据包,但我试了好几次,实际只抓到3个数据包。查了相关资料,说是因为服务器端在给客户端传回的过程中,将两个连续发送的包进行了合并。因此下面会按照合并后的三次挥手解释,若有错误之处请指出。

    20180829092314c82f2801-d5ad-4ae3-9620-e7c470e08cb3.png  

    第一次挥手:客户端给服务器发送TCP包,用来关闭客户端到服务器的数据传送。将标志位FIN和ACK置为1,序号seq=X=2242,确认序号ack=Z=17602,53992 -> 80;

    201808290923262ac1ab41-dbb6-4f55-bb7e-671194b52cb7.png  

    第二次挥手:服务器收到FIN后,服务器关闭与客户端的连接,发回一个FIN和ACK(标志位FIN=1,ACK=1),确认序号ack为收到的序号加1,即X=X+1=2243。序号seq为收到的确认序号=Z=17602,80 -> 53992;

    201808290923395482c33b-c1bc-4442-81be-5c5826f572c5.png  

    第三次挥手:客户端收到服务器发送的FIN之后,发回ACK确认(标志位ACK=1),确认序号为收到的序号加1,即Y+1=17603。序号为收到的确认序号X=2243,53992 -> 80。

    201808290923559759f633-e235-47b1-990f-3d42d41a2246.png  

          至此,整个TCP通信过程已经介绍完毕。

          附:TCP通信过程:

    20180829092404d235a095-0627-42c0-8812-62a4d3e4a8c3.jpg



    原文:wireshark抓包分析——TCP/IP协议

    网易云新用户大礼包:https://www.163yun.com/gift

    本文来自网易云社区,经作者李莉授权发布。

     


    相关文章:
    【推荐】 nej+regular环境使用es6的低成本方案

    展开全文
  • 抓包分析tcp连接

    千次阅读 2010-08-18 01:05:00
    有时候用socket写的程序会出现莫名其妙的问题,昨天和广东电信通信的一个程序竟然收到了"网络串"(和电话串号差不多),程序是没有问题的,只能进行抓包分析了,下面是一个TCP连接建立的过程。   ...

    有时候用socket写的程序会出现莫名其妙的问题,昨天和广东电信通信的一个程序竟然收到了"网络串包"(和电话串号差不多),程序是没有问题的,只能进行抓包分析了,下面是一个TCP连接建立的过程。

     

    tcp建立连接首先在标志位进行标示,以表示请求的类型,FLAGS标志如下:

    0... .... = Congestion Window Reduced (CWR): Not set

    .0.. .... = ECN-Echo: Not set

    ..0. .... = Urgent: Not set

    ...0 .... = Acknowledgment: Not Set

    .... 0... = Push: Not set

    .... .0.. = Reset: Not set

    .... ..0. = Syn: Not set

    .... ...0 = Fin: Not set

    一个tcp连接的建立需要进行三次握手:

    1. 发送端发送一个SYN=1,ACK=0标志位数据包给接收端,请求进行连接,这是第一次握手;
    2. 接收端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发送端,告诉它,可以通讯了,并且让发送端发送一个确认数据包,这是第二次握手;
    3. 最后,发送端发送一个SYN=0,ACK=1的数据包给接收端,告诉它连接已被确认,这就是第三次握手。之后,一个TCP连接建立,开始通讯。

     

    ACK:确认标志
         确认编号(Acknowledgement Number)栏有效。大多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1,Figure-1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。

    RST:复位标志
        复位标志有效。用于复位相应的TCP连接。

    URG:紧急标志
        紧急(The urgent pointer) 标志有效。紧急标志置位,

    PSH:推标志
        该标志置位时,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理。在处理 telnet 或 rlogin 等交互模式的连接时,该标志总是置位的。

    ECE:   显示拥塞提醒回应

    CWR: 拥塞窗口减少

    FIN:结束标志
        带有该标志置位的数据包用来结束一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据。

    //------------------------------------------------------------------------------------------

    它们的含义是:SYN表示建立连接,FIN表示关闭连接,ACK表示响应,PSH表示有 DATA数据传输,RST表示连接重置。其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应,如果只是单个的一个SYN,它表示的只是建立连接。TCP的几次握手就是通过这样的ACK表现出来的。但SYN与FIN是不会同时为1的,因为前者表示的是建立连接,而后者表示的是断开连接。RST一般是在FIN之后才会出现为1的情况,表示的是连接重置。一般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;而当出现SYN和SYN+ACK包时,我们认为客户端与服务器建立了一个连接。PSH为1的情况,一般只出现在 DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递。TCP的连接建立和连接关闭,都是通过请求-响应的模式完成的。

     

    tcp断开连接要进行四次握手

    由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

    1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。

    2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。

    3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)。

    4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。

    标志解释:
    SYN:同步标志
          同步序列编号(Synchronize Sequence Numbers)栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。在这里,可以把 TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。

    展开全文
  • wireshark抓包分析TCP协议 Wireshark抓包分析TCP协议 版权声明:本文为作者原创文章,可以随意转载,但必须在明确位置表明出处!!! 之前有一篇文章介绍了http协议「初识http协议」, http协议协议是基于tcp协议的...
  • wireshark抓包分析TCP数据包

    千次阅读 2020-06-24 18:23:18
    1、直接从TCP的三次握手开始说起 三次握手就是客户与服务器建立连接的过程 客户向服务器发送SYN(SEQ=x)报文,然后就会进入SYN_SEND状态 服务器收到SYN报文之后,回应一个SYN(SEQ=y)ACK(ACK=x+1)报文,然后...
  • wireshark抓包分析tcp的三次握手详细过程

    万次阅读 多人点赞 2018-04-12 18:39:22
    抓包分析详细过程 打开wireshark, 打开浏览器输入 http://blog.jetwong.cn/ 在wireshark中输入http过滤, 然后选中一条http记录,如下图: 右键点击选中 追踪流 > tcp流,如下: 会看到下图所示: 可以...
  • TCP发包

    千次阅读 2009-08-12 16:07:00
    TCP Test Tool、anysend、pcattcp、tcpreplay、tcp_send、Hping、sendip、nessus、ipsend、ippacket、sniffer =======================================================常用IP发包工具介绍1. 简介在从事网络产品...
  • Wireshark是一个网络封包分析软件。帮你撷取网络封包,尽可能显示出最为详细的网络封包资料。 Wireshark 可以获取HTTP,也能获取HTTPS,但是不能解密HTTPS,只能帮你捕获...双击后开始抓包 你会发现Wireshar...
  • TCP三次握手wireshark抓包分析

    万次阅读 多人点赞 2017-12-19 17:32:50
    一、wireshark过滤规则wireshark只是一个抓包工具,用其他抓包工具同样能够分析tcp三次握手协议。以下这张图片完整地展现了wireshark的面板。使用好wireshark一个关键是如何从到的众多的包中找到我们想要的那一个...
  • 1. 概述 ...结合wireshark学习TCP/IP协议中帧,IP包,TCP包的包结构及字段意义 序列号和确认号 TCP的窗口机制和可用窗口大小协商机制 2. 帧 网络上,单次传输的数据量是有限。在传输数据时,...
  • 本文通过实际的抓包操作来看一下tcp的连接与断开是怎样的。  首先需要https://www.wireshark.org/下载wireshark对应你机器位数的版本,也可以用这个连接直接下载(64位)...
  • 目录一、分析 TCP 协议的握手1)TCP 协议的连接与断开2)wireshark C# 程序的 TCP 包3)Fiddler HTTPS 网站的 TCP包二、参考资料 一、分析 TCP 协议的握手 这里我以“金庸梦“游戏的客户端连接服务器(10.1....
  • 抓包分析TCP三次握手

    千次阅读 2013-03-18 09:33:58
    我们都知道TCP的连接的建立是通过三次握手,连接的断开是通过四次挥手完成。大部分人是从大学网络老师的讲课中得知,或者从baidu或者google搜索学习这一过程。...今天我们就通过抓包的方式,用到的实际的
  • wireshark抓包分析——TCP/IP协议 本文来自网易云社区 当我们需要跟踪网络有关的信息时,经常会说“抓包”。这里抓包究竟是什么?到的又能分析出什么?在本文中以TCP/IP协议为例,简单介绍TCP/IP协议以及...
  • 从tcpdump抓包TCP/IP协议

    千次阅读 2018-05-26 18:36:51
    虽然之前看过,很长时间没这么细致地用过,导致了健忘,借着这个机会,通过 tcpdump 抓包分析,详细捋一遍 TCP/IP 报文。 报文获取 如果那样干巴巴地讲这个东西比较晕,而且网上的文章一大堆,没有什么创新。我选择...
  • 高性能网络编程2----TCP消息的发送

    万次阅读 多人点赞 2013-07-18 16:37:55
    操作TCP协议发送数据时,面对的是数据流。通常调用诸如send或者write方法来发送数据到另一台主机,那么,调用这样的方法时,在操作系统内核中发生了什么事情呢?我们带着以下3个问题来细细分析:发送方法成功返回时...
  • 彻底实现Linux TCP的Pacing发送逻辑-高精度hrtimer版

    万次阅读 热门讨论 2017-01-14 08:36:17
     如果单纯的将《彻底实现Linux TCP的Pacing发送逻辑-普通timer版》中的timer_list换成hrtimer,必然招致失败。因为在hrtimer的function中,调用诸如tcp_write_xmit这样的长路径函数是一种用丝袜装榴莲的行为。好吧...
  • TCP/IP协议不是很好理解,通过工具手动抓包分析会对协议有更深刻的理解。因为工作中经常用到wireshark,所以就通过wireshark来分析,记录自己的学习过程。 TCP的整个通信过程如下图所示: 2. TCP的三次握手...
  • 在使用tcpdump抓包的时候,发现tcp的三次握手,第三次的时候竟然将ack置1了,百思不得其解,难道是现在tcp的协议变了吗,让我困惑不已,直接上结果 [root@www test_cpp]# tcpdump -i any port 53 -nn -v tcpdump: ...
  • 1. Wireshark抓包完成后,在wireshark中输入http过滤”tcp.stream eq 5”, 然后选中你要查看的记录,右键然后点击"Follow TCP Stream"(跟踪流)。这样做的目的是为了得到与浏览器打开网站相关的数...
  • TCP Wireshark网络抓包分析和问题解决说明

    万次阅读 多人点赞 2015-05-30 11:46:32
    当TCP连接无法通过正常的4次挥手结束时,一方可以通过发送携带reset标志的TCP包结束TCP连接。 如下图,发送方通过2个TCP流发送数据,截图中,接收方首先向发送方反馈了TCP window=0,让发送方暂缓发送数据,之后紧...
  • 抓包软件来分析tcp 数据包

    千次阅读 2015-11-11 10:09:18
    TCP/IP协议中各层的数据报结构是一个比较抽象的内容,大家在日常学习过程中往往难以理解和掌握,常常是死记硬背把它记住了事。本文首先利用Sniffer工具捕获了FTP命令操作过程中的所有数据包,然后对Sniffer工具中捕获...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,623
精华内容 7,449
关键字:

抓去tcp包并发送