用 Wireshark 让你看见 TCP 到底是什么样!

news2024/10/7 18:27:33

本文为掘金社区首发签约文章,14天内禁止转载,14天后未获授权禁止转载,侵权必究!

莫听穿林打叶声,何妨吟啸且徐行。

前言

当你看到这篇文章时,你只能看到已经渲染好的文字和图像,而网络数据的交互对我们来说,却是看不见的,所以学习计算机网络原理的时候就会觉得非常的抽象,这一度让我苦恼。

而且网络数据交换真实的模样,到底是不是真的如大多数文章所描绘的一样?

这些疑问让我早就想干这件事了。

所以不如就去看看离我们最近的协议 TCP 到底长什么样?

为了能“看见”TCP,我们需要借助 Wireshark 分析网络的利器。

Wireshark 是 Windows 最常用的网络抓包和分析工具,称得上手好剑大利器把我们对数据包一目了然。 (也是分析网络性能必不可少的利器)

如果是在 Linux 上网络抓包,那可以使用 tcpdump

(分析网络的工具还有很多,但是工具只是手段,重要的是能实现目的)

初试牛刀:解析各层协议栈

我们可以先在浏览器请求一个网址(xxx.com),然后通过 Wireshark 就可以直观的看到分析数据包的页面,其中就展示了各个网络包的头部信息。

如下图所示,协议一栏可以看到,我们这次抓包主要是 TCP 协议。

接下来,选中某一个网络包后,在下面可以清楚的看到有网络包的各行信息,分别对应TCP/IP协议的不同层级。以下图为例,分别表示:物理层、数据链路层、网络层、传输层

应用层如果有数据会显示第5层,即一共会出现5层。

可以对应到我们之前的TCP/IP模型。

  • 应用层
  • 传输层
  • 网络层
  • 网络接口层

然后,接着再往下,可以更清楚的看到各行信息其实就是各层协议栈的详细信息。

数据链路层 里的 MAC 头信息,以及源 MAC 地址和目标 MAC 地址字段等等;

IP 层 里看到 IP 头信息,以及Version 4 表示的是IPv4协议(互联网通信协议第四版),Src Port 表示的是网卡的ip地址Dst Port表示服务器的ip ,以及包长度等 IP 协议的各个字段的值和含义;

还有 TCP 层 里看到 TCP 头信息(这个我们后面展开细说);

Wireshark 让我们看到了各个分层的方式,以及每一层都有一个字段指向上一层,表明上一层是什么协议。

因为发送数据包的时候会在数据上依次加上应用层、传输层、网络层、链路层的头部,但是对方收到数据包后是从最底层开始层层剥去头部解包的,所以在每层上有一个字段指向上层,表明上层的协议,对方就知道下一步该怎么解包了。

我们可以看到网络分层就像有序的分工,每一层都有自己的责任范围和信息,上层协议完成工作后就交给下一层,最终形成一个完整的网络包。

回过头再去看这篇,的确就是《如果把网络原理倒过来看,从无到有,一切都清晰了(下) 》 所描绘的这样。

回过头来看真实 TCP 头格式

接着我们来看在上篇中的 TCP 报文头部的格式,真实的TCP 报文头部的格式是不是也是这样?

接着来,可以继续选中Wireshark中的TCP(Transmission Control protocol)层,可以清楚的看到以下几点信息:

  • 源端口目标端口,而TCP的包是没有IP地址的,毕竟那是IP层上的事。

  • 以及 TCP连接所需的四个字段,表示是同一个连接(src_ip, src_port, dst_ip, dst_port)。

如图所示(源端口是63123,目的端口是443;443则表示是HTTPS协议)

还有如下图所示。在 Wireshark 中可以看到 TCP 头格式中四个非常重要的字段:

  • Sequence Number序号,数据包的序号,用来解决网络包乱序问题。
  • Acknowledgement NumberACK——确认收到,用来解决不丢包的问题
  • Window(Advertised-Window),著名的滑动窗口(Sliding Window)用于解决流控的
  • Flags ,是包的状态,主要是用于操控TCP的状态的

接着打开TCP中的Flags(状态位)的可以看到 6个状态位,分别是ACK、SYN、FIN、URG、PSH、RST,如果是1表示有效。

