wireshark抓包分析tcp连接与断开
其实对于网络通信的学习,最好还是能够自己抓到包详细地一下,不然只单单通过文字和图的描述印象不够深刻。本文通过实际的抓包操作来看一下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连接与断开的更多相关文章
- wireshark抓包分析——TCP/IP协议
本文来自网易云社区 当我们需要跟踪网络有关的信息时,经常会说"抓包".这里抓包究竟是什么?抓到的包又能分析出什么?在本文中以TCP/IP协议为例,简单介绍TCP/IP协议以及如何通 ...
- Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析
Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析 一.介绍计算机网络体系结构 1.计算机的网络体系结构 在抓包分析TCP建立链接之前首先了解下计算机的网络通信的模型,我相信学习过计 ...
- Wireshark抓包分析TCP“三次握手,四次挥手”
1.目的 客户端与服务器之间建立TCP/IP连接,我们知道是通过三次握手,四次挥手实现的,但是很多地方对这个知识的描述仅限于理论层面,这次我们通过网络抓包的方式来看一下实际的TCP/IP传输过程. 2 ...
- Wireshark抓包分析/TCP/Http/Https及代理IP的识别
前言 坦白讲,没想好怎样的开头.辗转三年过去了.一切已经变化了许多,一切似乎从没有改变. 前段时间调研了一次代理相关的知识,简单整理一下分享之.如有错误,欢迎指正. 涉及 Proxy IP应用 原理/ ...
- Wireshark抓包分析TCP 3次握手、4次挥手过程
Wireshark简介 更多有关Wireshark的教程.软件下载等,请见:http://www.52im.net/thread-259-1-1.html,本文只作简要介绍. 1Wireshark 是 ...
- Wireshark抓包分析TCP协议
版权声明:本文为作者原创文章,可以随意转载,但必须在明确位置表明出处!!! 之前有一篇文章介绍了http协议「初识http协议」, http协议协议是基于tcp协议的,所以作者觉得有必要针对tcp ...
- 用wireshark抓包分析TCP三次握手、四次挥手以及TCP实现可靠传输的机制
关于TCP三次握手和四次挥手大家都在<计算机网络>课程里学过,还记得当时高超老师耐心地讲解.大学里我遇到的最好的老师大概就是这位了,虽然他只给我讲过<java程序设计>和< ...
- 基于wireshark抓包分析TCP的三次握手
1. TCP的三次握手 在TCP/IP协议通讯过程中,采用三次握手建立连接,从而保证连接的安全可靠. 所有基于TCP的通信都需要以两台主机的握手开始.这个握手过程主要是希望能达到以下不同的目的.[1] ...
- 【极客思考】计算机网络:Wireshark抓包分析TCP中的三次握手与四次挥手
[摘要]本文重点分析计算机网络中TCP协议中的握手和挥手的过程. [前提说明] 前段时间突然看到了一篇关于TCP/IP模型的文章,心想这段时间在家里也用wireshark抓了点包,那么想着想着就觉得需 ...
随机推荐
- 【SHOI2012】魔法树(树链剖分,线段树)
[SHOI2012]魔法树 题面 BZOJ上找不到这道题目 只有洛谷上有.. 所以粘贴洛谷的题面 题解 树链剖分之后直接维护线段树就可以了 树链剖分良心模板题 #include<iostream ...
- [HDU5663]Hillan and the girl
题面戳我(题面很鬼畜建议阅读一下) 题意:给出n,m,求 \[\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)\mbox{不是完全平方数}]\] 多组数据,\(n,m\le1 ...
- Frogger POJ - 2253
题意 给你n个点,1为起点,2为终点,要求所有1到2所有路径中每条路径上最大值的最小值. 思路 不想打最短路 跑一边最小生成树,再扫一遍1到2的路径,取最大值即可 注意g++要用%f输出!!! 常数巨 ...
- 24时区,GMT,UTC,DST,CST时间详解
全球24个时区的划分 相较于两地时间表,可以显示世界各时区时间和地名的世界时区表(World Time),就显得精密与复杂多了,通常世界时区表的表盘上会标示着全球24个时区的城市名称,但究竟 ...
- angularjs promise详解
一.什么是Promise Promise是对象,代表了一个函数最终可能的返回值或抛出的异常,就是用来异步处理值的. Promise是一个构造函数,自己身上有all.reject.resolve这几个异 ...
- 关于使用Ajax请求json数据,@RequestMapping返回中文乱码的几种解决办法
一.问题描述: 使用ajax请求json数据的时候,无论如何返回的响应编码都是ISO-8859-1类型,因为统一都是utf-8编码,导致出现返回结果中文乱码情况. $.ajax({ type:&quo ...
- fitnesse - 安装部署
fitnesse - 安装部署 2017-09-29 1 先决条件Java环境 确保机器上装了java, java -version 2 安装fitnesse http://fitnesse.org/ ...
- springboot 整合 MongoDB 实现登录注册,html 页面获取后台参数的方法
springboot简介: Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不 ...
- dhcp 的安装和配置文件
install: yum - y install dhcp modify : vim /etc/dhcp/dhcpd.conf ddns-update-style none;ignore cli ...
- ECMAScript 6入门 - 变量的解构赋值
定义 ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 解构赋值不仅适用于var命令,也适用于let和const命令. 解构赋值的规则是,只要 ...