TCP/IP协议相关面试知识
ACK:表示验证字段
SYN:位数置1,表示建立TCP连接
FIN:位数置1,表示断开TCP连接
1.1.四次挥手的过程
A:我要和你分手
B:好,人渣,等我收拾完我的东西,咱们就分手.
B:我收拾完了,分手吧
A:好,拜拜
1.2.第四次挥手后为何要等待 2MSL
主动断开方A收到FIN后,会发送ACK给被动方说自己已收到了,
被动方可能因为无法收到这个ACK,就误以为主动方A出问题,被动方就会重传FIN,这个ACK去,FIN回的过程正好两个最大报文生命周期的时间.
1.3.TIME_WAIT和CLOSE_WAIT
正常情况下,TCP客户端在关闭连接后会进入TIME_WAIT状态,这个状态的持续时间通常是 2MSL(maximum segment lifetime,即最大报文段的生命期,通常为2分钟).
主动方已经发送FIN,被动方如果长时间没有发送ACK给主动方,那么就会处于CLOSE_WAIT状态.
因为linux分配给一个用户的文件句柄是有限的,而TIME_WAIT和CLOSE_WAIT两种状态如果一直被保持,那么意味着对应数目的文件句柄就一直被占着, 一旦达到句柄数上限,新的请求就无法被处理了,接着就是大量Too Many Open Files异常 .
TCP
用三次握手建立 TCP 连接的各状态
A:喂,你在吗,我给你发个东西
B:我在,你还在吗
C:嗯
PS:因为三次才能确定双方收和发功能正常.
2.1 TCP为什么需要三次握手而不是两次握手
因为三次才能确定双方收和发功能正常.
两次只能确定服务端是可靠的,不能确定客户端.
2.2 为什么不四次呢?
从知道信息了解资讯来讲,四次以上都是开始多余了.
2.3 TCP怎么实现可靠传输的
TCP(Transmission Control Protocol)是一种可靠的字节流传输服务,它保证接收到的所有字节与发送的字节完全相同,并且按照相同的顺序。由于许多网络的数据包传输并不可靠,TCP通过一种称为正向确认与重传的技术来实现这一目标。
具体来说,TCP实现可靠传输的方式包括以下几个关键点:
序列号和确认机制:
TCP为每个发送的字节分配一个序列号,并要求接收方发送确认(ACK)来确认已接收的字节。
如果发送方在一定时间内没有收到确认,它会重新发送相应的字节。
超时重传:
如果发送方发送的数据包在一定时间内没有收到确认,它会重新发送这些数据包。
这确保了即使某些数据包丢失,发送方仍会尝试重新传输。
流量控制:
TCP使用滑动窗口机制来控制发送方发送的数据量,以避免过载接收方。
接收方可以通过调整窗口大小来告知发送方可以接收的数据量。
拥塞控制:
TCP使用拥塞窗口来控制网络中的拥塞情况。
如果网络拥塞,发送方会减小发送速率,以避免进一步加重拥塞。
重排序和丢包重传:
TCP会对接收到的数据包进行排序,以确保按正确的顺序传递给应用程序。
如果数据包丢失,TCP会重新发送丢失的数据包。
总之,TCP通过这些机制来确保可靠地传输数据,使得应用程序能够在不丢失数据的情况下进行通信