而比较主要的是SYN、ACKFINSYN(SynchronizeSequence Numbers)表示建立连接时的同步信号;ACK(Acknowledgement)表示对收到的数据进行确认;FIN (Finish)表示后面没有数据需要发送,则意味着释放所建立的连接。

在上图中,Flags中的UTG紧急指针。只有当URG标志置为1时该字段才有效,可以告诉系统报文有紧急内容。

在状态位下还有一个强制性的字段 Checksum 校验和是由发送端计算和存储,由接收端进行验证。目的是为了发现 TCP 首部和数据在发送端到接收端之间发生的任何改动。如果接收方检测到校验有差错,TCP 段就直接丢弃。

好了,用 Wireshark 让你看见 TCP 到底是什么样的,后面还可以接着Wireshark看更多东西,例如TCP建立连接和释放连接,真正又是怎么样三次连接,四次挥手的?

我是一颗剽悍的种子,怕什么真理无穷,进一寸,有进一寸的欢喜。感谢各位伙伴的:关注点赞收藏评论 ,我们下回见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/45574.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

rk3588硬件构成-rock5b

前言 rk3588是瑞芯微的一套新的arm64的板子,上一代用的比较多的是rk3399,新的硬件设备比之前更强大,接口更多,本系列就是介绍相关的硬件软件的一些资料,后面会根据不同的使用进行分篇的介绍 很多资料官网有提供&…

深度学习与总结JVM专辑(四):类文件结构(图文+代码)

类文件结构概述无关性的基石Class类文件结构前言字节码文件结构属性魔数与Class文件的版本号魔数版本号常量池反编译软件访问标志类索引,父类索引与接口索引集合字段表集合方法表集合属性表集合Code属性attribute_name_indexmax_stackmax_localscode_length和codeja…

视频卡顿率测试方法

