关注爱因诗贤每天进步一点点导读

前面文章介绍了 TCP 报文头部的格式,TCP 协议是一个面向连接的协议,所以在使用 TCP 协议之前需要先建立连接,而建立连接就需要先 握手,在握手的时候就会有 TCP 报文头部数据的传递,这篇文章介绍一下 TCP 连接的 三次握手,然后使用 tcpdump 抓包工具分析 三次握手是如何被建立的,然后使用 netstat 命令查看分析 TCP 状态。

1.TCP 三次握手的目的

  • 同步 Sequence 序列号,初始化序列号 ISN(Initial Sequence Number)

  • 交换 TCP 通讯参数,如 MSS、窗口比例因子、选择性确认、指定校验和算法

2.三次握手示意图

3.tcpdump抓包分析

以 curl www.baidu.com 为例,使用如下命令抓取 TCP 报文:

tcpdump host www.baidu.com -c 3 -S

Tips:其中 host www.baidu.com 表示使用 BFP 过滤语法抓取和 www.baidu.com 相关的报文数据,-c 3 表示抓取次数为 3-S 表示 信息以绝对序列号替代相对序列号

如下图所示:

Tips:图中窗口是 tcpdump 抓取报文窗口,可以另起一个窗口执行 curl www.baidu.com

4.tcpdump报文关系示意图对应

  • 第一次:SYN

    18:33:27.289687 IP localhost.localdomain.33952 > localhost.http: Flags [S], seq 1108648416, win 29200, options [mss 1460,sackOK,TS val 3178219629 ecr 0,nop,wscale 7], length 0

    Tips:其中 seq 的值为 1108648416

  • 第二次:SYN/ACK

    18:33:27.317960 IP localhost.http > localhost.localdomain.33952: Flags [S.], seq 737377256, ack 1108648417, win 64240, options [mss 1460], length 0

    Tips:其中 seq 的值为 737377256ack 的值为 1108648417,比第一次的 seq 大 1

  • 第三次:ACK

    18:33:27.318021 IP localhost.localdomain.33952 > localhost.http: Flags [.], ack 737377257, win 29200, length 0

    Tips:其中 ack 的值为 737377257,比第二次的 seq 大 1

5.wireshark 抓包分析

以抓取浏览器访问 http://www.singwa666.com 网站发起的 HTTP/1.1 请求时,建立的 TCP 连接握手为例,使用 BPF 捕获过滤器语法 host www.singwa666.com 抓取报文,然后使用 显示过滤器 语法 tcp.stream eq 1过滤报文,如下图所示:

  • 第一次:SYN

    Tips:其中 Sequence Number(seq) 的值为 4150432755(f7 62 93 f3)FLAGS 的第 7 位置 1

  • 第二次:SYN/ACK

    Tips:其中 Sequence Number(seq) 的值为 257427380(0f 58 07 b4)Acknowledgment number (ack) 的值为 4150432756(f7 62 93 f4),比第一次的 Sequence Number(seq) 大 1

  • 第三次:ACK

    Tips:其中 Acknowledgment number (raw) 的值为 257427381(0f 58 07 b5),比第二次的 Sequence Number(seq) 大 1

6.三次握手报文说明

6.1 第一次:SYN 报文说明

Tips:FLAGS 报文中的第 7 位置 1 表示 SYN 报文,此时 seq 序列号码有效,需要传递设置 序列号码(seq)

6.2 第二次:SYN/ACK 报文说明

Tips:FLAGS 报文中的第 4 和 第 7 位置 1 表示 SYN/ACK 报文,此时 seq 和 ack序列号码有效,需要传递 序列号码(seq)和 确认号码(ack),此时确认号码(ack)是第上一次 seq 加 1

6.3 第三次:ACK 报文说明

Tips:FLAGS 报文中的第 4 位置 1 表示 ACK 报文,此时 ack 序列号码有效,需要传递设置 确认号码(ack),此时 确认号码(ack)是第上一次 seq 加 1

7.三次握手过程中的状态变迁

当我们做服务器端的开发时,服务器端同时处理成千上万的 TCP 连接时,需要理解 三次握手 中的状态变迁,对于定位复杂的网络问题非常有帮助。

7.1 三次流程中涉及到的五种状态及示意图

  • CLOSED

  • LISTEN

  • SYN-SENT

  • SYN-RECEIVED

  • ESTABLISHED

Tips:TCB 的意思是 Transmission Control Block,保存连接使用的源端口、目的端口、目的 IP、序号、应答序号、对方窗口大小、己方窗口大小、TCP 状态、TCP 输入/输出队列、应用层输出队列、TCP 的重传有关变量等。

7.2 netstat 命令参数介绍

  • interval:重新显示选定的统计信息,各个显示间暂停的间隔秒数

  • -a:显示所有连接和监听端口

  • -n:以数字形式(如IP地址)显示地址和端口号

  • -r:显示路由表

  • -s:显示每个协议的统计信息

  • -o(Widnows):显示拥有的每个连接关联的进程 ID

  • -b(Windows)/-p(Linux):显示对应的可执行程序名字

7.3 服务端查看 TCP 状态变迁

下面在服务器端使用如下命令:

netstat -anp

Tips:其中 -anp 的 所有的连接,n 表示以数字的形式,p 表示显示进程号。

