iOS之快速掌握TCP 三次握手、四次分手

2021-03-29  本文已影响0人  枫叶无处漂泊

一、什么是TCP?

TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,是专门为了在不可靠的网络中提供一个可靠的端对端字节流而设计的,面向字节流。

二、TCP报文端结构

下看一下下面这张图了解一下TCP结构:

TCP报文段结构.png

1、端口号(源端口号、目的端口号)

2、随机序号(seq)

3、确认序号(ack)

4、首部长度 (Header Length)

5、保留字段 (Reserved)

6、控制位 (Control Bits)

在三次握手和四次挥手中会经常看到 SYN、ACK 和 FIN 的身影,一共有 6 个标志位,它们表示的意义如下:

7、窗口大小 (Window)

8、检验和 (Checksum)

9、紧急指针 (Urgent Pointer)

10、选项 (Options)

选项 (Options):这一部分是可选字段,也就是非必须字段,最常见的可选字段是“最长报文大小 (MSS,Maximum Segment Size)”。

11、选项 (Options)

有效数据部分 (Data):这部分也不是必须的,比如在建立和关闭 TCP 连接的阶段,双方交换的报文段就只包含 TCP 首部。

三、TCP 的连接控制

三次握手和四次挥手是各个公司常见的考点,也具有一定的水平区分度,也被一些面试官作为热身题。

1、三次握手

先看一下下面三次握手的图:

三次握手.png

第一次握手:

第二次握手:

第三次握手

2、三次握手相关面试题:

TCP 建立连接为什么要三次握手而不是两次?

在双方两次握手即可建立连接的情况下,假设客户端发送 A 报文段请求建立连接,由于网络原因造成 A 暂时无法到达服务器,服务器接收不到请求报文段就不会返回确认报文段.

由于客户端在长时间得不到应答的情况下重新发送请求报文段 B,这次 B 顺利到达服务器,服务器随即返回确认报文并进入 ESTABLISHED 状态,客户端在收到 确认报文后也进入 ESTABLISHED 状态,双方建立连接并传输数据

如果之后客户端正常断开连接,然而此时姗姗来迟的 A 报文段才到达服务器,服务器随即返回确认报文并进入 ESTABLISHED 状态,但是已经进入 CLOSED 状态的客户端无法再接受确认报文段,更无法进入 ESTABLISHED 状态,这将导致服务器长时间单方面等待,造成资源浪费。

第一次握手:客户端只是发送处请求报文段,什么都无法确认,而服务器可以确认自己的接收能力和对方的发送能力正常.

第二次握手:客户端可以确定自己的发送和接受能力都正常,而服务端可以确认自己的接收能力还是无法确定自己的发送能力是否正常.

服务器可以确认自己发送能力和接收能力正常,对方发送能力和接收能力正常;

CP 实现了可靠的数据传输,原因之一就是 TCP 报文段中维护了序号字段和确认序号字段,也就是图中的 seq 和 ack,通过这两个字段双方都可以知道在自己发出的数据中,哪些是已经被对方确认接收的。

这两个字段的值会在初始序号值得基础递增,如果是两次握手,只有发起方的初始序号可以得到确认,而另一方的初始序号则得不到确认。

TCP 建立连接为什么要三次握手而不是四次?

有一种网络攻击是利用了 TCP 建立连接机制的漏洞,你了解吗?这个问题怎么解决?

解决方案:

3、四次挥手

建立一个连接需要三次握手,而终止一个连接要经过 4次握手。
原因:这由 TCP 的半关闭( half-close) 造成的。既然一个 TCP 连接是全双工 (即数据在两个方向上能同时传递),因此每个方向必须单独地进行关闭。

这原则就是当一方完成它的数据发送任务后就能发送一个 FIN 来终止这个方向连接。

当一端收到一个 FIN,它必须通知应用层另一端已经终止了数据传送。理论上客户端和服务器都可以发起主动关闭,但是更多的情况下是客户端主动发起。

下图表示四次分手的流程图:

TCP4次挥手.png

四次挥手详细过程如下:

第一次挥手:

第二次挥手:

此时 TCP 处于半关闭状态,也就是说客户端已经没有数据要发送了,但是服务器还可以发送数据,客户端也还能够接收。

第三次挥手:

第四次挥手:

3、四次挥手面试题?

为什么 TCP 关闭连接为什么要四次而不是三次?

客户端为什么需要在 TIME-WAIT 状态等待 2MSL 时间才能进入 CLOSED 状态?

按照常理,在网络正常的情况下,四个报文段发送完后,双方就可以关闭连接进入 CLOSED 状态了.

但是网络并不总是可靠的,如果客户端发送的 ACK 报文段丢失,服务器在接收不到 ACK 的情况下会一直重发 FIN 报文段,这显然不是我们想要的.

上一篇 下一篇

猜你喜欢

热点阅读