一、背景介绍 视频流畅性测试是视频质量评估一个重要的指标。一般的获取方法是在渲染前增加统计信息。不过这种方法需要增加额外工作量,并且也不是用户直接的体验数据。 这里介绍一种基于时域运动指标/平均相关位置像素差(TI:temporal info…

Android Camera性能分析 第24讲 录像Buffer Path帧率统计

​ 本讲是Android Camera性能分析专题的第24讲,我们介绍录像Buffer Path帧率统计,包括如下内容: 从GraphicBufferSource统计录像Buffer Path帧率Video Codec角度统计视频帧率Video Codec2角度统计视频帧率 视频在线观看: 极客笔…

Nacos Discovery--服务治理

目录 一,服务治理介绍 二,nacos简介 nacos实战入门 搭建nacos环境 第1步: 安装nacos 第2步: 启动nacos 第3步: 访问nacos 将商品微服务注册到nacos 1 在shop-common模块的pom.xml中添加nacos的依赖 注意在父模块中是否导入了alibaba 2 在主类上添加E…

Altium Designer智能粘贴命令的使用教程

怎么样等间距的复制很多过孔?怎么带网络的复制走线?又或者是怎么样把元件的位号及网络从当前的这个PCB调用到另一个PCB板中呢?PCB设计当中经常会遇到这些问题,可以使用特殊粘贴也可以称为智能粘贴法来实现。 1、选中需要复制的元素…

微信小程序 视频列表滑动无限循环(仿抖音)

一、写在前面: 1:安卓ios表现基本一致,不是swiper组件实现,滑动效果流畅不卡顿,实现了列表无限循环。不是使用官方的腾讯视频播放组件,完整代码在下面 2:实现功能:支持位置导航、拨打电话、复制微信号、分…

如何实现fastdds的topic调试工具

在使用fastdds进行实际的开发调试中发现,常常需要对已经发布的话题进行进一步的调试,比如话题存在,话题内容,话题频率等等信息都需要确认,尤其是话题内容。这时候就需要一个能进行这项操作的调试工具。可能对于用过ros…

hit_os_lab2 操作系统启动

前置知识 1.1 基础概念 入理论课程的学习。 如果网易云上的课程无法查看,也可以看 Bilibili 上的 操作系统哈尔滨工业大学李治军老师。 L2 开始揭开钢琴的盖子L3 操作系统启动 同济大学赵炯博士的《Linux 内核 0.11 完全注释(修正版 V3.0&#xff09…

防火墙练习实验

♥️作者:小刘在C站 ♥️每天分享云计算网络运维课堂笔记,一起努力,共赴美好人生! ♥️夕阳下,是最美的,绽放。 目录 二. 实验命令 一.实验图纸 二. 实验命令 ciscoasa> en Password: ciscoasa# co…

DJ12-2-4 串操作指令

目录 1. REP 重复前缀 2. 串操作指令的基本概念 3. 串操作指令的指令类型 (1)串传送指令 MOVS (2)串传送指令 CMPS (3)串扫描指令 SCAS (4)串装入指令 LODS (5&a…

如果把网络原理倒过来看,从无到有,一切如此清晰(下)

人生若只如初见。 前言 当我在台灯下,听着远隔17年前五月天的歌,而在数日后,我的文字也会纵使相隔万里远的来到你的屏幕前,就觉得这一切妙不可言。 OSI 网络七层模型 《如果把网络原理倒过来看,从无到有&#xff0c…

Metabase学习教程:仪表盘-5

如何进行时间段比较 我们通过不同的方法来比较一个指标在不同日期范围内的表现。 我们将研究不同的策略来比较两个不同时期的指标,比如将本周与上周、去年同期与上一周进行比较。我们将使用Metabase附带的示例数据库,这样您就可以继续学习了。这个示例…

【Android App】Vulkan实现宇宙中旋转雷达动画效果(附源码和原始视频 超详细必看)

需要源码请点赞关注收藏后评论区留言私信~~~ 一、Vulkan简介 Vulkan是一个跨平台的图形绘制接口,被称为下一代OpenGL,因为尽管OpenGL提供了丰富的图形API,但他在底层实现的C代码早已封装起来,由于开发者修改不了底层代码&#xf…

社区系统项目复盘-5

文章目录Kafka消息队列实现系统通知功能什么是Kafka?Spring是怎么整合Kafka的?发送系统通知显示系统通知Kafka消息队列实现系统通知功能 阻塞队列 可以用阻塞队列来实现消息队列,阻塞队列是一个接口:BlockingQueue,可以…

易云维医院后勤综合管理平台为医院智慧后勤的建设与发展做出贡献

近年来,随着国家医疗卫生改革进程的不断推进,越来越多的医院开始关注运营成本控制问题,医院后勤管理服务模式的创新和优化变得越来越重要。利用医院后勤综合管理平台将医院后勤管理信息化将极大地提高医院智慧后勤建设与发展。在这种形势下&a…

Mac下安装Hadoop

1、引言 如果想在Mac下安装Hadoop而且让Hadoop能正常运行,那安装之前需要先安装java,在Mac环境下安装Hadoop。 2、配置ssh环境 在Mac下如果想使用Hadoop,必须要配置ssh环境, 如果不执行这一步,后面启动hadoop时会出现…

Spring MVC应该怎么学?这份教程带你快速入门,深入剖析源码!

前言: 什么是MVC? MVC(Model-View-Controller):它是一种软件架构设计模式,分为三个部分: Model(模型):业务的数据模型; View(视图)&…

xss-labs/level5

输入 <script>alert(xss)</script> 查看回显 如下所示 能够发现script被恶意替换为scr_ipt 查看源代码 第一个输出点被转义了 所以没有利用价值了 第二个输出点如同刚才所言被进行了关键字的恶意替换操作 那没办法 我们只能继续尝试一下在标签内部构造一个新…

91183-98-1,UDP-N-acetylglucosamine,5′-二磷酸尿嘧啶核苷-N-乙酰半乳糖胺二钠盐

5′-二磷酸尿嘧啶核苷-N-乙酰半乳糖胺二钠盐 英文名称&#xff1a;UDPAG&#xff1b;UDP-GlcNAc&#xff1b;UDP-N-acetylglucosamine&#xff1b;Uridine 5′-diphospho-N-acetylglucosamine sodium salt 其他名称&#xff1a;尿苷-5′-二磷酸-N-乙酰基-葡糖胺钠盐 CAS号&am…