其实对于网络通信的学习,最好还是能够自己抓到包详细地一下,不然只单单通过文字和图的描述印象不够深刻。本文通过实际的抓包操作来看一下tcp的连接与断开是怎样的。

  首先需要去https://www.wireshark.org/下载wireshark对应你机器位数的版本,也可以用这个连接直接下载(64位)http://sw.bos.baidu.com/sw-search-sp/software/16fb23dbe1547/Wireshark-win32-2.4.3.0.exe。

  安装完成后打开,会看到如下页面:

  

  下面这两个以太网指的是你电脑上不同的网卡,选择一个可以跑的网卡,双击。

  打开之后你会看到各种各样颜色的包,这里就是wireshark抓到的包了,我们需要做的就是过滤出我们想看的tcp包。这里我们过滤器栏输入过滤条件,过滤出我们想要的。本文以PC和www.baidu.com作为通信的双方,百度其中一个ip为14.215.177.38。在过滤器栏中输入如下内容:(ip.src==XXX.XXX.XXX.XXX and ip.dst==14.215.177.38) or (ip.src==14.215.177.38 and ip.dst==XXX.XXX.XXX.XXX),其中XXX.XXX.XXX.XXX为你本机的地址。我们要看tcp连接和断开,需要的是本机发送给百度的包和百度发送给本机的包,所以过滤条件就是刚才输入的,当看到过滤栏为绿,即说明输入语法正确。

  接着打开一个浏览器,建议选择无痕模式的浏览器。然后启动抓包:

  启动抓包之后,在浏览器的地址栏输入14.215.177.38,回车,这时候你会看到类似于:

  

  那么红框内的前三条就是tcp的握手了。对比一下前后两图,客户端即本机source的60055端口发送一个包给14.215.177.38(百度)的80端口,内容为SYN=1,seq=0(第一次握手)。百度接收到请求后,返回一个包给本机,内容为SYN=1,ACK=1,seq=0,ack=1(第二次握手),这里大写的为标志位,小写的为数据。本机接收到百度返回的包之后,也发送一个包给百度,内容为ACK=1,seq=1,ack=1(第三次握手),到这里三次握手全部完成,连接建立。发现下面一行的包是http的,这也验证了http是基于tcp协议的,需要先建立tcp连接http才能启动。

  

  继续分析后面的包:

  

  上面说到本机向百度发送了一个http请求,请求的是百度的主页面,百度收到这个请求后返回两个包,第二个即为整个html页面,即红框中的第二个其标志位为PSH,ACK。拿到html页面不算结束,因为我们直到html页面需要css、js、图片来渲染,所以需要继续从百度那边拿到css、js、图片回来才行。这样就可以解释为什么我们网慢的时候会出现页面结构不一样或者图片加载不出来,因为我们只从服务端拿到了html代码而没有拿到其他东西。可以看一下PSH,ACK包中的内容:

  

  再往下就是从百度继续拿取资源,都是成对出现的。本机发一个过去,百度返回一个回来,tcp中的传输数据就是这样,直到资源拿取结束(比如这里的http拿取结束):

  

  状态码200,表示成功,即该http请求成功并返回给本机。

  由于我们用的是浏览器直接访问,所以我们无法手动断开连接(可能是我不会吧 滑稽脸),但是百度那边会自动断开:

  

  

  这里看到的是tcp断开四次挥手,由于实际操作原因这里只出现了3次,后面会有解释。

  看红框中第一行知道时百度发出的断开连接请求,再看红框的上一行,对比一下第二列会发现正好差60,单位秒,因为访问百度的人很多,如果你没有实际操作不可能给你一直占用资源,所以当超过60s也就是一分钟还无操作的时候百度就会自动发起断开请求。也正因为时百度发起的断开请求导致了我们只有三次挥手。

  百度发起请求FIN,ACK(第一次挥手),本机接收到并返回两个包,一个为ACK(第二次挥手),另一个为FIN,ACK(第三次挥手)。接着应该是百度发一个ACK返回给本机(第四次挥手)然后结束,但是由于百度单方面强制关闭了,并且不再接收本机的数据包,导致第三次挥手无法送法,也就有了下面深红色的TCP Retransmission(TCP重传),因为第三次挥手发给百度的包一直没有回应,本机启动超时重传机制。重传几次之后仍然没有回应,发送一个RST,ACK包,RST为复位,即表示TCP整个连接(这里连接是名词)中出现了重大差错(如服务器崩溃或其他原因,也就是百度强制关闭了),必须释放连接。至此连接关闭,希望可以找到方法来让客户端主动发送断开请求,这样可以出现四次握手。

  

