使用wireshark学习TCP
TCP标志位:
在TCP传输中,标志位用于表示特定的连接状态或提供额外信息。每个标志位占用1比特。常用的TCP标志位包含以下几种:
SYN
Synchronous,TCP三次握手建立连接的第一步,主动建立连接的一方发送SYN到被动建立连接一方。在下图中可以看到,发送方的SYN被置为1
ACK Acknowledgement,用于表示成功收到一个包
PUSH Push,告诉接收方处理接受到的数据包而不是缓冲它们
FIN Finish,表示发送方将不再发送数据,通常用于表示发送方发送的最后一个包
RST Reset,当数据包被发送到预期之外的特定主机时,从接收方发送到发送方
URG Urgent,该标志为用于通知接收方优先处理当前包
除此之外还有ECE、ECE、NS等。
Sequence number && Acknowledgment number
建立连接时,发送方的Seq值是随机的,wireshark工具默认会使用相对值,可以在编辑->首选项->协议一栏选择TCP,进行开启/关闭相对seq值:

Seq的值等于发送方的Ack,对于Ack的值,分以下三种情况:
三次握手建立连接期间,Ack的值是发送方的Seq值+1;
连接建立后,Ack的值等于发送方的Len值加上Seq值;
断开连接时,Ack的值等于发送方的Seq值+1;
四次握手断开连接
以上,图片来自跟着动画来学习TCP三次握手和四次挥手。
但使用wireshark捕获到的断开连接过程和上面略有差异,只有三次通讯,将被动关闭一方的两次请求合并为一次:
2MSL
TCP协议规定,从主动断开连接一方进入TIME_WAIT状态到真正关闭TCP连接释放Socket资源,最大需要等待2MSL(Max Segment Lifetime),即4分钟。这样可以确保新的连接不会收到上个连接遗留的数据包。但对于不同的实现,这个时长略有差异。
TCP/IP模型
TCP位于传输层,提供字节流服务(Byte Streaam Service),即将大块数据分割为以报文段(segment)为单位的数据包进行管理。在网络通讯中,数据包(package)是最小的传输单位,网络层负责处理数据包。
以上,图片来自报文段、数据报、数据包和帧一文,
小结
因为想要看Redis客户端与服务器通讯的细节,而Redis通讯协议基于TCP,所以就有了这篇笔记。本文对于TCP做了简要介绍,能够满足了解Redis通讯的需要。至于更多的TCP知识,若以后需要用到再行补充。
推荐阅读
跟着动画来学习TCP三次握手和四次挥手
理解TCP序列号(Sequence Number)和确认号(Acknowledgment Number)
TCP的三次握手、四次挥手--非常详细讲解
TCP Flags
报文段、数据报、数据包和帧
使用wireshark学习TCP的更多相关文章
- 动手学习TCP:TCP特殊状态
前面两篇文章介绍了TCP状态变迁,以及通过实验演示了客户端和服务端的正常状态变迁. 下面就来看看TCP状态变迁过程中的几个特殊状态. SYN_RCVD 在TCP连接建立的过程中,当服务端接收到[SYN ...
- 动手学习TCP:数据传输
前面的文章介绍了TCP状态变迁,以及TCP状态变迁图中的一些特殊状态. 本文主要看看TCP数据传输过程中需要了解的一些重要点: MSS(Maximum Segment Size) Seq号和Ack号的 ...
- 动手学习TCP:4种定时器
上一篇中介绍了TCP数据传输中涉及的一些基本知识点.本文让我们看看TCP中的4种定时器. TCP定时器 对于每个TCP连接,TCP管理4个不同的定时器,下面看看对4种定时器的简单介绍. 重传定时器使用 ...
- 动手学习TCP:数据传输(转)
前面的文章介绍了TCP状态变迁,以及TCP状态变迁图中的一些特殊状态. 本文主要看看TCP数据传输过程中需要了解的一些重要点: MSS(Maximum Segment Size) Seq号和Ack号的 ...
- 从Wireshark看TCP连接的建立与关闭
TCP是一种面向连接.可靠的协议.TCP连接的建立与断开,都是需要经过通信双方的协商.用一句话概括就是:三次握手say hello(建立连接):四次握手say goodbye(断开连接).要了解TCP ...
- TCP头部格式详解,附Wireshark对TCP头部抓包分析
TCP之所以能为数据通讯提供可靠的传输,主要在于TCP数据包头部功能非常多. 那么,我们先来看看TCP头部格式(RFC 793.1323定义了TCP头部): TCP头部格式中的内容解析如下:(文末还有 ...
- 【FTP】Wireshark学习FTP流程
一.Wireshark概述 在windows下, 图1 Wireshark界面展示(基于1.99.1) Wireshark是通过底层的winpcap来实现抓包的.winpcap是用于网络封包抓取的一套 ...
- linux Wireshark图解TCP三次握手与四次挥手
Linux Wireshark图解TCP三次握手与四次挥手 原文章链接:Wireshark图解TCP三次握手与四次挥手 文章内容丰富 值得学习
- 动手学习TCP:总结和索引
TCP是一个十分复杂的协议,通过前面几篇文章只涉及了TCP协议中一些基本的概念. 虽然说都是一些TCP最基本的概念,但是试验过程中一直在踩坑,例如:TCP flag设置错误,seq.ack号没有计算正 ...
随机推荐
- Do Deep Nets Really Need to be Deep?
url: https://arxiv.org/pdf/1312.6184.pdf year: NIPS2014 浅网络学习深网络的函数表示, 训练方法就是使用深网络的 logits(softmax i ...
- 学习UML类图
在类图中一共包含以下几种模型元素,分别是:类(class).接口(interface)以及类之间的关系. 1.类(class) 在面向对象编程中,类是对现象世界中一组具有相同特征的物体的抽象. 2.接 ...
- ef core SoftDelete Multi-tenancy 软删除、多租户实现 Global Query Filters
ef core提供了Global Query Filters特性来实现多租户与软删除,收集了一些实现方法. 最简单的例子时微软官方的特性解释. https://docs.microsoft.com/e ...
- [反汇编] 获取上一个栈帧的ebp
使用代码 lea ecx, [ebp+4+参数长度] 就可以实现. 如下图,理解栈帧的结构,很好理解. 虽然也是 push param的,但这部分在恢复时被调用函数会恢复的,因此这并不算esp的值. ...
- Java电商项目-1.构建数据库,搭建项目环境
目录 到Github获取源码请点击此处 一. 数据库还原 二. Mybatis逆向生成工具的使用 三. 搭建项目环境 四. 在linux虚拟机上部署zookeeper, 搭建Dubbo服务. linu ...
- 数据库之MySQL查询
查询 创建数据库.数据表 -- 创建数据库 create database python_test1 charset=utf8; -- 使用数据库 use python_test1; -- stude ...
- python基础(1):python介绍、python发展史
1. python介绍 1.1 python是什么样的语言 编程语⾔主要从以下⼏个⻆度为进⾏分类,编译型和解释型.静态语⾔和动态语⾔.强类型定义语⾔和弱类型定义语⾔,我们先看编译型语⾔和解释型语⾔.稍 ...
- XSS攻击(跨站脚本攻击)
一.什么是XSS?怎么发生的? XSS(Cross site scripting)全称为跨站脚本攻击,是web程序中最常见的漏洞.指攻击者在网页中嵌入客户端脚本(例如Javascript),当用户浏览 ...
- Redis缓存系列
一.缓存雪崩 缓存雪崩我们可以简单的理解为:由于原有缓存失效,新缓存未到期间(例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了, ...
- IntelliJ IDEA UML插件
在IntelliJ IDEA Ultimate 版本中自带了一个UML插件:UMLSupport 查看了Community版本和AndroidStudio 发现没有这个插件. 要使用这个插件导出需要的 ...