Q1:为什么不采用“两次握手”建立连接呢?
A1:这主要是为了防止两次握手情况下已失效的连接请求报文段突然又传送到服务端而产生错误。考虑下面这种情况,客户A向服务器B发出TCP连接请求,第一个连接请求报文在网络的某个节点长时间滞留,A超时后认为报文丢失,于是再重传一次连接请求,B收到后建立连接。数据传输完毕后双方断开连接。而此时,前一个滞留在网络中的连接请求到达服务端B,而B认为A又发来连接请求,此时如果使用“三次握手”,则B向A返回确认报文段,由于是一个失效的请求,因此A不予理睬,建立连接失败。若采用“二次握手”,则这种情况下B认为传输连接已经建立,并一直等待A传输数据,而A此时并无连接请求,因此不予理睬,造成资源浪费甚至死锁。
Q2:为什么不采用“三次握手”释放连接,且发送最后一次握手报文后要等待2MSL的时间呢?
A2:(1)保证A发送的最后一个确认报文段能够到达B,如果A不等待2MSL,若A返回的最后确认报文段丢失,则B不能进入正常关闭状态,而A此时已经关闭,也不可能再重传。
(2)防止出现“已失效的连接请求报文段”。A在发送最后一个确认报文段后,再经过2MSL可保证本连接持续的时间内所产生的所有报文段从网络中消失。
Q3:如何在Internet上识别唯一一个进程?
A3:通过“IP地址+端口号”来区分不同的服务。其中IP地址可以确定网络中唯一一台主机,而端口号可以确定主机中唯一的进程。