From owner-freebsd-current@FreeBSD.ORG Wed Nov 8 20:59:44 2006 Return-Path: X-Original-To: freebsd-current@freebsd.org Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id D364F16A40F for ; Wed, 8 Nov 2006 20:59:44 +0000 (UTC) (envelope-from rrs@cisco.com) Received: from rtp-iport-1.cisco.com (rtp-iport-1.cisco.com [64.102.122.148]) by mx1.FreeBSD.org (Postfix) with ESMTP id 29C9843D45 for ; Wed, 8 Nov 2006 20:59:44 +0000 (GMT) (envelope-from rrs@cisco.com) Received: from rtp-dkim-2.cisco.com ([64.102.121.159]) by rtp-iport-1.cisco.com with ESMTP; 08 Nov 2006 12:59:43 -0800 X-IronPort-AV: i="4.09,401,1157353200"; d="scan'208"; a="48279417:sNHT57256676" Received: from rtp-core-2.cisco.com (rtp-core-2.cisco.com [64.102.124.13]) by rtp-dkim-2.cisco.com (8.12.11.20060308/8.12.11) with ESMTP id kA8KxhMF006221 for ; Wed, 8 Nov 2006 15:59:43 -0500 Received: from xbh-rtp-211.amer.cisco.com (xbh-rtp-211.cisco.com [64.102.31.102]) by rtp-core-2.cisco.com (8.12.10/8.12.6) with ESMTP id kA8KxhDM007984 for ; Wed, 8 Nov 2006 15:59:43 -0500 (EST) Received: from xfe-rtp-202.amer.cisco.com ([64.102.31.21]) by xbh-rtp-211.amer.cisco.com with Microsoft SMTPSVC(6.0.3790.1830); Wed, 8 Nov 2006 15:59:43 -0500 Received: from [127.0.0.1] ([161.44.11.166]) by xfe-rtp-202.amer.cisco.com with Microsoft SMTPSVC(6.0.3790.1830); Wed, 8 Nov 2006 15:59:42 -0500 Message-ID: <45524517.1060501@cisco.com> Date: Wed, 08 Nov 2006 15:59:03 -0500 From: Randall Stewart User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.12) Gecko/20050920 X-Accept-Language: en-us, en MIME-Version: 1.0 To: freebsd-current@freebsd.org Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-OriginalArrivalTime: 08 Nov 2006 20:59:42.0838 (UTC) FILETIME=[D0435160:01C70378] DKIM-Signature: a=rsa-sha1; q=dns; l=4690; t=1163019583; x=1163883583; c=relaxed/simple; s=rtpdkim2001; h=Content-Type:From:Subject:Content-Transfer-Encoding:MIME-Version; d=cisco.com; i=rrs@cisco.com; z=From:Randall=20Stewart=20 |Subject:SCTP=20is=20in=20the=20Tree=20=3A-) |To:freebsd-current@freebsd.org; X=v=3Dcisco.com=3B=20h=3DASTFTB1z5ZUQ0Fy/ZOHgPxijwxg=3D; b=FYiRLIQsroxad/sDGo/c6hPVGzQq8Zppp0BPxM7Io9c278kfIzGCn8MQXCx+4UVuWv3XbqFc 3tNptqm89oUAtXj0S4WdLA3MYVeOEVxtod7Ho6Y24q88Db0ZryLzG3DR; Authentication-Results: rtp-dkim-2.cisco.com; header.From=rrs@cisco.com; dkim=pass ( sig from cisco.com verified; ); Subject: SCTP is in the Tree :-) X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Nov 2006 20:59:44 -0000 Hi all: I wanted to point out to y'all that FreeBSD current now has SCTP.. you enable it with option SCTP in your config :-) So, what is SCTP? Stream Control Transmission Protocol (SCTP) - is a reliable message oriented transport protocol which provides network fault tolerance It supports multiple streams and multihoming. A very good overview of the protocol is given in RFC 3268. http://www.ietf.org/rfc/rfc3268.txt?number=3268 So, why would you want to use SCTP? Well, the basic SCTP protocol gives you several features unique for transporting messages: - Strong checksum, you won't get corrupt data without knowing it. - Multi-homing directly supported, this means you can have each side of your connection (called an association in SCTP) have multiple IP addresses for redundancy, and SCTP will seamlessly use them. - Support of IPv4 and IPv6, you can even use both of them at the same time in a connection. - Partial ordering and unordered delivery - This feature minimizes the impact of head-of-line blocking. You basically can send multiple transactions in parallel on separate "streams" and message loss in one stream will not block message delivery in another. The implemented extensions of SCTP provide - Support authentication and dynamic address addition/deletion (you can do transport layer mobility with this actually :-D) - Partial reliability. You can basically do sending with a time to live before you give up trying to send it. A while ago Marco Molteni had a paper in EuroBSD on using this with Mpeg and showed how it can be used. So, what features does the dropped in code support? Most of all features described in an IETF document (RFC or ID) are implemented. It is fairly stable but more testing is needed. The list of implemented documents is: * RFC 2960 (base protocol spec) * RFC 3309 (checksum change) * RFC 4460 (implementers guide) * draft-ietf-tsvwg-sctp-2960bis-03.txt (will replace RFC 2960) * RFC3758 (partial reliability) * draft-ietf-tsvwg-sctp-auth-05.txt (SCTP level authentication) * draft-ietf-tsvwg-addip-sctp-15.txt (dynamic address modifications) * draft-stewart-sctpstrrst-03.txt (stream reset) * draft-ietf-tsvwg-sctp-padding-02.txt (needed for improved path MTU discovery) * draft-ladha-sctp-nonce-05.txt (ECN-Nonce and basic ECN) * draft-ietf-tsvwg-sctpsocket-13.txt (the socket API for SCTP) So, who uses SCTP currently? SCTP was developed for transporting telephony network signaling messages over IP (SS7/IP). Therefore it is now deployed in the telephony networks. It makes it easy to connect IP-based systems to the telephony network, for example to process SMS. You can also find SCTP used by H.248 and other signalling protocols. There are experimental patches and deployments around for apache and firefox. I know the sctp.org web server is reachable via SCTP. Some SIP implementations also support SCTP for both proxy's and even end-hosts. The university of vancover is doing work with MPI and SCTP. And of course IPFIX/netflow which is for peg-count data collection of what is going on in a network :-) So how do you try and use it? SCTP uses the socket API. Using the advanced functionality of SCTP requires you to use additonal SCTP specific functions. But for using the basic functionality, only minor modifications to the current way you write network programs is required (indicating SCTP in the socket() call and changing the transport level socket options). However, if the application does not bind to specific addresses, it will use multihoming for free. A very good introduction to SCTP socket programming is provided in the third edition of "Unix Network Programming" by Steven, Fenner and Rudoff. Other places on the web that have information on SCTP: http://www.sctp.org (the project web site and a general collection of info... under the drafts tab is a nice set of tutorials that were presented at a linux symposium) http://www.sctp.org/sctpoverview.html (Lyndon Ong's nice intro/overview of SCTP) Project plans: - Debug/debug debug :-) - Continuted code improvements - Performance improvements if we can :-) - Continue to support a multi-platform stack for MAC-OS X/NetBSD/FreeBSD6.x and other platforms. - Add appropriate features (in the future). R -- Randall Stewart NSSTG - Cisco Systems Inc. 803-345-0369 803-317-4952 (cell