2012-01-05 21 views
7

Tengo un escenario donde un cliente abre una conexión TCP a un servidor después de establecer algún valor de IP TOS (setsockopt(.., IP_TOS, ..)). En el servidor quiero recuperar el valor de TOS recibido y configurarlo en el socket para que los TOS recibidos se reflejen en los paquetes servidor-cliente.recuperando el valor de TOS en un socket TCP

El problema es, por el lado del servidor, ¿cómo puedo recuperar el valor TOS recibido del cliente? Puedo suponer que el cliente no cambiará los TOS valor durante toda la sesión, por lo que es suficiente para obtener y establecer el valor de TOS una vez inicialmente.

Configuración IP_RECVTOS y el uso de datos auxiliares para UDP pero no para sockets TCP. algo similar se logrará en sockets TCP? getsockopt(2) con SO_PRIORITY o IP_TOS devuelve los valores configurados en el socket local. Entonces si hice un setsockopt() localmente entonces el getsockopt() refleja ese valor. No refleja lo que se recibe en la red.

+0

preguntando, pero ¿por qué dejaría que una opción configurada en el extremo lejano cambie sus prioridades de tráfico de salida? – Alnitak

+0

ToS ha sido reemplazado por DSCP durante mucho tiempo. –

Respuesta

2

El valor de TOS podría cambiar para cada datagrama TCP recibido.

Por lo tanto, no es una opción constante para el que recibe el socket TCP.

De este último se podría concluir que no es posible para el receptor extraer un valor para TOS del socket TCP receptor en términos de una opción cuyo valor puede leerse usando getsockopt().

Como no existe tal función como "auxiliares" mensajes disponibles para TCP La única manera que veo para averiguar lo que el remitente conjunto como TOS es inspeccionar directamente las cabeceras del datagrama TCP recibido.

+0

Sí de acuerdo sobre la contradicción de TCP y un paquete por cantidad de paquete como TOS. Es por eso que mencioné que podemos suponer que el cliente no cambiará los archivos durante la vida de la sesión por lo que valdría la pena. En cuanto a su comentario de inspeccionar directamente el encabezado recibido, ¿quiso decir utilizar algo como iptables para leer y establecer los valores de DSCP o tenía algo más en mente? – SanjayT

+1

No había tenido nada especial en mente. Solo quería señalar que los valores TOS no son necesariamente un atributo de un socket receptor. Además, diría que esto podría no ser el caso si no cambia el valor TOS del socket emisor, ya que durante la transmisión de los datagramas TCP sus encabezados podrían modificarse en este sentido por los saltos intermedios. – alk

+1

@SanjayT: Puede echar un vistazo a libpcap para dejar que la aplicación controle sus propias conexiones TCP entrantes a un nivel inferior. – alk

Cuestiones relacionadas