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
报文段、数据报、数据包和帧

最新文章

  1. html视频播放器的代码 及其参数详解
  2. 记一次联想A820t救砖线刷
  3. Chrome商店Crx离线安装包下载
  4. 熟悉 Objective-C
  5. java 解析XML文档
  6. android侧滑菜单笔记
  7. 批量执行sql语句
  8. jquery datatable 参数api
  9. C# 入门经典
  10. Java内部类与外部类
  11. gin框架使用注意事项
  12. win10系统盘分多大合适?
  13. springboot+mybatis+pagehelper
  14. JavaScript 之 预编译 作用域,作用域链
  15. html body 100%
  16. HDU - 4625 JZPTREE(第二类斯特林数+树DP)
  17. POJ 2718【permutation】
  18. nginx-启动|关闭|重新加载配置文件的命令
  19. springboot jpa 审计
  20. POJ 1094 Sorting It All Out(拓扑排序+判环+拓扑路径唯一性确定)

热门文章

  1. url中拼接中文参数,后台接收为乱码的问题
  2. MySQL-8.0.x DDL 原子性
  3. pandas 学习 第5篇:DataFrame - 访问数据框
  4. HTTP Error 500.0 - ANCM In-Process Handler Load Failure 排错历程
  5. selenium设置user-agent以及对于是否是浏览器内核进行反爬
  6. Javase之集合体系之(1)集合顶层类Collection与其迭代器知识
  7. Html 页面底部添加版权信息
  8. xml解析-jaxp修改结点
  9. Python通用函数实现数组计算
  10. Sublime打开txt文本乱码的解决方法