2009-02-24 12 views
23

Estoy seguro de que hay alguna razón antigua heredada, ¿pero qué es? Parece un servicio orientado a la entrega confiable de datos.¿Por qué NFS usa UDP de forma predeterminada?

+1

aparece NFS ya no usa UDP por defecto, vea algunas de las respuestas. NFSv4 incluso podría usar solo TCP? – rogerdpack

+1

Sí, para NFSv4, consulte https://tools.ietf.org/html/rfc7530#section-3.1. UDP se va en este momento. –

Respuesta

22
  • NFS fue diseñado originalmente para ser utilizado en una LAN donde las tasas de pérdida son muy bajas.
  • UDP es más rápido y tiene menos sobrecarga
  • NFS es sin estado, por lo que es fácil para los clientes a reintentar

Tenga en cuenta que NFS v3 + puede utilizar TCP.

1

UDP se usa cuando la aplicación administra el protocolo. La aplicación puede tener una mejor idea de cómo hacerlo, o puede ser más rápida (bajo las condiciones especiales de la aplicación). TCP es muy bueno, pero tiene muchos gastos generales asociados.

1

Rendimiento. UDP tiene una sobrecarga mucho menor que TCP. Por otro lado, NFS tiene que manejar el transporte confiable por sí mismo (en comparación con TCP) pero como este es un protocolo para LAN donde los problemas de conexión y los paquetes son (o mejor: deberían) no un problema, está optimizado para el rendimiento.

+0

Esto es simplemente engañoso. UDP es el transporte predeterminado, es la razón más importante por la que NFS sobre enlaces rápidos (por ejemplo, Gbit/so Ethernet de 10 GBit) es abismalmente lento si no está configurado correctamente. – Feuermurmel

+0

@Feuermurmel No estoy seguro de por qué esto debería ser engañoso. En el momento en que se tomó esta decisión del protocolo NFS, Gbit/so superior no era un caso común para las infraestructuras de red. Además, las pilas TCP no estaban tan optimizadas y (más o menos) eran tan tolerantes a fallas como lo son hoy. Estoy bastante seguro de que los desarrolladores de NFS aplicaron una parte justa de las pruebas de rendimiento en las pilas/protocolos actuales antes de que decidieran implementar un protocolo artesanal. No funcionó con velocidades de red aún mayores y otras optimizaciones, esa es probablemente la razón por la que cambiaron el valor predeterminado en versiones posteriores. – Kosi2801

2

Supongo que es probablemente por razones heredadas (históricas). Originalmente NFS probablemente se usó en redes de baja latencia donde había muy pocas posibilidades de error, por lo que la sobrecarga de iniciar el intercambio de 3 vías para configurar la conexión TCP (junto con el reconocimiento bidireccional de todos los mensajes) compensaba la simplicidad de usando un protocolo sin conexión como UDP.

Cuando se usa UDP como protocolo de transporte, es posible que corresponda al cliente NFS gestionar las retransmisiones si es necesario.

6

UDP es el valor predeterminado para NFSv2 (que nadie debería usar actualmente) pero NFSv3 usa TCP de forma predeterminada. Los montajes TCP son más confiables y usted sabe que tiene un problema de red mucho más rápido que con UDP.

+3

Es cierto: cuando usa NFS sobre TCP y hay un problema de red, obtiene tiempos de espera prolongados y puntos obsoletos. Con UDP, se recupera por pura fuerza de voladura de paquetes UDP. – synthesizerpatel

0

La conexión UDP sin estado minimiza el tráfico de red, ya que el servidor NFS envía al cliente una cookie después de que el cliente está autorizado para acceder al volumen compartido. Esta cookie es un valor aleatorio almacenado por el lado del servidor y se pasa junto con las solicitudes RPC del cliente.

2

UDP no tiene estado, TCP no lo es, pero TCP tiene muchas propiedades predefinidas que no se ajustaban a NFS, o más bien que NFS quería gobernar los detalles. En particular, cuando TCP realiza transferencias de paquetes, gobierna los tiempos de espera, etc.

Con UDP, pierde los gastos generales que no desea de ninguna manera. Cuando el sistema de archivos NFS, originalmente era el pensamiento, el sistema hace una escritura, y si solo termina a medias, sería malo ... así que NFS (en modo difícil) continuará intentándolo para completar la transacción por siempre, 1 minuto, 5, 10, y hora, un día ... cuando la conexión vuelve, la transacción podría continuar hasta completarse ...

NFS busca el "estado" en lugar de TCP, cuyo diseño establece un nuevo estado en el nueva conexión (o reconexión), esa conexión (y estado) podría morir por cualquier razón (hardware) y una nueva conexión no persistiría ese estado ... Piense en procesar un archivo ... simplemente deje el proceso solo, el La conexión NFS se desconecta un poco, pero cuando vuelva, todo continuará. Actualmente, las aplicaciones son más inteligentes, las rutas son numerosas, las cosas son más modulares y somos mucho más impacientes ... si no va a funcionar. plan ... alguien recibe una llamada telefónica y tiene que iniciar sesión y ponerlo en marcha de todos modos ... en el pasado, cuando se podía dejar, era algo más perfecto ...La forma en que funciona sigue siendo válida hoy en día, pero tiene muchas más opciones ahora, y tiende a tener más personas arreglando todo más rápidamente ahora. Además, la idea de cada sesión de pase final se mueve hacia adelante y hacia atrás y no se compromete entre trabajos, hasta que ambas partes acuerdan que ya terminaron. En el pasado, NFS hizo mucho por usted ...

La analogía es algo similar a cómo funcionaba el RS232 ... la electrónica hacía lo suyo y cargaba sus búferes y se llenaba y tenía que parar (o perder información), podían pasar ese flujo de información (y vaciar sus búferes y continuar) cuando el CTS (Borrar para enviar pin- como el alfiler de metal en el enchufe) era alto o bajo (lo que se supone que debe ser).

1

UDP también se usó porque podría reducir en gran medida el uso de la memoria. En la década de 1980 cuando NFS se desarrolló originalmente, tendrías un sistema UNIX con como 4-8MB de RAM, y (al menos en el entorno académico) el "servidor" puede haber sido simplemente uno de estos sistemas de 4-8MB con algunos discos extra conectados. El uso de RAM en el servidor era una gran preocupación, podrías haber perdido varios MBs en búferes TCP que se han utilizado mejor como memoria caché de disco. También facilitó el manejo de la presión de la memoria, un servidor NFS sobrecargado simplemente podía soltar las solicitudes.

Cuestiones relacionadas