wireshark抓包分析tcp连接与断开的更多相关文章

  1. wireshark抓包分析——TCP/IP协议

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

  2. Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析

    Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析 一.介绍计算机网络体系结构 1.计算机的网络体系结构 在抓包分析TCP建立链接之前首先了解下计算机的网络通信的模型,我相信学习过计 ...

  3. Wireshark抓包分析TCP“三次握手,四次挥手”

    1.目的 客户端与服务器之间建立TCP/IP连接,我们知道是通过三次握手,四次挥手实现的,但是很多地方对这个知识的描述仅限于理论层面,这次我们通过网络抓包的方式来看一下实际的TCP/IP传输过程. 2 ...

  4. Wireshark抓包分析/TCP/Http/Https及代理IP的识别

    前言 坦白讲,没想好怎样的开头.辗转三年过去了.一切已经变化了许多,一切似乎从没有改变. 前段时间调研了一次代理相关的知识,简单整理一下分享之.如有错误,欢迎指正. 涉及 Proxy IP应用 原理/ ...

  5. Wireshark抓包分析TCP 3次握手、4次挥手过程

    Wireshark简介 更多有关Wireshark的教程.软件下载等,请见:http://www.52im.net/thread-259-1-1.html,本文只作简要介绍. 1Wireshark 是 ...

  6. Wireshark抓包分析TCP协议

      版权声明:本文为作者原创文章,可以随意转载,但必须在明确位置表明出处!!! 之前有一篇文章介绍了http协议「初识http协议」, http协议协议是基于tcp协议的,所以作者觉得有必要针对tcp ...

  7. 用wireshark抓包分析TCP三次握手、四次挥手以及TCP实现可靠传输的机制

    关于TCP三次握手和四次挥手大家都在<计算机网络>课程里学过,还记得当时高超老师耐心地讲解.大学里我遇到的最好的老师大概就是这位了,虽然他只给我讲过<java程序设计>和< ...

  8. 基于wireshark抓包分析TCP的三次握手

    1. TCP的三次握手 在TCP/IP协议通讯过程中,采用三次握手建立连接,从而保证连接的安全可靠. 所有基于TCP的通信都需要以两台主机的握手开始.这个握手过程主要是希望能达到以下不同的目的.[1] ...

  9. 【极客思考】计算机网络:Wireshark抓包分析TCP中的三次握手与四次挥手

    [摘要]本文重点分析计算机网络中TCP协议中的握手和挥手的过程. [前提说明] 前段时间突然看到了一篇关于TCP/IP模型的文章,心想这段时间在家里也用wireshark抓了点包,那么想着想着就觉得需 ...

随机推荐

  1. 【CJOJ P1096】最佳老农

    http://oj.changjun.com.cn/problem/detail/pid/1096 Description FJ打算带着他可爱的N (1 ≤ N ≤ 2,000)头奶牛去参加" ...

  2. 【SHOI2012】魔法树(树链剖分,线段树)

    [SHOI2012]魔法树 题面 BZOJ上找不到这道题目 只有洛谷上有.. 所以粘贴洛谷的题面 题解 树链剖分之后直接维护线段树就可以了 树链剖分良心模板题 #include<iostream ...

  3. 如何巧妙的利用selenium和requests组合来进行操作需要登录的页面

    一.在这里selenium的作用 (1)模拟的登录. (2)获取登录成功之后的cookies 代码 def start_login(self): chrome_options = Options() ...

  4. 绘制静态地图API-高德地图

    1 高德静态地图链接 http://lbs.amap.com/api/webservice/guide/api/staticmaps 2 /** * User: [一秋] * Date: 2017/9 ...

  5. 2018第一波iOS经典笔试题(现场实拍)

    序言 作为一个开发者,眼里不仅仅只存在于那一行又一行的代码,更还有那诗和远方. 注明:面试是对自我审视的一种过程,面试题和iOS程序员本身技术水平没任何关联,无论你能否全部答出,都不要对自己产生任何正 ...

  6. ADS协议变量配置界面

    ADS协议是倍福产品的通信协议,在双击ADS协议图标后打开如下图的配置窗口. 变量配置表中各列的含义: 报警类型: 脚本: 当设置了报类型时,在运行时如果变量值引发报警时将执行一次脚本.例如 大于报警 ...

  7. PAT乙级-1056. 组合数的和(15)

    给定N个非0的个位数字,用其中任意2个数字都可以组合成1个2位的数字.要求所有可能组合出来的2位数字的和.例如给定2.5.8,则可以组合出:25.28.52.58.82.85,它们的和为330. 输入 ...

  8. Genymotion模拟器的安装及常见问题解决方法

    Genymotion是很好用很快的一款Android模拟器. 我们使用的时候下载一个免费版的就足够用了. 官网下载地址:http://www.genymotion.net/ 不过这个软件下载之前必须注 ...

  9. 初探云服务器ECS(Linux系统)

    PS: 购买的阿里云服务器(ECS,Linux系统),使用的弹性公网IP(EIP). 一.使用Xshell链接ECS 1.将公网IP填入主机即可 2.用户名一般为root,密码是自己设置的,填入即可. ...

  10. Angular.js学习范例及笔记

    一.AngularJs 1.row in order.rows <ng-bind="row.name"> 2.ng-form <form action=" ...