给女朋友总结一个关于三次握手和四次挥手的文。
一、三次握手
1. TCP三次握手的含义
- TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。
- 三次握手的目的是同步连接双方的 序列号 和 确认号 并 交换TCP窗口大小信息
- 完成了三次握手,TCP协议就提供了可靠的连接服务,客户端和服务器端就可以开始传送数据。
2. 三次握手的步骤
1.第一次握手:客户端发送请求建立连接,请求报文段。
2.第二次握手:服务器收到请求,发送同意并请求与客户端建立连接。
3.第三次握手:客户端收到请求,发送同意与服务器建立连接。
最简单的理解如下图所示:
3. 三次握手的意义和作用
第一次和第二次握手 为了保证 服务端 能够接受到 客户端 的信息并能做出正确的应答。
第二次和第三次握手 为了保证 客户端 能够接收到 服务端 的信息并能做出正确的应答。
4. 怎样生动描述 TCP 的「三次握手」?
「你瞅啥?」
「瞅你咋地?」
「来咱俩唠唠。」
然后就唠上了。
5. TCP 为什么是三次握手,而不是两次或四次?
三次握手:
“喂,你听得到吗?”
“我听得到呀,你听得到我吗?” -> 应答与请求同时发出
“我能听到你,今天balabala……”两次握手:
“喂,你听得到吗?”
“我听得到呀”
“喂喂,你听得到吗?”
“草,我听得到呀!!!!”
“你TM能不能听到我讲话啊!!喂!”
“……”四次握手:
“喂,你听得到吗?”
“我听得到呀,你听得到我吗?”
“我能听到你,你能听到我吗?”
“……不想跟傻逼说话”
二、四次挥手
1. 四次挥手的含义
- 当客户端和服务器通过三次握手建立了TCP连接以后,当数据传送完毕,相应的就要断开TCP连接。那对于TCP的断开连接,这里就有了“四次挥手”。
2. 四次挥手的步骤
1.第一次挥手:客户端发送断开请求
2.第二次挥手:服务器收到断开请求,发送同意断开连接的请求
3.第三次挥手:服务器发送请求断开连接
4.第四次挥手:客户端收到,发送同意断开连接
3. 四次挥手的意义和作用
第一次挥手
当客户端发送断开请求,只是表示客户端已经没有数据要发送了,客户端告诉服务器,它的数据已经全部发送完毕了,但是,这个时候客户端还是可以接受来自服务器的数据。
第二次挥手
当服务器收到断开请求时,表示它已经知道客户端没有数据发送了并发送同意断开连接的请求,但是服务器还是可以发送数据到客户端的。
第三次挥手
当服务器发送同意断开连接的请求后,这个时候就表示服务器也没有数据要发送了,就会告诉客户端,我也没有数据要发送了。
第四次挥手
当客户端收到服务器发送请求断开连接后,再去告诉服务端我已经知道你没有数据要发给我了,同意断开连接请求。
4. 怎样生动描述 TCP 的「四次挥手」?
A:“走了昂!”
B:“中!悠着点昂!”
B:”我也走了昂!骨朵白!”
A:”中!骨朵白!”
三、补充知识点
1. 三次握手的第一次可以携带数据吗?为何?
- 不可以,三次握手还没有完成。
2. 三次握手的第三次可以携带数据吗?为何?
可以。
能够发出第三次握手请求的客户端,肯定接收得到服务器第二次握手请求,相当于被服务器钦定了。
所以,能够发出第三次握手报文的,应该是合法的用户。
尽管服务器还没有和该客户端建立连接,但接收到第三次握手的瞬间连接就会建立成功。
这时里面携带的数据刚好可以按照正常流程走。
3. 四次挥手的客户端第四次挥手后等待2msl的原因
为了保证客户端发送的最后一个确认断开连接的确认能够到达服务器。
因为这最后一个确认可能会丢失,然后服务器就会超时重传第三次挥手的报文。
如果没有这2msl,客户端发送完最后一个确认后直接关闭连接。
那么就接收不到服务器超时重传的报文,那么服务器就不能按正常步骤进入 close 状态。