Protocolo de red: protocolo de transmisión de control de flujo sctp

¡Acostúmbrate a escribir juntos! Este es el día 16 de mi participación en el "Desafío de actualización de abril del nuevo plan diario de Nuggets", haga clic para ver los detalles del evento .

Introducción

Para hablar de protocolos de red, debe ser inseparable del modelo de siete capas de OSI (Open System Interconnection). Por lo general, nos centramos en las capas por encima de la capa de red, como la capa de red donde se encuentran IPV4 e IPV6, la capa de transporte donde se encuentra TCP UDP y la capa de aplicación donde se encuentra HTTP FTP.

El protocolo sctp del que se hablará hoy, el nombre completo es Stream Control Transmission Protocol, traducido al chino es Stream Control Transmission Protocol. Fue propuesto por el IETF en RFC 4960.

La capa de transporte ya tiene protocolos TCP y UDP ampliamente utilizados, entonces, ¿por qué inventar un protocolo SCTP?

Obviamente, el protocolo SCTP es una mejora de los protocolos TCP y UDP. Específicamente, el protocolo SCTP no solo proporciona las características orientadas a mensajes del protocolo UDP, sino que también tiene la confiabilidad, la transmisión secuencial y las funciones de control de congestión del protocolo TCP, y también brinda funciones múltiples. -recorridos de referencia y redundantes para aumentar la resiliencia y la fiabilidad.

Este artículo explicará en detalle el principio de implementación y los detalles del protocolo de SCTP.

¿Qué tiene de malo TCP?

¿Qué tiene de malo TCP? Por supuesto, TCP es bueno, sabemos que UDP es un método de transmisión de mensajes poco confiable y TCP es un método de transmisión de mensajes confiable.

UDP y TCP se han utilizado en una amplia gama de escenarios de aplicación. Sin embargo, un producto o protocolo no puede ser perfecto y debe tener algunas deficiencias. Echemos un vistazo a las deficiencias de TCP.

La mayor diferencia entre TCP y UDP es que TCP es confiable, lo que significa que TCP proporciona un método para transmitir datos de manera confiable a través de Internet.

Sin embargo, para garantizar una transmisión de datos fiable, TCP impone algunas restricciones a la transmisión.

Por ejemplo, para garantizar la confiabilidad de la transmisión de datos, TCP debe exigir estrictamente el orden de transmisión de datos. Por ejemplo, un paquete de datos se divide en tres partes denominadas A, B y C, respectivamente. Entonces, para el receptor, el paquete A debe ser aceptado primero, seguido por B y C. Si B se recibe primero, entonces el receptor deberá permitir que el remitente retransmita el paquete.

Con requisitos tan estrictos sobre el pedido de paquetes, pueden ocurrir retrasos de datos innecesarios y bloqueo de mensajes.

因为TCP是面向数据流的,为了标记数据流中的不同记录,TCP中的数据需要额外添加一些标记或者编码来对记录进行区分。

另外,为了提升传输效率,避免发送多个小数据包的情况,TCP还可能会对其进行优化,也就是说等等多个小的数据包将其合并为一个大的数据包。如果不希望这样的优化,那么需要在TCP数据包中设置PSH标志,明确该请求是无延迟的传输请求。

最后TCP还容易收到DOS(denial-of-service)攻击。

sctp的特点

既然TCP还有诸多的缺点,那么新的SCTP协议又有什么特点呢?

SCTP主要有两大特点,第一个特点就是Message-based,也就是说SCTP是面向消息的。SCTP传输的是一系列的消息,一个消息是一组字节。

相比之下TCP传输的是字节流。

SCTP中的一条消息可以拆分成为多个数据块,每个数据块中的所有数据都来自同一个用户。当这些数据需要在IP中进行传输的时候,SCTP会将这些数据包打包成为SCTP packets,每个SCTP packet,都包含一个packet header,如果需要的话还可以包含控制块,最后跟着的是数据块。

怎么理解TCP包和SCTP包的不同呢?

举个例子,当客户端以TCP协议向服务器端发送多条消息的时候,如果消息非常短,为了提升传输效率,TCP可能会将这些不同作用的小的数据放到同一个TCP包中。在服务器端接收的过程中也是一次收取这个TCP包中的所有数据,然后由应用程序本身来进行TCP包中底层数据的拆分。

对于SCTP包来说,一个SCTP包中可以包含多个data chunks,不同的data chunks可以包含不同用户的不同消息,因为SCTP包已经对不同的消息进行了区分,所以对于服务器端的读取来说就相对容易很多。

