三次握手抓包示例

专业知识

HTTP 的三次握手是一个非常重要的面试和考试考点,但是今天早上看书上的一幅图和三段话将近看了半个小时,于是来总结一下。

                三次握手图解

连接状态

  1. CLOSED:表示初始状态。
  2. LISTEN: 服务器端的某个SOCKET处于监听状态,可以接受连接了。 
  3. SYN_SENT:表示客户端已发送 SYN 报文。
  4. SYN_RCVD:表示服务器接受到了 SYN 报文。
  5. ESTABLISHED:表示连接已经建立。

HTTP 的三次握手使用的是 TCP 协议,所以先看一下 TCP 的报文段首部,三次握手需要注意到的是用红线括起来的部分。

TCP 头部报文段 

字段介绍

  • ACK 确认字段:在连接建立后所有传送的报文段 ACK 必须为 1 。
  • SYN 同步字段:连接建立时使用同步序号。
  • FIN 终止字段:FIN = 1 是表示释放一个连接。
  • 序号 seq :发送了多少被成功接受数据。
  • 确认号 ack:接受了多少数据。

注意点

ACK = 1 不携带数据不消耗序号。

SYN = 1 不能携带数据并且要消耗一个序号。

抓包示例

Wirshark 追踪某个 HTTP 流

 示例分析

192.168.1.11 为客户端 A,42.121.252.58 为服务器 B。

  1. 客户端请求连接发送 SYN 产生一个为 x = 0 的序号 seq 。
  2. 服务器接受连接,ACK = x + 1 = 1 并产生 y = 0 的序号 seq;发送 SYN ACK seq = 0 ack = 1 到客户端。
  3. 客户端发现服务器接受了连接请求返回了 ack,seq = x;同时接受服务器的请求 ack = y + 1 = 1。
  4. 因为上个传输,只传输了一个 ACK 没有数据,所以看第四条线 seq = 1,ack = 1。

收获:看 2 这个列表项,发送端的 seq 字段需要接收到服务器段的 ack 才会变化,这个时候 服务器 ack = 客户端 seq 。

所以我才会有下面对 seq 和 ack 的理解。

  • 序号 seq :发送了多少被成功接受数据。
  • 确认号 ack:接受了多少数据。

面试问题

为什么使用三次握手?

为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误 ——谢希仁著《计算机网络》第四版

谢希仁版《计算机网络》中的例子是这样的,“已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”主要目的防止server端一直等待,浪费资源。

观察 SYN 的含义:同部字段。如果客户端和服务器端都需要使用 SYN-ACK 机制同步一下的话,最少是需要 3 次握手的。另一方面服务器资源相对于客户端资源是更加重要一点。

参考文章 

TCP 三次握手

TCP为什么需要3次握手与4次挥手

Wireshark基本介绍和学习TCP三次握手

我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=13ews1h77n5l4

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小二的折腾日记

一文总结计算机网络

它只有四层,相当于五层协议中数据链路层和物理层合并为网络接口层。 现在的 TCP/IP 体系结构不严格遵循 OSI 分层概念,应用层可能会直接使用 IP 层或者...

12220
来自专栏JavaEdge

计算机网络基础知识点1. OSI,TCP/IP,五层协议的体系结构,以及各层协议2. IP地址的分类3. ARP是地址解析协议,简单语言解释一下工作原理。4. 各种协议的介绍5. 描述RARP协议6.

60780
来自专栏用户2442861的专栏

计算机网络面试题 系列一(排名400多还不不错)

http://blog.csdn.net/tianshuai1111/article/details/8121881

17620
来自专栏一名合格java开发的自我修养

TCP连接中time_wait在开发中的影响-搜人以鱼不如授之以渔

  根据TCP协议定义的3次握手断开连接规定,发起socket主动关闭的一方socket将进入TIME_WAIT状态,TIME_WAIT状态将持续2个MSL(M...

22640
来自专栏武军超python专栏

2018年8月16日TCP中三次握手和四次挥手详解

 上图中有几个字段需要重点介绍下:         (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。...

9520
来自专栏Java架构师历程

socket、tcp、udp、http 的认识及区别

在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。 在传输层中有TCP协议与UDP协议。

3K30
来自专栏武培轩的专栏

TCP和UDP的区别

TCP TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。 ...

32550
来自专栏Laoqi's Linux运维专列

TCP的三次握手与四次分手

22940
来自专栏Python

TCP协议三次握手与四次挥手通俗解析

 TCP/IP协议三次握手与四次握手流程解析 一、TCP报文格式 TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图: ? 图...

27470
来自专栏xcywt

TCP/IP详解 卷1 第十八章 TCP的建立与终止

第十八章 TCP的建立与终止 tcpdump Tcpdump可以将网络中传送的数据报完截获下来进行分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供a...

32580

扫码关注云+社区

领取腾讯云代金券