TCP基础知识
Q1:TCP四次挥手为什么比三次握手多一次?
A1: TCP的握手过程主要是为了建立连接,确认双方身份和可用性,确保双方都正确地接收到了对方的请求。这一过程只需要三次即可完成。
但在挥手过程中,通信的双方不仅需要确认连接的断开,还需要确保各自的数据已经全部传输完毕。
所以在server发送ACK后,需要等待client的close()信号,表示对方已经确定没有数据传输了,再发送FIN信号。
Q2:TCP的可靠性?(TCP如何保证数据的可靠性?)
A2:有如下6中方式来确保TCP的可靠性:
①校验和:对数据段进行校验和计算。发送方在发送数据之前计算校验和,并填充在数据段中。接收方收到数据后,会对数据进行同样的校验和计算,并与发送方的校验和进行比对。如果两者不一致,则说明数据传输有误,接收方会要求发送方重新发送数据。
②连接管理:TCP通过三次握手建立连接,并在数据传输完成后通过四次挥手断开连接。这确保了双方都已准备好进行数据交换,并在结束时正常关闭连接。
③超时重传:如果发送方在一定时间内没有收到对于某个数据段的确认应答,它会认为该数据段已丢失或损坏,并触发超时重传机制。发送方会重新发送该数据段,直到收到确认应答或达到最大重传次数。
④流量控制:TCP使用滑动窗口协议来控制发送方和接收方之间的数据流量。接收方会在ACK中告诉发送方其当前可用的缓冲区大小,发送方则根据这个信息来调整发送速率,避免发送过多的数据导致接收方无法及时处理。
⑤拥塞控制:TCP通过拥塞控制机制来避免网络拥塞。它动态地调整发送速率,以适应网络的拥塞程度。当网络拥塞时,发送方会降低发送速率,以减少数据包的丢失和重传,从而提高网络的稳定性和可靠性。
⑥序列号和确认应答:TCP为每个数据段分配一个唯一的序列号,接收方在收到数据后,会向发送方发送一个包含接收到的数据段序列号的确认应答(ACK)。发送方会等待这些ACK,以确认数据是否成功传输。如果发送方没有收到确认应答或者序列号不连续,它会重新发送丢失或损坏的数据段。
Q3:一台服务器最多可以建立多少个TCP连接
A3:源端口的可用范围是0~65535,所以理论上,一台服务器可以建立的TCP连接数至少可以达到65536个。