[PROPOSAL] Add SCTP network protocol to postgresql backend and frontend

From: Eduardo Morras <emorrasg(at)yahoo(dot)es>
To: pgsql-hackers(at)postgresql(dot)org
Subject: [PROPOSAL] Add SCTP network protocol to postgresql backend and frontend
Date: 2016-03-23 12:55:33
Message-ID: 20160323135533.dea858405f9ca0b783b43a82@yahoo.es
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers


Hello,

I want to propose to add sctp network protocol to backend and frontend code.

Light Sctp description:

Sctp is a layer 3 network protocol over ip networks, similar to tcp, udp and others. It's message oriented protocol, unlike tcp and udp that are data stream oriented, and it ensures that a message reach its destination, as tcp does with packets. Each sctp packet can have multiple messages or parts of messages inside. It provides multihoming, dinamically bind and unbind network devices (eth0, eth1, wifi...), mix ipv4 and ipv6, congestion control algorithms similar to tcp, message reliability and administration (message time to live, retries on failure...). A connection between server and client is called association.

Sctp support exists in Linux since 2.4+, FreeBSD 7+, Solaris10+ and Cisco, Juniper, F5 and others routers. Windows and MacOSX needs (AFAIK) third-party drivers.

Benefits:

Dynamic multihoming, modifiable at run time, don't need aggregate links at OS level or shutdown servers/clients for a hardware or topology network change.
Message oriented connection.
Message reliability.
Inmune to SYN floods that affect tcp.
Assimetric multihoming, a client with 4 links(3x 1GbEth + wifi) can connect to a server with 1 link (10GbEth).
Metadata connection messages.

Problems:

Windows and MacOSX needs a third-party drivers.
Can't use TLS, encryption of tls record n depends on previous record. In sctp order and reliability of packets is not assured and packet content may change. As sctp is message oriented it needs DTLS-SCTP (not in this proposal) where encryption of packet n is independent from any other. See RFC 6083
Some network cards and drivers don't support hardware acceleration, cpu does crc check/calculation.
Firewalls needs sctp rules.

Implementation:

The tcp code resides in src/backend/libpq/pqcomm.c (unix/windows sockets and SSL socket portion) and src/backend/libpq/ip.c (ipv6). Similar in frontend.
Need new GUCs for sctp configuration, and a way to modify them at runtime.

I don't know how you want it, if you accept this proposal:

a) replicate pqcomm.c replacing tcp code with sctp in a new file pqcommsctp.c (full sctp, not compatibility tcp hack),
b) inside pqcomm.c and ip.c,
c) other

My main develop environment is FreeBSD10 and my contractor uses FreeBSD10 too but I'll check it works on some Linux distros.

Useful links:

http://www.bsdcan.org/2008/schedule/attachments/44_bsdcan_sctp.pdf
https://en.wikipedia.org/wiki/Stream_Control_Transmission_Protocol
https://tools.ietf.org/html/rfc6083

Thanks

--- ---
Eduardo Morras <emorrasg(at)yahoo(dot)es>

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Andreas Karlsson 2016-03-23 13:03:31 Re: [PROPOSAL] Add SCTP network protocol to postgresql backend and frontend
Previous Message Michael Paquier 2016-03-23 12:51:37 Re: Postgres_fdw join pushdown - getting server crash in left outer join of three table