其实对于网络通信的学习,最好还是能够自己抓到包详细地一下,不然只单单通过文字和图的描述印象不够深刻。本文通过实际的抓包操作来看一下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. 【BZOJ2959】长跑(Link-Cut Tree,并查集)

    [BZOJ2959]长跑(Link-Cut Tree,并查集) 题面 BZOJ 题解 如果保证不出现环的话 妥妥的\(LCT\)傻逼题 现在可能会出现环 环有什么影响? 那就可以沿着环把所有点全部走一 ...

  2. 【BZOJ1968】约数研究(数论)

    [BZOJ1968]约数研究(数论) 题面 BZOJ链接(题目是图片形式的) 题解 傻逼题 \(NOIP\) \(T1\)难度 不会做的话您可以退役 #include<iostream> ...

  3. [SCOI2007]降雨量

    ST表,再大力讨论一下(因为lower_bound和upper_bound,WA了一次) # include <bits/stdc++.h> # define RG register # ...

  4. Hive 自定义函数

    hive 支持自定义UDF,UDTF,UDAF函数 以自定义UDF为例: 使用一个名为evaluate的方法 package com.hive.custom; import org.apache.ha ...

  5. 如何在Win10下安装MySQL 5.7绿色版

    一.背景 系统升级到Win10后准备在本地搭建一个MySQL环境,用于研究学习.在网上找了很多其他人写的经验总结,Step by step的做,不断的遇到问题,没有成功. 最后老老实实的去读Mysql ...

  6. ajax+struts2 实现省份-城市-地区三级联动

    1.需求分析 2.js部分(通过ajax异步请求实现) 省份-->城市联动 城市-->地区 3.struts部分 struts.xml action部分 4.service部分 5.总结 ...

  7. 与JavaWeb有关的故事(web请求与Java I/O)

    作为一名后端屌丝程序员,对算法.并发.性能乐此不疲.但是,随着年龄和阅历的增加,显然叶落而不知秋的心态是不太能混了.尤其是,某T面试官在明知我是后端,且明确表示对HTTP协议不太熟的情况下,强行让我解 ...

  8. .net core2.0半年的使用经验之前言

    目录 前言 使用dapper做数据层调用 使用T4模板生成 使用缓存 使用swagger做接口文档(非restful) 使用identity做身份认证 使用jwt做身份认证 使用CORS跨域 调用we ...

  9. Online Judge(OJ)搭建——3、MVC架构

    Model Model 层主要包含数据的类,这些数据一般是现实中的实体,所以,Model 层中类的定义常常和数据库 DDL 中的 create 语句类似. 通常数据库的表和类是一对一的关系,但是有的时 ...

  10. ASP.NET Core Web 支付功能接入 微信-扫码支付篇

    这篇文章将介绍ASP.NET Core中使用 开源项目 Payment,实现接入微信-扫码支付及异步通知功能. 开发环境:Win 10 x64.VS2017 15.6.4..NET Core SDK ...