1、TCP如何唯一确定一条连接?
TCP通过四元组唯一确定一条连接,四元组即源IP地址、目的IP地址、源端口和目的端口。
2、TCP三层握手过程中,可以携带数据吗?
第一次、第二次握手不可以携带数据,第三次握手时,是可以携带数据的。
3、TCP和UDP可以同时绑定同一个端口吗?
可以,TCP和UDP是两种不同的传输层协议,它们各自使用的端口号也相互独立,如TCP有一个80端口,UDP也可以有一个80端口,二者并不冲突。
4、多个TCP服务器进程可以同时绑定同一个端口吗?
要看它们绑定的IP地址是否相同,如果IP地址也相同,就不可以再绑定同一个端口。
如果IP地址不相同,就可以。
5、客户端的端口可以重复使用吗?
可以重复使用。TCP通过四元组(源IP地址、目的IP地址、源端口和目的端口)唯一确定一条连接,只要四元组中的一个维度不一样,就表示不同的TCP连接。
所以,即使客户端的端口(即源端口)相同,只要其它三个维度有一个维度不相同,就不会导致连接冲突的问题。
6、IP层已经有了分片机制,TCP为什么还需要分段?
因为IP层本身没有超时重传机制,超时和重传是由TCP负责的,当某一个IP分片丢失后,TCP就得重传整个IP报文的所有分片,效率太低。
所以一般都是UDP使用IP分片,TCP使用分段而不使用分片。
TCP在建立连接时,会根据网卡MTU的大小协商双方的MSS值,超过MSS时,就会先进行分段,由它形成的IP包的长度也就不会大于MTU ,也就不用进行IP分片了。
7、为什么有TIME_WAIT状态?为什么等待的时间是2MSL?
TIME_WAIT是TCP四次挥手过程中,主动发起结束连接的一方,在发送第四次挥手ACK包之后的状态。
处于TIME_WAIT状态的一方,在经过2个MSL(报文最大生存时间)时间后,才变为CLOSED状态,结束连接。
在TIME_WAIT状态时,两端的端口不能使用,要等到2MSL时间结束才可继续使用,而2MSL的时间足以让两个方向上的数据包都被丢弃,使得原来连接的数据包在网络中都自然消失,所以可以保证历史连接的报文不会影响新的连接。
等待2MSL时间主要目的是怕最后一个ACK包对方没收到,那么对方在超时后将重发第三次握手的FIN包,主动关闭的一方接到重发的FIN包后可以再发一个ACK应答包。