TCP建立连接为什么要三次握手而不是两次? 从全双工通信的角度理解
单纯从浪费网络延迟导致的浪费资源的角度去否定两次握手,感觉这个理由很牵强,这样的浪费三次握手其实也并不能避免。
简单化处理 A B的握手细节。突出主要矛盾。
如果TCP是两次握手的话。
从A的视角来看。“我给B发出一个消息,又收到了回复,那么我可以确定, 我和B之间的通信的路(物理层)是通的”
关键点 如果这个物理层是全双工通信的?
A对这个物理链路的理解会是
但B对这个物理链路的理解
即B可以确定从A到B这条路是通的,但因为B发给A信息后没有收到A的回复,所以B不能确定是不是从B到A的这条路本身就不通导致自己发发给A的消息根本没有到达。
在这种情况下,让B确定和A建立连接,是很不明智的。
如果是三次握手呢?
B如果收到了A的回复,那么B就可以确定 从我这到A的路是通的。而且也能知道 A是可以确定路是双通的。
基于双方都能确定路是双通的,确定建立连接及后续一些操作。
这和红军蓝军通信没法消除网络猜疑是不同的。
三次握手不是为了确定通信的双方能够确定消息的传达,而是确定消息传播的通道是不是畅通的。只要通道是畅通的,可以用其他策略去判断消息是不是准确有序的传递了(消息的***,确认号,超时重传等)。
个人理解的比较片面,有不足之处,希望多多指教。