下面是一个SCTP包的基本结构:

从上图可以看出,前面的蓝色部分的12个字节是SCTP包的包头,其中前面的两个字节是源端口号,接着的两个字节是目标端口号,然后4个字节是验证标记,最后的4个直接是校验位,总共12个字节。

header后面就是data chunks,也就是数据块,每个chunk都包含一个类型位,flags位和长度位,后面跟着的是chunk的具体数据。

SCTP的另外一个特点就是multi-streaming,多流指的是SCTP能够并行传输多个独立的数据流,比如在访问网页的时候可以同时传输网页中的图像和网页的文本。

为什么可以这样操作呢?这也是由SCTP数据包的结构来决定的,我们可以看到SCTP的数据包中可以包含多个data chunks,这些data chunks可以包含不同的数据流过来的数据,所以面向消息的SCTP可以实现并行传输不同数据源数据的功能。

SCTP的另外一个特性就是Multihoming,Multihoming是multiple+homing的合成词,字面上的意思就是多个home。

这是什么意思呢?

我们知道对于TCP协议来说,客户端和服务器端都只有一个,属于一对一进行连接的情况,如果这个连接两端的而任何一个IP或者端口不可以,那么整个TCP的连接就崩溃了。

那么TCP可不可以发展为类似LSB负载均衡的模式呢?如果一个IP不可以,自动重连到备用的IP地址。

SCTP就是TCP协议的升级版本,它在增强可靠性方面做了优化。

具体而言,每个SCTP的节点都会使用心跳的机制定时检查远程节点的主IP地址和备用的冗余IP地址的可达性。在SCTP中一个节点可以绑定多个IP地址。

SCTP节点将会根据收到的远程节点的心跳返回值来确认具体的访问信息。

因为客户端节点和服务器端节点的个数可能是不同的,所以SCTP可以分为对称的multihoming和非对称的multihoming。

下面三个图分别是对称multihoming和两个非对称multihoming的情况:

最后,SCTP的安全性也有所提升。相较于TCP的三次握手相比,SCTP具有四次握手。

TCP的三次握手可能导致SYN攻击。

¿Qué es un ataque SYN? Repasemos el proceso de protocolo de enlace de tres vías TCP. Primero, el cliente envía una solicitud SYN A al servidor. Después de recibir la solicitud SYN, el servidor almacenará en caché la solicitud SYN y luego devolverá SYN B al cliente, ACK A+1 , Después de recibir la respuesta, el cliente verifica el valor de ACK y luego envía ACK B+1 al servidor nuevamente. Después de que el servidor recibe la solicitud B+1, finalmente confirma la identidad del cliente y se establece la conexión.

En el proceso anterior, debido a que el servidor necesita almacenar en caché los mensajes SYN del cliente TCP, si el servidor recibe una gran cantidad de mensajes SYN, provocará un ataque SYN.

Por el contrario, después de que SCTP recibe la solicitud de conexión del cliente, no asigna memoria ni la almacena en caché inmediatamente, sino que devuelve una COOKIE al cliente. Cuando el cliente solicite nuevamente, debe traer la información de la cookie, y el servidor verificará la identidad del cliente a través de la verificación de cookies, y luego se establecerá finalmente la conexión. Evitando así el ataque SYN de TCP.

Resumir

En resumen, SCTP puede garantizar la transmisión ordenada y confiable de innumerables flujos de datos y puede admitir Multihoming, donde cada nodo puede contener varias direcciones IP, lo que permite una conmutación por error transparente entre rutas de red redundantes. Y mejorar el mecanismo de verificación y confirmación para prevenir ataques SYN.

SCTP es un muy buen protocolo. Para los sistemas operativos de uso común, también se proporciona soporte para SCTP en versiones específicas. Por ejemplo, en Linux, el protocolo SCTP es compatible con la versión 2.4 del kernel.

Si está en Windows o MAC, necesita instalar controladores adicionales de terceros. El controlador de Windows se llama controlador de kernel SctpDrv, ​​y el controlador en MAC se llama SCTP Network Kernel Extension para Mac OS X.

Este artículo ha sido incluido en www.flydean.com/21-sctp/

¡La interpretación más popular, los productos secos más profundos, los tutoriales más concisos y muchos trucos que no conoces están esperando que los descubras!

Bienvenido a prestar atención a mi cuenta oficial: "Programe esas cosas", comprenda la tecnología, ¡entiéndalo mejor!

Supongo que te gusta

Origin juejin.im/post/7087150774576709662
Recomendado
Clasificación