先亮出这篇文章的思维导图

001. 能不能说一说 TCP 和 UDP 的区别?
UDP 相比,TCP 有三大核心特性:面向连接。所谓的连接,指的是客户端和服务器的连接,在双方互相通信之前,TCP 需要三次握手建立连接,而 UDP 没有相应建立连接的过程。
可靠性。TCP 花了非常多的功夫保证连接的可靠,这个可靠性体现在哪些方面呢?一个是有状态,另一个是可控制。
无状态, 不可控的。面向字节流。UDP 的数据传输是基于数据报的,这是因为仅仅只是继承了 IP 层的特性,而 TCP 为了维护状态,将一个个 IP 包变成了字节流。
002: 说说 TCP 三次握手的过程?为什么是三次而不是两次、四次?
恋爱模拟
爱的能力。爱和被爱的能力。被爱的能力。爱和被爱的能力,两人开始一段甜蜜的爱情。真实握手
发送的能力和接收的能力。于是便会有下面的三次握手的过程:
CLOSED状态。然后服务端开始监听某个端口,进入了LISTEN状态。SYN-SENT状态。SYN和ACK(对应客户端发来的SYN),自己变成了SYN-REVD。ACK给服务端,自己变成了ESTABLISHED状态;服务端收到ACK之后,也变成了ESTABLISHED状态。凡是需要对端确认的,一定消耗TCP报文的序列号。
为什么不是两次?
为什么不是四次?
发送和接收的能力,那四次握手可以嘛?三次握手过程中可以携带数据么?
ESTABLISHED状态,并且已经能够确认服务器的接收、发送能力正常,这个时候相对安全了,可以携带数据。同时打开会怎样?
SYN报文,状态变化会是怎样的呢?
SYN报文的同时,接收方也给发送方发SYN报文,两个人刚上了!SYN,两者的状态都变为SYN-SENT。SYN后,两者状态都变为SYN-REVD。ACK + SYN,这个报文在对方接收之后,两者状态一起变为ESTABLISHED。003: 说说 TCP 四次挥手的过程
过程拆解

ESTABLISHED状态。FIN 报文,在 TCP 报文中的位置如下图:
FIN-WAIT-1状态。注意, 这时候客户端同时也变成了half-close(半关闭)状态,即无法向服务端发送报文,只能接收。CLOSED-WAIT状态。FIN-WAIT2状态。FIN,自己进入LAST-ACK状态,FIN后,自己变成了TIME-WAIT状态,然后发送 ACK 给服务端。MSL(Maximum Segment Lifetime,报文最大生存时间), 在这段时间内如果客户端没有收到服务端的重发请求,那么表示 ACK 成功到达,挥手结束,否则客户端重发 ACK。等待2MSL的意义
1 个 MSL 确保四次挥手中主动关闭方最后的 ACK 报文最终能达到对端 1 个 MSL 确保对端没有收到 ACK 重传的 FIN 报文可以到达
为什么是四次挥手而不是三次?
FIN, 往往不会立即返回FIN, 必须等到服务端所有的报文都发送完毕了,才能发FIN。因此先发一个ACK表示已经收到客户端的FIN,延迟一段时间才发FIN。这就造成了四次挥手。ACK和FIN的发送合并为一次挥手,这个时候长时间的延迟可能会导致客户端误以为FIN没有到达客户端,从而让客户端不断的重发FIN。
按文档操作后还是不行,把机器编号、出问题的时间点和现象截图一起提工单,能少来回一轮。
提交工单
按文档操作后还是不行,把机器编号、出问题的时间点和现象截图一起提工单,能少来回一轮。
提交工单