三次握手:为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕后何时撤消联系,并建立虚连接。
四次挥手:即终止 TCP 连接,就是指断开一个 TCP 连接时,需要客户端和服务端总共发送4个包以确认连接的断开。
假设 A 和 B 是通过短信进行联系的
第一次(握手)对话:
中午12点, A 给 B 发短信说:"走,去食堂吃饭"。
如果此时 B 没带手机没有接受到短信,那肯定是对话失败的, A 等了一会 B 没回他的短信,他就会自己去吃饭,肯定不会一直等到下午吧。
这说明 B 没有接受到 A 的消息时沟通是肯定失败的。
第二次(握手)对话:
B 收到并且看到了 A 发来的消息,但是 B 是个外国人,他的中文不太好不能理解 A 所发短信的意思,于是随便回了一句学会的中文:"我爱你"。
A 收到之后菊花一紧,心想我只是想和你一起吃饭,你却。。。。这该死的基佬。告辞。于是沟通失败。因为 B 无法根据 A 的消息做出正确的应答。
如果 B 的中文足够好,他看懂了 A 的消息,并回了一句:"好,那我去老地方等你",那么第二次握手成功。
第三次(握手)对话:
A 看到 B 发的消息:"好,那我去老地方等你",但是 A 的妈妈喊他现在立刻马上回家吃饭, A 是个听妈妈话的孩子,于是立马回家吃饭了。然后 B 就等一大半天没看到 A 回消息就想:怎么还不回我消息,到底去不起啊?不去算鸟。
于是沟通失败,这是因为 A 无法对 B 的消息做出正确的应答。但是如果 A 看到 B 发的消息后回复到:"好的,我马上过来"。那么第三次对话成功,两个人就可以开心的一起去吃饭了,并继续聊天啥的进行后续活动。
通过第二次和第三次的对话证明了甲能够听懂乙说的话◇并且能做出正确的应答。可见,两个人进行有效的语言沟通,这三次对话的过程是必须的。
四次断开
数据传输结束后,通信的双方都可释放连接。此处为 A 的应用进程先向其 TCP 发出连接释放报文段,但是 A 结束 TCP 连接的时间要比 B 晚一些。
以下描述不讨论序号和确认号,因为序号和确认号的规则比较简单。并且不讨论 ACK ,因为 ACK 在连接建立之后都为1。
● A 发送连接释放报文, FIN =1。
● B 收到之后发出确认,此时 TCP 属于半关闭状态, B 能向 A 发送数据但是 A 不能向 B 发送数据。
●当 B 不再需要连接时,发送连接释放报文, FIN =1。
● A 收到后发出确认,进入 TIME - WAIT 状态,等待2 MSL (最大报文存活时间)后释放连接。
● B 收到 A 的确认后释放连接。