Tips:一般很难观察到 SYN-SENT 状态,有一种 ACK 攻击就是攻击者构造一个 SYN 帧,却不返回 ACK 帧,这样会让服务器大量的连接都处于 SYN-RECEIVED 状态。

关联文章:TCP 协议报文格式&tcpdump抓包工具Wireshark 抓包工具介绍Wireshark 捕获和显示过滤器网络协议-HTTP 协议(抓包实战和网络分层)

linux过滤端口抓包_TCP 协议三次握手抓包分析amp;查看状态相关推荐

  1. linux过滤端口抓包_Linux抓包工具tcpdump使用总结,WireShark的过滤用法

    tcpdump与WireShark是Linux下的两个常用,功能强大的抓包工具,下面列出这两个工具的简单用法. tcpdump用法 tcpdump用法: sudo tcpdump -i ens33 s ...

  2. linux udp 端口 抓包,tcpdump之UDP抓包

    摘要 使用tcpdump抓UDP包,过滤过滤IP和port,并且自动拆分片段. 安装tcpdump yum install -y tcpdump 使用方法 tcpdump -i bond0 udp p ...

  3. TCP三次握手抓包分析

    1. TCP三次握手过程 最开始双方都是CLOSED关闭状态.然后服务端开启监听某个端口,进入LISTEN状态. 客户端发起请求,发送SYN,客户端变为SYN_SENT(同步消息发送)状态 服务端收到 ...

  4. linux下tcpdump抓包保存cap文件,使用Wireshark分析

    1.tcpdump是对网络上的数据包进行截获的包分析工具: 2.安装:yum install tcpdump(yum安装即可),安装完成之后创建一个文件夹,专门存放抓取数据保存的文件,执行tcpdum ...

  5. linux端口抓包工具下载,linux下的抓包工具tcpdump

    linux下的抓包工具. 抓包工具比较好用的有两个,一个是snort,一个是tcpdump,这次不说snort了,觉得这个工具虽然很强大,但是比较复杂,还是tcpdump比较简单.tcpdump wi ...

  6. Linux内核网络数据包发送(三)——IP协议层分析

    Linux内核网络数据包发送(三)--IP协议层分析 1. 前言 2. `ip_send_skb` 3. `ip_local_out` and `__ip_local_out` 3.1 netfilt ...

  7. Linux之tcpdump抓包命令详解

    目录 前言 1. 控制抓包行为 2. 控制信息如何显示 3. 控制显示什么数据 4. 过滤命令 4.1 地址过滤 4.2 协议及端口过滤 4.3 报文特征过滤 4.3.1 IP选项设置(20字节,可变 ...

  8. linux抓包库libpcap,linux下libpcap抓包分析.doc

    linux下libpcap抓包分析 HYPERLINK "/Seiyagoo/archive/2012/04/28/2475618.html" linux下libpcap抓包分析 ...

  9. LiveGBS流媒体平台GB/T28181常见问题-播放花屏、没有通道、无法语音对讲等情况下Windows和Linux中如何抓包

    LiveGBS播放花屏.没有通道.无法语音对讲等情况下Windows和Linux中如何抓包 1.第一步:抓包工具准备 1.1.Linux 1.2.windows 2.第二步:找到设备出口ip 3.第三 ...

最新文章

  1. Calendar如何只显示“一、二、三...日”,不显示“星期”
  2. python的历史 常量 注释 基础数据类型等基本操作 和if 判断语句
  3. 七问唐骏:真的性格好就能成功?
  4. 进口配额管理和出口配额管理_SAP采购管理模块中的quot;配额协议quot;应用详解...
  5. Idea缺少Version Control 底部菜单
  6. 作为参数给后端为空_后端 API 接口文档 Swagger 使用指南
  7. Bailian4148 生理周期【枚举+中国剩余定理】
  8. HTML5移动端最新兼容问题解决方案
  9. 百度人脸识别,一次耗时600毫秒
  10. linux 硬盘自动休眠,【Linux】硬盘休眠
  11. 安全基础--21--安全运维
  12. [渝粤教育] 广东-国家-开放大学 21秋期末考试电算化会计10169k2
  13. first season twenty-second episode,the color(yellow) dream???
  14. 计算机提示无法验证发布者,win10 ie11提示由于无法验证发布者所以windows已经阻止此软件怎么办...
  15. Unity UI拉伸缩放适配屏幕尺寸
  16. Spring基础学习
  17. linux安装浏览器 linux本地浏览器进行访问
  18. VMware配置Ubuntu 编写c程序
  19. VirtualBox 不能为虚拟电脑 打开一个新任务 VERR_NEM_VM_CREATE_FAILED
  20. 计算机访问控制机制,访问控制策略和机制-信息安全工程师知识点

热门文章

  1. Qt4_Laying Out Widgets Widgets
  2. SQL Server中的T-SQL RegEx命令
  3. power bi自定义地图_如何使用自定义形状图在Power BI中创建地理图
  4. 墨鏡的bism_如何使用商业智能语义模型(BISM)和Excel设计基于地图的报表
  5. azure云数据库_如何使用SQL Data Sync同步Azure SQL数据库和本地数据库
  6. SQL Server数据库迁移最佳实践,可降低风险和停机时间
  7. python面试题No6
  8. MYSQL小函数大用途之-------FIND_IN_SET
  9. Java Web(十) JDBC的增删改查,C3P0等连接池,dbutils框架的使用
  10. 使用Spark分析拉勾网招聘信息(四): 几个常用的脚本与图片分析结果