2009-10-23 18 views
14

Tengo una aplicación que recibe tráfico relativamente escaso sobre TCP sin respuestas a nivel de aplicación. Creo que la pila TCP está enviando ACK retrasados ​​(en función de echar un vistazo a la captura de paquetes de red). ¿Cuál es la forma recomendada de desactivar ACK retardado en la pila de red para un solo socket? Miré TCP_QUICKACK, pero parece que la pila lo cambiará bajo mis pies de todos modos.Deshabilitar ACK retrasados ​​de TCP

Esto se ejecuta en un kernel de Linux 2.6, y no estoy preocupado por la portabilidad.

Respuesta

13

Usted podría setsockopt(sockfd, IPPROTO_TCP, TCP_QUICKACK, (int[]){1}, sizeof(int)) después de cada recv que realice. Parece que TCP_QUICKACK solo se restablece cuando hay datos enviados o recibidos; si no está enviando ningún dato, solo se restablecerá cuando reciba datos, en cuyo caso puede simplemente configurarlo nuevamente.

Puede consultar esto en el campo 14 th de /proc/net/tcp; si no es 1, los ACK deben enviarse de inmediato ... si estoy leyendo el código TCP correctamente. (No soy un experto en esto tampoco.)

+0

Creo que ya lo ha hecho basándose en su pregunta y dice que el valor está siendo restablecido. – Nikolaos

+0

El ajuste 'TCP_QUICKACK' envía inmediatamente un ACK si hay algo que necesite ser ACK, así que creo que es suficiente. – ephemient

+0

Todavía estoy 'enviando()' ing en ese socket. Pero como dije, no estoy respondiendo a los mensajes que recibo. Comprobaré '/ proc/net/tcp'. – Tom

0

Creo que utilizando la función setsockopt() puede usar el TCP_NODELAY que desactivará el algoritmo de Nagle.

Editar Encontrado un enlace: http://www.ibm.com/developerworks/linux/library/l-hisock.html

Editar 2 Tom es correcta. Nagle no afecta los ACK retardados.

+2

Deshabilitar el algoritmo de Nagle no afectará los reconocimientos retrasados ​​(al menos, no en ninguna implementación que conozca). – Tom

+0

el enlace es genial –

+0

No, desactivar los impactos de nagle retrasó ack, al menos puedo confirmarlo en el kernel 3.17 de linux reciente. – Timir

Cuestiones relacionadas