zonglang / code

平时写的代码练习
1 stars 0 forks source link

tcp连接为什么三次握手,四次挥手 #8

Open zonglang opened 5 years ago

zonglang commented 5 years ago

tcp是全双工支持半关闭可靠的传输协议

三次握手

为什么是三次

为了保证全双工通信可行,

第一次和第二次握手证明client端向server端通信可行; 第二次和第三次握手证明server端向client端通信可行;

为什么不是两次

有一种情况:已经失效的连接请求(由于在网络结点中滞留太久)突然又传送到服务器,从而产生错误

所以:这种情况下,两次握手机制会让服务器端认定连接已经建立,浪费资源等待

为什么不是四次

三次本身就是四次简化过来的

四次挥手

为什么是四次

为了保证半关闭可行

半关闭指的是一边停止发送数据,另一边可以继续发送数据

第一次和第二次挥手,说明client端不再向server端发送数据 第三次和第四次挥手,说明server端不再向client端发送数据

为什么不是三次

因为第二次和第三次挥手不能合并,client端关闭时,server端不一定关闭

由于网络信道是不可信的,可能发生丢包错包乱序的现象

丢包

采用超时重传的方法解决

错包

检测出来后直接丢弃

乱序

通过seq确定包的顺序


附tcp连接流程图:

image