使用wireshark学习TCP

TCP标志位:

在TCP传输中,标志位用于表示特定的链接状态或提供额外信息。每一个标志位占用1比特。经常使用的TCP标志位包含如下几种:html

  • SYN服务器

    Synchronous,TCP三次握手创建链接的第一步,主动创建链接的一方发送SYN到被动创建链接一方。在下图中能够看到,发送方的SYN被置为1网络

 

 

  • ACK Acknowledgement,用于表示成功收到一个包tcp

  • PUSH Push,告诉接收方处理接受到的数据包而不是缓冲它们工具

  • FIN Finish,表示发送方将再也不发送数据,一般用于表示发送方发送的最后一个包post

  • RST Reset,当数据包被发送到预期以外的特定主机时,从接收方发送到发送方学习

  • URG Urgent,该标志为用于通知接收方优先处理当前包动画

除此以外还有ECE、ECE、NS等。spa

Sequence number && Acknowledgment number

创建链接时,发送方的Seq值是随机的,wireshark工具默认会使用相对值,能够在编辑->首选项->协议一栏选择TCP,进行开启/关闭相对seq值:.net

 

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

相关文章
相关标签/搜索