Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.28 156 lines 6.4 kB view raw
1DCCP protocol 2============ 3 4 5Contents 6======== 7 8- Introduction 9- Missing features 10- Socket options 11- Notes 12 13Introduction 14============ 15 16Datagram Congestion Control Protocol (DCCP) is an unreliable, connection 17oriented protocol designed to solve issues present in UDP and TCP, particularly 18for real-time and multimedia (streaming) traffic. 19It divides into a base protocol (RFC 4340) and plugable congestion control 20modules called CCIDs. Like plugable TCP congestion control, at least one CCID 21needs to be enabled in order for the protocol to function properly. In the Linux 22implementation, this is the TCP-like CCID2 (RFC 4341). Additional CCIDs, such as 23the TCP-friendly CCID3 (RFC 4342), are optional. 24For a brief introduction to CCIDs and suggestions for choosing a CCID to match 25given applications, see section 10 of RFC 4340. 26 27It has a base protocol and pluggable congestion control IDs (CCIDs). 28 29DCCP is a Proposed Standard (RFC 2026), and the homepage for DCCP as a protocol 30is at http://www.ietf.org/html.charters/dccp-charter.html 31 32Missing features 33================ 34 35The Linux DCCP implementation does not currently support all the features that are 36specified in RFCs 4340...42. 37 38The known bugs are at: 39 http://linux-net.osdl.org/index.php/TODO#DCCP 40 41For more up-to-date versions of the DCCP implementation, please consider using 42the experimental DCCP test tree; instructions for checking this out are on: 43http://linux-net.osdl.org/index.php/DCCP_Testing#Experimental_DCCP_source_tree 44 45 46Socket options 47============== 48 49DCCP_SOCKOPT_SERVICE sets the service. The specification mandates use of 50service codes (RFC 4340, sec. 8.1.2); if this socket option is not set, 51the socket will fall back to 0 (which means that no meaningful service code 52is present). On active sockets this is set before connect(); specifying more 53than one code has no effect (all subsequent service codes are ignored). The 54case is different for passive sockets, where multiple service codes (up to 32) 55can be set before calling bind(). 56 57DCCP_SOCKOPT_GET_CUR_MPS is read-only and retrieves the current maximum packet 58size (application payload size) in bytes, see RFC 4340, section 14. 59 60DCCP_SOCKOPT_SERVER_TIMEWAIT enables the server (listening socket) to hold 61timewait state when closing the connection (RFC 4340, 8.3). The usual case is 62that the closing server sends a CloseReq, whereupon the client holds timewait 63state. When this boolean socket option is on, the server sends a Close instead 64and will enter TIMEWAIT. This option must be set after accept() returns. 65 66DCCP_SOCKOPT_SEND_CSCOV and DCCP_SOCKOPT_RECV_CSCOV are used for setting the 67partial checksum coverage (RFC 4340, sec. 9.2). The default is that checksums 68always cover the entire packet and that only fully covered application data is 69accepted by the receiver. Hence, when using this feature on the sender, it must 70be enabled at the receiver, too with suitable choice of CsCov. 71 72DCCP_SOCKOPT_SEND_CSCOV sets the sender checksum coverage. Values in the 73 range 0..15 are acceptable. The default setting is 0 (full coverage), 74 values between 1..15 indicate partial coverage. 75DCCP_SOCKOPT_RECV_CSCOV is for the receiver and has a different meaning: it 76 sets a threshold, where again values 0..15 are acceptable. The default 77 of 0 means that all packets with a partial coverage will be discarded. 78 Values in the range 1..15 indicate that packets with minimally such a 79 coverage value are also acceptable. The higher the number, the more 80 restrictive this setting (see [RFC 4340, sec. 9.2.1]). Partial coverage 81 settings are inherited to the child socket after accept(). 82 83The following two options apply to CCID 3 exclusively and are getsockopt()-only. 84In either case, a TFRC info struct (defined in <linux/tfrc.h>) is returned. 85DCCP_SOCKOPT_CCID_RX_INFO 86 Returns a `struct tfrc_rx_info' in optval; the buffer for optval and 87 optlen must be set to at least sizeof(struct tfrc_rx_info). 88DCCP_SOCKOPT_CCID_TX_INFO 89 Returns a `struct tfrc_tx_info' in optval; the buffer for optval and 90 optlen must be set to at least sizeof(struct tfrc_tx_info). 91 92On unidirectional connections it is useful to close the unused half-connection 93via shutdown (SHUT_WR or SHUT_RD): this will reduce per-packet processing costs. 94 95Sysctl variables 96================ 97Several DCCP default parameters can be managed by the following sysctls 98(sysctl net.dccp.default or /proc/sys/net/dccp/default): 99 100request_retries 101 The number of active connection initiation retries (the number of 102 Requests minus one) before timing out. In addition, it also governs 103 the behaviour of the other, passive side: this variable also sets 104 the number of times DCCP repeats sending a Response when the initial 105 handshake does not progress from RESPOND to OPEN (i.e. when no Ack 106 is received after the initial Request). This value should be greater 107 than 0, suggested is less than 10. Analogue of tcp_syn_retries. 108 109retries1 110 How often a DCCP Response is retransmitted until the listening DCCP 111 side considers its connecting peer dead. Analogue of tcp_retries1. 112 113retries2 114 The number of times a general DCCP packet is retransmitted. This has 115 importance for retransmitted acknowledgments and feature negotiation, 116 data packets are never retransmitted. Analogue of tcp_retries2. 117 118send_ndp = 1 119 Whether or not to send NDP count options (sec. 7.7.2). 120 121send_ackvec = 1 122 Whether or not to send Ack Vector options (sec. 11.5). 123 124ack_ratio = 2 125 The default Ack Ratio (sec. 11.3) to use. 126 127tx_ccid = 2 128 Default CCID for the sender-receiver half-connection. 129 130rx_ccid = 2 131 Default CCID for the receiver-sender half-connection. 132 133seq_window = 100 134 The initial sequence window (sec. 7.5.2). 135 136tx_qlen = 5 137 The size of the transmit buffer in packets. A value of 0 corresponds 138 to an unbounded transmit buffer. 139 140sync_ratelimit = 125 ms 141 The timeout between subsequent DCCP-Sync packets sent in response to 142 sequence-invalid packets on the same socket (RFC 4340, 7.5.4). The unit 143 of this parameter is milliseconds; a value of 0 disables rate-limiting. 144 145IOCTLS 146====== 147FIONREAD 148 Works as in udp(7): returns in the `int' argument pointer the size of 149 the next pending datagram in bytes, or 0 when no datagram is pending. 150 151Notes 152===== 153 154DCCP does not travel through NAT successfully at present on many boxes. This is 155because the checksum covers the pseudo-header as per TCP and UDP. Linux NAT 156support for DCCP has been added.