如何修改linux tcp established老化时间?
1、修改linux系统下的tcp_retries2为1,当socket发送队列有一定数据时,突然切断网线,造成异常断链的场景,此时,大约过了1秒,用netstat观察established的连接消失;
2、继续把该参数修改为15,重复上面的实验,发现大约过了15分钟后,established的连接才断开;
3、把参数再次修改为5,大约过了7秒,连接消失
/proc/sys/net/ipv4/tcp_retries2
思考:TCP的超时后,重传的次数和重传的时间间隔是影响连接断开的主要参数。但是,从上面的实验数据来看,似乎没有什么规律。查阅linux帮助文档,发现这个重传的时间间隔与RTO有关,而这个参数又是协议栈通过检测网络状况而实时改变的。
tcp命令响应超时是什么意思?
TCP三次握手创建一个连接时,以下两种情况会发生超时:
1.client发送SYN后,进入SYN_SENT状态,等待server的SYN+ACK。
2.server收到连接创建的SYN,回应SYN+ACK后,进入SYN_RECD状态,等待client的ACK。
当超时发生时,就会重传,一直到75s还没有收到任何回应,便会放弃,终止连接的创建。但是在Linux实现中,并不是依靠超时总时间来判断是否终止连接。
当三次握手成功,连接建立,发送TCP segment,等待ACK确认。如果在指定时间内,没有得到ACK,就会重传,一直重传到放弃为止。
tcp接收端超时未接收到数据?
总的来说,TCP可能有三个超时
1)连接超时
2)读超时,即阻塞在读的地方(应用层),比如B没有收到数据报文1而阻塞,或者A没有收到数据报文2而阻塞。
3)写超时,即阻塞在写的地方(即发送的地方,协议栈),数据没有发送成功,因对方没有回应收到数据,注意此处的回应并不会到读缓冲(即输入缓冲),而是在协议栈中就处理这个回应了。比如A发送数据报文1后,没有收到ACK1。
(socket是属于应用层,传输层在协议栈中,协议栈是属于内核层的。)