[要約] RFC 4340は、ストリーミングやゲームのようなリアルタイム性の高い通信に向けたトランスポート層プロトコル「DCCP(Datagram Congestion Control Protocol)」の基本仕様を定義しています。UDPの軽量性と、TCPのような高度な輻輳制御機能を併せ持ち、アプリケーションが用途に応じて最適な輻輳制御アルゴリズムを選択できるように設計されています。
Network Working Group E. Kohler
Request for Comments: 4340 UCLA
Category: Standards Track M. Handley
UCL
S. Floyd
ICIR
March 2006
Datagram Congestion Control Protocol (DCCP)
Datagram Congestion Control Protocol (DCCP)
Status of This Memo
このメモの位置付け
This document specifies an Internet standards track protocol for the Internet community, and requests discussion and suggestions for improvements. Please refer to the current edition of the "Internet Official Protocol Standards" (STD 1) for the standardization state and status of this protocol. Distribution of this memo is unlimited.
この文書は、インターネットコミュニティのためのインターネット標準化過程のプロトコルを規定し、改善のための議論と提案を求めるものです。このプロトコルの標準化の状態と位置付けについては、"Internet Official Protocol Standards" (STD 1) の最新版を参照してください。このメモの配布は無制限です。
Copyright Notice
著作権表示
Copyright (C) The Internet Society (2006).
Copyright (C) The Internet Society (2006).
Abstract
概要
The Datagram Congestion Control Protocol (DCCP) is a transport protocol that provides bidirectional unicast connections of congestion-controlled unreliable datagrams. DCCP is suitable for applications that transfer fairly large amounts of data and that can benefit from control over the tradeoff between timeliness and reliability.
Datagram Congestion Control Protocol (DCCP) は、輻輳制御された信頼性のないデータグラムの双方向ユニキャスト接続を提供するトランスポートプロトコルです。DCCPは、かなり大量のデータを転送し、適時性と信頼性のトレードオフを制御できることから恩恵を受けるアプリケーションに適しています。
Table of Contents
目次
1. Introduction ....................................................5 2. Design Rationale ................................................6 3. Conventions and Terminology .....................................7 3.1. Numbers and Fields .........................................7 3.2. Parts of a Connection ......................................8 3.3. Features ...................................................9 3.4. Round-Trip Times ...........................................9 3.5. Security Limitation ........................................9 3.6. Robustness Principle ......................................10 4. Overview .......................................................10 4.1. Packet Types ..............................................10 4.2. Packet Sequencing .........................................11 4.3. States ....................................................12 4.4. Congestion Control Mechanisms .............................14 4.5. Feature Negotiation Options ...............................15 4.6. Differences from TCP ......................................16 4.7. Example Connection ........................................17 5. Packet Formats .................................................18 5.1. Generic Header ............................................19 5.2. DCCP-Request Packets ......................................22 5.3. DCCP-Response Packets .....................................23 5.4. DCCP-Data, DCCP-Ack, and DCCP-DataAck Packets .............23 5.5. DCCP-CloseReq and DCCP-Close Packets ......................25 5.6. DCCP-Reset Packets ........................................25 5.7. DCCP-Sync and DCCP-SyncAck Packets ........................28 5.8. Options ...................................................29 5.8.1. Padding Option .....................................31 5.8.2. Mandatory Option ...................................31 6. Feature Negotiation ............................................32 6.1. Change Options ............................................32 6.2. Confirm Options ...........................................33 6.3. Reconciliation Rules ......................................33 6.3.1. Server-Priority ....................................34 6.3.2. Non-Negotiable .....................................34 6.4. Feature Numbers ...........................................35 6.5. Feature Negotiation Examples ..............................36 6.6. Option Exchange ...........................................37 6.6.1. Normal Exchange ....................................38 6.6.2. Processing Received Options ........................38 6.6.3. Loss and Retransmission ............................40 6.6.4. Reordering .........................................41 6.6.5. Preference Changes .................................42 6.6.6. Simultaneous Negotiation ...........................42 6.6.7. Unknown Features ...................................43 6.6.8. Invalid Options ....................................43 6.6.9. Mandatory Feature Negotiation ......................44 7. Sequence Numbers ...............................................44 7.1. Variables .................................................45 7.2. Initial Sequence Numbers ..................................45 7.3. Quiet Time ................................................46 7.4. Acknowledgement Numbers ...................................47 7.5. Validity and Synchronization ..............................47 7.5.1. Sequence and Acknowledgement Number Windows ........48 7.5.2. Sequence Window Feature ............................49 7.5.3. Sequence-Validity Rules ............................49 7.5.4. Handling Sequence-Invalid Packets ..................51 7.5.5. Sequence Number Attacks ............................52 7.5.6. Sequence Number Handling Examples ..................54 7.6. Short Sequence Numbers ....................................55 7.6.1. Allow Short Sequence Numbers Feature ...............55 7.6.2. When to Avoid Short Sequence Numbers ...............56 7.7. NDP Count and Detecting Application Loss ..................56
7.7.1. NDP Count Usage Notes ..............................57
7.7.2. Send NDP Count Feature .............................57
8. Event Processing ...............................................58
8.1. Connection Establishment ..................................58
8.1.1. Client Request .....................................58
8.1.2. Service Codes ......................................59
8.1.3. Server Response ....................................61
8.1.4. Init Cookie Option .................................62
8.1.5. Handshake Completion ...............................63
8.2. Data Transfer .............................................63
8.3. Termination ...............................................64
8.3.1. Abnormal Termination ...............................66
8.4. DCCP State Diagram ........................................66
8.5. Pseudocode ................................................67
9. Checksums ......................................................72
9.1. Header Checksum Field .....................................73
9.2. Header Checksum Coverage Field ............................73
9.2.1. Minimum Checksum Coverage Feature ..................74
9.3. Data Checksum Option ......................................75
9.3.1. Check Data Checksum Feature ........................76
9.3.2. Checksum Usage Notes ...............................76
10. Congestion Control ............................................76
10.1. TCP-like Congestion Control ..............................77
10.2. TFRC Congestion Control ..................................78
10.3. CCID-Specific Options, Features, and Reset Codes .........78
10.4. CCID Profile Requirements ................................80
10.5. Congestion State .........................................81
11. Acknowledgements ..............................................81
11.1. Acks of Acks and Unidirectional Connections ..............82
11.2. Ack Piggybacking .........................................83
11.3. Ack Ratio Feature ........................................84
11.4. Ack Vector Options .......................................85
11.4.1. Ack Vector Consistency ............................88
11.4.2. Ack Vector Coverage ...............................89
11.5. Send Ack Vector Feature ..................................90
11.6. Slow Receiver Option .....................................90
11.7. Data Dropped Option ......................................91
11.7.1. Data Dropped and Normal Congestion Response .......94
11.7.2. Particular Drop Codes .............................95
12. Explicit Congestion Notification ..............................96
12.1. ECN Incapable Feature ....................................96
12.2. ECN Nonces ...............................................97
12.3. Aggression Penalties .....................................98
13. Timing Options ................................................99
13.1. Timestamp Option .........................................99
13.2. Elapsed Time Option ......................................99
13.3. Timestamp Echo Option ...................................100
14. Maximum Packet Size ..........................................101
14.1. Measuring PMTU ..........................................102
14.2. Sender Behavior .........................................103
15. Forward Compatibility ........................................104
16. Middlebox Considerations .....................................105
17. Relations to Other Specifications ............................106
17.1. RTP .....................................................106
17.2. Congestion Manager and Multiplexing .....................108
18. Security Considerations ......................................108
18.1. Security Considerations for Partial Checksums ...........109
19. IANA Considerations ..........................................110
19.1. Packet Types Registry ...................................110
19.2. Reset Codes Registry ....................................110
19.3. Option Types Registry ...................................110
19.4. Feature Numbers Registry ................................111
19.5. Congestion Control Identifiers Registry .................111
19.6. Ack Vector States Registry ..............................111
19.7. Drop Codes Registry .....................................112
19.8. Service Codes Registry ..................................112
19.9. Port Numbers Registry ...................................112
20. Thanks .......................................................114
A. Appendix: Ack Vector Implementation Notes ....................116
A.1. Packet Arrival ..........................................118
A.1.1. New Packets ......................................118
A.1.2. Old Packets ......................................119
A.2. Sending Acknowledgements ................................120
A.3. Clearing State ..........................................120
A.4. Processing Acknowledgements .............................122
B. Appendix: Partial Checksumming Design Motivation .............123
Normative References .............................................124
Informative References ...........................................125
List of Tables
表の一覧
Table 1: DCCP Packet Types .......................................21
Table 2: DCCP Reset Codes ........................................28
Table 3: DCCP Options ............................................30
Table 4: DCCP Feature Numbers.....................................35
Table 5: DCCP Congestion Control Identifiers .....................77
Table 6: DCCP Ack Vector States ..................................86
Table 7: DCCP Drop Codes .........................................92
The Datagram Congestion Control Protocol (DCCP) is a transport protocol that implements bidirectional, unicast connections of congestion-controlled, unreliable datagrams. Specifically, DCCP provides the following:
Datagram Congestion Control Protocol (DCCP) は、輻輳制御された信頼性のないデータグラムの双方向ユニキャスト接続を実装するトランスポートプロトコルです。具体的には、DCCPは次のものを提供します。
o Unreliable flows of datagrams.
o 信頼性のないデータグラムのフロー。
o Reliable handshakes for connection setup and teardown.
o 接続の確立と切断のための信頼性のあるハンドシェイク。
o Reliable negotiation of options, including negotiation of a suitable congestion control mechanism.
o 適切な輻輳制御メカニズムのネゴシエーションを含む、オプションの信頼性のあるネゴシエーション。
o Mechanisms allowing servers to avoid holding state for unacknowledged connection attempts and already-finished connections.
o 確認応答されていない接続試行や、すでに終了した接続について、サーバーが状態を保持しなくて済むようにするメカニズム。
o Acknowledgement mechanisms communicating packet loss and ECN information. Acks are transmitted as reliably as the relevant congestion control mechanism requires, possibly completely reliably.
o パケット損失とECN情報を伝える確認応答メカニズム。Ackは、該当する輻輳制御メカニズムが要求する程度の信頼性で送信され、完全に信頼性をもって送信される場合もあります。
o Optional mechanisms that tell the sending application, with high reliability, which data packets reached the receiver, and whether those packets were ECN marked, corrupted, or dropped in the receive buffer.
o どのデータパケットが受信者に到達したか、またそれらのパケットがECNマークされたか、破損したか、受信バッファで破棄されたかを、高い信頼性で送信側アプリケーションに伝える任意のメカニズム。
o Path Maximum Transmission Unit (PMTU) discovery [RFC1191].
o Path Maximum Transmission Unit (PMTU) 探索 [RFC1191]。
DCCP is intended for applications such as streaming media that can benefit from control over the tradeoffs between delay and reliable in-order delivery. TCP is not well suited for these applications, since reliable in-order delivery and congestion control can cause arbitrarily long delays. UDP avoids long delays, but UDP applications that implement congestion control must do so on their own. DCCP provides built-in congestion control, including ECN support, for unreliable datagram flows, avoiding the arbitrary delays associated with TCP. It also implements reliable connection setup, teardown, and feature negotiation.
DCCPは、遅延と信頼性のある順序どおりの配送とのトレードオフを制御できることから恩恵を受ける、ストリーミングメディアなどのアプリケーションを対象としています。信頼性のある順序どおりの配送と輻輳制御は任意に長い遅延を引き起こしうるため、TCPはこれらのアプリケーションにはあまり適していません。UDPは長い遅延を避けられますが、輻輳制御を実装するUDPアプリケーションは自前でそれを行わなければなりません。DCCPは、信頼性のないデータグラムフローに対して、ECNのサポートを含む組み込みの輻輳制御を提供し、TCPに伴う任意の遅延を回避します。また、信頼性のある接続の確立、切断、および機能ネゴシエーションも実装しています。
One DCCP design goal was to give most streaming UDP applications little reason not to switch to DCCP, once it is deployed. To facilitate this, DCCP was designed to have as little overhead as possible, both in terms of the packet header size and in terms of the state and CPU overhead required at end hosts. Only the minimal necessary functionality was included in DCCP, leaving other functionality, such as forward error correction (FEC), semi-reliability, and multiple streams, to be layered on top of DCCP as desired.
DCCPの設計目標の1つは、DCCPが配備された後には、ほとんどのストリーミングUDPアプリケーションにとってDCCPに切り替えない理由がほとんどないようにすることでした。これを促進するため、DCCPは、パケットヘッダーのサイズと、エンドホストで必要となる状態およびCPUのオーバーヘッドの両面で、オーバーヘッドができるだけ小さくなるように設計されました。DCCPには必要最小限の機能だけが含められ、前方誤り訂正 (FEC)、半信頼性、複数ストリームなどのその他の機能は、必要に応じてDCCPの上に重ねるものとしました。
Different forms of conformant congestion control are appropriate for different applications. For example, on-line games might want to make quick use of any available bandwidth, while streaming media might trade off this responsiveness for a steadier, less bursty rate. (Sudden rate changes can cause unacceptable UI glitches such as audible pauses or clicks in the playout stream.) DCCP thus allows applications to choose from a set of congestion control mechanisms. One alternative, TCP-like Congestion Control, halves the congestion window in response to a packet drop or mark, as in TCP. Applications using this congestion control mechanism will respond quickly to changes in available bandwidth, but must tolerate the abrupt changes in congestion window typical of TCP. A second alternative, TCP-Friendly Rate Control (TFRC) [RFC3448], a form of equation-based congestion control, minimizes abrupt changes in the sending rate while maintaining longer-term fairness with TCP. Other alternatives can be added as future congestion control mechanisms are standardized.
アプリケーションが異なれば、適切な準拠した輻輳制御の形式も異なります。たとえば、オンラインゲームは利用可能な帯域幅を素早く使いたいかもしれませんが、ストリーミングメディアはこの応答性と引き換えに、より安定したバーストの少ないレートを選ぶかもしれません。(レートの急激な変化は、再生ストリーム中に聞こえる途切れやクリック音といった、許容できないUI上の不具合を引き起こす可能性があります。) そのためDCCPでは、アプリケーションが一連の輻輳制御メカニズムの中から選択できるようにしています。選択肢の1つであるTCP-like Congestion Controlは、TCPと同様に、パケットの破棄やマークに応じて輻輳ウィンドウを半分にします。この輻輳制御メカニズムを使用するアプリケーションは利用可能な帯域幅の変化に素早く応答しますが、TCPに典型的な輻輳ウィンドウの急激な変化を許容しなければなりません。2つ目の選択肢であるTCP-Friendly Rate Control (TFRC) [RFC3448] は、式に基づく輻輳制御の一形式であり、TCPとの長期的な公平性を維持しつつ、送信レートの急激な変化を最小限に抑えます。将来の輻輳制御メカニズムが標準化されれば、他の選択肢も追加できます。
DCCP also lets unreliable traffic safely use ECN. A UDP kernel Application Programming Interface (API) might not allow applications to set UDP packets as ECN capable, since the API could not guarantee that the application would properly detect or respond to congestion. DCCP kernel APIs will have no such issues, since DCCP implements congestion control itself.
DCCPはまた、信頼性のないトラフィックがECNを安全に使用できるようにします。UDPのカーネルApplication Programming Interface (API) では、アプリケーションが輻輳を適切に検出したり応答したりすることをAPIが保証できないため、アプリケーションがUDPパケットをECN対応として設定することを許可していない場合があります。DCCPは自身で輻輳制御を実装しているため、DCCPのカーネルAPIにはそのような問題はありません。
We chose not to require the use of the Congestion Manager [RFC3124], which allows multiple concurrent streams between the same sender and receiver to share congestion control. The current Congestion Manager can only be used by applications that have their own end-to-end feedback about packet losses, but this is not the case for many of the applications currently using UDP. In addition, the current Congestion Manager does not easily support multiple congestion control mechanisms or mechanisms where the state about past packet drops or marks is maintained at the receiver rather than the sender. DCCP should be able to make use of CM where desired by the application, but we do not see any benefit in making the deployment of DCCP contingent on the deployment of CM itself.
我々は、同じ送信者と受信者の間の複数の同時ストリームが輻輳制御を共有できるようにするCongestion Manager [RFC3124] の使用を必須としないことにしました。現在のCongestion Managerは、パケット損失についてエンドツーエンドの独自のフィードバックを持つアプリケーションでしか使用できませんが、現在UDPを使用している多くのアプリケーションではそうではありません。さらに、現在のCongestion Managerは、複数の輻輳制御メカニズムや、過去のパケットの破棄やマークについての状態を送信者ではなく受信者が保持するメカニズムを容易にはサポートしません。DCCPは、アプリケーションが望む場合にはCMを利用できるのがよいでしょうが、DCCPの配備をCM自体の配備に依存させることに何の利点も見いだせません。
We intend for DCCP's protocol mechanisms, which are described in this document, to suit any application desiring unicast congestion-controlled streams of unreliable datagrams. However, the congestion control mechanisms currently approved for use with DCCP, which are described in separate Congestion Control ID Profiles [RFC4341, RFC4342], may cause problems for some applications, including high-bandwidth interactive video. These applications should be able to use DCCP once suitable Congestion Control ID Profiles are standardized.
我々は、この文書で説明するDCCPのプロトコルメカニズムが、信頼性のないデータグラムのユニキャストで輻輳制御されたストリームを望むあらゆるアプリケーションに適するものとなることを意図しています。ただし、別個のCongestion Control ID Profile [RFC4341, RFC4342] で説明されている、現在DCCPでの使用が承認されている輻輳制御メカニズムは、高帯域幅の対話型ビデオを含む一部のアプリケーションで問題を引き起こす可能性があります。これらのアプリケーションは、適切なCongestion Control ID Profileが標準化されれば、DCCPを使用できるようになるはずです。
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].
このドキュメントのキーワード "MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"MAY"、および "OPTIONAL" は、[RFC2119] で説明されているように解釈されるものとします。
All multi-byte numerical quantities in DCCP, such as port numbers, Sequence Numbers, and arguments to options, are transmitted in network byte order (most significant byte first).
ポート番号、シーケンス番号、オプションの引数など、DCCPにおけるすべての複数バイトの数値は、ネットワークバイトオーダー (最上位バイトが先) で送信されます。
We occasionally refer to the "left" and "right" sides of a bit field. "Left" means towards the most significant bit, and "right" means towards the least significant bit.
我々は時折、ビットフィールドの「左」側と「右」側に言及します。「左」は最上位ビットの方向を、「右」は最下位ビットの方向を意味します。
Random numbers in DCCP are used for their security properties and SHOULD be chosen according to the guidelines in [RFC4086].
DCCPにおける乱数はそのセキュリティ上の性質のために使用され、[RFC4086] のガイドラインに従って選ばれるべきです (SHOULD)。
All operations on DCCP sequence numbers use circular arithmetic modulo 2^48, as do comparisons such as "greater" and "greatest". This form of arithmetic preserves the relationships between sequence numbers as they roll over from 2^48 - 1 to 0. Implementation strategies for DCCP sequence numbers will resemble those for other circular arithmetic spaces, including TCP's sequence numbers [RFC793] and DNS's serial numbers [RFC1982]. It may make sense to store DCCP sequence numbers in the most significant 48 bits of 64-bit integers and set the least significant 16 bits to zero, since this supports a common technique that implements circular comparison A < B by testing whether (A - B) < 0 using conventional two's-complement arithmetic.
DCCPのシーケンス番号に対するすべての演算は、「より大きい」や「最大」といった比較と同様に、2^48を法とする循環算術を使用します。この形式の算術により、シーケンス番号が2^48 - 1から0へ一巡しても、シーケンス番号間の関係が保たれます。DCCPのシーケンス番号の実装方式は、TCPのシーケンス番号 [RFC793] やDNSのシリアル番号 [RFC1982] など、他の循環算術空間のものと似たものになるでしょう。DCCPのシーケンス番号を64ビット整数の上位48ビットに格納し、下位16ビットをゼロに設定するのは理にかなっているかもしれません。これにより、通常の2の補数算術を用いて (A - B) < 0 かどうかを調べることで循環比較 A < B を実装するという一般的な手法が使えるからです。
Reserved bitfields in DCCP packet headers MUST be set to zero by senders and MUST be ignored by receivers, unless otherwise specified. This allows for future protocol extensions. In particular, DCCP processors MUST NOT reset a DCCP connection simply because a Reserved field has non-zero value [RFC3360].
特に規定されていない限り、DCCPパケットヘッダーの予約ビットフィールドは、送信者によってゼロに設定されなければならず (MUST)、受信者によって無視されなければなりません (MUST)。これにより、将来のプロトコル拡張が可能になります。特に、DCCPプロセッサは、Reservedフィールドがゼロ以外の値を持つという理由だけでDCCP接続をリセットしてはなりません (MUST NOT) [RFC3360]。
Each DCCP connection runs between two hosts, which we often name DCCP A and DCCP B. Each connection is actively initiated by one of the hosts, which we call the client; the other, initially passive host is called the server. The term "DCCP endpoint" is used to refer to either of the two hosts explicitly named by the connection (the client and the server). The term "DCCP processor" refers more generally to any host that might need to process a DCCP header; this includes the endpoints and any middleboxes on the path, such as firewalls and network address translators.
各DCCP接続は2つのホストの間で動作し、我々はそれらをしばしばDCCP AおよびDCCP Bと呼びます。各接続は一方のホストによって能動的に開始され、そのホストをクライアントと呼びます。もう一方の、最初は受動的なホストをサーバーと呼びます。「DCCPエンドポイント」という用語は、接続によって明示的に指定される2つのホスト (クライアントとサーバー) のいずれかを指すために使用されます。「DCCPプロセッサ」という用語は、より一般的に、DCCPヘッダーを処理する必要がありうるあらゆるホストを指します。これには、エンドポイントと、ファイアウォールやネットワークアドレス変換装置など経路上のミドルボックスが含まれます。
DCCP connections are bidirectional: data may pass from either endpoint to the other. This means that data and acknowledgements may flow in both directions simultaneously. Logically, however, a DCCP connection consists of two separate unidirectional connections, called half-connections. Each half-connection consists of the application data sent by one endpoint and the corresponding acknowledgements sent by the other endpoint. We can illustrate this as follows:
DCCP接続は双方向です。データはどちらのエンドポイントからもう一方へも流れることができます。これは、データと確認応答が同時に両方向に流れうることを意味します。しかし論理的には、DCCP接続は半接続 (half-connection) と呼ばれる2つの別個の単方向接続で構成されます。各半接続は、一方のエンドポイントが送信するアプリケーションデータと、もう一方のエンドポイントが送信する対応する確認応答で構成されます。これを次のように図示できます。
+--------+ A-to-B half-connection: +--------+
| | --> application data --> | |
| | <-- acknowledgements <-- | |
| DCCP A | | DCCP B |
| | B-to-A half-connection: | |
| | <-- application data <-- | |
+--------+ --> acknowledgements --> +--------+
Although they are logically distinct, in practice the half-connections overlap; a DCCP-DataAck packet, for example, contains application data relevant to one half-connection and acknowledgement information relevant to the other.
論理的には別個ですが、実際には半接続は重なり合っています。たとえばDCCP-DataAckパケットは、一方の半接続に関係するアプリケーションデータと、もう一方の半接続に関係する確認応答情報を含みます。
In the context of a single half-connection, the terms "HC-Sender" and "HC-Receiver" denote the endpoints sending application data and acknowledgements, respectively. For example, DCCP A is the HC-Sender and DCCP B is the HC-Receiver in the A-to-B half-connection.
単一の半接続の文脈では、"HC-Sender" と "HC-Receiver" という用語は、それぞれアプリケーションデータを送信するエンドポイントと確認応答を送信するエンドポイントを表します。たとえば、AからBへの半接続では、DCCP AがHC-Senderで、DCCP BがHC-Receiverです。
A DCCP feature is a connection attribute on whose value the two endpoints agree. Many properties of a DCCP connection are controlled by features, including the congestion control mechanisms in use on the two half-connections. The endpoints achieve agreement through the exchange of feature negotiation options in DCCP headers.
DCCPの機能 (feature) とは、2つのエンドポイントが値について合意する接続属性です。2つの半接続で使用される輻輳制御メカニズムをはじめ、DCCP接続の多くの性質が機能によって制御されます。エンドポイントは、DCCPヘッダ内の機能ネゴシエーションオプションを交換することで合意に達します。
DCCP features are identified by a feature number and an endpoint. The notation "F/X" represents the feature with feature number F located at DCCP endpoint X. Each valid feature number thus corresponds to two features, which are negotiated separately and need not have the same value. The two endpoints know, and agree on, the value of every valid feature. DCCP A is the "feature location" for all features F/A, and the "feature remote" for all features F/B.
DCCPの機能は、機能番号とエンドポイントによって識別されます。表記「F/X」は、DCCPエンドポイントXに位置する機能番号Fの機能を表します。したがって、有効な機能番号はそれぞれ2つの機能に対応し、それらは個別にネゴシエーションされ、同じ値である必要はありません。2つのエンドポイントは、すべての有効な機能の値を把握し、合意しています。DCCP Aは、すべての機能F/Aにとっての「feature location」であり、すべての機能F/Bにとっての「feature remote」です。
DCCP round-trip time measurements are performed by congestion control mechanisms; different mechanisms may measure round-trip time in different ways, or not measure it at all. However, the main DCCP protocol does use round-trip times occasionally, such as in the initial values for certain timers. Each DCCP implementation thus defines a default round-trip time for use when no estimate is available. This parameter should default to not less than 0.2 seconds, a reasonably conservative round-trip time for Internet TCP connections. Protocol behavior specified in terms of "round-trip time" values actually refers to "a current round-trip time estimate taken by some CCID, or, if no estimate is available, the default round-trip time parameter".
DCCPのラウンドトリップ時間の測定は輻輳制御メカニズムによって行われます。メカニズムによって、ラウンドトリップ時間の測定方法が異なる場合も、まったく測定しない場合もあります。しかし、DCCPの主プロトコルも、特定のタイマーの初期値など、ラウンドトリップ時間を時折使用します。そのため、各DCCP実装は、推定値が得られない場合に使用するデフォルトのラウンドトリップ時間を定義します。このパラメータは、インターネット上のTCP接続にとって十分に保守的なラウンドトリップ時間である0.2秒以上をデフォルトとするのがよいでしょう。「ラウンドトリップ時間」の値によって規定されるプロトコルの動作は、実際には「何らかのCCIDによって得られた現在のラウンドトリップ時間の推定値、推定値がない場合はデフォルトのラウンドトリップ時間パラメータ」を指します。
The maximum segment lifetime, or MSL, is the maximum length of time a packet can survive in the network. The DCCP MSL should equal that of TCP, which is normally two minutes.
最大セグメント寿命 (MSL) とは、パケットがネットワーク内で存続できる最大の時間です。DCCPのMSLはTCPのMSLと等しくあるべきです (SHOULD)。TCPのMSLは通常2分です。
DCCP provides no protection against attackers who can snoop on a connection in progress, or who can guess valid sequence numbers in other ways. Applications desiring stronger security should use IPsec [RFC2401]; depending on the level of security required, application-level cryptography may also suffice. These issues are discussed further in Sections 7.5.5 and 18.
DCCPは、進行中の接続を盗聴できる攻撃者や、他の方法で有効なシーケンス番号を推測できる攻撃者に対する保護を提供しません。より強力なセキュリティを求めるアプリケーションは、IPsec [RFC2401] を使用すべきです (SHOULD)。必要なセキュリティレベルによっては、アプリケーションレベルの暗号でも十分な場合があります。これらの問題については、7.5.5項および18章でさらに説明します。
DCCP implementations will follow TCP's "general principle of robustness": "be conservative in what you do, be liberal in what you accept from others" [RFC793].
DCCP's high-level connection dynamics echo those of TCP. Connections progress through three phases: initiation, including a three-way handshake; data transfer; and termination. Data can flow both ways over the connection. An acknowledgement framework lets senders discover how much data has been lost and thus avoid unfairly congesting the network. Of course, DCCP provides unreliable datagram semantics, not TCP's reliable bytestream semantics. The application must package its data into explicit frames and must retransmit its own data as necessary. It may be useful to think of DCCP as TCP minus bytestream semantics and reliability, or as UDP plus congestion control, handshakes, and acknowledgements.
DCCPの高レベルの接続の動作は、TCPのものと似ています。接続は、3ウェイハンドシェイクを含む開始、データ転送、および終了の3つのフェーズを経て進行します。データは接続上を双方向に流れることができます。確認応答の枠組みにより、送信者はどれだけのデータが失われたかを把握でき、ネットワークに不公平な輻輳を引き起こすことを避けられます。もちろん、DCCPが提供するのは信頼性のないデータグラムのセマンティクスであり、TCPの信頼性のあるバイトストリームのセマンティクスではありません。アプリケーションは、データを明示的なフレームにまとめなければならず、必要に応じて自らデータを再送しなければなりません。DCCPは、TCPからバイトストリームのセマンティクスと信頼性を除いたもの、あるいはUDPに輻輳制御、ハンドシェイク、確認応答を加えたものと考えると便利でしょう。
Ten packet types implement DCCP's protocol functions. For example, every new connection attempt begins with a DCCP-Request packet sent by the client. In this way a DCCP-Request packet resembles a TCP SYN, but since DCCP-Request is a packet type there is no way to send an unexpected flag combination, such as TCP's SYN+FIN+ACK+RST.
10種類のパケットタイプがDCCPのプロトコル機能を実装しています。たとえば、新しい接続の試行はすべて、クライアントが送信するDCCP-Requestパケットで始まります。この点でDCCP-RequestパケットはTCPのSYNに似ていますが、DCCP-Requestはパケットタイプであるため、TCPのSYN+FIN+ACK+RSTのような予期しないフラグの組み合わせを送信する方法はありません。
Eight packet types occur during the progress of a typical connection, shown here. Note the three-way handshakes during initiation and termination.
典型的な接続の進行中には、ここに示す8種類のパケットタイプが現れます。開始時と終了時に3ウェイハンドシェイクがあることに注目してください。
Client Server
------ ------
(1) Initiation
DCCP-Request -->
<-- DCCP-Response
DCCP-Ack -->
(2) Data transfer
DCCP-Data, DCCP-Ack, DCCP-DataAck -->
<-- DCCP-Data, DCCP-Ack, DCCP-DataAck
(3) Termination
<-- DCCP-CloseReq
DCCP-Close -->
<-- DCCP-Reset
The two remaining packet types are used to resynchronize after bursts of loss.
残りの2種類のパケットタイプは、損失のバースト後に再同期するために使用されます。
Every DCCP packet starts with a fixed-size generic header. Particular packet types include additional fixed-size header data; for example, DCCP-Acks include an Acknowledgement Number. DCCP options and any application data follow the fixed-size header.
すべてのDCCPパケットは、固定サイズの汎用ヘッダで始まります。特定のパケットタイプには固定サイズのヘッダデータが追加されます。たとえば、DCCP-AckにはAcknowledgement Numberが含まれます。DCCPオプションとアプリケーションデータは、固定サイズのヘッダの後に続きます。
The packet types are as follows:
パケットタイプは次のとおりです。
DCCP-Request Sent by the client to initiate a connection (the first part of the three-way initiation handshake).
DCCP-Request クライアントが接続を開始するために送信します (3ウェイ開始ハンドシェイクの最初の部分)。
DCCP-Response Sent by the server in response to a DCCP-Request (the second part of the three-way initiation handshake).
DCCP-Response DCCP-Requestに応答してサーバーが送信します (3ウェイ開始ハンドシェイクの2番目の部分)。
DCCP-Data Used to transmit application data.
DCCP-Data アプリケーションデータの送信に使用されます。
DCCP-Ack Used to transmit pure acknowledgements.
DCCP-Ack 純粋な確認応答の送信に使用されます。
DCCP-DataAck Used to transmit application data with piggybacked acknowledgement information.
DCCP-DataAck 確認応答情報を便乗させたアプリケーションデータの送信に使用されます。
DCCP-CloseReq Sent by the server to request that the client close the connection.
DCCP-CloseReq クライアントに接続を閉じるよう要求するためにサーバーが送信します。
DCCP-Close Used by the client or the server to close the connection; elicits a DCCP-Reset in response.
DCCP-Close クライアントまたはサーバーが接続を閉じるために使用します。応答としてDCCP-Resetを引き出します。
DCCP-Reset Used to terminate the connection, either normally or abnormally.
DCCP-Reset 正常または異常に接続を終了するために使用されます。
DCCP-Sync, DCCP-SyncAck Used to resynchronize sequence numbers after large bursts of loss.
DCCP-Sync, DCCP-SyncAck 大きな損失のバースト後にシーケンス番号を再同期するために使用されます。
Each DCCP packet carries a sequence number so that losses can be detected and reported. Unlike TCP sequence numbers, which are byte-based, DCCP sequence numbers increment by one per packet. For example:
各DCCPパケットはシーケンス番号を運び、損失を検出して報告できるようにします。バイト単位のTCPシーケンス番号とは異なり、DCCPのシーケンス番号はパケットごとに1ずつ増加します。例:
DCCP A DCCP B
------ ------
DCCP-Data(seqno 1) -->
DCCP-Data(seqno 2) -->
<-- DCCP-Ack(seqno 10, ackno 2)
DCCP-DataAck(seqno 3, ackno 10) -->
<-- DCCP-Data(seqno 11)
Every DCCP packet increments the sequence number, whether or not it contains application data. DCCP-Ack pure acknowledgements increment the sequence number; for instance, DCCP B's second packet above uses sequence number 11, since sequence number 10 was used for an acknowledgement. This lets endpoints detect all packet loss, including acknowledgement loss. It also means that endpoints can get out of sync after long bursts of loss. The DCCP-Sync and DCCP-SyncAck packet types are used to recover (Section 7.5).
すべてのDCCPパケットは、アプリケーションデータを含むかどうかにかかわらず、シーケンス番号を増加させます。DCCP-Ackによる純粋な確認応答もシーケンス番号を増加させます。たとえば、上のDCCP Bの2番目のパケットは、シーケンス番号10が確認応答に使われたため、シーケンス番号11を使用します。これにより、エンドポイントは確認応答の損失を含むすべてのパケット損失を検出できます。また、長い損失のバーストの後にエンドポイントが同期を失う可能性があることも意味します。DCCP-SyncおよびDCCP-SyncAckパケットタイプは、その回復に使用されます (7.5節)。
Since DCCP provides unreliable semantics, there are no retransmissions, and having a TCP-style cumulative acknowledgement field doesn't make sense. DCCP's Acknowledgement Number field equals the greatest sequence number received, rather than the smallest sequence number not received. Separate options indicate any intermediate sequence numbers that weren't received.
DCCPは信頼性のないセマンティクスを提供するため、再送はなく、TCP方式の累積確認応答フィールドを持つことは意味がありません。DCCPのAcknowledgement Numberフィールドは、受信していない最小のシーケンス番号ではなく、受信した最大のシーケンス番号に等しくなります。受信されなかった中間のシーケンス番号は、別のオプションで示されます。
DCCP endpoints progress through different states during the course of a connection, corresponding roughly to the three phases of initiation, data transfer, and termination. The figure below shows the typical progress through these states for a client and server.
DCCPエンドポイントは、接続の過程でさまざまな状態を経て進行します。これらはおおよそ、開始、データ転送、終了の3つのフェーズに対応します。下の図は、クライアントとサーバーがこれらの状態を経る典型的な進行を示しています。
Client Server
------ ------
(0) No connection
CLOSED LISTEN
(1) Initiation
REQUEST DCCP-Request -->
<-- DCCP-Response RESPOND
PARTOPEN DCCP-Ack or DCCP-DataAck -->
(2) Data transfer OPEN <-- DCCP-Data, Ack, DataAck --> OPEN
(2) Data transfer OPEN <-- DCCP-Data, Ack, DataAck --> OPEN
(3) Termination
<-- DCCP-CloseReq CLOSEREQ
CLOSING DCCP-Close -->
<-- DCCP-Reset CLOSED
TIMEWAIT
CLOSED
The nine possible states are as follows. They are listed in increasing order, so that "state >= CLOSEREQ" means the same as "state = CLOSEREQ or state = CLOSING or state = TIMEWAIT". Section 8 describes the states in more detail.
可能な状態は9つあります。それらは昇順に並べられており、「state >= CLOSEREQ」は「state = CLOSEREQ または state = CLOSING または state = TIMEWAIT」と同じ意味になります。8章では、これらの状態をより詳しく説明します。
CLOSED Represents nonexistent connections.
CLOSED 存在しない接続を表します。
LISTEN Represents server sockets in the passive listening state. LISTEN and CLOSED are not associated with any particular DCCP connection.
LISTEN 受動的なリッスン状態にあるサーバーソケットを表します。LISTENとCLOSEDは、特定のDCCP接続とは関連付けられません。
REQUEST A client socket enters this state, from CLOSED, after sending a DCCP-Request packet to try to initiate a connection.
REQUEST クライアントソケットは、接続の開始を試みるためにDCCP-Requestパケットを送信した後、CLOSEDからこの状態に入ります。
RESPOND A server socket enters this state, from LISTEN, after receiving a DCCP-Request from a client.
RESPOND サーバーソケットは、クライアントからDCCP-Requestを受信した後、LISTENからこの状態に入ります。
PARTOPEN A client socket enters this state, from REQUEST, after receiving a DCCP-Response from the server. This state represents the third phase of the three-way handshake. The client may send application data in this state, but it MUST include an Acknowledgement Number on all of its packets.
PARTOPEN クライアントソケットは、サーバーからDCCP-Responseを受信した後、REQUESTからこの状態に入ります。この状態は3ウェイハンドシェイクの第3フェーズを表します。クライアントはこの状態でアプリケーションデータを送信できますが、すべてのパケットにAcknowledgement Numberを含めなければなりません (MUST)。
OPEN The central data transfer portion of a DCCP connection. Client and server sockets enter this state from PARTOPEN and RESPOND, respectively. Sometimes we speak of SERVER-OPEN and CLIENT-OPEN states, corresponding to the server's OPEN state and the client's OPEN state.
OPEN DCCP接続の中心的なデータ転送部分です。クライアントソケットとサーバーソケットは、それぞれPARTOPENとRESPONDからこの状態に入ります。サーバーのOPEN状態とクライアントのOPEN状態に対応して、SERVER-OPEN状態およびCLIENT-OPEN状態と呼ぶことがあります。
CLOSEREQ A server socket enters this state, from SERVER-OPEN, to order the client to close the connection and to hold TIMEWAIT state.
CLOSEREQ サーバーソケットは、クライアントに接続を閉じるよう命じ、TIMEWAIT状態を保持させるために、SERVER-OPENからこの状態に入ります。
CLOSING Server and client sockets can both enter this state to close the connection.
CLOSING サーバーソケットとクライアントソケットの両方が、接続を閉じるためにこの状態に入ることができます。
TIMEWAIT A server or client socket remains in this state for 2MSL (4 minutes) after the connection has been torn down, to prevent mistakes due to the delivery of old packets. Only one of the endpoints has to enter TIMEWAIT state (the other can enter CLOSED state immediately), and a server can request its client to hold TIMEWAIT state using the DCCP-CloseReq packet type.
TIMEWAIT サーバーまたはクライアントのソケットは、古いパケットの配送による誤りを防ぐため、接続が切断された後、2MSL (4分) の間この状態にとどまります。エンドポイントの一方だけがTIMEWAIT状態に入ればよく (もう一方はただちにCLOSED状態に入ることができます)、サーバーはDCCP-CloseReqパケットタイプを使用して、クライアントにTIMEWAIT状態の保持を要求できます。
DCCP connections are congestion controlled, but unlike in TCP, DCCP applications have a choice of congestion control mechanism. In fact, the two half-connections can be governed by different mechanisms. Mechanisms are denoted by one-byte congestion control identifiers, or CCIDs. The endpoints negotiate their CCIDs during connection initiation. Each CCID describes how the HC-Sender limits data packet rates, how the HC-Receiver sends congestion feedback via acknowledgements, and so forth. CCIDs 2 and 3 are currently defined; CCIDs 0, 1, and 4-255 are reserved. Other CCIDs may be defined in the future.
DCCP接続は輻輳制御されますが、TCPとは異なり、DCCPアプリケーションは輻輳制御メカニズムを選択できます。実際には、2つの半接続が異なるメカニズムによって制御されることもあります。メカニズムは、1バイトの輻輳制御識別子、すなわちCCIDで表されます。エンドポイントは、接続の開始時にCCIDをネゴシエーションします。各CCIDは、HC-Senderがデータパケットのレートをどのように制限するか、HC-Receiverが確認応答を通じて輻輳フィードバックをどのように送信するか、といった事項を記述します。現在定義されているのはCCID 2と3で、CCID 0、1、4から255は予約されています。将来、他のCCIDが定義される可能性があります。
CCID 2 provides TCP-like Congestion Control, which is similar to that of TCP. The sender maintains a congestion window and sends packets until that window is full. Packets are acknowledged by the receiver. Dropped packets and ECN [RFC3168] indicate congestion; the response to congestion is to halve the congestion window. Acknowledgements in CCID 2 contain the sequence numbers of all received packets within some window, similar to a selective acknowledgement (SACK) [RFC2018].
CCID 3 provides TCP-Friendly Rate Control (TFRC), an equation-based form of congestion control intended to respond to congestion more smoothly than CCID 2. The sender maintains a transmit rate, which it updates using the receiver's estimate of the packet loss and mark rate. CCID 3 behaves somewhat differently than TCP in the short term, but is designed to operate fairly with TCP over the long term.
CCID 3は、方程式ベースの輻輳制御であるTCP-Friendly Rate Control (TFRC) を提供します。これは、CCID 2よりも滑らかに輻輳に応答することを意図しています。送信者は送信レートを保持し、受信者によるパケット損失率およびマーク率の推定値を使ってそれを更新します。CCID 3は短期的にはTCPとやや異なる動作をしますが、長期的にはTCPと公平に動作するように設計されています。
Section 10 describes DCCP's CCIDs in more detail. The behaviors of CCIDs 2 and 3 are fully defined in separate profile documents [RFC4341, RFC4342].
10章では、DCCPのCCIDをより詳しく説明します。CCID 2と3の動作は、別個のプロファイル文書 [RFC4341, RFC4342] で完全に定義されています。
DCCP endpoints use Change and Confirm options to negotiate and agree on feature values. Feature negotiation will almost always happen on the connection initiation handshake, but it can begin at any time.
DCCPエンドポイントは、Change オプションと Confirm オプションを使用して機能の値をネゴシエーションし、合意します。機能ネゴシエーションはほとんどの場合、接続開始のハンドシェイクで行われますが、いつでも開始できます。
There are four feature negotiation options in all: Change L, Confirm L, Change R, and Confirm R. The "L" options are sent by the feature location and the "R" options are sent by the feature remote. A Change R option says to the feature location, "change this feature value as follows". The feature location responds with Confirm L, meaning, "I've changed it". Some features allow Change R options to contain multiple values sorted in preference order. For example:
機能ネゴシエーションオプションは全部で4つあります。Change L、Confirm L、Change R、Confirm Rです。「L」オプションはfeature locationが送信し、「R」オプションはfeature remoteが送信します。Change Rオプションは、feature locationに対して「この機能の値を次のように変更せよ」と伝えます。feature locationは「変更した」という意味でConfirm Lで応答します。機能によっては、Change Rオプションに、優先順に並べた複数の値を含めることができます。例:
Client Server
------ ------
Change R(CCID, 2) -->
<-- Confirm L(CCID, 2)
* agreement that CCID/Server = 2 *
Change R(CCID, 3 4) -->
<-- Confirm L(CCID, 4, 4 2)
* agreement that CCID/Server = 4 *
Both exchanges negotiate the CCID/Server feature's value, which is the CCID in use on the server-to-client half-connection. In the second exchange, the client requests that the server use either CCID 3 or CCID 4, with 3 preferred; the server chooses 4 and supplies its preference list, "4 2".
どちらのやり取りも、CCID/Server機能の値、すなわちサーバーからクライアントへの半接続で使用されるCCIDをネゴシエーションします。2番目のやり取りでは、クライアントが、サーバーにCCID 3またはCCID 4のいずれかを使用するよう要求し、3を優先しています。サーバーは4を選択し、自身の優先リスト「4 2」を提示します。
The Change L and Confirm R options are used for feature negotiations initiated by the feature location. In the following example, the server requests that CCID/Server be set to 3 or 2, with 3 preferred, and the client agrees.
Change LオプションとConfirm Rオプションは、feature locationによって開始される機能ネゴシエーションに使用されます。次の例では、サーバーがCCID/Serverを3または2に設定するよう要求し (3を優先)、クライアントが同意しています。
Client Server
------ ------
<-- Change L(CCID, 3 2)
Confirm R(CCID, 3, 3 2) -->
* agreement that CCID/Server = 3 *
Section 6 describes the feature negotiation options further, including the retransmission strategies that make negotiation reliable.
6章では、ネゴシエーションを信頼できるものにする再送戦略を含め、機能ネゴシエーションオプションについてさらに説明します。
DCCP's differences from TCP apart from those discussed so far include the following:
ここまでに説明したもの以外のDCCPとTCPの違いには、次のものがあります。
o Copious space for options (up to 1008 bytes or the PMTU).
o オプション用の豊富な領域 (最大1008バイトまたはPMTU)。
o Different acknowledgement formats. The CCID for a connection determines how much acknowledgement information needs to be transmitted. For example, in CCID 2 (TCP-like), this is about one ack per 2 packets, and each ack must declare exactly which packets were received. In CCID 3 (TFRC), it is about one ack per round-trip time, and acks must declare at minimum just the lengths of recent loss intervals.
o 異なる確認応答の形式。接続のCCIDが、どれだけの確認応答情報を送信する必要があるかを決定します。たとえば、CCID 2 (TCP-like) では、おおよそ2パケットにつき1つの確認応答があり、各確認応答はどのパケットが受信されたかを正確に宣言しなければなりません。CCID 3 (TFRC) では、おおよそラウンドトリップ時間ごとに1つの確認応答があり、確認応答は最低限、最近の損失間隔の長さだけを宣言すればよいことになっています。
o Denial of Service (DoS) protection. Several mechanisms help limit the amount of state that possibly-misbehaving clients can force DCCP servers to maintain. An Init Cookie option analogous to TCP's SYN Cookies [SYNCOOKIES] avoids SYN-flood-like attacks. Only one connection endpoint has to hold TIMEWAIT state; the DCCP-CloseReq packet, which may only be sent by the server, passes that state to the client. Various rate limits let servers avoid attacks that might force extensive computation or packet generation.
o サービス拒否 (DoS) 保護。不正な動作をする可能性のあるクライアントがDCCPサーバーに保持を強いることのできる状態の量を制限するために、いくつかのメカニズムがあります。TCPのSYN Cookies [SYNCOOKIES] に類似したInit Cookieオプションは、SYNフラッドに似た攻撃を回避します。TIMEWAIT状態を保持する必要があるのは接続エンドポイントの一方だけです。サーバーだけが送信できるDCCP-CloseReqパケットが、その状態をクライアントに渡します。さまざまなレート制限により、サーバーは、大量の計算やパケット生成を強いる可能性のある攻撃を回避できます。
o Distinguishing different kinds of loss. A Data Dropped option (Section 11.7) lets an endpoint declare that a packet was dropped because of corruption, because of receive buffer overflow, and so on. This facilitates research into more appropriate rate-control responses for these non-network-congestion losses (although currently such losses will cause a congestion response).
o 異なる種類の損失の区別。Data Droppedオプション (11.7節) により、エンドポイントは、パケットが破損、受信バッファのオーバーフローなどの理由で破棄されたことを宣言できます。これにより、こうしたネットワーク輻輳以外の損失に対する、より適切なレート制御応答の研究が容易になります (ただし、現在はそのような損失も輻輳応答を引き起こします)。
o Acknowledgeability. In TCP, a packet may be acknowledged only once the data is reliably queued for application delivery. This does not make sense in DCCP, where an application might, for example, request a drop-from-front receive buffer. A DCCP packet may be acknowledged as soon as its header has been successfully processed. Concretely, a packet becomes acknowledgeable at Step 8 of Section 8.5's packet processing pseudocode. Acknowledgeability does not guarantee data delivery, however: the Data Dropped option may later report that the packet's application data was discarded.
o 確認応答可能性 (Acknowledgeability)。TCPでは、データがアプリケーションへの配送のために確実にキューイングされて初めて、パケットを確認応答できます。DCCPでは、たとえばアプリケーションが先頭から破棄する受信バッファを要求する場合があるため、これは意味をなしません。DCCPパケットは、そのヘッダが正常に処理されればすぐに確認応答できます。具体的には、パケットは8.5節のパケット処理擬似コードのステップ8で確認応答可能になります。ただし、確認応答可能であってもデータ配送が保証されるわけではありません。パケットのアプリケーションデータが破棄されたことを、Data Droppedオプションが後で報告することがあります。
o No receive window. DCCP is a congestion control protocol, not a flow control protocol.
o 受信ウィンドウなし。DCCPは輻輳制御プロトコルであり、フロー制御プロトコルではありません。
o No simultaneous open. Every connection has one client and one server.
o 同時オープンなし。すべての接続には、クライアントが1つとサーバーが1つあります。
o No half-closed states. DCCP has no states corresponding to TCP's FINWAIT and CLOSEWAIT, where one half-connection is explicitly closed while the other is still active. The Data Dropped option's Drop Code 1, Application Not Listening (Section 11.7), can achieve a similar effect, however.
o 半クローズ状態なし。DCCPには、一方の半接続が明示的に閉じられ、もう一方がまだ有効であるTCPのFINWAITやCLOSEWAITに相当する状態がありません。ただし、Data DroppedオプションのDrop Code 1、Application Not Listening (11.7節) によって、同様の効果を得ることができます。
The progress of a typical DCCP connection is as follows. (This description is informative, not normative.)
典型的なDCCP接続の進行は次のとおりです。(この説明は参考情報であり、規定ではありません。)
Client Server
------ ------
0. [CLOSED] [LISTEN]
1. DCCP-Request -->
2. <-- DCCP-Response
3. DCCP-Ack -->
4. DCCP-Data, DCCP-Ack, DCCP-DataAck -->
<-- DCCP-Data, DCCP-Ack, DCCP-DataAck
5. <-- DCCP-CloseReq
6. DCCP-Close -->
7. <-- DCCP-Reset
8. [TIMEWAIT]
1. The client sends the server a DCCP-Request packet specifying the client and server ports, the service being requested, and any features being negotiated, including the CCID that the client would like the server to use. The client may optionally piggyback an application request on the DCCP-Request packet. The server may ignore this application request.
1. クライアントは、クライアントとサーバーのポート、要求するサービス、およびネゴシエーションする機能 (クライアントがサーバーに使用してほしいCCIDを含む) を指定したDCCP-Requestパケットをサーバーに送信します。クライアントは、DCCP-Requestパケットにアプリケーションの要求を便乗させてもよいです。サーバーは、このアプリケーションの要求を無視してもよいです。
2. The server sends the client a DCCP-Response packet indicating that it is willing to communicate with the client. This response indicates any features and options that the server agrees to, begins other feature negotiations as desired, and optionally includes Init Cookies that wrap up all this information and that must be returned by the client for the connection to complete.
2. サーバーは、クライアントと通信する意思があることを示すDCCP-Responseパケットをクライアントに送信します。この応答は、サーバーが同意する機能とオプションを示し、必要に応じて他の機能ネゴシエーションを開始し、さらに、これらすべての情報をまとめたInit Cookieを任意で含めます。接続を完了するには、クライアントがこのInit Cookieを返さなければなりません。
3. The client sends the server a DCCP-Ack packet that acknowledges the DCCP-Response packet. This acknowledges the server's initial sequence number and returns any Init Cookies in the DCCP-Response. It may also continue feature negotiation. The client may piggyback an application-level request on this ack, producing a DCCP-DataAck packet.
3. クライアントは、DCCP-Responseパケットを確認応答するDCCP-Ackパケットをサーバーに送信します。これはサーバーの初期シーケンス番号を確認応答し、DCCP-Response内のInit Cookieを返します。また、機能ネゴシエーションを継続することもあります。クライアントは、この確認応答にアプリケーションレベルの要求を便乗させ、DCCP-DataAckパケットにしてもよいです。
4. The server and client then exchange DCCP-Data packets, DCCP-Ack packets acknowledging that data, and, optionally, DCCP-DataAck packets containing data with piggybacked acknowledgements. If the client has no data to send, then the server will send DCCP-Data and DCCP-DataAck packets, while the client will send DCCP-Acks exclusively. (However, the client may not send DCCP-Data packets before receiving at least one non-DCCP-Response packet from the server.)
4. その後、サーバーとクライアントは、DCCP-Dataパケット、そのデータを確認応答するDCCP-Ackパケット、および任意で、確認応答を便乗させたデータを含むDCCP-DataAckパケットを交換します。クライアントに送信するデータがない場合、サーバーはDCCP-DataおよびDCCP-DataAckパケットを送信し、クライアントはDCCP-Ackだけを送信します。(ただし、クライアントは、サーバーからDCCP-Response以外のパケットを少なくとも1つ受信するまで、DCCP-Dataパケットを送信できません。)
5. The server sends a DCCP-CloseReq packet requesting a close.
5. サーバーは、クローズを要求するDCCP-CloseReqパケットを送信します。
6. The client sends a DCCP-Close packet acknowledging the close.
6. クライアントは、クローズを確認応答するDCCP-Closeパケットを送信します。
7. The server sends a DCCP-Reset packet with Reset Code 1, "Closed", and clears its connection state. DCCP-Resets are part of normal connection termination; see Section 5.6.
7. サーバーは、Reset Code 1「Closed」のDCCP-Resetパケットを送信し、接続状態を消去します。DCCP-Resetは通常の接続終了の一部です。5.6節を参照してください。
8. The client receives the DCCP-Reset packet and holds state for two maximum segment lifetimes, or 2MSL, to allow any remaining packets to clear the network.
8. クライアントはDCCP-Resetパケットを受信し、残りのパケットがネットワークから消えるのを待つため、最大セグメント寿命の2倍、すなわち2MSLの間、状態を保持します。
An alternative connection closedown sequence is initiated by the client:
クライアントによって開始される、別の接続終了シーケンスは次のとおりです。
5b. The client sends a DCCP-Close packet closing the connection.
5b. クライアントは、接続を閉じるDCCP-Closeパケットを送信します。
6b. The server sends a DCCP-Reset packet with Reset Code 1, "Closed", and clears its connection state.
6b. サーバーは、Reset Code 1「Closed」のDCCP-Resetパケットを送信し、接続状態を消去します。
7b. The client receives the DCCP-Reset packet and holds state for 2MSL to allow any remaining packets to clear the network.
7b. クライアントはDCCP-Resetパケットを受信し、残りのパケットがネットワークから消えるのを待つため、2MSLの間、状態を保持します。
The DCCP header can be from 12 to 1020 bytes long. The initial part of the header has the same semantics for all currently defined packet types. Following this comes any additional fixed-length fields required by the packet type, and then a variable-length list of options. The application data area follows the header. In some packet types, this area contains data for the application; in other packet types, its contents are ignored.
DCCPヘッダの長さは12バイトから1020バイトです。ヘッダの先頭部分は、現在定義されているすべてのパケットタイプで同じセマンティクスを持ちます。その後にパケットタイプで必要とされる追加の固定長フィールドが続き、次に可変長のオプションリストが続きます。アプリケーションデータ領域はヘッダの後に続きます。パケットタイプによっては、この領域にアプリケーション用のデータが含まれ、他のパケットタイプでは、その内容は無視されます。
+---------------------------------------+ -.
| Generic Header | |
+---------------------------------------+ |
| Additional Fields (depending on type) | +- DCCP Header
+---------------------------------------+ |
| Options (optional) | |
+=======================================+ -'
| Application Data Area |
+---------------------------------------+
The DCCP generic header takes different forms depending on the value of X, the Extended Sequence Numbers bit. If X is one, the Sequence Number field is 48 bits long, and the generic header takes 16 bytes, as follows.
DCCPの汎用ヘッダは、拡張シーケンス番号ビットであるXの値に応じて異なる形式をとります。Xが1の場合、Sequence Numberフィールドは48ビット長となり、汎用ヘッダは次のように16バイトになります。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Dest Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data Offset | CCVal | CsCov | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | |X| | .
| Res | Type |=| Reserved | Sequence Number (high bits) .
| | |1| | .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
. Sequence Number (low bits) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
If X is zero, only the low 24 bits of the Sequence Number are transmitted, and the generic header is 12 bytes long.
Xが0の場合、Sequence Numberの下位24ビットのみが送信され、汎用ヘッダは12バイト長になります。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Dest Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data Offset | CCVal | CsCov | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | |X| |
| Res | Type |=| Sequence Number (low bits) |
| | |0| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The generic header fields are defined as follows.
汎用ヘッダのフィールドは次のように定義されます。
Source and Destination Ports: 16 bits each These fields identify the connection, similar to the corresponding fields in TCP and UDP. The Source Port represents the relevant port on the endpoint that sent this packet, and the Destination Port represents the relevant port on the other endpoint. When initiating a connection, the client SHOULD choose its Source Port randomly to reduce the likelihood of attack.
Source and Destination Ports: 各16ビット これらのフィールドは、TCPおよびUDPの対応するフィールドと同様に、接続を識別します。Source Portは、このパケットを送信したエンドポイント側の該当ポートを表し、Destination Portは、相手側エンドポイントの該当ポートを表します。接続を開始するとき、クライアントは攻撃の可能性を減らすために、Source Portをランダムに選択すべきです (SHOULD)。
DCCP APIs should treat port numbers similarly to TCP and UDP port numbers. For example, machines that distinguish between "privileged" and "unprivileged" ports for TCP and UDP should do the same for DCCP.
DCCPのAPIは、ポート番号をTCPおよびUDPのポート番号と同様に扱うべきです。たとえば、TCPとUDPで「特権」ポートと「非特権」ポートを区別するマシンは、DCCPでも同様に区別すべきです。
Data Offset: 8 bits The offset from the start of the packet's DCCP header to the start of its application data area, in 32-bit words. The receiver MUST ignore packets whose Data Offset is smaller than the minimum-sized header for the given Type or larger than the DCCP packet itself.
Data Offset: 8ビット パケットのDCCPヘッダの先頭からアプリケーションデータ領域の先頭までのオフセットで、32ビットワード単位です。受信者は、Data Offsetが、指定されたTypeの最小サイズのヘッダより小さいか、DCCPパケット自体より大きいパケットを無視しなければなりません (MUST)。
CCVal: 4 bits Used by the HC-Sender CCID. For example, the A-to-B CCID's sender, which is active at DCCP A, MAY send 4 bits of information per packet to its receiver by encoding that information in CCVal. The sender MUST set CCVal to zero unless its HC-Sender CCID specifies otherwise, and the receiver MUST ignore the CCVal field unless its HC-Receiver CCID specifies otherwise.
CCVal: 4ビット HC-Sender CCIDによって使用されます。たとえば、DCCP Aで動作するA-to-B CCIDの送信者は、情報をCCValにエンコードすることで、パケットごとに4ビットの情報を受信者に送信してもよいです (MAY)。送信者は、HC-Sender CCIDが別途指定しない限り、CCValをゼロに設定しなければならず (MUST)、受信者は、HC-Receiver CCIDが別途指定しない限り、CCValフィールドを無視しなければなりません (MUST)。
Checksum Coverage (CsCov): 4 bits Checksum Coverage determines the parts of the packet that are covered by the Checksum field. This always includes the DCCP header and options, but some or all of the application data may be excluded. This can improve performance on noisy links for applications that can tolerate corruption. See Section 9.
Checksum Coverage (CsCov): 4ビット Checksum Coverageは、Checksumフィールドの対象となるパケットの部分を決定します。これには常にDCCPヘッダとオプションが含まれますが、アプリケーションデータの一部またはすべてが除外されることがあります。これにより、破損を許容できるアプリケーションについて、ノイズの多いリンクでの性能を向上できます。9章を参照してください。
Checksum: 16 bits The Internet checksum of the packet's DCCP header (including options), a network-layer pseudoheader, and, depending on Checksum Coverage, all, some, or none of the application data. See Section 9.
Checksum: 16ビット パケットのDCCPヘッダ (オプションを含む)、ネットワーク層の疑似ヘッダ、およびChecksum Coverageに応じてアプリケーションデータのすべて、一部、またはまったくなしに対するインターネットチェックサムです。9章を参照してください。
Reserved (Res): 3 bits Senders MUST set this field to all zeroes on generated packets, and receivers MUST ignore its value.
Reserved (Res): 3ビット 送信者は、生成するパケットでこのフィールドをすべてゼロに設定しなければならず (MUST)、受信者はその値を無視しなければなりません (MUST)。
Type: 4 bits The Type field specifies the type of the packet. The following values are defined:
Type: 4ビット Typeフィールドは、パケットのタイプを指定します。次の値が定義されています。
Type Meaning
---- -------
0 DCCP-Request
1 DCCP-Response
2 DCCP-Data
3 DCCP-Ack
4 DCCP-DataAck
5 DCCP-CloseReq
6 DCCP-Close
7 DCCP-Reset
8 DCCP-Sync
9 DCCP-SyncAck
10-15 Reserved
Table 1: DCCP Packet Types
表1: DCCPパケットタイプ
Receivers MUST ignore any packets with reserved type. That is, packets with reserved type MUST NOT be processed, and they MUST NOT be acknowledged as received.
受信者は、予約されたタイプのパケットを無視しなければなりません (MUST)。つまり、予約されたタイプのパケットを処理してはならず (MUST NOT)、受信済みとして確認応答してもなりません (MUST NOT)。
Extended Sequence Numbers (X): 1 bit Set to one to indicate the use of an extended generic header with 48-bit Sequence and Acknowledgement Numbers. DCCP-Data, DCCP-DataAck, and DCCP-Ack packets MAY set X to zero or one. All DCCP-Request, DCCP-Response, DCCP-CloseReq, DCCP-Close, DCCP-Reset, DCCP-Sync, and DCCP-SyncAck packets MUST set X to one; endpoints MUST ignore any such packets with X set to zero. High-rate connections SHOULD set X to one on all packets to gain increased protection against wrapped sequence numbers and attacks. See Section 7.6.
Extended Sequence Numbers (X): 1ビット 48ビットのSequence NumberおよびAcknowledgement Numberを持つ拡張汎用ヘッダの使用を示すには、1に設定します。DCCP-Data、DCCP-DataAck、DCCP-Ackパケットは、Xをゼロまたは1に設定してもよいです (MAY)。DCCP-Request、DCCP-Response、DCCP-CloseReq、DCCP-Close、DCCP-Reset、DCCP-Sync、DCCP-SyncAckのすべてのパケットは、Xを1に設定しなければならず (MUST)、エンドポイントは、Xが0に設定されたこれらのパケットを無視しなければなりません (MUST)。高レートの接続は、シーケンス番号の周回や攻撃に対する保護を高めるため、すべてのパケットでXを1に設定すべきです (SHOULD)。7.6節を参照してください。
Sequence Number: 48 or 24 bits Identifies the packet uniquely in the sequence of all packets the source sent on this connection. Sequence Number increases by one with every packet sent, including packets such as DCCP-Ack that carry no application data. See Section 7.
Sequence Number: 48または24ビット この接続で送信元が送信したすべてのパケットの並びの中で、そのパケットを一意に識別します。Sequence Numberは、DCCP-Ackなどアプリケーションデータを運ばないパケットも含め、パケットを送信するごとに1ずつ増加します。7章を参照してください。
All currently defined packet types except DCCP-Request and DCCP-Data carry an Acknowledgement Number Subheader in the four or eight bytes immediately following the generic header. When X=1, its format is:
DCCP-RequestとDCCP-Dataを除く、現在定義されているすべてのパケットタイプは、汎用ヘッダの直後の4バイトまたは8バイトにAcknowledgement Number Subheaderを運びます。X=1のとき、その形式は次のとおりです。
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved | Acknowledgement Number .
| | (high bits) .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
. Acknowledgement Number (low bits) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
When X=0, only the low 24 bits of the Acknowledgement Number are transmitted, giving the Acknowledgement Number Subheader this format:
X=0のときは、Acknowledgement Numberの下位24ビットのみが送信され、Acknowledgement Number Subheaderは次の形式になります。
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved | Acknowledgement Number (low bits) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Reserved: 16 or 8 bits Senders MUST set this field to all zeroes on generated packets, and receivers MUST ignore its value.
Reserved: 16または8ビット 送信者は、生成するパケットでこのフィールドをすべてゼロに設定しなければならず (MUST)、受信者はその値を無視しなければなりません (MUST)。
Acknowledgement Number: 48 or 24 bits Generally contains GSR, the Greatest Sequence Number Received on any acknowledgeable packet so far. A packet is acknowledgeable if and only if its header was successfully processed by the receiver; Section 7.4 describes this further. Options such as Ack Vector (Section 11.4) combine with the Acknowledgement Number to provide precise information about which packets have arrived.
Acknowledgement Number: 48または24ビット 一般に、これまでに確認応答可能な任意のパケットで受信した最大のシーケンス番号であるGSRを格納します。パケットが確認応答可能であるのは、そのヘッダが受信者によって正常に処理された場合、かつその場合に限ります。これについては7.4節でさらに説明します。Ack Vector (11.4節) などのオプションは、Acknowledgement Numberと組み合わされて、どのパケットが到着したかに関する正確な情報を提供します。
Acknowledgement Numbers on DCCP-Sync and DCCP-SyncAck packets need not equal GSR. See Section 5.7.
DCCP-SyncおよびDCCP-SyncAckパケットのAcknowledgement Numberは、GSRと等しい必要はありません。5.7節を参照してください。
A client initiates a DCCP connection by sending a DCCP-Request packet. These packets MAY contain application data and MUST use 48-bit sequence numbers (X=1).
クライアントは、DCCP-Requestパケットを送信することでDCCP接続を開始します。これらのパケットはアプリケーションデータを含んでもよく (MAY)、48ビットのシーケンス番号 (X=1) を使用しなければなりません (MUST)。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ Generic DCCP Header with X=1 (16 bytes) /
/ with Type=0 (DCCP-Request) /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Service Code |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ Options and Padding /
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
/ Application Data /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Service Code: 32 bits Describes the application-level service to which the client application wants to connect. Service Codes are intended to provide information about which application protocol a connection intends to use, thus aiding middleboxes and reducing reliance on globally well-known ports. See Section 8.1.2.
Service Code: 32ビット クライアントアプリケーションが接続しようとするアプリケーションレベルのサービスを記述します。Service Codeは、接続が使用しようとするアプリケーションプロトコルに関する情報を提供することを意図しており、ミドルボックスを支援し、広く知られたグローバルなポートへの依存を減らします。8.1.2項を参照してください。
The server responds to valid DCCP-Request packets with DCCP-Response packets. This is the second phase of the three-way handshake. DCCP-Response packets MAY contain application data and MUST use 48-bit sequence numbers (X=1).
サーバーは、有効なDCCP-RequestパケットにDCCP-Responseパケットで応答します。これは3ウェイハンドシェイクの第2フェーズです。DCCP-Responseパケットはアプリケーションデータを含んでもよく (MAY)、48ビットのシーケンス番号 (X=1) を使用しなければなりません (MUST)。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ Generic DCCP Header with X=1 (16 bytes) /
/ with Type=1 (DCCP-Response) /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ Acknowledgement Number Subheader (8 bytes) /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Service Code |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ Options and Padding /
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
/ Application Data /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Acknowledgement Number: 48 bits Contains GSR. Since DCCP-Responses are only sent during connection initiation, this will always equal the Sequence Number on a received DCCP-Request.
Acknowledgement Number: 48ビット GSRを格納します。DCCP-Responseは接続の開始時にのみ送信されるため、これは常に、受信したDCCP-RequestのSequence Numberと等しくなります。
Service Code: 32 bits MUST equal the Service Code on the corresponding DCCP-Request.
Service Code: 32ビット 対応するDCCP-RequestのService Codeと等しくなければなりません (MUST)。
The central data transfer portion of every DCCP connection uses DCCP-Data, DCCP-Ack, and DCCP-DataAck packets. These packets MAY use 24-bit sequence numbers, depending on the value of the Allow Short Sequence Numbers feature (Section 7.6.1). DCCP-Data packets carry application data without acknowledgements.
すべてのDCCP接続の中心的なデータ転送部分は、DCCP-Data、DCCP-Ack、DCCP-DataAckパケットを使用します。これらのパケットは、Allow Short Sequence Numbers機能 (7.6.1項) の値に応じて、24ビットのシーケンス番号を使用してもよいです (MAY)。DCCP-Dataパケットは、確認応答なしでアプリケーションデータを運びます。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ Generic DCCP Header (16 or 12 bytes) /
/ with Type=2 (DCCP-Data) /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ Options and Padding /
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
/ Application Data /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
DCCP-Ack packets dispense with the data but contain an Acknowledgement Number. They are used for pure acknowledgements.
DCCP-Ackパケットはデータを持ちませんが、Acknowledgement Numberを含みます。これらは純粋な確認応答に使用されます。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ Generic DCCP Header (16 or 12 bytes) /
/ with Type=3 (DCCP-Ack) /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ Acknowledgement Number Subheader (8 or 4 bytes) /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ Options and Padding /
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
/ Application Data Area (Ignored) /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
DCCP-DataAck packets carry both application data and an Acknowledgement Number. This piggybacks acknowledgement information on a data packet.
DCCP-DataAckパケットは、アプリケーションデータとAcknowledgement Numberの両方を運びます。これにより、確認応答情報がデータパケットに便乗します。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ Generic DCCP Header (16 or 12 bytes) /
/ with Type=4 (DCCP-DataAck) /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ Acknowledgement Number Subheader (8 or 4 bytes) /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ Options and Padding /
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
/ Application Data /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
A DCCP-Data or DCCP-DataAck packet may have a zero-length application data area, which indicates that the application sent a zero-length datagram. This differs from DCCP-Request and DCCP-Response packets, where an empty application data area indicates the absence of application data (not the presence of zero-length application data). The API SHOULD report any received zero-length datagrams to the receiving application.
DCCP-DataまたはDCCP-DataAckパケットは、長さゼロのアプリケーションデータ領域を持つことがあり、これはアプリケーションが長さゼロのデータグラムを送信したことを示します。これは、空のアプリケーションデータ領域がアプリケーションデータの不在 (長さゼロのアプリケーションデータが存在することではなく) を示すDCCP-RequestおよびDCCP-Responseパケットとは異なります。APIは、受信した長さゼロのデータグラムを受信側アプリケーションに報告すべきです (SHOULD)。
A DCCP-Ack packet MAY have a non-zero-length application data area, which essentially pads the DCCP-Ack to a desired length. Receivers MUST ignore the content of the application data area in DCCP-Ack packets.
DCCP-Ackパケットは、長さがゼロでないアプリケーションデータ領域を持ってもよく (MAY)、これは実質的にDCCP-Ackを希望の長さまでパディングします。受信者は、DCCP-Ackパケットのアプリケーションデータ領域の内容を無視しなければなりません (MUST)。
DCCP-Ack and DCCP-DataAck packets often include additional acknowledgement options, such as Ack Vector, as required by the congestion control mechanism in use.
DCCP-AckおよびDCCP-DataAckパケットには、使用中の輻輳制御メカニズムが必要とするAck Vectorなど、追加の確認応答オプションが含まれることがよくあります。
DCCP-CloseReq and DCCP-Close packets begin the handshake that normally terminates a connection. Either client or server may send a DCCP-Close packet, which will elicit a DCCP-Reset packet. Only the server can send a DCCP-CloseReq packet, which indicates that the server wants to close the connection but does not want to hold its TIMEWAIT state. Both packet types MUST use 48-bit sequence numbers (X=1).
DCCP-CloseReqおよびDCCP-Closeパケットは、通常は接続を終了するハンドシェイクを開始します。クライアントとサーバーのどちらもDCCP-Closeパケットを送信でき、これはDCCP-Resetパケットを引き出します。DCCP-CloseReqパケットを送信できるのはサーバーだけで、これはサーバーが接続を閉じたいが、TIMEWAIT状態を保持したくないことを示します。どちらのパケットタイプも、48ビットのシーケンス番号 (X=1) を使用しなければなりません (MUST)。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ Generic DCCP Header with X=1 (16 bytes) /
/ with Type=5 (DCCP-CloseReq) or 6 (DCCP-Close) /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ Acknowledgement Number Subheader (8 bytes) /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ Options and Padding /
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
/ Application Data Area (Ignored) /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
As with DCCP-Ack packets, DCCP-CloseReq and DCCP-Close packets MAY have non-zero-length application data areas, whose contents receivers MUST ignore.
DCCP-Ackパケットと同様に、DCCP-CloseReqおよびDCCP-Closeパケットは、長さがゼロでないアプリケーションデータ領域を持ってもよく (MAY)、受信者はその内容を無視しなければなりません (MUST)。
DCCP-Reset packets unconditionally shut down a connection. Connections normally terminate with a DCCP-Reset, but resets may be sent for other reasons, including bad port numbers, bad option behavior, incorrect ECN Nonce Echoes, and so forth. DCCP-Resets MUST use 48-bit sequence numbers (X=1).
DCCP-Resetパケットは、無条件に接続を停止します。接続は通常DCCP-Resetで終了しますが、不正なポート番号、不正なオプション動作、不正なECN Nonce Echoなど、他の理由でもリセットが送信されることがあります。DCCP-Resetは48ビットのシーケンス番号 (X=1) を使用しなければなりません (MUST)。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ Generic DCCP Header with X=1 (16 bytes) /
/ with Type=7 (DCCP-Reset) /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ Acknowledgement Number Subheader (8 bytes) /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reset Code | Data 1 | Data 2 | Data 3 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ Options and Padding /
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
/ Application Data Area (Error Text) /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Reset Code: 8 bits Represents the reason that the sender reset the DCCP connection.
Reset Code: 8ビット 送信者がDCCP接続をリセットした理由を表します。
Data 1, Data 2, and Data 3: 8 bits each The Data fields provide additional information about why the sender reset the DCCP connection. The meanings of these fields depend on the value of Reset Code.
Data 1, Data 2, and Data 3: 各8ビット Dataフィールドは、送信者がDCCP接続をリセットした理由に関する追加情報を提供します。これらのフィールドの意味は、Reset Codeの値に依存します。
Application Data Area: Error Text If present, Error Text is a human-readable text string encoded in Unicode UTF-8, and preferably in English, that describes the error in more detail. For example, a DCCP-Reset with Reset Code 11, "Aggression Penalty", might contain Error Text such as "Aggression Penalty: Received 3 bad ECN Nonce Echoes, assuming misbehavior".
Application Data Area: Error Text 存在する場合、Error TextはUnicode UTF-8でエンコードされた、人間が読めるテキスト文字列であり、望ましくは英語で、エラーをより詳しく記述します。たとえば、Reset Code 11「Aggression Penalty」のDCCP-Resetには、「Aggression Penalty: Received 3 bad ECN Nonce Echoes, assuming misbehavior」のようなError Textが含まれることがあります。
The following Reset Codes are currently defined. Unless otherwise specified, the Data 1, 2, and 3 fields MUST be set to 0 by the sender of the DCCP-Reset and ignored by its receiver. Section references describe concrete situations that will cause each Reset Code to be generated; they are not meant to be exhaustive.
現在、次のReset Codeが定義されています。特に規定のない限り、Data 1、2、3フィールドは、DCCP-Resetの送信者が0に設定しなければならず (MUST)、受信者によって無視されます。節の参照は、各Reset Codeが生成される具体的な状況を示すものであり、網羅的であることを意図していません。
0, "Unspecified" Indicates the absence of a meaningful Reset Code. Use of Reset Code 0 is NOT RECOMMENDED: the sender should choose a Reset Code that more clearly defines why the connection is being reset.
0, "Unspecified" 意味のあるReset Codeがないことを示します。Reset Code 0の使用は推奨されません (NOT RECOMMENDED)。送信者は、接続がリセットされる理由をより明確に定義するReset Codeを選択すべきでしょう。
1, "Closed" Normal connection close. See Section 8.3.
1, "Closed" 通常の接続クローズです。8.3節を参照してください。
2, "Aborted" The sending endpoint gave up on the connection because of lack of progress. See Sections 8.1.1 and 8.1.5.
2, "Aborted" 送信側エンドポイントが、進展がないために接続を断念しました。8.1.1項および8.1.5項を参照してください。
3, "No Connection" No connection exists. See Section 8.3.1.
3, "No Connection" 接続が存在しません。8.3.1項を参照してください。
4, "Packet Error" A valid packet arrived with unexpected type. For example, a DCCP-Data packet with valid header checksum and sequence numbers arrived at a connection in the REQUEST state. See Section 8.3.1. The Data 1 field equals the offending packet type as an eight-bit number; thus, an offending packet with Type 2 will result in a Data 1 value of 2.
4, "Packet Error" 予期しないタイプの有効なパケットが到着しました。たとえば、ヘッダチェックサムとシーケンス番号が有効なDCCP-Dataパケットが、REQUEST状態の接続に到着した場合です。8.3.1項を参照してください。Data 1フィールドには、問題のパケットのタイプが8ビットの数値で格納されます。したがって、Type 2の問題のパケットでは、Data 1の値は2になります。
5, "Option Error" An option was erroneous, and the error was serious enough to warrant resetting the connection. See Sections 6.6.7, 6.6.8, and 11.4. The Data 1 field equals the offending option type; Data 2 and Data 3 equal the first two bytes of option data (or zero if the option had less than two bytes of data).
5, "Option Error" オプションが誤っており、そのエラーが接続のリセットを正当化するほど重大でした。6.6.7項、6.6.8項、および11.4節を参照してください。Data 1フィールドには問題のオプションタイプが格納され、Data 2とData 3には、オプションデータの最初の2バイトが格納されます (オプションのデータが2バイト未満の場合はゼロ)。
6, "Mandatory Error" The sending endpoint could not process an option O that was immediately preceded by Mandatory. The Data fields report the option type and data of option O, using the format of Reset Code 5, "Option Error". See Section 5.8.2.
6, "Mandatory Error" 送信側エンドポイントが、直前にMandatoryが置かれたオプションOを処理できませんでした。Dataフィールドは、Reset Code 5「Option Error」の形式を使用して、オプションOのオプションタイプとデータを報告します。5.8.2項を参照してください。
7, "Connection Refused" The Destination Port didn't correspond to a port open for listening. Sent only in response to DCCP-Requests. See Section 8.1.3.
7, "Connection Refused" Destination Portが、リッスンのために開かれているポートに対応していませんでした。DCCP-Requestへの応答としてのみ送信されます。8.1.3項を参照してください。
8, "Bad Service Code" The Service Code didn't equal the service code attached to the Destination Port. Sent only in response to DCCP-Requests. See Section 8.1.3.
8, "Bad Service Code" Service Codeが、Destination Portに関連付けられたサービスコードと等しくありませんでした。DCCP-Requestへの応答としてのみ送信されます。8.1.3項を参照してください。
9, "Too Busy" The server is too busy to accept new connections. Sent only in response to DCCP-Requests. See Section 8.1.3.
9, "Too Busy" サーバーがビジー状態で、新しい接続を受け付けられません。DCCP-Requestへの応答としてのみ送信されます。8.1.3項を参照してください。
10, "Bad Init Cookie" The Init Cookie echoed by the client was incorrect or missing. See Section 8.1.4.
10, "Bad Init Cookie" クライアントがエコーしたInit Cookieが誤っているか、存在しませんでした。8.1.4項を参照してください。
11, "Aggression Penalty" This endpoint has detected congestion control-related misbehavior on the part of the other endpoint. See Section 12.3.
11, "Aggression Penalty" このエンドポイントは、相手エンドポイントによる輻輳制御に関する不正な動作を検出しました。12.3節を参照してください。
12-127, Reserved Receivers should treat these codes as they do Reset Code 0, "Unspecified".
12-127, Reserved 受信者は、これらのコードをReset Code 0「Unspecified」と同様に扱うべきです。
128-255, CCID-specific codes Semantics depend on the connection's CCIDs. See Section 10.3. Receivers should treat unknown CCID-specific Reset Codes as they do Reset Code 0, "Unspecified".
128-255, CCID-specific codes セマンティクスは接続のCCIDに依存します。10.3節を参照してください。受信者は、未知のCCID固有のReset Codeを、Reset Code 0「Unspecified」と同様に扱うべきです。
The following table summarizes this information.
次の表は、この情報をまとめたものです。
Reset
Code Name Data 1 Data 2 & 3
----- ---- ------ ----------
0 Unspecified 0 0
1 Closed 0 0
2 Aborted 0 0
3 No Connection 0 0
4 Packet Error pkt type 0
5 Option Error option # option data
6 Mandatory Error option # option data
7 Connection Refused 0 0
8 Bad Service Code 0 0
9 Too Busy 0 0
10 Bad Init Cookie 0 0
11 Aggression Penalty 0 0
12-127 Reserved
128-255 CCID-specific codes
Table 2: DCCP Reset Codes
表2: DCCP Reset Code
Options on DCCP-Reset packets are processed before the connection is shut down. This means that certain combinations of options, particularly involving Mandatory, may cause an endpoint to respond to a valid DCCP-Reset with another DCCP-Reset. This cannot lead to a reset storm; since the first endpoint has already reset the connection, the second DCCP-Reset will be ignored.
DCCP-Resetパケットのオプションは、接続が停止される前に処理されます。これは、特にMandatoryを伴うオプションの特定の組み合わせによって、エンドポイントが有効なDCCP-Resetに対して別のDCCP-Resetで応答する場合があることを意味します。最初のエンドポイントはすでに接続をリセット済みであるため、2番目のDCCP-Resetは無視されることから、これがリセットストームにつながることはありません。
DCCP-Sync packets help DCCP endpoints recover synchronization after bursts of loss and recover from half-open connections. Each valid received DCCP-Sync immediately elicits a DCCP-SyncAck. Both packet types MUST use 48-bit sequence numbers (X=1).
DCCP-Syncパケットは、DCCPエンドポイントが損失のバースト後に同期を回復し、ハーフオープン接続から回復するのを助けます。有効なDCCP-Syncを受信するたびに、ただちにDCCP-SyncAckが引き出されます。どちらのパケットタイプも、48ビットのシーケンス番号 (X=1) を使用しなければなりません (MUST)。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ Generic DCCP Header with X=1 (16 bytes) /
/ with Type=8 (DCCP-Sync) or 9 (DCCP-SyncAck) /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ Acknowledgement Number Subheader (8 bytes) /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ Options and Padding /
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
/ Application Data Area (Ignored) /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The Acknowledgement Number field has special semantics for DCCP-Sync and DCCP-SyncAck packets. First, the packet corresponding to a DCCP-Sync's Acknowledgement Number need not have been acknowledgeable. Thus, receivers MUST NOT assume that a packet was processed simply because it appears in the Acknowledgement Number field of a DCCP-Sync packet. This differs from all other packet types, where the Acknowledgement Number by definition corresponds to an acknowledgeable packet. Second, the Acknowledgement Number on any DCCP-SyncAck packet MUST correspond to the Sequence Number on an acknowledgeable DCCP-Sync packet. In the presence of reordering, this might not equal GSR.
Acknowledgement Numberフィールドは、DCCP-SyncおよびDCCP-SyncAckパケットでは特別なセマンティクスを持ちます。第一に、DCCP-SyncのAcknowledgement Numberに対応するパケットは、確認応答可能であったとは限りません。したがって、受信者は、パケットがDCCP-SyncパケットのAcknowledgement Numberフィールドに現れているというだけで、そのパケットが処理されたと仮定してはなりません (MUST NOT)。これは、Acknowledgement Numberが定義上、確認応答可能なパケットに対応する他のすべてのパケットタイプとは異なります。第二に、DCCP-SyncAckパケットのAcknowledgement Numberは、確認応答可能なDCCP-SyncパケットのSequence Numberに対応していなければなりません (MUST)。並べ替えが発生している場合、これはGSRと等しくならないことがあります。
As with DCCP-Ack packets, DCCP-Sync and DCCP-SyncAck packets MAY have non-zero-length application data areas, whose contents receivers MUST ignore. Padded DCCP-Sync packets may be useful when performing Path MTU discovery; see Section 14.
DCCP-Ackパケットと同様に、DCCP-SyncおよびDCCP-SyncAckパケットは、長さがゼロでないアプリケーションデータ領域を持ってもよく (MAY)、受信者はその内容を無視しなければなりません (MUST)。パディングされたDCCP-Syncパケットは、Path MTU探索を実行するときに有用な場合があります。14章を参照してください。
Any DCCP packet may contain options, which occupy space at the end of the DCCP header. Each option is a multiple of 8 bits in length. Individual options are not padded to multiples of 32 bits, and any option may begin on any byte boundary. However, the combination of all options MUST add up to a multiple of 32 bits; Padding options MUST be added as necessary to fill out option space to a word boundary. Any options present are included in the header checksum.
DCCPパケットにはオプションを含めることができ、オプションはDCCPヘッダの末尾の領域を占めます。各オプションの長さは8ビットの倍数です。個々のオプションは32ビットの倍数にパディングされず、任意のオプションが任意のバイト境界から始まってよいです。ただし、すべてのオプションを合わせた長さは32ビットの倍数にならなければならず (MUST)、オプション領域をワード境界まで埋めるために、必要に応じてPaddingオプションを追加しなければなりません (MUST)。存在するオプションは、ヘッダチェックサムに含まれます。
The first byte of an option is the option type. Options with types 0 through 31 are single-byte options. Other options are followed by a byte indicating the option's length. This length value includes the two bytes of option-type and option-length as well as any option-data bytes; it must therefore be greater than or equal to two.
オプションの最初のバイトはオプションタイプです。タイプ0から31のオプションは1バイトのオプションです。その他のオプションの後には、オプションの長さを示すバイトが続きます。この長さの値には、オプションタイプとオプション長の2バイト、およびオプションデータのバイトが含まれるため、2以上でなければなりません。
Options MUST be processed sequentially, starting with the first option in the packet header. Options with unknown types MUST be ignored. Also, options with nonsensical lengths (length byte less than two or more than the remaining space in the options portion of the header) MUST be ignored, and any option space following an option with nonsensical length MUST likewise be ignored. Unless otherwise specified, multiple occurrences of the same option MUST be processed independently; for some options, this will mean in practice that the last valid occurrence of an option takes precedence.
オプションは、パケットヘッダの最初のオプションから順に、逐次処理されなければなりません (MUST)。未知のタイプのオプションは無視されなければなりません (MUST)。また、無意味な長さ (長さのバイトが2未満、またはヘッダのオプション部分の残りの領域より大きい) を持つオプションも無視されなければならず (MUST)、無意味な長さを持つオプションに続くオプション領域も同様に無視されなければなりません (MUST)。特に規定のない限り、同じオプションが複数回現れた場合は、それぞれ独立に処理されなければなりません (MUST)。一部のオプションでは、実際には、そのオプションの最後の有効な出現が優先されることになります。
The following options are currently defined:
現在、次のオプションが定義されています。
Option DCCP- Section
Type Length Meaning Data? Reference
---- ------ ------- ----- ---------
0 1 Padding Y 5.8.1
1 1 Mandatory N 5.8.2
2 1 Slow Receiver Y 11.6
3-31 1 Reserved
32 variable Change L N 6.1
33 variable Confirm L N 6.2
34 variable Change R N 6.1
35 variable Confirm R N 6.2
36 variable Init Cookie N 8.1.4
37 3-8 NDP Count Y 7.7
38 variable Ack Vector [Nonce 0] N 11.4
39 variable Ack Vector [Nonce 1] N 11.4
40 variable Data Dropped N 11.7
41 6 Timestamp Y 13.1
42 6/8/10 Timestamp Echo Y 13.3
43 4/6 Elapsed Time N 13.2
44 6 Data Checksum Y 9.3
45-127 variable Reserved
128-255 variable CCID-specific options - 10.3
Table 3: DCCP Options
表3: DCCPオプション
Not all options are suitable for all packet types. For example, since the Ack Vector option is interpreted relative to the Acknowledgement Number, it isn't suitable on DCCP-Request and DCCP-Data packets, which have no Acknowledgement Number. If an option occurs on an unexpected packet type, it MUST generally be ignored; any such restrictions are mentioned in each option's description. The table summarizes the most common restriction: when the DCCP-Data? column value is N, the corresponding option MUST be ignored when received on a DCCP-Data packet. (Section 7.5.5 describes why such options are ignored as opposed to, say, causing a reset.)
すべてのオプションがすべてのパケットタイプに適しているわけではありません。たとえば、Ack VectorオプションはAcknowledgement Numberを基準に解釈されるため、Acknowledgement Numberを持たないDCCP-RequestおよびDCCP-Dataパケットには適していません。オプションが予期しないパケットタイプに現れた場合、一般にそのオプションは無視されなければなりません (MUST)。そのような制限は、各オプションの説明に記載されています。表は最も一般的な制限をまとめたものです。DCCP-Data?列の値がNの場合、対応するオプションは、DCCP-Dataパケットで受信されたときに無視されなければなりません (MUST)。(そのようなオプションがリセットを引き起こすのではなく無視される理由は、7.5.5項で説明します。)
Options with invalid values MUST be ignored unless otherwise specified. For example, any Data Checksum option with option length 4 MUST be ignored, since all valid Data Checksum options have option length 6.
無効な値を持つオプションは、特に規定のない限り無視されなければなりません (MUST)。たとえば、有効なData Checksumオプションはすべてオプション長が6であるため、オプション長が4のData Checksumオプションは無視されなければなりません (MUST)。
This section describes two generic options, Padding and Mandatory. Other options are described later.
この節では、PaddingとMandatoryの2つの汎用オプションについて説明します。その他のオプションは後で説明します。
+--------+
|00000000|
+--------+
Type=0
Padding is a single-byte "no-operation" option used to pad between or after options. If the length of a packet's other options is not a multiple of 32 bits, then Padding options are REQUIRED to pad out the options area to the length implied by Data Offset. Padding may also be used between options; for example, to align the beginning of a subsequent option on a 32-bit boundary. There is no guarantee that senders will use this option, so receivers must be prepared to process options even if they do not begin on a word boundary.
Paddingは1バイトの「no-operation」オプションであり、オプションの間または後ろをパディングするために使用されます。パケットの他のオプションの長さが32ビットの倍数でない場合、Data Offsetが示す長さまでオプション領域を埋めるために、Paddingオプションを使用しなければなりません (REQUIRED)。Paddingはオプションの間にも使用でき、たとえば、後続のオプションの先頭を32ビット境界に揃えるために使用できます。送信者がこのオプションを使用する保証はないため、受信者は、ワード境界から始まっていないオプションであっても処理できるよう備えていなければなりません。
+--------+
|00000001|
+--------+
Type=1
Mandatory is a single-byte option that marks the immediately following option as mandatory. Say that the immediately following option is O. Then the Mandatory option has no effect if the receiving DCCP endpoint understands and processes O. If the endpoint does not understand or process O, however, then it MUST reset the connection using Reset Code 6, "Mandatory Failure". For instance, the endpoint would reset the connection if it did not understand O's type; if it understood O's type, but not O's data; if O's data was invalid for O's type; if O was a feature negotiation option, and the endpoint did not understand the enclosed feature number; or if the endpoint understood O, but chose not to perform the action O implies. This list is not exhaustive and, in particular, individual option specifications may describe additional situations in which the endpoint should reset the connection and situations in which it should not.
Mandatoryは1バイトのオプションで、直後のオプションを必須としてマークします。直後のオプションをOとします。受信側のDCCPエンドポイントがOを理解して処理する場合、Mandatoryオプションは何の効果も持ちません。しかし、エンドポイントがOを理解しない、または処理しない場合は、Reset Code 6「Mandatory Failure」を使用して接続をリセットしなければなりません (MUST)。たとえば、エンドポイントは、Oのタイプを理解しない場合、Oのタイプは理解してもデータを理解しない場合、OのデータがOのタイプにとって無効である場合、Oが機能ネゴシエーションオプションで、エンドポイントが含まれている機能番号を理解しない場合、あるいはエンドポイントがOを理解したがOが意味するアクションを実行しないことを選択した場合に、接続をリセットします。このリストは網羅的ではなく、特に、個々のオプションの仕様が、エンドポイントが接続をリセットすべき追加の状況や、リセットすべきでない状況を記述していることがあります。
Mandatory options MUST NOT be sent on DCCP-Data packets, and any Mandatory options received on DCCP-Data packets MUST be ignored.
Mandatoryオプションは、DCCP-Dataパケットで送信してはならず (MUST NOT)、DCCP-Dataパケットで受信したMandatoryオプションは無視されなければなりません (MUST)。
The connection is in error and should be reset with Reset Code 5, "Option Error", if option O is absent (Mandatory was the last byte of the option list), or if option O equals Mandatory. However, the combination "Mandatory Padding" is valid, and MUST behave like two bytes of Padding.
オプションOが存在しない場合 (Mandatoryがオプションリストの最後のバイトだった場合)、またはオプションOがMandatoryと等しい場合、接続はエラーであり、Reset Code 5「Option Error」でリセットされるべきです。ただし、「Mandatory Padding」の組み合わせは有効であり、2バイトのPaddingと同様に動作しなければなりません (MUST)。
Section 6.6.9 describes the behavior of Mandatory feature negotiation options in more detail.
6.6.9項では、Mandatory機能ネゴシエーションオプションの動作をより詳しく説明します。
Four DCCP options, Change L, Confirm L, Change R, and Confirm R, are used to negotiate feature values. Change options initiate a negotiation; Confirm options complete that negotiation. The "L" options are sent by the feature location, and the "R" options are sent by the feature remote. Change options are retransmitted to ensure reliability.
4つのDCCPオプション、Change L、Confirm L、Change R、Confirm Rが、機能の値のネゴシエーションに使用されます。Changeオプションはネゴシエーションを開始し、Confirmオプションはそのネゴシエーションを完了します。「L」オプションはfeature locationが送信し、「R」オプションはfeature remoteが送信します。Changeオプションは、信頼性を確保するために再送されます。
All these options have the same format. The first byte of option data is the feature number, and the second and subsequent data bytes hold one or more feature values. The exact format of the feature value area depends on the feature type; see Section 6.3.
これらのオプションはすべて同じ形式を持ちます。オプションデータの最初のバイトは機能番号で、2バイト目以降のデータバイトには、1つ以上の機能の値が格納されます。機能の値の領域の正確な形式は、機能のタイプに依存します。6.3節を参照してください。
+--------+--------+--------+--------+--------
| Type | Length |Feature#| Value(s) ...
+--------+--------+--------+--------+--------
Together, the feature number and the option type ("L" or "R") uniquely identify the feature to which an option applies. The exact format of the Value(s) area depends on the feature number.
機能番号とオプションタイプ (「L」または「R」) が合わせて、オプションが適用される機能を一意に識別します。Value(s)領域の正確な形式は、機能番号に依存します。
Feature negotiation options MUST NOT be sent on DCCP-Data packets, and any feature negotiation options received on DCCP-Data packets MUST be ignored.
機能ネゴシエーションオプションは、DCCP-Dataパケットで送信してはならず (MUST NOT)、DCCP-Dataパケットで受信した機能ネゴシエーションオプションは無視されなければなりません (MUST)。
Change L and Change R options initiate feature negotiation. The option to use depends on the relevant feature's location: To start a negotiation for feature F/A, DCCP A will send a Change L option; to start a negotiation for F/B, it will send a Change R option. Change options are retransmitted until some response is received. They contain at least one Value, and thus have a length of at least 4.
Change LおよびChange Rオプションは、機能ネゴシエーションを開始します。使用するオプションは、対象の機能の位置に依存します。機能F/Aのネゴシエーションを開始するには、DCCP AはChange Lオプションを送信し、F/Bのネゴシエーションを開始するには、Change Rオプションを送信します。Changeオプションは、何らかの応答が受信されるまで再送されます。これらには少なくとも1つのValueが含まれるため、長さは少なくとも4です。
+--------+--------+--------+--------+--------
Change L: |00100000| Length |Feature#| Value(s) ...
+--------+--------+--------+--------+--------
Type=32
+--------+--------+--------+--------+--------
Change R: |00100010| Length |Feature#| Value(s) ...
+--------+--------+--------+--------+--------
Type=34
Confirm L and Confirm R options complete feature negotiation and are sent in response to Change R and Change L options, respectively. Confirm options MUST NOT be generated except in response to Change options. Confirm options need not be retransmitted, since Change options are retransmitted as necessary. The first byte of the Confirm option contains the feature number from the corresponding Change. Following this is the selected Value, and then possibly the sender's preference list.
Confirm LおよびConfirm Rオプションは、機能ネゴシエーションを完了し、それぞれChange RおよびChange Lオプションへの応答として送信されます。Confirmオプションは、Changeオプションへの応答以外で生成してはなりません (MUST NOT)。Changeオプションは必要に応じて再送されるため、Confirmオプションを再送する必要はありません。Confirmオプションの最初のバイトには、対応するChangeの機能番号が格納されます。その後に選択されたValueが続き、さらに送信者の優先リストが続くことがあります。
+--------+--------+--------+--------+--------
Confirm L: |00100001| Length |Feature#| Value(s) ...
+--------+--------+--------+--------+--------
Type=33
+--------+--------+--------+--------+--------
Confirm R: |00100011| Length |Feature#| Value(s) ...
+--------+--------+--------+--------+--------
Type=35
If an endpoint receives an invalid Change option -- with an unknown feature number, or an invalid value -- it will respond with an empty Confirm option containing the problematic feature number, but no value. Such options have length 3.
エンドポイントが、未知の機能番号や無効な値を持つ無効なChangeオプションを受信した場合、問題のある機能番号を含み、値を持たない空のConfirmオプションで応答します。このようなオプションの長さは3です。
Reconciliation rules determine how the two sets of preferences for a given feature are resolved into a unique result. The reconciliation rule depends only on the feature number. Each reconciliation rule must have the property that the result is uniquely determined given the contents of Change options sent by the two endpoints.
調整ルールは、ある機能について2組の優先順位をどのように一意の結果に解決するかを決定します。調整ルールは機能番号のみに依存します。各調整ルールは、2つのエンドポイントが送信したChangeオプションの内容が与えられれば、結果が一意に決まるという性質を持たなければなりません。
All current DCCP features use one of two reconciliation rules: server-priority ("SP") and non-negotiable ("NN").
現在のすべてのDCCP機能は、2つの調整ルールのいずれかを使用します。サーバー優先 (server-priority、「SP」) と、ネゴシエーション不可 (non-negotiable、「NN」) です。
The feature value is a fixed-length byte string (length determined by the feature number). Each Change option contains a list of values ordered by preference, with the most preferred value coming first. Each Confirm option contains the confirmed value, followed by the confirmer's preference list. Thus, the feature's current value will generally appear twice in Confirm options' data, once as the current value and once in the confirmer's preference list.
機能の値は固定長のバイト列です (長さは機能番号によって決まります)。各Changeオプションには、優先順に並べた値のリストが含まれ、最も優先される値が最初に来ます。各Confirmオプションには、確認された値に続いて、確認者の優先リストが含まれます。したがって、機能の現在の値は一般に、現在の値として1回、確認者の優先リストの中で1回の、計2回、Confirmオプションのデータに現れます。
To reconcile the preference lists, select the first entry in the server's list that also occurs in the client's list. If there is no shared entry, the feature's value MUST NOT change, and the Confirm option will confirm the feature's previous value (unless the Change option was Mandatory; see Section 6.6.9).
優先リストを調整するには、サーバーのリストの中で、クライアントのリストにも存在する最初のエントリを選択します。共通するエントリがない場合、機能の値を変更してはならず (MUST NOT)、Confirmオプションは機能の以前の値を確認します (ただし、ChangeオプションがMandatoryだった場合を除きます。6.6.9項を参照してください)。
The feature value is a byte string. Each option contains exactly one feature value. The feature location signals a new value by sending a Change L option. The feature remote MUST accept any valid value, responding with a Confirm R option containing the new value, and it MUST send empty Confirm R options in response to invalid values (unless the Change L option was Mandatory; see Section 6.6.9). Change R and Confirm L options MUST NOT be sent for non-negotiable features; see Section 6.6.8. Non-negotiable features use the feature negotiation mechanism to achieve reliability.
機能の値はバイト列です。各オプションには、ちょうど1つの機能の値が含まれます。feature locationは、Change Lオプションを送信することで新しい値を通知します。feature remoteは、有効な値であればどれでも受け入れ、新しい値を含むConfirm Rオプションで応答しなければならず (MUST)、無効な値に対しては空のConfirm Rオプションを送信しなければなりません (MUST) (Change LオプションがMandatoryだった場合を除きます。6.6.9項を参照してください)。ネゴシエーション不可の機能に対して、Change RおよびConfirm Lオプションを送信してはなりません (MUST NOT)。6.6.8項を参照してください。ネゴシエーション不可の機能は、信頼性を達成するために機能ネゴシエーションメカニズムを使用します。
This document defines the following feature numbers.
この文書は次の機能番号を定義します。
Rec'n Initial Section
Number Meaning Rule Value Req'd Reference
------ ------- ----- ----- ----- ---------
0 Reserved
1 Congestion Control ID (CCID) SP 2 Y 10
2 Allow Short Seqnos SP 0 Y 7.6.1
3 Sequence Window NN 100 Y 7.5.2
4 ECN Incapable SP 0 N 12.1
5 Ack Ratio NN 2 N 11.3
6 Send Ack Vector SP 0 N 11.5
7 Send NDP Count SP 0 N 7.7.2
8 Minimum Checksum Coverage SP 0 N 9.2.1
9 Check Data Checksum SP 0 N 9.3.1
10-127 Reserved
128-255 CCID-specific features 10.3
Table 4: DCCP Feature Numbers
表4: DCCP機能番号
Rec'n Rule The reconciliation rule used for the feature. SP means server-priority, NN means non-negotiable.
Rec'n Rule その機能に使用される調停規則。SP はサーバー優先 (server-priority)、NN はネゴシエーション不可 (non-negotiable) を意味します。
Initial Value The initial value for the feature. Every feature has a known initial value.
Initial Value その機能の初期値。すべての機能には既知の初期値があります。
Req'd This column is "Y" if and only if every DCCP implementation MUST understand the feature. If it is "N", then the feature behaves like an extension (see Section 15), and it is safe to respond to Change options for the feature with empty Confirm options. Of course, a CCID might require the feature; a DCCP that implements CCID 2 MUST support Ack Ratio and Send Ack Vector, for example.
Req'd この列が "Y" であるのは、すべてのDCCP実装がその機能を理解しなければならない (MUST) 場合に限ります。"N" の場合、その機能は拡張のように動作し(第15節を参照)、その機能に対するChangeオプションに空のConfirmオプションで応答しても安全です。もちろん、CCIDがその機能を必要とすることもあります。たとえば、CCID 2を実装するDCCPは Ack Ratio と Send Ack Vector をサポートしなければなりません (MUST)。
Here are three example feature negotiations for features located at the server, the first two for the Congestion Control ID feature, the last for the Ack Ratio.
以下に、サーバーに位置する機能に対する3つの機能ネゴシエーションの例を示します。最初の2つは Congestion Control ID 機能、最後は Ack Ratio に関するものです。
Client Server
------ ------
1. Change R(CCID, 2 3 1) -->
("2 3 1" is client's preference list)
2. <-- Confirm L(CCID, 3, 3 2 1)
(3 is the negotiated value;
"3 2 1" is server's pref list)
* agreement that CCID/Server = 3 *
1. XXX <-- Change L(CCID, 3 2 1)
2. Retransmission:
<-- Change L(CCID, 3 2 1)
3. Confirm R(CCID, 3, 2 3 1) -->
* agreement that CCID/Server = 3 *
1. <-- Change L(Ack Ratio, 3)
2. Confirm R(Ack Ratio, 3) -->
* agreement that Ack Ratio/Server = 3 *
This example shows a simultaneous negotiation.
この例は同時ネゴシエーションを示しています。
Client Server
------ ------
1a. Change R(CCID, 2 3 1) -->
b. <-- Change L(CCID, 3 2 1)
2a. <-- Confirm L(CCID, 3, 3 2 1)
b. Confirm R(CCID, 3, 2 3 1) -->
* agreement that CCID/Server = 3 *
Here are the byte encodings of several Change and Confirm options. Each option is sent by DCCP A.
以下は、いくつかのChangeオプションとConfirmオプションのバイト列表現です。各オプションはDCCP Aから送信されます。
Change L(CCID, 2 3) = 32,5,1,2,3 DCCP B should change CCID/A's value (feature number 1, a server-priority feature); DCCP A's preferred values are 2 and 3, in that preference order.
Change L(CCID, 2 3) = 32,5,1,2,3 DCCP Bは CCID/A の値(機能番号1、サーバー優先の機能)を変更するべきです。DCCP Aの優先する値は2と3で、この順に優先されます。
Change L(Sequence Window, 1024) = 32,9,3,0,0,0,0,4,0 DCCP B should change Sequence Window/A's value (feature number 3, a non-negotiable feature) to the 6-byte string 0,0,0,0,4,0 (the value 1024).
Change L(Sequence Window, 1024) = 32,9,3,0,0,0,0,4,0 DCCP Bは Sequence Window/A の値(機能番号3、ネゴシエーション不可の機能)を6バイトの文字列 0,0,0,0,4,0(値1024)に変更するべきです。
Confirm L(CCID, 2, 2 3) = 33,6,1,2,2,3 DCCP A has changed CCID/A's value to 2; its preferred values are 2 and 3, in that preference order.
Confirm L(CCID, 2, 2 3) = 33,6,1,2,2,3 DCCP Aは CCID/A の値を2に変更しました。優先する値は2と3で、この順に優先されます。
Empty Confirm L(126) = 33,3,126 DCCP A doesn't implement feature number 126, or DCCP B's proposed value for feature 126/A was invalid.
Empty Confirm L(126) = 33,3,126 DCCP Aは機能番号126を実装していないか、DCCP Bが提案した機能126/Aの値が無効でした。
Change R(CCID, 3 2) = 34,5,1,3,2 DCCP B should change CCID/B's value; DCCP A's preferred values are 3 and 2, in that preference order.
Change R(CCID, 3 2) = 34,5,1,3,2 DCCP Bは CCID/B の値を変更するべきです。DCCP Aの優先する値は3と2で、この順に優先されます。
Confirm R(CCID, 2, 3 2) = 35,6,1,2,3,2 DCCP A has changed CCID/B's value to 2; its preferred values were 3 and 2, in that preference order.
Confirm R(CCID, 2, 3 2) = 35,6,1,2,3,2 DCCP Aは CCID/B の値を2に変更しました。優先していた値は3と2で、この順に優先されます。
Confirm R(Sequence Window, 1024) = 35,9,3,0,0,0,0,4,0 DCCP A has changed Sequence Window/B's value to the 6-byte string 0,0,0,0,4,0 (the value 1024).
Confirm R(Sequence Window, 1024) = 35,9,3,0,0,0,0,4,0 DCCP Aは Sequence Window/B の値を6バイトの文字列 0,0,0,0,4,0(値1024)に変更しました。
Empty Confirm R(126) = 35,3,126 DCCP A doesn't implement feature number 126, or DCCP B's proposed value for feature 126/B was invalid.
Empty Confirm R(126) = 35,3,126 DCCP Aは機能番号126を実装していないか、DCCP Bが提案した機能126/Bの値が無効でした。
A few basic rules govern feature negotiation option exchange.
機能ネゴシエーションのオプション交換には、いくつかの基本規則があります。
1. Every non-reordered Change option gets a Confirm option in response.
1. 順序入れ替わりのないすべてのChangeオプションには、応答としてConfirmオプションが返されます。
2. Change options are retransmitted until a response for the latest Change is received.
2. Changeオプションは、最新のChangeに対する応答を受信するまで再送されます。
3. Feature negotiation options are processed in strictly-increasing order by Sequence Number.
3. 機能ネゴシエーションオプションは、シーケンス番号の厳密な昇順で処理されます。
The rest of this section describes the consequences of these rules in more detail.
この節の残りでは、これらの規則の帰結をより詳しく説明します。
Change options are generated when a DCCP endpoint wants to change the value of some feature. Generally, this will happen at the beginning of a connection, although it may happen at any time. We say the endpoint "generates" or "sends" a Change L or Change R option, but of course the option must be attached to a packet. The endpoint may attach the option to a packet it would have generated anyway (such as a DCCP-Request), or it may create a "feature negotiation packet", often a DCCP-Ack or DCCP-Sync, just to carry the option. Feature negotiation packets are controlled by the relevant congestion control mechanism. For example, DCCP A may send a DCCP-Ack or DCCP-Sync for feature negotiation only if the B-to-A CCID would allow sending a DCCP-Ack. In addition, an endpoint SHOULD generate at most one feature negotiation packet per round-trip time.
Changeオプションは、DCCPエンドポイントが何らかの機能の値を変更したいときに生成されます。通常は接続の開始時に行われますが、いつでも行われる可能性があります。エンドポイントがChange LまたはChange Rオプションを「生成する」あるいは「送信する」と言いますが、もちろんオプションはパケットに付加されなければなりません。エンドポイントは、そのオプションをもともと生成するはずだったパケット(DCCP-Requestなど)に付加してもよく、オプションを運ぶためだけに「機能ネゴシエーションパケット」(多くはDCCP-AckまたはDCCP-Sync)を作成してもかまいません。機能ネゴシエーションパケットは、関連する輻輳制御機構によって制御されます。たとえば、DCCP Aが機能ネゴシエーションのためにDCCP-AckまたはDCCP-Syncを送信できるのは、B-to-AのCCIDがDCCP-Ackの送信を許可する場合に限られます。加えて、エンドポイントは、ラウンドトリップ時間あたり最大1つの機能ネゴシエーションパケットを生成すべきです (SHOULD)。
On receiving a Change L or Change R option, a DCCP endpoint examines the included preference list, reconciles that with its own preference list, calculates the new value, and sends back a Confirm R or Confirm L option, respectively, informing its peer of the new value or that the feature was not understood. Every non-reordered Change option MUST result in a corresponding Confirm option, and any packet including a Confirm option MUST carry an Acknowledgement Number. (Section 6.6.4 describes how Change reordering is detected and handled.) Generated Confirm options may be attached to packets that would have been sent anyway (such as DCCP-Response or DCCP-SyncAck) or to new feature negotiation packets, as described above.
Change LまたはChange Rオプションを受信すると、DCCPエンドポイントは、含まれている優先リストを調べ、それを自身の優先リストと調停して新しい値を計算し、それぞれConfirm RまたはConfirm Lオプションを返送して、相手に新しい値、または機能が理解されなかったことを知らせます。順序入れ替わりのないすべてのChangeオプションは、対応するConfirmオプションを生じさせなければならず (MUST)、Confirmオプションを含むパケットはAcknowledgement Numberを持たなければなりません (MUST)。(Changeの順序入れ替わりがどのように検出・処理されるかは第6.6.4節で説明します。)生成されたConfirmオプションは、もともと送信されるはずだったパケット(DCCP-ResponseやDCCP-SyncAckなど)、または上述の新しい機能ネゴシエーションパケットに付加されてもかまいません。
The Change-sending endpoint MUST wait to receive a corresponding Confirm option before changing its stored feature value. The Confirm-sending endpoint changes its stored feature value as soon as it sends the Confirm.
Changeを送信するエンドポイントは、保存している機能の値を変更する前に、対応するConfirmオプションを受信するのを待たなければなりません (MUST)。Confirmを送信するエンドポイントは、Confirmを送信した時点で、保存している機能の値を変更します。
A packet MAY contain more than one feature negotiation option, possibly including two options that refer to the same feature; as usual, the options are processed sequentially.
パケットは複数の機能ネゴシエーションオプションを含んでもよく (MAY)、同じ機能を参照する2つのオプションを含むこともあります。通常どおり、オプションは順番に処理されます。
DCCP endpoints exist in one of three states relative to each feature. STABLE is the normal state, where the endpoint knows the feature's value and thinks the other endpoint agrees. An endpoint enters the CHANGING state when it first sends a Change for the feature and returns to STABLE once it receives a corresponding Confirm. The final state, UNSTABLE, indicates that an endpoint in CHANGING state changed its preference list but has not yet transmitted a Change option with the new preference list.
DCCPエンドポイントは、各機能に関して3つの状態のいずれかにあります。STABLE は通常の状態で、エンドポイントが機能の値を把握しており、相手のエンドポイントも同意していると考えている状態です。エンドポイントは、その機能に対して最初にChangeを送信したときに CHANGING 状態に入り、対応するConfirmを受信すると STABLE に戻ります。最後の状態 UNSTABLE は、CHANGING 状態のエンドポイントが優先リストを変更したが、新しい優先リストを持つChangeオプションをまだ送信していないことを示します。
Feature state transitions at a feature location are implemented according to this diagram. The diagram ignores sequence number and option validity issues; these are handled explicitly in the pseudocode that follows.
機能の位置 (feature location) における機能状態の遷移は、この図に従って実装されます。この図ではシーケンス番号とオプションの有効性の問題は無視しています。これらは、後に続く擬似コードで明示的に扱われます。
timeout/
rcv Confirm R app/protocol evt : snd Change L rcv non-ack
: ignore +---------------------------------------+ : snd Change L
+----+ | | +----+
| v | rcv Change R v | v
+------------+ rcv Confirm R : calc new value, +------------+
| | : accept value snd Confirm L | |
| STABLE |<-----------------------------------| CHANGING |
| | rcv empty Confirm R | |
+------------+ : revert to old value +------------+
| ^ | ^
+----+ pref list | | snd
rcv Change R changes | | Change L
: calc new value, snd Confirm L v |
+------------+
+---| |
rcv Confirm/Change R | | UNSTABLE |
: ignore +-->| |
+------------+
Feature locations SHOULD use the following pseudocode, which corresponds to the state diagram, to react to each feature negotiation option on each valid non-Data packet received. The pseudocode refers to "P.seqno" and "P.ackno", which are properties of the packet; "O.type" and "O.len", which are properties of the option; "FGSR" and "FGSS", which are properties of the connection and handle reordering as described in Section 6.6.4; "F.state", which is the feature's state (STABLE, CHANGING, or UNSTABLE); and "F.value", which is the feature's value.
feature location は、有効な非Dataパケットを受信するたびに各機能ネゴシエーションオプションに反応するために、状態図に対応する次の擬似コードを使用すべきです (SHOULD)。この擬似コードは、パケットの属性である "P.seqno" と "P.ackno"、オプションの属性である "O.type" と "O.len"、接続の属性であり第6.6.4節で説明するように順序入れ替わりを扱う "FGSR" と "FGSS"、機能の状態(STABLE、CHANGING、または UNSTABLE)である "F.state"、そして機能の値である "F.value" を参照します。
First, check for unknown features (Section 6.6.7);
If F is unknown,
If the option was Mandatory, /* Section 6.6.9 */
Reset connection and return
Otherwise, if O.type == Change R,
Send Empty Confirm L on a future packet
Return
Return
Second, check for reordering (Section 6.6.4);
If F.state == UNSTABLE or P.seqno <= FGSR
or (O.type == Confirm R and P.ackno < FGSS),
Ignore option and return
Third, process Change R options;
If O.type == Change R,
If the option's value is valid, /* Section 6.6.8 */
Calculate new value
Send Confirm L on a future packet
Set F.state := STABLE
Otherwise, if the option was Mandatory,
Reset connection and return
Otherwise,
Send Empty Confirm L on a future packet
/* Remain in existing state. If that's CHANGING, this
endpoint will retransmit its Change L option later. */
Fourth, process Confirm R options (but only in CHANGING state).
If F.state == CHANGING and O.type == Confirm R,
If O.len > 3, /* nonempty */
If the option's value is valid,
Set F.value := new value
Otherwise,
Reset connection and return
Set F.state := STABLE
Versions of this diagram and pseudocode are also used by feature remotes; simply switch the "L"s and "R"s, so that the relevant options are Change R and Confirm L.
この図と擬似コードの版は feature remote でも使用されます。"L" と "R" を入れ替えるだけで、関連するオプションは Change R と Confirm L になります。
Packets containing Change and Confirm options might be lost or delayed by the network. Therefore, Change options are repeatedly transmitted to achieve reliability. We refer to this as "retransmission", although of course there are no packet-level retransmissions in DCCP: a Change option that is sent again will be sent on a new packet with a new sequence number.
ChangeオプションやConfirmオプションを含むパケットは、ネットワークによって失われたり遅延したりする可能性があります。そのため、信頼性を実現するためにChangeオプションは繰り返し送信されます。これを「再送」と呼びますが、DCCPにはパケットレベルの再送はもちろんありません。再度送信されるChangeオプションは、新しいシーケンス番号を持つ新しいパケットで送信されます。
A CHANGING endpoint transmits another Change option once it realizes that it has not heard back from the other endpoint. The new Change option need not contain the same payload as the original; reordering protection will ensure that agreement is reached based on the most recently transmitted option.
CHANGING 状態のエンドポイントは、相手のエンドポイントから応答がないことに気づいた時点で、別のChangeオプションを送信します。新しいChangeオプションの内容は元のものと同じである必要はありません。順序入れ替わりに対する保護により、最も最近送信されたオプションに基づいて合意に達することが保証されます。
A CHANGING endpoint MUST continue retransmitting Change options until it gets some response or the connection terminates.
CHANGING 状態のエンドポイントは、何らかの応答を得るか接続が終了するまで、Changeオプションの再送を続けなければなりません (MUST)。
Endpoints SHOULD use an exponential-backoff timer to decide when to retransmit Change options. (Packets generated specifically for feature negotiation MUST use such a timer.) The timer interval is initially set to not less than one round-trip time, and should back off to not less than 64 seconds. The backoff protects against delayed agreement due to the reordering protection algorithms described in the next section. Again, endpoints may piggyback Change options on packets they would have sent anyway or create new packets to carry the options. Any new packets are controlled by the relevant congestion-control mechanism.
エンドポイントは、Changeオプションをいつ再送するかを決定するために、指数バックオフタイマーを使用すべきです (SHOULD)。(機能ネゴシエーションのために特に生成されるパケットは、そのようなタイマーを使用しなければなりません (MUST)。)タイマー間隔は、最初は1ラウンドトリップ時間以上に設定され、64秒以上までバックオフすべきです。このバックオフは、次節で説明する順序入れ替わり保護アルゴリズムによる合意の遅延から保護します。ここでも、エンドポイントはもともと送信するはずだったパケットにChangeオプションを便乗させてもよく、オプションを運ぶ新しいパケットを作成してもかまいません。新しいパケットは、関連する輻輳制御機構によって制御されます。
Confirm options are never retransmitted, but the Confirm-sending endpoint MUST generate a Confirm option after every non-reordered Change.
Confirmオプションは再送されませんが、Confirmを送信するエンドポイントは、順序入れ替わりのないChangeのたびにConfirmオプションを生成しなければなりません (MUST)。
Reordering might cause packets containing Change and Confirm options to arrive in an unexpected order. Endpoints MUST ignore feature negotiation options that do not arrive in strictly-increasing order by Sequence Number. The rest of this section presents two algorithms that fulfill this requirement.
順序入れ替わりにより、ChangeオプションやConfirmオプションを含むパケットが予期しない順序で到着することがあります。エンドポイントは、シーケンス番号の厳密な昇順で到着しない機能ネゴシエーションオプションを無視しなければなりません (MUST)。この節の残りでは、この要件を満たす2つのアルゴリズムを示します。
The first algorithm introduces two sequence number variables that each endpoint maintains for the connection.
最初のアルゴリズムでは、各エンドポイントが接続ごとに保持する2つのシーケンス番号変数を導入します。
FGSR Feature Greatest Sequence Number Received: The greatest sequence number received, considering only valid packets that contained one or more feature negotiation options (Change and/or Confirm). This value is initialized to ISR - 1.
FGSR Feature Greatest Sequence Number Received: 1つ以上の機能ネゴシエーションオプション(Changeおよび/またはConfirm)を含んでいた有効なパケットのみを対象として、受信した最大のシーケンス番号。この値は ISR - 1 に初期化されます。
FGSS Feature Greatest Sequence Number Sent: The greatest sequence number sent, considering only packets that contained one or more new Change options. A Change option is new if and only if it was generated during a transition from the STABLE or UNSTABLE state to the CHANGING state; Change options generated within the CHANGING state are retransmissions and MUST have exactly the same contents as previously transmitted options, allowing tolerance for reordering. FGSS is initialized to ISS.
FGSS Feature Greatest Sequence Number Sent: 1つ以上の新しいChangeオプションを含んでいたパケットのみを対象として、送信した最大のシーケンス番号。Changeオプションが新しいのは、STABLE または UNSTABLE 状態から CHANGING 状態への遷移中に生成された場合に限ります。CHANGING 状態内で生成されたChangeオプションは再送であり、以前に送信されたオプションと全く同じ内容でなければならず (MUST)、これにより順序入れ替わりへの耐性が得られます。FGSS は ISS に初期化されます。
Each endpoint checks two conditions on sequence numbers to decide whether to process received feature negotiation options.
各エンドポイントは、受信した機能ネゴシエーションオプションを処理するかどうかを決定するために、シーケンス番号に関する2つの条件を確認します。
1. If a packet's Sequence Number is less than or equal to FGSR, then its Change options MUST be ignored.
1. パケットのSequence NumberがFGSR以下である場合、そのChangeオプションは無視されなければなりません (MUST)。
2. If a packet's Sequence Number is less than or equal to FGSR, if it has no Acknowledgement Number, OR if its Acknowledgement Number is less than FGSS, then its Confirm options MUST be ignored.
2. パケットのSequence NumberがFGSR以下である場合、Acknowledgement Numberを持たない場合、またはAcknowledgement NumberがFGSSより小さい場合は、そのConfirmオプションは無視されなければなりません (MUST)。
Alternatively, an endpoint MAY maintain separate FGSR and FGSS values for every feature. FGSR(F/X) would equal the greatest sequence number received, considering only packets that contained Change or Confirm options applying to feature F/X; FGSS(F/X) would be defined similarly. This algorithm requires more state, but is slightly more forgiving to multiple overlapped feature negotiations. Either algorithm MAY be used; the first algorithm, with connection-wide FGSR and FGSS variables, is RECOMMENDED.
あるいは、エンドポイントは機能ごとに個別の FGSR と FGSS の値を保持してもよいです (MAY)。FGSR(F/X) は、機能 F/X に適用されるChangeまたはConfirmオプションを含んでいたパケットのみを対象として、受信した最大のシーケンス番号に等しくなり、FGSS(F/X) も同様に定義されます。このアルゴリズムはより多くの状態を必要としますが、複数の重複した機能ネゴシエーションに対してやや寛容です。どちらのアルゴリズムを使用してもよいです (MAY)。接続全体にわたる FGSR と FGSS 変数を使用する最初のアルゴリズムが推奨されます (RECOMMENDED)。
One consequence of these rules is that a CHANGING endpoint will ignore any Confirm option that does not acknowledge the latest Change option sent. This ensures that agreement, once achieved, used the most recent available information about the endpoints' preferences.
これらの規則の帰結の1つは、CHANGING 状態のエンドポイントが、送信した最新のChangeオプションに対する確認応答になっていないConfirmオプションをすべて無視することです。これにより、いったん合意に達した場合、その合意はエンドポイントの優先事項に関する利用可能な最新の情報を用いたものであることが保証されます。
Endpoints are allowed to change their preference lists at any time. However, an endpoint that changes its preference list while in the CHANGING state MUST transition to the UNSTABLE state. It will transition back to CHANGING once it has transmitted a Change option with the new preference list. This ensures that agreement is based on active preference lists. Without the UNSTABLE state, simultaneous negotiation -- where the endpoints began independent negotiations for the same feature at the same time -- might lead to the negotiation's terminating with the endpoints thinking the feature had different values.
エンドポイントは、いつでも優先リストを変更することが許されています。ただし、CHANGING 状態にある間に優先リストを変更したエンドポイントは、UNSTABLE 状態に遷移しなければなりません (MUST)。新しい優先リストを持つChangeオプションを送信した時点で、CHANGING に戻ります。これにより、合意が有効な優先リストに基づくことが保証されます。UNSTABLE 状態がないと、同時ネゴシエーション(エンドポイントが同じ機能について同時に独立したネゴシエーションを開始した場合)において、エンドポイント同士が機能の値を異なるものと考えたままネゴシエーションが終了してしまう可能性があります。
The two endpoints might simultaneously open negotiation for the same feature, after which an endpoint in the CHANGING state will receive a Change option for the same feature. Such received Change options can act as responses to the original Change options. The CHANGING endpoint MUST examine the received Change's preference list, reconcile that with its own preference list (as expressed in its generated Change options), and generate the corresponding Confirm option. It can then transition to the STABLE state.
2つのエンドポイントが同じ機能について同時にネゴシエーションを開始することがあり、その後、CHANGING 状態のエンドポイントは同じ機能に対するChangeオプションを受信します。このように受信したChangeオプションは、元のChangeオプションに対する応答として機能できます。CHANGING 状態のエンドポイントは、受信したChangeの優先リストを調べ、それを(自身が生成したChangeオプションで表現されている)自身の優先リストと調停し、対応するConfirmオプションを生成しなければなりません (MUST)。その後、STABLE 状態に遷移できます。
Endpoints may receive Change options referring to feature numbers they do not understand -- for instance, when an extended DCCP converses with a non-extended DCCP. Endpoints MUST respond to unknown Change options with Empty Confirm options (that is, Confirm options containing no data), which inform the CHANGING endpoint that the feature was not understood. However, if the Change option was Mandatory, the connection MUST be reset; see Section 6.6.9.
エンドポイントは、理解できない機能番号を参照するChangeオプションを受信することがあります。たとえば、拡張されたDCCPが拡張されていないDCCPと通信する場合です。エンドポイントは、未知のChangeオプションに対して空のConfirmオプション(つまりデータを含まないConfirmオプション)で応答しなければならず (MUST)、これにより CHANGING 状態のエンドポイントに機能が理解されなかったことが伝えられます。ただし、そのChangeオプションが Mandatory であった場合、接続はリセットされなければなりません (MUST)。第6.6.9節を参照してください。
On receiving an empty Confirm option for some feature, the CHANGING endpoint MUST transition back to the STABLE state, leaving the feature's value unchanged. Section 15 suggests that the default value for any extension feature correspond to "extension not available".
ある機能に対する空のConfirmオプションを受信した場合、CHANGING 状態のエンドポイントは、機能の値を変更しないまま STABLE 状態に戻らなければなりません (MUST)。第15節は、拡張機能の既定値を「拡張が利用不可」に対応させることを提案しています。
Some features are required to be understood by all DCCPs (see Section 6.4). The CHANGING endpoint SHOULD reset the connection (with Reset Code 5, "Option Error") if it receives an empty Confirm option for such a feature.
一部の機能は、すべてのDCCPで理解されることが求められています(第6.4節を参照)。CHANGING 状態のエンドポイントは、そのような機能に対する空のConfirmオプションを受信した場合、(Reset Code 5, "Option Error" で)接続をリセットすべきです (SHOULD)。
Since Confirm options are generated only in response to Change options, an endpoint should never receive a Confirm option referring to a feature number it does not understand. Nevertheless, endpoints MUST ignore any such options they receive.
Confirmオプションは、Changeオプションへの応答としてのみ生成されるため、エンドポイントが理解できない機能番号を参照するConfirmオプションを受信することは、本来ないはずです。それでも、エンドポイントはそのようなオプションを受信した場合、無視しなければなりません (MUST)。
A DCCP endpoint might receive a Change or Confirm option for a known feature that lists one or more values that it does not understand. Some, but not all, such options are invalid, depending on the relevant reconciliation rule (Section 6.3). For instance:
DCCPエンドポイントは、既知の機能に対して、理解できない値を1つ以上列挙したChangeまたはConfirmオプションを受信することがあります。そのようなオプションは、関連する調停規則(第6.3節)に応じて、無効なものもあれば無効でないものもあります。たとえば次のとおりです。
o All features have length limitations, and options with invalid lengths are invalid. For example, the Ack Ratio feature takes 16-bit values, so valid "Confirm R(Ack Ratio)" options have option length 5.
o すべての機能には長さの制限があり、長さが無効なオプションは無効です。たとえば、Ack Ratio 機能は16ビットの値を取るため、有効な "Confirm R(Ack Ratio)" オプションのオプション長は5です。
o Some non-negotiable features have value limitations. The Ack Ratio feature takes two-byte, non-zero integer values, so a "Change L(Ack Ratio, 0)" option is never valid. Note that server-priority features do not have value limitations, since unknown values are handled as a matter of course.
o 一部のネゴシエーション不可の機能には値の制限があります。Ack Ratio 機能は2バイトの非ゼロ整数値を取るため、"Change L(Ack Ratio, 0)" オプションは決して有効ではありません。なお、サーバー優先の機能には値の制限はありません。未知の値は当然のものとして処理されるためです。
o Any Confirm option that selects the wrong value, based on the two preference lists and the relevant reconciliation rule, is invalid.
o 2つの優先リストと関連する調停規則に基づいて、誤った値を選択しているConfirmオプションは、無効です。
However, unexpected Confirm options -- that refer to unknown feature numbers, or that don't appear to be part of a current negotiation -- are not invalid, although they are ignored by the receiver.
ただし、予期しないConfirmオプション(未知の機能番号を参照するもの、または現在のネゴシエーションの一部とは思われないもの)は無効ではありませんが、受信側によって無視されます。
An endpoint receiving an invalid Change option MUST respond with the corresponding empty Confirm option. An endpoint receiving an invalid Confirm option MUST reset the connection, with Reset Code 5, "Option Error".
無効なChangeオプションを受信したエンドポイントは、対応する空のConfirmオプションで応答しなければなりません (MUST)。無効なConfirmオプションを受信したエンドポイントは、Reset Code 5, "Option Error" で接続をリセットしなければなりません (MUST)。
Change options may be preceded by Mandatory options (Section 5.8.2). Mandatory Change options are processed like normal Change options except that the following failure cases will cause the receiver to reset the connection with Reset Code 6, "Mandatory Failure", rather than send a Confirm option. The connection MUST be reset if:
Changeオプションの前には Mandatory オプション(第5.8.2節)が置かれることがあります。Mandatory なChangeオプションは通常のChangeオプションと同様に処理されますが、次の失敗ケースでは、受信側はConfirmオプションを送信するのではなく、Reset Code 6, "Mandatory Failure" で接続をリセットします。次の場合、接続はリセットされなければなりません (MUST)。
o the Change option's feature number was not understood;
o Changeオプションの機能番号が理解されなかった場合。
o the Change option's value was invalid, and the receiver would normally have sent an empty Confirm option in response; or
o Changeオプションの値が無効であり、通常であれば受信側が応答として空のConfirmオプションを送信するはずだった場合。
o for server-priority features, there was no shared entry in the two endpoints' preference lists.
o サーバー優先の機能で、2つのエンドポイントの優先リストに共通のエントリがなかった場合。
Other failure cases do not cause connection reset; in particular, reordering protection may cause a Mandatory Change option to be ignored without resetting the connection.
その他の失敗ケースでは接続はリセットされません。特に、順序入れ替わり保護によって、Mandatory なChangeオプションが接続をリセットせずに無視されることがあります。
Confirm options behave identically and have the same reset conditions whether or not they are Mandatory.
Confirmオプションは、Mandatory であるかどうかにかかわらず、同一に動作し、同じリセット条件を持ちます。
DCCP uses sequence numbers to arrange packets into sequence, to detect losses and network duplicates, and to protect against attackers, half-open connections, and the delivery of very old packets. Every packet carries a Sequence Number; most packet types carry an Acknowledgement Number as well.
DCCPはシーケンス番号を用いて、パケットを順序付け、損失とネットワーク上の重複を検出し、攻撃者、半開接続、および非常に古いパケットの配送から保護します。すべてのパケットはSequence Numberを持ち、ほとんどのパケットタイプはAcknowledgement Numberも持ちます。
DCCP sequence numbers are packet based. That is, Sequence Numbers generated by each endpoint increase by one, modulo 2^48, per packet. Even DCCP-Ack and DCCP-Sync packets, and other packets that don't carry user data, increment the Sequence Number. Since DCCP is an unreliable protocol, there are no true retransmissions, but effective retransmissions, such as retransmissions of DCCP-Request packets, also increment the Sequence Number. This lets DCCP implementations detect network duplication, retransmissions, and acknowledgement loss; it is a significant departure from TCP practice.
DCCPのシーケンス番号はパケット単位です。つまり、各エンドポイントが生成するSequence Numberは、パケットごとに1ずつ、2^48を法として増加します。DCCP-AckやDCCP-Syncパケット、およびユーザーデータを運ばないその他のパケットであっても、Sequence Numberは増加します。DCCPは信頼性のないプロトコルであるため、真の再送はありませんが、DCCP-Requestパケットの再送のような実質的な再送でも、Sequence Numberは増加します。これにより、DCCP実装はネットワーク上の重複、再送、および確認応答の損失を検出できます。これはTCPの慣行からの大きな逸脱です。
DCCP endpoints maintain a set of sequence number variables for each connection.
DCCPエンドポイントは、接続ごとに一連のシーケンス番号変数を保持します。
ISS The Initial Sequence Number Sent by this endpoint. This equals the Sequence Number of the first DCCP-Request or DCCP-Response sent.
ISS このエンドポイントが送信する Initial Sequence Number。送信された最初のDCCP-RequestまたはDCCP-ResponseのSequence Numberに等しくなります。
ISR The Initial Sequence Number Received from the other endpoint. This equals the Sequence Number of the first DCCP-Request or DCCP-Response received.
ISR 相手のエンドポイントから受信した Initial Sequence Number。受信した最初のDCCP-RequestまたはDCCP-ResponseのSequence Numberに等しくなります。
GSS The Greatest Sequence Number Sent by this endpoint. Here, and elsewhere, "greatest" is measured in circular sequence space.
GSS このエンドポイントが送信した Greatest Sequence Number。ここでも他の箇所でも、「最大」は循環するシーケンス空間で測られます。
GSR The Greatest Sequence Number Received from the other endpoint on an acknowledgeable packet. (Section 7.4 defines this term.)
GSR 確認応答可能なパケットについて、相手のエンドポイントから受信した Greatest Sequence Number。(この用語は第7.4節で定義されます。)
GAR The Greatest Acknowledgement Number Received from the other endpoint on an acknowledgeable packet that was not a DCCP-Sync.
GAR DCCP-Syncではない確認応答可能なパケットについて、相手のエンドポイントから受信した Greatest Acknowledgement Number。
Some other variables are derived from these primitives.
その他のいくつかの変数は、これらの基本変数から導出されます。
SWL and SWH (Sequence Number Window Low and High) The extremes of the validity window for received packets' Sequence Numbers.
SWL と SWH (Sequence Number Window Low and High) 受信パケットのSequence Numberに対する有効性ウィンドウの両端。
AWL and AWH (Acknowledgement Number Window Low and High) The extremes of the validity window for received packets' Acknowledgement Numbers.
AWL と AWH (Acknowledgement Number Window Low and High) 受信パケットのAcknowledgement Numberに対する有効性ウィンドウの両端。
The endpoints' initial sequence numbers are set by the first DCCP-Request and DCCP-Response packets sent. Initial sequence numbers MUST be chosen to avoid two problems:
エンドポイントの初期シーケンス番号は、最初に送信されるDCCP-RequestパケットとDCCP-Responseパケットによって設定されます。初期シーケンス番号は、次の2つの問題を避けるように選択されなければなりません (MUST)。
o delivery of old packets, where packets lingering in the network from an old connection are delivered to a new connection with the same addresses and port numbers; and
o 古いパケットの配送。古い接続からネットワーク内に残存していたパケットが、同じアドレスとポート番号を持つ新しい接続に配送されること。
o sequence number attacks, where an attacker can guess the sequence numbers that a future connection would use [M85].
o シーケンス番号攻撃。攻撃者が、将来の接続が使用するシーケンス番号を推測できること [M85]。
These problems are the same as those faced by TCP, and DCCP implementations SHOULD use TCP's strategies to avoid them [RFC793, RFC1948]. The rest of this section explains these strategies in more detail.
これらの問題はTCPが直面するものと同じであり、DCCP実装はこれらを避けるためにTCPの戦略を使用すべきです (SHOULD) [RFC793, RFC1948]。この節の残りでは、これらの戦略をより詳しく説明します。
To address the first problem, an implementation MUST ensure that the initial sequence number for a given <source address, source port, destination address, destination port> 4-tuple doesn't overlap with recent sequence numbers on previous connections with the same 4-tuple. ("Recent" means sent within 2 maximum segment lifetimes, or 4 minutes.) The implementation MUST additionally ensure that the lower 24 bits of the initial sequence number don't overlap with the lower 24 bits of recent sequence numbers (unless the implementation plans to avoid short sequence numbers; see Section 7.6). An implementation that has state for a recent connection with the same 4-tuple can pick a good initial sequence number explicitly. Otherwise, it could tie initial sequence number selection to some clock, such as the 4-microsecond clock used by TCP [RFC793]. Two separate clocks may be required, one for the upper 24 bits and one for the lower 24 bits.
1つ目の問題に対処するため、実装は、与えられた <source address, source port, destination address, destination port> の4つ組の初期シーケンス番号が、同じ4つ組を持つ以前の接続の最近のシーケンス番号と重複しないことを保証しなければなりません (MUST)。(「最近」とは、最大セグメント生存時間の2倍、つまり4分以内に送信されたことを意味します。)実装はさらに、初期シーケンス番号の下位24ビットが最近のシーケンス番号の下位24ビットと重複しないことも保証しなければなりません (MUST)(ただし、実装が短いシーケンス番号を使用しない予定である場合を除きます。第7.6節を参照)。同じ4つ組を持つ最近の接続の状態を保持している実装は、適切な初期シーケンス番号を明示的に選べます。そうでなければ、TCPが使用する4マイクロ秒クロック [RFC793] のような何らかのクロックに初期シーケンス番号の選択を結び付けることができます。上位24ビット用と下位24ビット用に、2つの別々のクロックが必要になる場合があります。
To address the second problem, an implementation MUST provide each 4-tuple with an independent initial sequence number space. Then, opening a connection doesn't provide any information about initial sequence numbers on other connections to the same host. [RFC1948] achieves this by adding a cryptographic hash of the 4-tuple and a secret to each initial sequence number. For the secret, [RFC1948] recommends a combination of some truly random data [RFC4086], an administratively installed passphrase, the endpoint's IP address, and the endpoint's boot time, but truly random data is sufficient. Care should be taken when the secret is changed; such a change alters all initial sequence number spaces, which might make an initial sequence number for some 4-tuple equal a recently sent sequence number for the same 4-tuple. To avoid this problem, the endpoint might remember dead connection state for each 4-tuple or stay quiet for 2 maximum segment lifetimes around such a change.
2つ目の問題に対処するため、実装は各4つ組に独立した初期シーケンス番号空間を提供しなければなりません (MUST)。そうすれば、接続を開いても、同じホストへの他の接続の初期シーケンス番号に関する情報は得られません。[RFC1948] は、各初期シーケンス番号に、4つ組と秘密情報の暗号学的ハッシュを加えることでこれを実現しています。秘密情報として、[RFC1948] は、真にランダムなデータ [RFC4086]、管理者が設定したパスフレーズ、エンドポイントのIPアドレス、およびエンドポイントの起動時刻の組み合わせを推奨していますが、真にランダムなデータだけで十分です。秘密情報を変更するときは注意が必要です。そのような変更はすべての初期シーケンス番号空間を変えてしまい、ある4つ組の初期シーケンス番号が、同じ4つ組で最近送信されたシーケンス番号と等しくなる可能性があります。この問題を避けるため、エンドポイントは各4つ組について終了した接続の状態を記憶しておくか、そのような変更の前後で最大セグメント生存時間の2倍の間、通信を控えるのがよいでしょう。
DCCP endpoints, like TCP endpoints, must take care before initiating connections when they boot. In particular, they MUST NOT send packets whose sequence numbers are close to the sequence numbers of packets lingering in the network from before the boot. The simplest way to enforce this rule is for DCCP endpoints to avoid sending any packets until one maximum segment lifetime (2 minutes) after boot.
DCCPエンドポイントは、TCPエンドポイントと同様に、起動時に接続を開始する前に注意しなければなりません。特に、起動前からネットワーク内に残存しているパケットのシーケンス番号に近いシーケンス番号を持つパケットを送信してはなりません (MUST NOT)。この規則を守る最も簡単な方法は、DCCPエンドポイントが起動後、最大セグメント生存時間(2分)が経過するまでパケットを一切送信しないことです。
Other enforcement mechanisms include remembering recent sequence numbers across boots and reserving the upper 8 or so bits of initial sequence numbers for a persistent counter that decrements by two each boot. (The latter mechanism would require disallowing packets with short sequence numbers; see Section 7.6.1.)
その他の強制機構として、起動をまたいで最近のシーケンス番号を記憶しておく方法や、初期シーケンス番号の上位8ビット程度を、起動ごとに2ずつ減少する永続カウンタ用に予約しておく方法があります。(後者の機構では、短いシーケンス番号を持つパケットを許可しないようにする必要があります。第7.6.1節を参照してください。)
Cumulative acknowledgements are meaningless in an unreliable protocol. Therefore, DCCP's Acknowledgement Number field has a different meaning from TCP's.
信頼性のないプロトコルでは、累積確認応答に意味はありません。したがって、DCCPのAcknowledgement NumberフィールドはTCPのものとは異なる意味を持ちます。
A received packet is classified as acknowledgeable if and only if its header was successfully processed by the receiving DCCP. In terms of the pseudocode in Section 8.5, a received packet becomes acknowledgeable when the receiving endpoint reaches Step 8. This means, for example, that all acknowledgeable packets have valid header checksums and sequence numbers. A sent packet's Acknowledgement Number MUST equal the sending endpoint's GSR, the Greatest Sequence Number Received on an acknowledgeable packet, for all packet types except DCCP-Sync and DCCP-SyncAck.
受信したパケットが確認応答可能 (acknowledgeable) に分類されるのは、そのヘッダーが受信側のDCCPによって正常に処理された場合に限ります。第8.5節の擬似コードで言えば、受信したパケットは、受信エンドポイントがステップ8に到達した時点で確認応答可能になります。たとえば、確認応答可能なすべてのパケットは、有効なヘッダーチェックサムとシーケンス番号を持つことを意味します。送信パケットのAcknowledgement Numberは、DCCP-SyncとDCCP-SyncAck以外のすべてのパケットタイプにおいて、送信エンドポイントの GSR、すなわち確認応答可能なパケットで受信した Greatest Sequence Number に等しくなければなりません (MUST)。
"Acknowledgeable" does not refer to data processing. Even acknowledgeable packets may have their application data dropped, due to receive buffer overflow or corruption, for instance. Data Dropped options report these data losses when necessary, letting congestion control mechanisms distinguish between network losses and endpoint losses. This issue is discussed further in Sections 11.4 and 11.7.
「確認応答可能」は、データ処理を指すものではありません。確認応答可能なパケットであっても、たとえば受信バッファのオーバーフローや破損により、アプリケーションデータが破棄されることがあります。Data Dropped オプションは、必要に応じてこれらのデータ損失を報告し、輻輳制御機構がネットワークでの損失とエンドポイントでの損失を区別できるようにします。この問題については、第11.4節と第11.7節でさらに議論します。
DCCP-Sync and DCCP-SyncAck packets' Acknowledgement Numbers differ as follows: The Acknowledgement Number on a DCCP-Sync packet corresponds to a received packet, but not necessarily to an acknowledgeable packet; in particular, it might correspond to an out-of-sync packet whose options were not processed. The Acknowledgement Number on a DCCP-SyncAck packet always corresponds to an acknowledgeable DCCP-Sync packet; it might be less than GSR in the presence of reordering.
DCCP-SyncパケットとDCCP-SyncAckパケットのAcknowledgement Numberは、次のように異なります。DCCP-SyncパケットのAcknowledgement Numberは受信したパケットに対応しますが、必ずしも確認応答可能なパケットに対応するとは限りません。特に、オプションが処理されなかった同期外れ (out-of-sync) のパケットに対応することがあります。DCCP-SyncAckパケットのAcknowledgement Numberは、常に確認応答可能なDCCP-Syncパケットに対応します。順序入れ替わりがある場合、GSR より小さくなることがあります。
Any DCCP endpoint might receive packets that are not actually part of the current connection. For instance, the network might deliver an old packet, an attacker might attempt to hijack a connection, or the other endpoint might crash, causing a half-open connection.
DCCPエンドポイントは、実際には現在の接続の一部ではないパケットを受信することがあります。たとえば、ネットワークが古いパケットを配送したり、攻撃者が接続を乗っ取ろうとしたり、相手のエンドポイントがクラッシュして半開接続が生じたりする場合があります。
DCCP, like TCP, uses sequence number checks to detect these cases. Packets whose Sequence and/or Acknowledgement Numbers are out of range are called sequence-invalid and are not processed normally.
DCCPは、TCPと同様に、これらの場合を検出するためにシーケンス番号の検査を用います。Sequence Numberまたは Acknowledgement Number(あるいはその両方)が範囲外であるパケットは、シーケンス無効 (sequence-invalid) と呼ばれ、通常どおりには処理されません。
Unlike TCP, DCCP requires a synchronization mechanism to recover from large bursts of loss. One endpoint might send so many packets during a burst of loss that when one of its packets finally got through, the other endpoint would label its Sequence Number as invalid. A handshake of DCCP-Sync and DCCP-SyncAck packets recovers from this case.
TCPとは異なり、DCCPでは、大規模なバースト損失から回復するために同期機構が必要です。損失のバースト中に一方のエンドポイントが非常に多くのパケットを送信すると、そのパケットの1つがようやく到達したときに、相手のエンドポイントがそのSequence Numberを無効と判定する可能性があります。DCCP-SyncパケットとDCCP-SyncAckパケットのハンドシェイクにより、この場合から回復します。
Each DCCP endpoint defines sequence validity windows that are subsets of the Sequence and Acknowledgement Number spaces. These windows correspond to packets the endpoint expects to receive in the next few round-trip times. The Sequence and Acknowledgement Number windows always contain GSR and GSS, respectively. The window widths are controlled by Sequence Window features for the two half-connections.
各DCCPエンドポイントは、Sequence NumberおよびAcknowledgement Number空間の部分集合である、シーケンス有効性ウィンドウを定義します。これらのウィンドウは、エンドポイントが今後数ラウンドトリップ時間のうちに受信すると予期するパケットに対応します。Sequence Numberウィンドウは常に GSR を含み、Acknowledgement Numberウィンドウは常に GSS を含みます。ウィンドウ幅は、2つの半接続の Sequence Window 機能によって制御されます。
The Sequence Number validity window for packets from DCCP B is [SWL, SWH]. This window always contains GSR, the Greatest Sequence Number Received on a sequence-valid packet from DCCP B. It is W packets wide, where W is the value of the Sequence Window/B feature. One-fourth of the sequence window, rounded down, is less than or equal to GSR, and three-fourths is greater than GSR. (This asymmetric placement assumes that bursts of loss are more common in the network than significant reorderings.)
DCCP Bからのパケットに対するSequence Number有効性ウィンドウは [SWL, SWH] です。このウィンドウは常に GSR、すなわちDCCP Bからのシーケンス有効なパケットで受信した Greatest Sequence Number を含みます。その幅はWパケットで、Wは Sequence Window/B 機能の値です。シーケンスウィンドウの4分の1(切り捨て)は GSR 以下であり、4分の3は GSR より大きくなります。(この非対称な配置は、ネットワークでは大きな順序入れ替わりよりも損失のバーストのほうが一般的であるという想定に基づいています。)
invalid | valid Sequence Numbers | invalid
<---------*|*===========*=======================*|*--------->
GSR -|GSR + 1 - GSR GSR +|GSR + 1 +
floor(W/4)|floor(W/4) ceil(3W/4)|ceil(3W/4)
= SWL = SWH
The Acknowledgement Number validity window for packets from DCCP B is [AWL, AWH]. The high end of the window, AWH, equals GSS, the Greatest Sequence Number Sent by DCCP A; the window is W' packets wide, where W' is the value of the Sequence Window/A feature.
DCCP Bからのパケットに対するAcknowledgement Number有効性ウィンドウは [AWL, AWH] です。ウィンドウの上端 AWH は、DCCP Aが送信した Greatest Sequence Number である GSS に等しく、ウィンドウの幅はW'パケットで、W'は Sequence Window/A 機能の値です。
invalid | valid Acknowledgement Numbers | invalid
<---------*|*===================================*|*--------->
GSS - W'|GSS + 1 - W' GSS|GSS + 1
= AWL = AWH
SWL and AWL are initially adjusted so that they are not less than the initial Sequence Numbers received and sent, respectively:
SWL と AWL は、それぞれ受信および送信した初期Sequence Number以上になるように、最初に調整されます。
SWL := max(GSR + 1 - floor(W/4), ISR), AWL := max(GSS + 1 - W', ISS).
SWL := max(GSR + 1 - floor(W/4), ISR), AWL := max(GSS + 1 - W', ISS).
These adjustments MUST be applied only at the beginning of the connection. (Long-lived connections may wrap sequence numbers so that they appear to be less than ISR or ISS; the adjustments MUST NOT be applied in that case.)
これらの調整は、接続の開始時にのみ適用されなければなりません (MUST)。(長寿命の接続では、シーケンス番号が一周して ISR や ISS より小さく見えることがあります。その場合、調整を適用してはなりません (MUST NOT)。)
The Sequence Window/A feature determines the width of the Sequence Number validity window used by DCCP B and the width of the Acknowledgement Number validity window used by DCCP A. DCCP A sends a "Change L(Sequence Window, W)" option to notify DCCP B that the Sequence Window/A value is W.
Sequence Window/A 機能は、DCCP Bが使用するSequence Number有効性ウィンドウの幅と、DCCP Aが使用するAcknowledgement Number有効性ウィンドウの幅を決定します。DCCP Aは、Sequence Window/A の値がWであることをDCCP Bに通知するために、"Change L(Sequence Window, W)" オプションを送信します。
Sequence Window has feature number 3 and is non-negotiable. It takes 48-bit (6-byte) integer values, like DCCP sequence numbers. Change and Confirm options for Sequence Window are therefore 9 bytes long. New connections start with Sequence Window 100 for both endpoints. The minimum valid Sequence Window value is Wmin = 32. The maximum valid Sequence Window value is Wmax = 2^46 - 1 = 70368744177663. Change options suggesting Sequence Window values out of this range are invalid and MUST be handled accordingly.
Sequence Window の機能番号は3で、ネゴシエーション不可です。DCCPのシーケンス番号と同様に、48ビット(6バイト)の整数値を取ります。したがって、Sequence Window に対するChangeオプションとConfirmオプションの長さは9バイトです。新しい接続は、両エンドポイントとも Sequence Window 100で始まります。Sequence Window の有効な最小値は Wmin = 32 です。有効な最大値は Wmax = 2^46 - 1 = 70368744177663 です。この範囲外の Sequence Window 値を提案するChangeオプションは無効であり、それに応じて処理されなければなりません (MUST)。
A proper Sequence Window/A value must reflect the number of packets DCCP A expects to be in flight. Only DCCP A can anticipate this number. Values that are too small increase the risk of the endpoints getting out sync after bursts of loss, and values that are much too small can prevent productive communication whether or not there is loss. On the other hand, too-large values increase the risk of connection hijacking; Section 7.5.5 quantifies this risk. One good guideline is for each endpoint to set Sequence Window to about five times the maximum number of packets it expects to send in a round-trip time. Endpoints SHOULD send Change L(Sequence Window) options, as necessary, as the connection progresses. Also, an endpoint MUST NOT persistently send more than its Sequence Window number of packets per round-trip time; that is, DCCP A MUST NOT persistently send more than Sequence Window/A packets per RTT.
適切な Sequence Window/A の値は、DCCP Aが飛行中 (in flight) にあると予期するパケット数を反映していなければなりません。この数を予測できるのはDCCP Aだけです。値が小さすぎると、損失のバースト後にエンドポイントが同期外れになるリスクが高まり、値がはるかに小さすぎると、損失の有無にかかわらず有意な通信ができなくなることがあります。一方、大きすぎる値は接続乗っ取りのリスクを高めます。このリスクについては第7.5.5節で定量化します。よい指針の1つは、各エンドポイントが Sequence Window を、1ラウンドトリップ時間に送信すると予期する最大パケット数の約5倍に設定することです。エンドポイントは、接続の進行に応じて必要に応じて Change L(Sequence Window) オプションを送信すべきです (SHOULD)。また、エンドポイントは、1ラウンドトリップ時間あたりに Sequence Window の数を超えるパケットを継続的に送信してはなりません (MUST NOT)。つまり、DCCP Aは、RTTあたり Sequence Window/A を超えるパケットを継続的に送信してはなりません (MUST NOT)。
Sequence-validity depends on the received packet's type. This table shows the sequence and acknowledgement number checks applied to each packet; a packet is sequence-valid if it passes both tests, and sequence-invalid if it does not. Many of the checks refer to the sequence and acknowledgement number validity windows [SWL, SWH] and [AWL, AWH] defined in Section 7.5.1.
シーケンス有効性は、受信パケットのタイプに依存します。この表は、各パケットに適用されるシーケンス番号と確認応答番号の検査を示します。パケットは両方の検査に合格すればシーケンス有効、そうでなければシーケンス無効です。検査の多くは、第7.5.1節で定義されたシーケンス番号および確認応答番号の有効性ウィンドウ [SWL, SWH] と [AWL, AWH] を参照します。
Acknowledgement Number
Packet Type Sequence Number Check Check
----------- --------------------- ----------------------
DCCP-Request SWL <= seqno <= SWH (*) N/A
DCCP-Response SWL <= seqno <= SWH (*) AWL <= ackno <= AWH
DCCP-Data SWL <= seqno <= SWH N/A
DCCP-Ack SWL <= seqno <= SWH AWL <= ackno <= AWH
DCCP-DataAck SWL <= seqno <= SWH AWL <= ackno <= AWH
DCCP-CloseReq GSR < seqno <= SWH GAR <= ackno <= AWH
DCCP-Close GSR < seqno <= SWH GAR <= ackno <= AWH
DCCP-Reset GSR < seqno <= SWH GAR <= ackno <= AWH
DCCP-Sync SWL <= seqno AWL <= ackno <= AWH
DCCP-SyncAck SWL <= seqno AWL <= ackno <= AWH
(*) Check not applied if connection is in LISTEN or REQUEST state.
(*) 接続が LISTEN または REQUEST 状態にある場合、この検査は適用されません。
In general, packets are sequence-valid if their Sequence and Acknowledgement Numbers lie within the corresponding valid windows, [SWL, SWH] and [AWL, AWH]. The exceptions to this rule are as follows:
一般に、パケットは、そのSequence NumberとAcknowledgement Numberが対応する有効なウィンドウ [SWL, SWH] および [AWL, AWH] の範囲内にあれば、シーケンス有効です。この規則の例外は次のとおりです。
o Since DCCP-CloseReq, DCCP-Close, and DCCP-Reset packets end a connection, they cannot have Sequence Numbers less than or equal to GSR, or Acknowledgement Numbers less than GAR.
o DCCP-CloseReq、DCCP-Close、DCCP-Resetパケットは接続を終了させるため、GSR以下のSequence Numberや、GARより小さいAcknowledgement Numberを持つことはできません。
o DCCP-Sync and DCCP-SyncAck Sequence Numbers are not strongly checked. These packet types exist specifically to get the endpoints back into sync; checking their Sequence Numbers would eliminate their usefulness.
o DCCP-SyncとDCCP-SyncAckのSequence Numberは、厳密には検査されません。これらのパケットタイプは、エンドポイントを同期状態に戻すために存在しているので、それらのSequence Numberを検査すると有用性が失われてしまいます。
The lenient checks on DCCP-Sync and DCCP-SyncAck packets allow continued operation after unusual events, such as endpoint crashes and large bursts of loss, but there's no need for leniency in the absence of unusual events -- that is, during ongoing successful communication. Therefore, DCCP implementations SHOULD use the following, more stringent checks for active connections, where a connection is considered active if it has received valid packets from the other endpoint within the last three round-trip times.
DCCP-SyncパケットとDCCP-SyncAckパケットに対する寛容な検査により、エンドポイントのクラッシュや大規模な損失のバーストといった異常事態の後も動作を継続できますが、異常事態がない場合、つまり通信が正常に継続している間は、寛容である必要はありません。したがって、DCCP実装は、アクティブな接続に対して、次のより厳格な検査を使用すべきです (SHOULD)。ここで、接続がアクティブであるとは、過去3ラウンドトリップ時間以内に相手のエンドポイントから有効なパケットを受信している場合を指します。
Acknowledgement Number
Packet Type Sequence Number Check Check
----------- --------------------- ----------------------
DCCP-Sync SWL <= seqno <= SWH AWL <= ackno <= AWH
DCCP-SyncAck SWL <= seqno <= SWH AWL <= ackno <= AWH
Finally, an endpoint MAY apply the following more stringent checks to DCCP-CloseReq, DCCP-Close, and DCCP-Reset packets, further lowering the probability of successful blind attacks using those packet types.
最後に、エンドポイントはDCCP-CloseReq、DCCP-Close、DCCP-Resetパケットに対して次のより厳格な検査を適用してもよく (MAY)、これらのパケットタイプを用いたブラインド攻撃が成功する確率をさらに下げられます。
Since these checks can cause extra synchronization overhead and delay connection closing when packets are lost, they should be considered experimental.
これらの検査は、パケットが失われたときに追加の同期オーバーヘッドを生じさせ、接続の終了を遅らせる可能性があるため、実験的なものとみなすべきです。
Acknowledgement Number
Packet Type Sequence Number Check Check
----------- --------------------- ----------------------
DCCP-CloseReq seqno == GSR + 1 GAR <= ackno <= AWH
DCCP-Close seqno == GSR + 1 GAR <= ackno <= AWH
DCCP-Reset seqno == GSR + 1 GAR <= ackno <= AWH
Note that sequence-validity is only one of the validity checks applied to received packets.
シーケンス有効性は、受信パケットに適用される有効性検査の1つにすぎないことに注意してください。
Endpoints respond to received sequence-invalid packets as follows.
エンドポイントは、シーケンス無効なパケットを受信した場合、次のように応答します。
o Any sequence-invalid DCCP-Sync or DCCP-SyncAck packet MUST be ignored.
o シーケンス無効なDCCP-SyncまたはDCCP-SyncAckパケットは、無視されなければなりません (MUST)。
o A sequence-invalid DCCP-Reset packet MUST elicit a DCCP-Sync packet in response (subject to a possible rate limit). This response packet MUST use a new Sequence Number, and thus will increase GSS; GSR will not change, however, since the received packet was sequence-invalid. The response packet's Acknowledgement Number MUST equal GSR.
o シーケンス無効なDCCP-Resetパケットは、応答としてDCCP-Syncパケットを引き出さなければなりません (MUST)(レート制限の可能性があります)。この応答パケットは新しいSequence Numberを使用しなければならず (MUST)、したがって GSS が増加します。ただし、受信したパケットがシーケンス無効だったため、GSR は変化しません。応答パケットのAcknowledgement Numberは GSR に等しくなければなりません (MUST)。
o Any other sequence-invalid packet MUST elicit a similar DCCP-Sync packet, except that the response packet's Acknowledgement Number MUST equal the sequence-invalid packet's Sequence Number.
o その他のシーケンス無効なパケットは、同様のDCCP-Syncパケットを引き出さなければなりません (MUST)。ただし、応答パケットのAcknowledgement Numberは、シーケンス無効なパケットのSequence Numberに等しくなければなりません (MUST)。
On receiving a sequence-valid DCCP-Sync packet, the peer endpoint (say, DCCP B) MUST update its GSR variable and reply with a DCCP-SyncAck packet. The DCCP-SyncAck packet's Acknowledgement Number will equal the DCCP-Sync's Sequence Number, which is not necessarily GSR. Upon receiving this DCCP-SyncAck, which will be sequence-valid since it acknowledges the DCCP-Sync, DCCP A will update its GSR variable, and the endpoints will be back in sync. As an exception, if the peer endpoint is in the REQUEST state, it MUST respond with a DCCP-Reset instead of a DCCP-SyncAck. This serves to clean up DCCP A's half-open connection.
シーケンス有効なDCCP-Syncパケットを受信した場合、相手のエンドポイント(たとえばDCCP B)は、GSR 変数を更新し、DCCP-SyncAckパケットで応答しなければなりません (MUST)。DCCP-SyncAckパケットのAcknowledgement Numberは、DCCP-SyncのSequence Numberに等しくなりますが、これは必ずしも GSR ではありません。DCCP Aがこの DCCP-SyncAck を受信すると、それはDCCP-Syncを確認応答しているのでシーケンス有効となり、DCCP Aは GSR 変数を更新して、エンドポイント同士は同期状態に戻ります。例外として、相手のエンドポイントが REQUEST 状態にある場合は、DCCP-SyncAckの代わりにDCCP-Resetで応答しなければなりません (MUST)。これにより、DCCP Aの半開接続が解消されます。
To protect against denial-of-service attacks, DCCP implementations SHOULD impose a rate limit on DCCP-Syncs sent in response to sequence-invalid packets, such as not more than eight DCCP-Syncs per second.
サービス拒否攻撃から保護するため、DCCP実装は、シーケンス無効なパケットへの応答として送信するDCCP-Syncに対してレート制限を課すべきです (SHOULD)。たとえば、1秒あたり8個以下のDCCP-Syncとします。
DCCP endpoints MUST NOT process sequence-invalid packets except, perhaps, by generating a DCCP-Sync. For instance, options MUST NOT be processed. An endpoint MAY temporarily preserve sequence-invalid packets in case they become valid later, however; this can reduce the impact of bursts of loss by delivering more packets to the application. In particular, an endpoint MAY preserve sequence-invalid packets for up to 2 round-trip times. If, within that time, the relevant sequence windows change so that the packets become sequence-valid, the endpoint MAY process them again.
DCCPエンドポイントは、DCCP-Syncを生成する場合を除き、シーケンス無効なパケットを処理してはなりません (MUST NOT)。たとえば、オプションを処理してはなりません (MUST NOT)。ただし、エンドポイントは、後で有効になる場合に備えて、シーケンス無効なパケットを一時的に保存してもよいです (MAY)。これにより、より多くのパケットをアプリケーションに配送でき、損失のバーストの影響を軽減できます。特に、エンドポイントはシーケンス無効なパケットを最大2ラウンドトリップ時間まで保存してもよいです (MAY)。その間に関連するシーケンスウィンドウが変化してパケットがシーケンス有効になった場合、エンドポイントはそれらを再度処理してもよいです (MAY)。
Note that sequence-invalid DCCP-Reset packets cause DCCP-Syncs to be generated. This is because endpoints in an unsynchronized state (CLOSED, REQUEST, and LISTEN) might not have enough information to generate a proper DCCP-Reset on the first try. For example, if a peer endpoint is in CLOSED state and receives a DCCP-Data packet, it cannot guess the right Sequence Number to use on the DCCP-Reset it generates (since the DCCP-Data packet has no Acknowledgement Number). The DCCP-Sync generated in response to this bad reset serves as a challenge, and contains enough information for the peer to generate a proper DCCP-Reset. However, the new DCCP-Reset may carry a different Reset Code than the original DCCP-Reset; probably the new Reset Code will be 3, "No Connection". The endpoint SHOULD use information from the original DCCP-Reset when possible.
シーケンス無効なDCCP-Resetパケットは、DCCP-Syncを生成させることに注意してください。これは、非同期状態(CLOSED、REQUEST、LISTEN)のエンドポイントが、最初の試行で適切なDCCP-Resetを生成するのに十分な情報を持っていない場合があるためです。たとえば、相手のエンドポイントが CLOSED 状態でDCCP-Dataパケットを受信した場合、DCCP-DataパケットにはAcknowledgement Numberがないため、生成するDCCP-Resetに使用する正しいSequence Numberを推測できません。この不正なリセットに応答して生成されるDCCP-Syncはチャレンジとして機能し、相手が適切なDCCP-Resetを生成するのに十分な情報を含んでいます。ただし、新しいDCCP-Resetは、元のDCCP-Resetとは異なるReset Codeを持つ場合があります。おそらく新しいReset Codeは 3, "No Connection" になります。エンドポイントは、可能であれば元のDCCP-Resetの情報を使用すべきです (SHOULD)。
Sequence and Acknowledgement Numbers form DCCP's main line of defense against attackers. An attacker that cannot guess sequence numbers cannot easily manipulate or hijack a DCCP connection, and requirements like careful initial sequence number choice eliminate the most serious attacks.
Sequence NumberとAcknowledgement Numberは、攻撃者に対するDCCPの主要な防衛線を形成します。シーケンス番号を推測できない攻撃者は、DCCP接続を容易に操作したり乗っ取ったりできず、初期シーケンス番号の慎重な選択といった要件により、最も深刻な攻撃は排除されます。
An attacker might still send many packets with randomly chosen Sequence and Acknowledgement Numbers, however. If one of those probes ends up sequence-valid, it may shut down the connection or otherwise cause problems. The easiest such attacks to execute are as follows:
それでも、攻撃者はランダムに選んだSequence NumberとAcknowledgement Numberを持つ多数のパケットを送信する可能性があります。それらのプローブの1つがシーケンス有効になった場合、接続が切断されたり、その他の問題が生じたりするかもしれません。そのような攻撃のうち、最も実行しやすいものは次のとおりです。
o Send DCCP-Data packets with random Sequence Numbers. If one of these packets hits the valid sequence number window, the attack packet's application data may be inserted into the data stream.
o ランダムなSequence NumberのDCCP-Dataパケットを送信する。これらのパケットの1つが有効なシーケンス番号ウィンドウに当たった場合、攻撃パケットのアプリケーションデータがデータストリームに挿入される可能性があります。
o Send DCCP-Sync packets with random Sequence and Acknowledgement Numbers. If one of these packets hits the valid acknowledgement number window, the receiver will shift its sequence number window accordingly, getting out of sync with the correct endpoint -- perhaps permanently.
o ランダムなSequence NumberとAcknowledgement NumberのDCCP-Syncパケットを送信する。これらのパケットの1つが有効な確認応答番号ウィンドウに当たった場合、受信側はそれに応じてシーケンス番号ウィンドウをずらし、正しいエンドポイントとの同期が外れてしまいます。場合によっては永続的に外れます。
The attacker has to guess both Source and Destination Ports for any of these attacks to succeed. Additionally, the connection would have to be inactive for the DCCP-Sync attack to succeed, assuming the victim implemented the more stringent checks for active connections recommended in Section 7.5.3.
これらの攻撃のいずれかが成功するには、攻撃者はSource PortとDestination Portの両方を推測しなければなりません。さらに、被害者が第7.5.3節で推奨されているアクティブな接続に対するより厳格な検査を実装していると仮定すると、DCCP-Sync攻撃が成功するには、接続が非アクティブでなければなりません。
To quantify the probability of success, let N be the number of attack packets the attacker is willing to send, W be the relevant sequence window width, and L be the length of sequence numbers (24 or 48). The attacker's best strategy is to space the attack packets evenly over sequence space. Then the probability of hitting one sequence number window is P = WN/2^L.
成功確率を定量化するため、Nを攻撃者が送信してもよいと考える攻撃パケット数、Wを関連するシーケンスウィンドウ幅、Lをシーケンス番号の長さ(24または48)とします。攻撃者の最良の戦略は、攻撃パケットをシーケンス空間上に均等に配置することです。このとき、1つのシーケンス番号ウィンドウに当たる確率は P = WN/2^L となります。
The success probability for a DCCP-Data attack using short sequence numbers thus equals P = WN/2^24. For W = 100, then, the attacker must send more than 83,000 packets to achieve a 50% chance of success. For reference, the easiest TCP attack -- sending a SYN with a random sequence number, which will cause a connection reset if it falls within the window -- with W = 8760 (a common default) and L = 32 requires more than 245,000 packets to achieve a 50% chance of success.
したがって、短いシーケンス番号を使用するDCCP-Data攻撃の成功確率は P = WN/2^24 に等しくなります。W = 100 の場合、攻撃者が50%の成功確率を達成するには、83,000パケットを超えて送信しなければなりません。参考までに、最も容易なTCP攻撃、すなわちランダムなシーケンス番号を持つSYNを送信し、それがウィンドウ内に入れば接続リセットを引き起こす攻撃では、W = 8760(一般的な既定値)、L = 32 で、50%の成功確率を達成するのに245,000パケットを超える送信が必要です。
A fast connection's W will generally be high, increasing the attack success probability for fixed N. If this probability gets uncomfortably high with L = 24, the endpoint SHOULD prevent the use of short sequence numbers by manipulating the Allow Short Sequence Numbers feature (see Section 7.6.1). The probability limit depends on the application, however. Some applications, such as those already designed to handle corruption, are quite resilient to data injection attacks.
高速な接続のWは一般に大きくなり、Nを固定した場合の攻撃成功確率が高まります。L = 24 でこの確率が許容できないほど高くなる場合、エンドポイントは Allow Short Sequence Numbers 機能を操作することで、短いシーケンス番号の使用を防止すべきです (SHOULD)(第7.6.1節を参照)。ただし、確率の上限はアプリケーションに依存します。破損を扱うようあらかじめ設計されているアプリケーションなど、一部のアプリケーションは、データ挿入攻撃に対してかなり耐性があります。
The DCCP-Sync attack has L = 48, since DCCP-Sync packets use long sequence numbers exclusively; in addition, the success probability is halved, since only half the Sequence Number space is valid. Attacks have a correspondingly smaller probability of success. For a large W of 2000 packets, then, the attacker must send more than 10^11 packets to achieve a 50% chance of success.
DCCP-Sync攻撃では L = 48 です。DCCP-Syncパケットは長いシーケンス番号のみを使用するためです。さらに、Sequence Number空間の半分のみが有効なため、成功確率は半分になります。これに応じて、攻撃の成功確率はより小さくなります。したがって、Wが2000パケットと大きい場合でも、攻撃者が50%の成功確率を達成するには、10^11パケットを超えて送信しなければなりません。
Attacks involving DCCP-Ack, DCCP-DataAck, DCCP-CloseReq, DCCP-Close, and DCCP-Reset packets are more difficult, since Sequence and Acknowledgement Numbers must both be guessed. The probability of attack success for these packet types equals P = WXN/2^(2L), where W is the Sequence Number window, X is the Acknowledgement Number window, and N and L are as before.
DCCP-Ack、DCCP-DataAck、DCCP-CloseReq、DCCP-Close、DCCP-Resetパケットを使った攻撃は、Sequence NumberとAcknowledgement Numberの両方を推測しなければならないため、より困難です。これらのパケットタイプに対する攻撃の成功確率は P = WXN/2^(2L) に等しくなります。ここで、WはSequence Numberウィンドウ、XはAcknowledgement Numberウィンドウであり、NとLは前述のとおりです。
Since DCCP-Data attacks with short sequence numbers are relatively easy for attackers to execute, DCCP has been engineered to prevent these attacks from escalating to connection resets or other serious consequences. In particular, any options whose processing might cause the connection to be reset are ignored when they appear on DCCP-Data packets.
短いシーケンス番号を使ったDCCP-Data攻撃は攻撃者にとって比較的容易に実行できるため、DCCPは、これらの攻撃が接続リセットやその他の深刻な結果に拡大しないように設計されています。特に、処理すると接続がリセットされる可能性のあるオプションは、DCCP-Dataパケット上に現れた場合には無視されます。
In the following example, DCCP A and DCCP B recover from a large burst of loss that runs DCCP A's sequence numbers out of DCCP B's appropriate sequence number window.
次の例では、DCCP AとDCCP Bが、DCCP Aのシーケンス番号がDCCP Bの適切なシーケンス番号ウィンドウから外れてしまうほどの大規模な損失のバーストから回復します。
DCCP A DCCP B
(GSS=1,GSR=10) (GSS=10,GSR=1)
--> DCCP-Data(seq 2) XXX
...
--> DCCP-Data(seq 100) XXX
--> DCCP-Data(seq 101) --> ???
seqno out of range;
send Sync
OK <-- DCCP-Sync(seq 11, ack 101) <--
(GSS=11,GSR=1)
--> DCCP-SyncAck(seq 102, ack 11) --> OK
(GSS=102,GSR=11) (GSS=11,GSR=102)
In the next example, a DCCP connection recovers from a simple blind attack.
次の例では、DCCP接続が単純なブラインド攻撃から回復します。
DCCP A DCCP B
(GSS=1,GSR=10) (GSS=10,GSR=1)
*ATTACKER* --> DCCP-Data(seq 10^6) --> ???
seqno out of range;
send Sync
??? <-- DCCP-Sync(seq 11, ack 10^6) <--
ackno out of range; ignore
(GSS=1,GSR=10) (GSS=11,GSR=1)
The final example demonstrates recovery from a half-open connection.
最後の例は、半開接続からの回復を示します。
DCCP A DCCP B
(GSS=1,GSR=10) (GSS=10,GSR=1)
(Crash)
CLOSED OPEN
REQUEST --> DCCP-Request(seq 400) --> ???
!! <-- DCCP-Sync(seq 11, ack 400) <-- OPEN
REQUEST --> DCCP-Reset(seq 401, ack 11) --> (Abort)
REQUEST CLOSED
REQUEST --> DCCP-Request(seq 402) --> ...
DCCP sequence numbers are 48 bits long. This large sequence space protects DCCP connections against some blind attacks, such as the injection of DCCP-Resets into the connection. However, DCCP-Data, DCCP-Ack, and DCCP-DataAck packets, which make up the body of any DCCP connection, may reduce header space by transmitting only the lower 24 bits of the relevant Sequence and Acknowledgement Numbers. The receiving endpoint will extend these numbers to 48 bits using the following pseudocode:
DCCPのシーケンス番号は48ビット長です。この大きなシーケンス空間は、DCCP-Resetの接続への挿入など、一部のブラインド攻撃からDCCP接続を保護します。ただし、あらゆるDCCP接続の本体を構成するDCCP-Data、DCCP-Ack、DCCP-DataAckパケットは、関連するSequence NumberとAcknowledgement Numberの下位24ビットのみを送信して、ヘッダー領域を削減してもよいです。受信側のエンドポイントは、次の擬似コードを使ってこれらの番号を48ビットに拡張します。
procedure Extend_Sequence_Number(S, REF)
/* S is a 24-bit sequence number from the packet header.
REF is the relevant 48-bit reference sequence number:
GSS if S is an Acknowledgement Number, and GSR if S is a
Sequence Number. */
Set REF_low := low 24 bits of REF
Set REF_hi := high 24 bits of REF
If REF_low (<) S /* circular comparison mod 2^24 */
and S |<| REF_low, /* conventional, non-circular
comparison */
Return (((REF_hi + 1) mod 2^24) << 24) | S
Otherwise, if S (<) REF_low and REF_low |<| S,
Return (((REF_hi - 1) mod 2^24) << 24) | S
Otherwise,
Return (REF_hi << 24) | S
The two different kinds of comparison in the if statements detect when the low-order bits of the sequence space have wrapped. (The circular comparison "REF_low (<) S" returns true if and only if (S - REF_low), calculated using two's-complement arithmetic and then represented as an unsigned number, is less than or equal to 2^23 (mod 2^24).) When this happens, the high-order bits are incremented or decremented, as appropriate.
if文の中の2種類の比較は、シーケンス空間の下位ビットが一周したことを検出します。(循環比較 "REF_low (<) S" は、2の補数演算で計算した (S - REF_low) を符号なし数として表したときに、2^23 (mod 2^24) 以下である場合に限り真を返します。)この場合、上位ビットが適宜、増加または減少します。
Endpoints can require that all packets use long sequence numbers by leaving the Allow Short Sequence Numbers feature value at its default of zero. This can reduce the risk that data will be inappropriately injected into the connection. DCCP A sends a "Change L(Allow Short Seqnos, 1)" option to indicate its desire to send packets with short sequence numbers.
エンドポイントは、Allow Short Sequence Numbers 機能の値を既定値のゼロのままにしておくことで、すべてのパケットに長いシーケンス番号を使用するよう要求できます。これにより、データが不適切に接続へ挿入されるリスクを減らせます。DCCP Aは、短いシーケンス番号を持つパケットを送信したいことを示すために、"Change L(Allow Short Seqnos, 1)" オプションを送信します。
Allow Short Sequence Numbers has feature number 2 and is server-priority. It takes one-byte Boolean values. When Allow Short Seqnos/B is zero, DCCP B MUST NOT send packets with short sequence numbers and DCCP A MUST ignore any packets with short sequence numbers that are received. Values of two or more are reserved. New connections start with Allow Short Sequence Numbers 0 for both endpoints.
Allow Short Sequence Numbers の機能番号は2で、サーバー優先です。1バイトのブール値を取ります。Allow Short Seqnos/B がゼロの場合、DCCP Bは短いシーケンス番号を持つパケットを送信してはならず (MUST NOT)、DCCP Aは受信した短いシーケンス番号を持つパケットをすべて無視しなければなりません (MUST)。2以上の値は予約されています。新しい接続は、両エンドポイントとも Allow Short Sequence Numbers 0 で始まります。
Short sequence numbers reduce the rate DCCP connections can safely achieve and increase the risks of certain kinds of attacks, including blind data injection. Very-high-rate DCCP connections, and connections with large sequence windows (Section 7.5.2), SHOULD NOT use short sequence numbers on their data packets. The attack risk issues have been discussed in Section 7.5.5; we discuss the rate limitation issue here.
短いシーケンス番号は、DCCP接続が安全に達成できる速度を低下させ、ブラインドデータ挿入を含む特定の種類の攻撃のリスクを高めます。非常に高速なDCCP接続や、大きなシーケンスウィンドウ(第7.5.2節)を持つ接続は、データパケットに短いシーケンス番号を使用すべきではありません (SHOULD NOT)。攻撃リスクの問題は第7.5.5節で議論しました。ここでは速度制限の問題を議論します。
The sequence-validity mechanism assumes that the network does not deliver extremely old data. In particular, it assumes that the network must have dropped any packet by the time the connection wraps around and uses its sequence number again. This constraint limits the maximum connection rate that can be safely achieved. Let MSL equal the maximum segment lifetime, P equal the average DCCP packet size in bits, and L equal the length of sequence numbers (24 or 48 bits). Then the maximum safe rate, in bits per second, is R = P*(2^L)/2MSL.
シーケンス有効性の仕組みは、ネットワークが極端に古いデータを配送しないことを前提としています。特に、接続が一周して同じシーケンス番号を再び使用する時点までに、ネットワークはそのシーケンス番号を持つパケットをすべて破棄しているはずだと仮定しています。この制約により、安全に達成できる最大の接続速度が制限されます。MSL を最大セグメント生存時間、Pを平均DCCPパケットサイズ(ビット単位)、Lをシーケンス番号の長さ(24または48ビット)とします。このとき、最大の安全な速度(ビット毎秒)は R = P*(2^L)/2MSL です。
For the default MSL of 2 minutes, 1500-byte DCCP packets, and short sequence numbers, the safe rate is therefore approximately 800 Mb/s. Although 2 minutes is a very large MSL for any networks that could sustain that rate with such small packets, long sequence numbers allow much higher rates under the same constraints: up to 14 petabits a second for 1500-byte packets and the default MSL.
したがって、既定の MSL の2分、1500バイトのDCCPパケット、短いシーケンス番号の場合、安全な速度は約800 Mb/sです。2分は、そのような小さなパケットでこの速度を維持できるネットワークにとっては非常に大きな MSL ですが、長いシーケンス番号を使えば、同じ制約のもとでもはるかに高い速度が可能です。1500バイトのパケットと既定の MSL の場合、最大で毎秒14ペタビットになります。
DCCP's sequence numbers increment by one on every packet, including non-data packets (packets that don't carry application data). This makes DCCP sequence numbers suitable for detecting any network loss, but not for detecting the loss of application data. The NDP Count option reports the length of each burst of non-data packets. This lets the receiving DCCP reliably determine when a burst of loss included application data.
DCCPのシーケンス番号は、非データパケット(アプリケーションデータを運ばないパケット)を含むすべてのパケットで1ずつ増加します。このため、DCCPのシーケンス番号はネットワーク上の任意の損失の検出には適していますが、アプリケーションデータの損失の検出には適していません。NDP Countオプションは、非データパケットのバーストの長さを報告します。これにより、受信側のDCCPは、損失のバーストにアプリケーションデータが含まれていたかどうかを確実に判断できます。
+--------+--------+-------- ... --------+
|00100101| Length | NDP Count |
+--------+--------+-------- ... --------+
Type=37 Len=3-8 (1-6 bytes)
If a DCCP endpoint's Send NDP Count feature is one (see below), then that endpoint MUST send an NDP Count option on every packet whose immediate predecessor was a non-data packet. Non-data packets consist of DCCP packet types DCCP-Ack, DCCP-Close, DCCP-CloseReq, DCCP-Reset, DCCP-Sync, and DCCP-SyncAck. The other packet types, namely DCCP-Request, DCCP-Response, DCCP-Data, and DCCP-DataAck, are considered data packets, although not all DCCP-Request and DCCP-Response packets will actually carry application data.
DCCPエンドポイントのSend NDP Count機能が1である場合(後述)、そのエンドポイントは、直前のパケットが非データパケットであったすべてのパケットでNDP Countオプションを送信しなければなりません (MUST)。非データパケットは、DCCPパケットタイプのDCCP-Ack、DCCP-Close、DCCP-CloseReq、DCCP-Reset、DCCP-Sync、DCCP-SyncAckで構成されます。それ以外のパケットタイプ、すなわちDCCP-Request、DCCP-Response、DCCP-Data、DCCP-DataAckは、データパケットとみなされます。ただし、すべてのDCCP-RequestおよびDCCP-Responseパケットが実際にアプリケーションデータを運ぶとは限りません。
The value stored in NDP Count equals the number of consecutive non-data packets in the run immediately previous to the current packet. Packets with no NDP Count option are considered to have NDP Count zero.
NDP Countに格納される値は、現在のパケットの直前に連続している非データパケットの数に等しくなります。NDP Countオプションのないパケットは、NDP Countがゼロであるとみなされます。
The NDP Count option can carry one to six bytes of data. The smallest option format that can hold the NDP Count SHOULD be used.
NDP Countオプションは1~6バイトのデータを運ぶことができます。NDP Countを保持できる最小のオプション形式を使用すべきです (SHOULD)。
With NDP Count, the receiver can reliably tell only whether a burst of loss contained at least one data packet. For example, the receiver cannot always tell whether a burst of loss contained a non-data packet.
NDP Countを使うと、受信側は、損失のバーストに少なくとも1つのデータパケットが含まれていたかどうかのみを確実に判断できます。たとえば、受信側は、損失のバーストに非データパケットが含まれていたかどうかを常に判断できるとは限りません。
Say that K consecutive sequence numbers are missing in some burst of loss, and that the Send NDP Count feature is on. Then some application data was lost within those sequence numbers unless the packet following the hole contains an NDP Count option whose value is greater than or equal to K.
あるバーストの損失で連続するK個のシーケンス番号が欠落しており、Send NDP Count機能が有効であるとします。このとき、欠落部分に続くパケットに、値がK以上のNDP Countオプションが含まれていない限り、それらのシーケンス番号の範囲内でアプリケーションデータが失われています。
For example, say that an endpoint sent the following sequence of non-data packets (Nx) and data packets (Dx).
たとえば、エンドポイントが次のような非データパケット (Nx) とデータパケット (Dx) の列を送信したとします。
N0 N1 D2 N3 D4 D5 N6 D7 D8 D9 D10 N11 N12 D13
N0 N1 D2 N3 D4 D5 N6 D7 D8 D9 D10 N11 N12 D13
Those packets would have NDP Counts as follows.
これらのパケットのNDP Countは次のようになります。
N0 N1 D2 N3 D4 D5 N6 D7 D8 D9 D10 N11 N12 D13
- 1 2 - 1 - - 1 - - - - 1 2
NDP Count is not useful for applications that include their own sequence numbers with their packet headers.
NDP Countは、パケットヘッダに独自のシーケンス番号を含めるアプリケーションには役立ちません。
The Send NDP Count feature lets DCCP endpoints negotiate whether they should send NDP Count options on their packets. DCCP A sends a "Change R(Send NDP Count, 1)" option to ask DCCP B to send NDP Count options.
Send NDP Count機能により、DCCPエンドポイントは、パケットでNDP Countオプションを送信するかどうかをネゴシエーションできます。DCCP Aは、"Change R(Send NDP Count, 1)" オプションを送信して、DCCP BにNDP Countオプションの送信を要求します。
Send NDP Count has feature number 7 and is server-priority. It takes one-byte Boolean values. DCCP B MUST send NDP Count options as described above when Send NDP Count/B is one, although it MAY send NDP Count options even when Send NDP Count/B is zero. Values of two or more are reserved. New connections start with Send NDP Count 0 for both endpoints.
Send NDP Countは機能番号7で、server-priorityです。1バイトのブール値をとります。DCCP Bは、Send NDP Count/Bが1のとき、前述のとおりNDP Countオプションを送信しなければなりません (MUST)。ただし、Send NDP Count/Bが0のときでもNDP Countオプションを送信してもよいです (MAY)。2以上の値は予約されています。新しい接続では、両エンドポイントともSend NDP Countは0で始まります。
This section describes how DCCP connections move between states and which packets are sent when. Note that feature negotiation takes place in parallel with the connection-wide state transitions described here.
この節では、DCCP接続が状態間をどのように移行し、どのパケットがいつ送信されるかを説明します。機能ネゴシエーションは、ここで説明する接続全体の状態遷移と並行して行われることに注意してください。
DCCP connections' initiation phase consists of a three-way handshake: an initial DCCP-Request packet sent by the client, a DCCP-Response sent by the server in reply, and finally an acknowledgement from the client, usually via a DCCP-Ack or DCCP-DataAck packet. The client moves from the REQUEST state to PARTOPEN, and finally to OPEN; the server moves from LISTEN to RESPOND, and finally to OPEN.
DCCP接続の開始フェーズは3ウェイハンドシェイクで構成されます。クライアントが送信する最初のDCCP-Requestパケット、サーバーがそれに応答して送信するDCCP-Response、そして最後にクライアントからの確認応答(通常はDCCP-AckまたはDCCP-DataAckパケット)です。クライアントはREQUEST状態からPARTOPEN、最後にOPENへ移行し、サーバーはLISTENからRESPOND、最後にOPENへ移行します。
Client State Server State
CLOSED LISTEN
1. REQUEST --> Request -->
2. <-- Response <-- RESPOND
3. PARTOPEN --> Ack, DataAck -->
4. <-- Data, Ack, DataAck <-- OPEN
5. OPEN <-> Data, Ack, DataAck <-> OPEN
When a client decides to initiate a connection, it enters the REQUEST state, chooses an initial sequence number (Section 7.2), and sends a DCCP-Request packet using that sequence number to the intended server.
クライアントは、接続を開始することを決定すると、REQUEST状態に入り、初期シーケンス番号(7.2節)を選択し、そのシーケンス番号を使用してDCCP-Requestパケットを目的のサーバーに送信します。
DCCP-Request packets will commonly carry feature negotiation options that open negotiations for various connection parameters, such as preferred congestion control IDs for each half-connection. They may also carry application data, but the client should be aware that the server may not accept such data.
DCCP-Requestパケットは通常、各半接続に対して好ましい輻輳制御IDなど、さまざまな接続パラメータのネゴシエーションを開始する機能ネゴシエーションオプションを運びます。アプリケーションデータを運ぶこともありますが、クライアントは、サーバーがそのデータを受け入れない可能性があることを認識しておくべきです。
A client in the REQUEST state SHOULD use an exponential-backoff timer to send new DCCP-Request packets if no response is received. The first retransmission should occur after approximately one second, backing off to not less than one packet every 64 seconds; or the endpoint can use whatever retransmission strategy is followed for retransmitting TCP SYNs. Each new DCCP-Request MUST increment the Sequence Number by one and MUST contain the same Service Code and application data as the original DCCP-Request.
REQUEST状態のクライアントは、応答が受信されない場合、指数バックオフタイマーを使用して新しいDCCP-Requestパケットを送信すべきです (SHOULD)。最初の再送は約1秒後に行い、バックオフして最大でも64秒に1パケット以上の間隔とします。あるいは、エンドポイントはTCP SYNの再送に従う任意の再送戦略を使用できます。新しいDCCP-Requestは、それぞれSequence Numberを1ずつ増やさなければならず (MUST)、元のDCCP-Requestと同じService Codeおよびアプリケーションデータを含まなければなりません (MUST)。
A client MAY give up on its DCCP-Requests after some time (3 minutes, for example). When it does, it SHOULD send a DCCP-Reset packet to the server with Reset Code 2, "Aborted", to clean up state in case one or more of the Requests actually arrived. A client in REQUEST state has never received an initial sequence number from its peer, so the DCCP-Reset's Acknowledgement Number MUST be set to zero.
クライアントは、しばらく(たとえば3分)経過した後、DCCP-Requestの送信を断念してもよいです (MAY)。断念する場合は、Requestの1つ以上が実際に到達していた場合に備えて状態をクリーンアップするため、Reset Code 2 "Aborted" のDCCP-Resetパケットをサーバーに送信すべきです (SHOULD)。REQUEST状態のクライアントはピアから初期シーケンス番号を受信したことがないため、DCCP-ResetのAcknowledgement Numberはゼロに設定しなければなりません (MUST)。
The client leaves the REQUEST state for PARTOPEN when it receives a DCCP-Response from the server.
クライアントは、サーバーからDCCP-Responseを受信すると、REQUEST状態からPARTOPENに移行します。
Each DCCP-Request contains a 32-bit Service Code, which identifies the application-level service to which the client application is trying to connect. Service Codes should correspond to application services and protocols. For example, there might be a Service Code for SIP control connections and one for RTP audio connections. Middleboxes, such as firewalls, can use the Service Code to identify the application running on a nonstandard port (assuming the DCCP header has not been encrypted).
各DCCP-Requestには32ビットのService Codeが含まれます。これは、クライアントアプリケーションが接続しようとしているアプリケーションレベルのサービスを識別します。Service Codeは、アプリケーションサービスおよびプロトコルに対応するのがよいでしょう。たとえば、SIP制御接続用のService CodeとRTP音声接続用のService Codeがあるかもしれません。ファイアウォールなどのミドルボックスは、Service Codeを使用して、非標準ポートで動作しているアプリケーションを識別できます(DCCPヘッダが暗号化されていない場合)。
Endpoints MUST associate a Service Code with every DCCP socket, both actively and passively opened. The application will generally supply this Service Code. Each active socket MUST have exactly one Service Code. Passive sockets MAY, at the implementation's discretion, be associated with more than one Service Code; this might let multiple applications, or multiple versions of the same application, listen on the same port, differentiated by Service Code. If the DCCP-Request's Service Code doesn't equal any of the server's Service Codes for the given port, the server MUST reject the request by sending a DCCP-Reset packet with Reset Code 8, "Bad Service Code". A middlebox MAY also send such a DCCP-Reset in response to packets whose Service Code is considered unsuitable.
エンドポイントは、能動的に開かれたものも受動的に開かれたものも、すべてのDCCPソケットにService Codeを関連付けなければなりません (MUST)。このService Codeは通常、アプリケーションが提供します。各能動ソケットは、ちょうど1つのService Codeを持たなければなりません (MUST)。受動ソケットは、実装の裁量で、複数のService Codeに関連付けられてもよいです (MAY)。これにより、複数のアプリケーション、または同じアプリケーションの複数のバージョンが、Service Codeで区別されつつ同じポートで待ち受けできるようになります。DCCP-RequestのService Codeが、指定されたポートに対するサーバーのService Codeのいずれにも等しくない場合、サーバーは、Reset Code 8 "Bad Service Code" のDCCP-Resetパケットを送信して、そのリクエストを拒否しなければなりません (MUST)。ミドルボックスも、Service Codeが不適切とみなされるパケットに対して、そのようなDCCP-Resetを送信してもよいです (MAY)。
Service Codes are not intended to be DCCP-specific and are allocated by IANA. Following the policies outlined in [RFC2434], most Service Codes are allocated First Come First Served, subject to the following guidelines.
Service CodeはDCCP固有のものではなく、IANAによって割り当てられます。[RFC2434]に概説されたポリシーに従い、ほとんどのService Codeは、次のガイドラインに従って先着順で割り当てられます。
o Service Codes are allocated one at a time, or in small blocks. A short English description of the intended service is REQUIRED to obtain a Service Code assignment, but no specification, standards track or otherwise, is necessary. IANA maintains an association of Service Codes to the corresponding phrases.
o Service Codeは、1つずつ、または小さなブロック単位で割り当てられます。Service Codeの割り当てを得るには、意図するサービスの短い英語の説明が必須です (REQUIRED)。ただし、標準化過程であるかどうかを問わず、仕様書は必要ありません。IANAは、Service Codeと対応する語句との対応付けを維持します。
o Users request specific Service Code values. We suggest that users request Service Codes that can be represented using the "SC:" formatting convention described below. Thus, the "Frobodyne Plotz Protocol" might correspond to Service Code 17178548426 or, equivalently, "SC:fdpz". The canonical interpretation of a Service Code field is numeric.
o ユーザーは特定のService Code値を要求します。ユーザーは、後述の "SC:" 書式規約で表現できるService Codeを要求することを推奨します。たとえば、"Frobodyne Plotz Protocol" はService Code 17178548426、または同等の "SC:fdpz" に対応するかもしれません。Service Codeフィールドの正規の解釈は数値です。
o Service Codes whose bytes each have values in the set {32, 45-57, 65-90} use a Specification Required allocation policy. That is, these Service Codes are used for international standard or standards-track specifications, IETF or otherwise. (This set consists of the ASCII digits, uppercase letters, and characters space, '-', '.', and '/'.)
o 各バイトの値が集合 {32, 45-57, 65-90} に含まれるService Codeは、Specification Required割り当てポリシーを使用します。すなわち、これらのService Codeは、IETFであるかどうかを問わず、国際標準または標準化過程の仕様のために使用されます。(この集合は、ASCIIの数字、大文字、およびスペース、'-'、'.'、'/' の文字で構成されます。)
o Service Codes whose high-order byte equals 63 (ASCII '?') are reserved for Private Use.
o 最上位バイトが63(ASCIIの '?')に等しいService Codeは、私的使用のために予約されています。
o Service Code 0 represents the absence of a meaningful Service Code and MUST NOT be allocated.
o Service Code 0は、意味のあるService Codeがないことを表し、割り当ててはなりません (MUST NOT)。
o The value 4294967295 is an invalid Service Code. Servers MUST reject any DCCP-Request with this Service Code value by sending a DCCP-Reset packet with Reset Code 8, "Bad Service Code".
o 値4294967295は無効なService Codeです。サーバーは、このService Code値を持つDCCP-Requestを、Reset Code 8 "Bad Service Code" のDCCP-Resetパケットを送信して拒否しなければなりません (MUST)。
This design for Service Code allocation is based on the allocation of 4-byte identifiers for Macintosh resources, PNG chunks, and TrueType and OpenType tables.
このService Code割り当ての設計は、Macintoshリソース、PNGチャンク、TrueTypeおよびOpenTypeテーブルにおける4バイト識別子の割り当てに基づいています。
In text settings, we recommend that Service Codes be written in one of three forms, prefixed by the ASCII letters SC and either a colon ":" or equals sign "=". These forms are interpreted as follows.
テキストでの表記では、Service Codeを、ASCII文字SCに続けてコロン ":" または等号 "=" を付けた、3つの形式のいずれかで書くことを推奨します。これらの形式は次のように解釈されます。
SC: Indicates a Service Code representable using a subset of the ASCII characters. The colon is followed by one to four characters taken from the following set: letters, digits, and the characters in "-_+.*/?@" (not including quotes). Numerically, these characters have values in {42-43, 45-57, 63-90, 95, 97-122}. The Service Code is calculated by padding the string on the right with spaces (value 32) and intepreting the four-character result as a 32-bit big-endian number.
SC: ASCII文字のサブセットで表現可能なService Codeを示します。コロンの後には、次の集合から取った1~4文字が続きます。文字は、英字、数字、および "-_+.*/?@"(引用符は含まない)の文字です。数値としては、これらの文字の値は {42-43, 45-57, 63-90, 95, 97-122} に含まれます。Service Codeは、文字列を右側にスペース(値32)で埋め、その4文字の結果を32ビットのビッグエンディアン数として解釈することで計算されます。
SC= Indicates a decimal Service Code. The equals sign is followed by any number of decimal digits, which specify the Service Code. Values above 4294967294 are illegal.
SC= 10進のService Codeを示します。等号の後には、Service Codeを指定する任意の桁数の10進数字が続きます。4294967294を超える値は不正です。
SC=x or SC=X Indicates a hexadecimal Service Code. The "x" or "X" is followed by any number of hexadecimal digits (upper or lower case), which specify the Service Code. Values above 4294967294 are illegal.
SC=x または SC=X 16進のService Codeを示します。"x" または "X" の後には、Service Codeを指定する任意の桁数の16進数字(大文字でも小文字でもよい)が続きます。4294967294を超える値は不正です。
Thus, the Service Code 1717858426 might be represented in text as either SC:fdpz, SC=1717858426, or SC=x6664707A.
したがって、Service Code 1717858426は、テキストではSC:fdpz、SC=1717858426、またはSC=x6664707Aのいずれかで表現できます。
In the second phase of the three-way handshake, the server moves from the LISTEN state to RESPOND and sends a DCCP-Response message to the client. In this phase, a server will often specify the features it would like to use, either from among those the client requested or in addition to those. Among these options is the congestion control mechanism the server expects to use.
3ウェイハンドシェイクの第2フェーズでは、サーバーはLISTEN状態からRESPONDに移行し、DCCP-Responseメッセージをクライアントに送信します。このフェーズでは、サーバーは多くの場合、クライアントが要求した機能の中から、またはそれに加えて、使用したい機能を指定します。これらのオプションの中には、サーバーが使用する予定の輻輳制御メカニズムがあります。
The server MAY respond to a DCCP-Request packet with a DCCP-Reset packet to refuse the connection. Relevant Reset Codes for refusing a connection include 7, "Connection Refused", when the DCCP-Request's Destination Port did not correspond to a DCCP port open for listening; 8, "Bad Service Code", when the DCCP-Request's Service Code did not correspond to the service code registered with the Destination Port; and 9, "Too Busy", when the server is currently too busy to respond to requests. The server SHOULD limit the rate at which it generates these resets; for example, to not more than 1024 per second.
サーバーは、DCCP-Requestパケットに対してDCCP-Resetパケットで応答し、接続を拒否してもよいです (MAY)。接続を拒否する際に関連するReset Codeには、DCCP-RequestのDestination Portが待ち受けのために開かれたDCCPポートに対応していなかった場合の7 "Connection Refused"、DCCP-RequestのService CodeがDestination Portに登録されたサービスコードに対応していなかった場合の8 "Bad Service Code"、およびサーバーが現在リクエストに応答するには多忙すぎる場合の9 "Too Busy" があります。サーバーは、これらのリセットを生成する速度を制限すべきです (SHOULD)。たとえば、1秒あたり1024個以下にします。
The server SHOULD NOT retransmit DCCP-Response packets; the client will retransmit the DCCP-Request if necessary. (Note that the "retransmitted" DCCP-Request will have, at least, a different sequence number from the "original" DCCP-Request. The server can thus distinguish true retransmissions from network duplicates.) The server will detect that the retransmitted DCCP-Request applies to an existing connection because of its Source and Destination Ports. Every valid DCCP-Request received while the server is in the RESPOND state MUST elicit a new DCCP-Response. Each new DCCP-Response MUST increment the server's Sequence Number by one and MUST include the same application data, if any, as the original DCCP-Response.
サーバーはDCCP-Responseパケットを再送すべきではありません (SHOULD NOT)。必要であれば、クライアントがDCCP-Requestを再送します。("再送された" DCCP-Requestは、少なくとも "元の" DCCP-Requestとはシーケンス番号が異なることに注意してください。したがって、サーバーは真の再送とネットワークによる重複を区別できます。)サーバーは、Source PortとDestination Portによって、再送されたDCCP-Requestが既存の接続に適用されるものであることを検出します。サーバーがRESPOND状態にある間に受信した有効なDCCP-Requestは、すべて新しいDCCP-Responseを引き出さなければなりません (MUST)。新しいDCCP-Responseは、それぞれサーバーのSequence Numberを1ずつ増やさなければならず (MUST)、元のDCCP-Responseと同じアプリケーションデータがあれば、それを含めなければなりません (MUST)。
The server MUST NOT accept more than one piece of DCCP-Request application data per connection. In particular, the DCCP-Response sent in reply to a retransmitted DCCP-Request with application data SHOULD contain a Data Dropped option, in which the retransmitted DCCP-Request data is reported with Drop Code 0, Protocol Constraints. The original DCCP-Request SHOULD also be reported in the Data Dropped option, either in a Normal Block (if the server accepted the data or there was no data) or in a Drop Code 0 Drop Block (if the server refused the data the first time as well).
サーバーは、接続ごとに1つを超えるDCCP-Requestのアプリケーションデータを受け入れてはなりません (MUST NOT)。特に、アプリケーションデータを持つ再送されたDCCP-Requestに応答して送信されるDCCP-Responseには、Data Droppedオプションを含めるべきです (SHOULD)。このオプションでは、再送されたDCCP-RequestのデータをDrop Code 0, Protocol Constraintsで報告します。元のDCCP-Requestも、Data Droppedオプションで報告すべきです (SHOULD)。サーバーがデータを受け入れた場合、またはデータがなかった場合はNormal Blockで、サーバーが最初のときもデータを拒否した場合はDrop Code 0のDrop Blockで報告します。
The Data Dropped and Init Cookie options are particularly useful for DCCP-Response packets (Sections 11.7 and 8.1.4).
Data DroppedオプションとInit Cookieオプションは、DCCP-Responseパケットで特に有用です(11.7節および8.1.4節)。
The server leaves the RESPOND state for OPEN when it receives a valid DCCP-Ack from the client, completing the three-way handshake. It MAY also leave the RESPOND state for CLOSED after a timeout of not less than 4MSL (8 minutes); when doing so, it SHOULD send a DCCP-Reset with Reset Code 2, "Aborted", to clean up state at the client.
サーバーは、クライアントから有効なDCCP-Ackを受信すると、RESPOND状態からOPENに移行し、3ウェイハンドシェイクを完了します。また、4MSL(8分)以上のタイムアウト後にRESPOND状態からCLOSEDに移行してもよいです (MAY)。その場合は、クライアント側の状態をクリーンアップするため、Reset Code 2 "Aborted" のDCCP-Resetを送信すべきです (SHOULD)。
+--------+--------+--------+--------+--------+--------
|00100100| Length | Init Cookie Value ...
+--------+--------+--------+--------+--------+--------
Type=36
The Init Cookie option lets a DCCP server avoid having to hold any state until the three-way connection setup handshake has completed, in a similar fashion as for TCP SYN cookies [SYNCOOKIES]. The server wraps up the Service Code, server port, and any options it cares about from both the DCCP-Request and DCCP-Response in an opaque cookie. Typically the cookie will be encrypted using a secret known only to the server and will include a cryptographic checksum or magic value so that correct decryption can be verified. When the server receives the cookie back in the response, it can decrypt the cookie and instantiate all the state it avoided keeping. In the meantime, it need not move from the LISTEN state.
Init Cookieオプションにより、DCCPサーバーは、TCP SYNクッキー [SYNCOOKIES] と同様の方法で、3ウェイ接続確立ハンドシェイクが完了するまで状態を保持せずに済みます。サーバーは、Service Code、サーバーポート、およびDCCP-RequestとDCCP-Responseの両方から必要なオプションを、不透明なクッキーにまとめます。通常、クッキーはサーバーだけが知る秘密を用いて暗号化され、正しく復号されたことを検証できるように、暗号チェックサムまたはマジック値を含みます。サーバーは、応答でクッキーが返ってくると、そのクッキーを復号し、保持を避けていたすべての状態を復元できます。その間、サーバーはLISTEN状態から移行する必要はありません。
The Init Cookie option MUST NOT be sent on DCCP-Request or DCCP-Data packets. Any Init Cookie options received on DCCP-Request or DCCP-Data packets, or after the connection has been established (when the connection's state is >= OPEN), MUST be ignored. The server MAY include Init Cookie options in its DCCP-Response. If so, then the client MUST echo the same Init Cookie options, in the same order, in each succeeding DCCP packet until one of those packets is acknowledged (showing that the three-way handshake has completed) or the connection is reset. As a result, the client MUST NOT use DCCP-Data packets until the three-way handshake completes or the connection is reset. The Init Cookie options on a client packet MUST equal those received on the DCCP-Request indicated by the client packet's Acknowledgement Number. The server SHOULD design its Init Cookie format so that Init Cookies can be checked for tampering; it SHOULD respond to a tampered Init Cookie option by resetting the connection with Reset Code 10, "Bad Init Cookie".
Init Cookieオプションは、DCCP-RequestまたはDCCP-Dataパケットで送信してはなりません (MUST NOT)。DCCP-RequestまたはDCCP-Dataパケットで受信したInit Cookieオプション、および接続が確立された後(接続の状態が >= OPENのとき)に受信したInit Cookieオプションは、無視しなければなりません (MUST)。サーバーは、DCCP-ResponseにInit Cookieオプションを含めてもよいです (MAY)。その場合、クライアントは、それらのパケットのいずれかが確認応答される(3ウェイハンドシェイクが完了したことを示す)か、接続がリセットされるまで、後続の各DCCPパケットで同じInit Cookieオプションを同じ順序でエコーしなければなりません (MUST)。その結果、クライアントは、3ウェイハンドシェイクが完了するか接続がリセットされるまで、DCCP-Dataパケットを使用してはなりません (MUST NOT)。クライアントパケット上のInit Cookieオプションは、そのクライアントパケットのAcknowledgement Numberが示すDCCP-Requestで受信したものと等しくなければなりません (MUST)。サーバーは、Init Cookieが改ざんされていないか検査できるようにInit Cookieの形式を設計すべきです (SHOULD)。改ざんされたInit Cookieオプションには、Reset Code 10 "Bad Init Cookie" で接続をリセットして応答すべきです (SHOULD)。
Init Cookie's precise implementation need not be specified here; since Init Cookies are opaque to the client, there are no interoperability concerns. An example cookie format might encrypt (using a secret key) the connection's initial sequence and acknowledgement numbers, ports, Service Code, any options included on the DCCP-Request packet and the corresponding DCCP-Response, a random salt, and a magic number. On receiving a reflected Init Cookie, the server would decrypt the cookie, validate it by checking its magic number, sequence numbers, and ports, and, if valid, create a corresponding socket using the options.
Init Cookieの正確な実装をここで規定する必要はありません。Init Cookieはクライアントにとって不透明であるため、相互運用性の問題はありません。クッキー形式の例としては、接続の初期シーケンス番号と初期確認応答番号、ポート、Service Code、DCCP-Requestパケットおよび対応するDCCP-Responseに含まれるオプション、ランダムなsalt、およびマジックナンバーを、秘密鍵を使って暗号化するものが考えられます。反映されたInit Cookieを受信すると、サーバーはクッキーを復号し、マジックナンバー、シーケンス番号、ポートを確認して検証し、有効であれば、そのオプションを使用して対応するソケットを作成します。
Each individual Init Cookie option can hold at most 253 bytes of data, but a server can send multiple Init Cookie options to gain more space.
個々のInit Cookieオプションは最大253バイトのデータを保持できますが、サーバーは複数のInit Cookieオプションを送信して、より多くの領域を確保できます。
When the client receives a DCCP-Response from the server, it moves from the REQUEST state to PARTOPEN and completes the three-way handshake by sending a DCCP-Ack packet to the server. The client remains in PARTOPEN until it can be sure that the server has received some packet the client sent from PARTOPEN (either the initial DCCP-Ack or a later packet). Clients in the PARTOPEN state that want to send data MUST do so using DCCP-DataAck packets, not DCCP-Data packets. This is because DCCP-Data packets lack Acknowledgement Numbers, so the server can't tell from a DCCP-Data packet whether the client saw its DCCP-Response. Furthermore, if the DCCP-Response included an Init Cookie, that Init Cookie MUST be included on every packet sent in PARTOPEN.
クライアントは、サーバーからDCCP-Responseを受信すると、REQUEST状態からPARTOPENに移行し、DCCP-Ackパケットをサーバーに送信して3ウェイハンドシェイクを完了します。クライアントは、PARTOPENから送信したいずれかのパケット(最初のDCCP-Ack、または後のパケット)をサーバーが受信したことを確信できるまで、PARTOPENにとどまります。データを送信したいPARTOPEN状態のクライアントは、DCCP-Dataパケットではなく、DCCP-DataAckパケットを使用しなければなりません (MUST)。これは、DCCP-DataパケットにはAcknowledgement Numberがないため、サーバーがDCCP-Dataパケットからクライアントが自分のDCCP-Responseを見たかどうかを判断できないためです。さらに、DCCP-ResponseにInit Cookieが含まれていた場合、そのInit Cookieは、PARTOPENで送信するすべてのパケットに含めなければなりません (MUST)。
The single DCCP-Ack sent when entering the PARTOPEN state might, of course, be dropped by the network. The client SHOULD ensure that some packet gets through eventually. The preferred mechanism would be a roughly 200-millisecond timer, set every time a packet is transmitted in PARTOPEN. If this timer goes off and the client is still in PARTOPEN, the client generates another DCCP-Ack and backs off the timer. If the client remains in PARTOPEN for more than 4MSL (8 minutes), it SHOULD reset the connection with Reset Code 2, "Aborted".
PARTOPEN状態に入るときに送信される1つのDCCP-Ackは、当然ながらネットワークによって破棄される可能性があります。クライアントは、いずれかのパケットが最終的に届くようにすべきです (SHOULD)。望ましい仕組みは、PARTOPENでパケットを送信するたびに設定する、約200ミリ秒のタイマーです。このタイマーが切れたときにクライアントがまだPARTOPENにいる場合、クライアントは別のDCCP-Ackを生成し、タイマーをバックオフします。クライアントが4MSL(8分)を超えてPARTOPENにとどまる場合は、Reset Code 2 "Aborted" で接続をリセットすべきです (SHOULD)。
The client leaves the PARTOPEN state for OPEN when it receives a valid packet other than DCCP-Response, DCCP-Reset, or DCCP-Sync from the server.
クライアントは、サーバーからDCCP-Response、DCCP-Reset、DCCP-Sync以外の有効なパケットを受信すると、PARTOPEN状態からOPENに移行します。
In the central data transfer phase of the connection, both server and client are in the OPEN state.
接続の中心となるデータ転送フェーズでは、サーバーとクライアントの両方がOPEN状態にあります。
DCCP A sends DCCP-Data and DCCP-DataAck packets to DCCP B due to application events on host A. These packets are congestion-controlled by the CCID for the A-to-B half-connection. In contrast, DCCP-Ack packets sent by DCCP A are controlled by the CCID for the B-to-A half-connection. Generally, DCCP A will piggyback acknowledgement information on DCCP-Data packets when acceptable, creating DCCP-DataAck packets. DCCP-Ack packets are used when there is no data to send from DCCP A to DCCP B, or when the congestion state of the A-to-B CCID will not allow data to be sent.
DCCP Aは、ホストAでのアプリケーションイベントに応じて、DCCP-DataおよびDCCP-DataAckパケットをDCCP Bに送信します。これらのパケットは、A-to-B半接続のCCIDによって輻輳制御されます。これに対し、DCCP Aが送信するDCCP-Ackパケットは、B-to-A半接続のCCIDによって制御されます。一般に、DCCP Aは、許容される場合には確認応答情報をDCCP-Dataパケットに便乗させ、DCCP-DataAckパケットを作成します。DCCP-Ackパケットは、DCCP AからDCCP Bへ送信するデータがない場合、またはA-to-B CCIDの輻輳状態がデータの送信を許さない場合に使用されます。
DCCP-Sync and DCCP-SyncAck packets may also occur in the data transfer phase. Some cases causing DCCP-Sync generation are discussed in Section 7.5. One important distinction between DCCP-Sync packets and other packet types is that DCCP-Sync elicits an immediate acknowledgement. On receiving a valid DCCP-Sync packet, a DCCP endpoint MUST immediately generate and send a DCCP-SyncAck response (subject to any implementation rate limits); the Acknowledgement Number on that DCCP-SyncAck MUST equal the Sequence Number of the DCCP-Sync.
DCCP-SyncおよびDCCP-SyncAckパケットも、データ転送フェーズで発生することがあります。DCCP-Syncが生成されるいくつかのケースについては、7.5節で説明します。DCCP-Syncパケットと他のパケットタイプとの重要な違いの1つは、DCCP-Syncが即時の確認応答を引き出すことです。有効なDCCP-Syncパケットを受信すると、DCCPエンドポイントは、直ちにDCCP-SyncAck応答を生成して送信しなければなりません (MUST)(実装によるレート制限に従います)。そのDCCP-SyncAckのAcknowledgement Numberは、DCCP-SyncのSequence Numberに等しくなければなりません (MUST)。
A particular DCCP implementation might decide to initiate feature negotiation only once the OPEN state was reached, in which case it might not allow data transfer until some time later. Data received during that time SHOULD be rejected and reported using a Data Dropped Drop Block with Drop Code 0, Protocol Constraints (see Section 11.7).
特定のDCCP実装は、OPEN状態に達してからはじめて機能ネゴシエーションを開始することを決定する場合があります。その場合、しばらく後までデータ転送を許可しないかもしれません。その間に受信したデータは拒否すべきであり (SHOULD)、Drop Code 0, Protocol ConstraintsのData Dropped Drop Blockを使用して報告すべきです (11.7節参照)。
DCCP connection termination uses a handshake consisting of an optional DCCP-CloseReq packet, a DCCP-Close packet, and a DCCP-Reset packet. The server moves from the OPEN state, possibly through the CLOSEREQ state, to CLOSED; the client moves from OPEN through CLOSING to TIMEWAIT, and after 2MSL wait time (4 minutes) to CLOSED.
DCCP接続の切断は、任意のDCCP-CloseReqパケット、DCCP-Closeパケット、およびDCCP-Resetパケットからなるハンドシェイクを使用します。サーバーは、OPEN状態から、場合によってはCLOSEREQ状態を経由して、CLOSEDに移行します。クライアントは、OPENからCLOSINGを経てTIMEWAITに移行し、2MSLの待機時間(4分)後にCLOSEDに移行します。
The sequence DCCP-CloseReq, DCCP-Close, DCCP-Reset is used when the server decides to close the connection but doesn't want to hold TIMEWAIT state:
DCCP-CloseReq、DCCP-Close、DCCP-Resetというシーケンスは、サーバーが接続を閉じることを決定したが、TIMEWAIT状態を保持したくない場合に使用されます。
Client State Server State
OPEN OPEN
1. <-- CloseReq <-- CLOSEREQ
2. CLOSING --> Close -->
3. <-- Reset <-- CLOSED (LISTEN)
4. TIMEWAIT
5. CLOSED
A shorter sequence occurs when the client decides to close the
connection.
Client State Server State
OPEN OPEN
1. CLOSING --> Close -->
2. <-- Reset <-- CLOSED (LISTEN)
3. TIMEWAIT
4. CLOSED
Finally, the server can decide to hold TIMEWAIT state:
最後に、サーバーはTIMEWAIT状態を保持することもできます。
Client State Server State
OPEN OPEN
1. <-- Close <-- CLOSING
2. CLOSED --> Reset -->
3. TIMEWAIT
4. CLOSED (LISTEN)
In all cases, the receiver of the DCCP-Reset packet holds TIMEWAIT state for the connection. As in TCP, TIMEWAIT state, where an endpoint quietly preserves a socket for 2MSL (4 minutes) after its connection has closed, ensures that no connection duplicating the current connection's source and destination addresses and ports can start up while old packets might remain in the network.
いずれの場合も、DCCP-Resetパケットの受信側が、その接続のTIMEWAIT状態を保持します。TCPと同様に、エンドポイントが接続のクローズ後2MSL(4分)の間、ソケットを静かに保持するTIMEWAIT状態は、古いパケットがネットワーク内に残っている可能性がある間に、現在の接続と同じ送信元および宛先のアドレスとポートを持つ接続が開始されることがないようにします。
The termination handshake proceeds as follows. The receiver of a valid DCCP-CloseReq packet MUST respond with a DCCP-Close packet. The receiver of a valid DCCP-Close packet MUST respond with a DCCP-Reset packet with Reset Code 1, "Closed". The receiver of a valid DCCP-Reset packet -- which is also the sender of the DCCP-Close packet (and possibly the receiver of the DCCP-CloseReq packet) -- will hold TIMEWAIT state for the connection.
切断ハンドシェイクは次のように進行します。有効なDCCP-CloseReqパケットの受信側は、DCCP-Closeパケットで応答しなければなりません (MUST)。有効なDCCP-Closeパケットの受信側は、Reset Code 1 "Closed" のDCCP-Resetパケットで応答しなければなりません (MUST)。有効なDCCP-Resetパケットの受信側(これはDCCP-Closeパケットの送信側でもあり、場合によってはDCCP-CloseReqパケットの受信側でもあります)は、その接続のTIMEWAIT状態を保持します。
A DCCP-Reset packet completes every DCCP connection, whether the termination is clean (due to application close; Reset Code 1, "Closed") or unclean. Unlike TCP, which has two distinct termination mechanisms (FIN and RST), DCCP ends all connections in a uniform manner. This is justified because some aspects of connection termination are the same independent of whether termination was clean. For instance, the endpoint that receives a valid DCCP-Reset SHOULD hold TIMEWAIT state for the connection. Processors that must distinguish between clean and unclean termination can examine the Reset Code. DCCP implementations generally transition to the CLOSED state after sending a DCCP-Reset packet.
DCCP-Resetパケットは、切断が正常(アプリケーションのクローズによる。Reset Code 1 "Closed")であるか異常であるかを問わず、すべてのDCCP接続を完結させます。2つの異なる切断メカニズム(FINとRST)を持つTCPとは異なり、DCCPはすべての接続を一様な方法で終了させます。これは、接続の切断の一部の側面が、正常な切断かどうかにかかわらず同じであるため、妥当です。たとえば、有効なDCCP-Resetを受信したエンドポイントは、その接続のTIMEWAIT状態を保持すべきです (SHOULD)。正常な切断と異常な切断を区別する必要があるプロセッサは、Reset Codeを調べることができます。DCCP実装は一般に、DCCP-Resetパケットを送信した後にCLOSED状態へ遷移します。
Endpoints in the CLOSEREQ and CLOSING states MUST retransmit DCCP-CloseReq and DCCP-Close packets, respectively, until leaving those states. The retransmission timer should initially be set to go off in two round-trip times and should back off to not less than once every 64 seconds if no relevant response is received.
CLOSEREQ状態およびCLOSING状態のエンドポイントは、それらの状態を離れるまで、それぞれDCCP-CloseReqパケットおよびDCCP-Closeパケットを再送しなければなりません (MUST)。再送タイマーは、最初は2ラウンドトリップ時間後に切れるように設定し、関連する応答が受信されない場合は、最大でも64秒に1回以上の間隔までバックオフするのがよいでしょう。
Only the server can send a DCCP-CloseReq packet or enter the CLOSEREQ state. A server receiving a sequence-valid DCCP-CloseReq packet MUST respond with a DCCP-Sync packet and otherwise ignore the DCCP-CloseReq.
DCCP-CloseReqパケットを送信できるのも、CLOSEREQ状態に入れるのも、サーバーだけです。シーケンス的に有効なDCCP-CloseReqパケットを受信したサーバーは、DCCP-Syncパケットで応答しなければならず (MUST)、それ以外はそのDCCP-CloseReqを無視します。
DCCP-Data, DCCP-DataAck, and DCCP-Ack packets received in CLOSEREQ or CLOSING states MAY be either processed or ignored.
CLOSEREQ状態またはCLOSING状態で受信したDCCP-Data、DCCP-DataAck、およびDCCP-Ackパケットは、処理しても無視してもよいです (MAY)。
DCCP endpoints generate DCCP-Reset packets to terminate connections abnormally; a DCCP-Reset packet may be generated from any state. Resets sent in the CLOSED, LISTEN, and TIMEWAIT states use Reset Code 3, "No Connection", unless otherwise specified. Resets sent in the REQUEST or RESPOND states use Reset Code 4, "Packet Error", unless otherwise specified.
DCCPエンドポイントは、接続を異常終了させるためにDCCP-Resetパケットを生成します。DCCP-Resetパケットは、どの状態からでも生成される可能性があります。CLOSED、LISTEN、TIMEWAIT状態で送信されるリセットは、特に指定がない限り、Reset Code 3 "No Connection" を使用します。REQUESTまたはRESPOND状態で送信されるリセットは、特に指定がない限り、Reset Code 4 "Packet Error" を使用します。
DCCP endpoints in CLOSED, LISTEN, or TIMEWAIT state may need to generate a DCCP-Reset packet in response to a packet received from a peer. Since these states have no associated sequence number variables, the Sequence and Acknowledgement Numbers on the DCCP-Reset packet R are taken from the received packet P, as follows.
CLOSED、LISTEN、またはTIMEWAIT状態のDCCPエンドポイントは、ピアから受信したパケットに応答して、DCCP-Resetパケットを生成する必要がある場合があります。これらの状態には関連するシーケンス番号変数がないため、DCCP-ResetパケットRのSequence NumberとAcknowledgement Numberは、次のように受信パケットPから取得されます。
1. If P.ackno exists, then set R.seqno := P.ackno + 1. Otherwise, set R.seqno := 0.
1. P.acknoが存在する場合、R.seqno := P.ackno + 1 とします。そうでない場合は、R.seqno := 0 とします。
2. Set R.ackno := P.seqno.
2. R.ackno := P.seqno とします。
3. If the packet used short sequence numbers (P.X == 0), then set the upper 24 bits of R.seqno and R.ackno to 0.
3. パケットがショートシーケンス番号を使用している場合 (P.X == 0)、R.seqnoとR.acknoの上位24ビットを0にします。
The most common state transitions discussed above can be summarized in the following state diagram. The diagram is illustrative; the text in Section 8.5 and elsewhere should be considered definitive. For example, there are arcs (not shown) from every state except CLOSED to TIMEWAIT, contingent on the receipt of a valid DCCP-Reset.
上記で説明した最も一般的な状態遷移は、次の状態遷移図にまとめることができます。この図は説明用のものであり、8.5節およびその他の箇所の記述が決定的なものとみなされるべきです。たとえば、有効なDCCP-Resetの受信を条件として、CLOSED以外のすべての状態からTIMEWAITへのアーク(図示されていません)があります。
+---------------------------+ +---------------------------+
| v v |
| +----------+ |
| +-------------+ CLOSED +------------+ |
| | passive +----------+ active | |
| | open open | |
| | snd Request | |
| v v |
| +----------+ +----------+ |
| | LISTEN | | REQUEST | |
| +----+-----+ +----+-----+ |
| | rcv Request rcv Response | |
| | snd Response snd Ack | |
| v v |
| +----------+ +----------+ |
| | RESPOND | | PARTOPEN | |
| +----+-----+ +----+-----+ |
| | rcv Ack/DataAck rcv packet | |
| | | |
| | +----------+ | |
| +------------>| OPEN |<-----------+ |
| +--+-+--+--+ |
| server active close | | | active close |
| snd CloseReq | | | or rcv CloseReq |
| | | | snd Close |
| | | | |
| +----------+ | | | +----------+ |
| | CLOSEREQ |<---------+ | +--------->| CLOSING | |
| +----+-----+ | +----+-----+ |
| | rcv Close | rcv Reset | |
| | snd Reset | | |
|<---------+ | v |
| | +----+-----+ |
| rcv Close | | TIMEWAIT | |
| snd Reset | +----+-----+ |
+-----------------------------+ | |
+-----------+
2MSL timer expires
This section presents an algorithm describing the processing steps a DCCP endpoint must go through when it receives a packet. A DCCP implementation need not implement the algorithm as it is described here, but any implementation MUST generate observable effects exactly as indicated by this pseudocode, except where allowed otherwise by another part of this document.
この節では、DCCPエンドポイントがパケットを受信したときに通らなければならない処理ステップを記述するアルゴリズムを示します。DCCP実装は、ここに記述されたとおりにアルゴリズムを実装する必要はありません。ただし、本文書の他の部分で別途許可されている場合を除き、あらゆる実装は、この擬似コードが示すとおりの観測可能な効果を正確に生じさせなければなりません (MUST)。
The received packet is written as P, the socket as S. Socket variables are:
受信パケットはP、ソケットはSと表記します。ソケット変数は次のとおりです。
S.SWL - sequence number window low S.SWH - sequence number window high S.AWL - acknowledgement number window low S.AWH - acknowledgement number window high S.ISS - initial sequence number sent S.ISR - initial sequence number received S.OSR - first OPEN sequence number received S.GSS - greatest sequence number sent S.GSR - greatest valid sequence number received S.GAR - greatest valid acknowledgement number received on a non-Sync; initialized to S.ISS "Send packet" actions always use, and increment, S.GSS.
S.SWL - sequence number window low S.SWH - sequence number window high S.AWL - acknowledgement number window low S.AWH - acknowledgement number window high S.ISS - initial sequence number sent S.ISR - initial sequence number received S.OSR - first OPEN sequence number received S.GSS - greatest sequence number sent S.GSR - greatest valid sequence number received S.GAR - greatest valid acknowledgement number received on a non-Sync; initialized to S.ISS "Send packet" actions always use, and increment, S.GSS.
Step 1: Check header basics
/* This step checks for malformed packets. Packets that fail
these checks are ignored -- they do not receive Resets in
response */
If the packet is shorter than 12 bytes, drop packet and return
If P.type is not understood, drop packet and return
If P.Data Offset is smaller than the given packet type's
fixed header length or larger than the packet's length,
drop packet and return
If P.type is not Data, Ack, or DataAck and P.X == 0 (the packet
has short sequence numbers), drop packet and return
If the header checksum is incorrect, drop packet and return
If P.CsCov is too large for the packet size, drop packet and
return
Step 2: Check ports and process TIMEWAIT state
/* Flow ID is <src addr, src port, dst addr, dst port> 4-tuple */
Look up flow ID in table and get corresponding socket
If no socket, or S.state == TIMEWAIT,
/* The following Reset's Sequence and Acknowledgement Numbers
are taken from the input packet; see Section 8.3.1. */
Generate Reset(No Connection) unless P.type == Reset
Drop packet and return
Step 3: Process LISTEN state
If S.state == LISTEN,
If P.type == Request or P contains a valid Init Cookie option,
/* Must scan the packet's options to check for Init
Cookies. Only Init Cookies are processed here,
however; other options are processed in Step 8. This
scan need only be performed if the endpoint uses Init
Cookies */
/* Generate a new socket and switch to that socket */
Set S := new socket for this port pair
S.state = RESPOND
Choose S.ISS (initial seqno) or set from Init Cookies
Initialize S.GAR := S.ISS
Set S.ISR, S.GSR, S.SWL, S.SWH from packet or Init Cookies
Continue with S.state == RESPOND
/* A Response packet will be generated in Step 11 */
Otherwise,
Generate Reset(No Connection) unless P.type == Reset
Drop packet and return
Step 4: Prepare sequence numbers in REQUEST
If S.state == REQUEST,
If (P.type == Response or P.type == Reset)
and S.AWL <= P.ackno <= S.AWH,
/* Set sequence number variables corresponding to the
other endpoint, so P will pass the tests in Step 6 */
Set S.GSR, S.ISR, S.SWL, S.SWH
/* Response processing continues in Step 10; Reset
processing continues in Step 9 */
Otherwise,
/* Only Response and Reset are valid in REQUEST state */
Generate Reset(Packet Error)
Drop packet and return
Step 5: Prepare sequence numbers for Sync
If P.type == Sync or P.type == SyncAck,
If S.AWL <= P.ackno <= S.AWH and P.seqno >= S.SWL,
/* P is valid, so update sequence number variables
accordingly. After this update, P will pass the tests
in Step 6. A SyncAck is generated if necessary in
Step 15 */
Update S.GSR, S.SWL, S.SWH
Otherwise,
Drop packet and return
Step 6: Check sequence numbers
If P.X == 0 and the relevant Allow Short Seqnos feature is 0,
/* Packet has short seqnos, but short seqnos not allowed */
Drop packet and return
Otherwise, if P.X == 0,
Extend P.seqno and P.ackno to 48 bits using the procedure
in Section 7.6
Let LSWL = S.SWL and LAWL = S.AWL
If P.type == CloseReq or P.type == Close or P.type == Reset,
LSWL := S.GSR + 1, LAWL := S.GAR
If LSWL <= P.seqno <= S.SWH
and (P.ackno does not exist or LAWL <= P.ackno <= S.AWH),
Update S.GSR, S.SWL, S.SWH
If P.type != Sync,
Update S.GAR
Otherwise,
If P.type == Reset,
Send Sync packet acknowledging S.GSR
Otherwise,
Send Sync packet acknowledging P.seqno
Drop packet and return
Step 7: Check for unexpected packet types
If (S.is_server and P.type == CloseReq)
or (S.is_server and P.type == Response)
or (S.is_client and P.type == Request)
or (S.state >= OPEN and P.type == Request
and P.seqno >= S.OSR)
or (S.state >= OPEN and P.type == Response
and P.seqno >= S.OSR)
or (S.state == RESPOND and P.type == Data),
Send Sync packet acknowledging P.seqno
Drop packet and return
Step 8: Process options and mark acknowledgeable
/* Option processing is not specifically described here.
Certain options, such as Mandatory, may cause the connection
to be reset, in which case Steps 9 and on are not executed */
Mark packet as acknowledgeable (in Ack Vector terms, Received
or Received ECN Marked)
Step 9: Process Reset If P.type == Reset, Tear down connection S.state := TIMEWAIT Set TIMEWAIT timer Drop packet and return
Step 9: Process Reset If P.type == Reset, Tear down connection S.state := TIMEWAIT Set TIMEWAIT timer Drop packet and return
Step 10: Process REQUEST state (second part)
If S.state == REQUEST,
/* If we get here, P is a valid Response from the server (see
Step 4), and we should move to PARTOPEN state. PARTOPEN
means send an Ack, don't send Data packets, retransmit
Acks periodically, and always include any Init Cookie from
the Response */
S.state := PARTOPEN
Set PARTOPEN timer
Continue with S.state == PARTOPEN
/* Step 12 will send the Ack completing the three-way
handshake */
Step 11: Process RESPOND state
If S.state == RESPOND,
If P.type == Request,
Send Response, possibly containing Init Cookie
If Init Cookie was sent,
Destroy S and return
/* Step 3 will create another socket when the client
completes the three-way handshake */
Otherwise,
S.OSR := P.seqno
S.state := OPEN
Step 12: Process PARTOPEN state
If S.state == PARTOPEN,
If P.type == Response,
Send Ack
Otherwise, if P.type != Sync,
S.OSR := P.seqno
S.state := OPEN
Step 13: Process CloseReq If P.type == CloseReq and S.state < CLOSEREQ, Generate Close S.state := CLOSING Set CLOSING timer
Step 13: Process CloseReq If P.type == CloseReq and S.state < CLOSEREQ, Generate Close S.state := CLOSING Set CLOSING timer
Step 14: Process Close If P.type == Close, Generate Reset(Closed) Tear down connection Drop packet and return
Step 14: Process Close If P.type == Close, Generate Reset(Closed) Tear down connection Drop packet and return
Step 15: Process Sync If P.type == Sync, Generate SyncAck
Step 15: Process Sync If P.type == Sync, Generate SyncAck
Step 16: Process data
/* At this point any application data on P can be passed to the
application, except that the application MUST NOT receive
data from more than one Request or Response */
DCCP uses a header checksum to protect its header against corruption. Generally, this checksum also covers any application data. DCCP applications can, however, request that the header checksum cover only part of the application data, or perhaps no application data at all. Link layers may then reduce their protection on unprotected parts of DCCP packets. For some noisy links, and for applications that can tolerate corruption, this can greatly improve delivery rates and perceived performance.
DCCPは、ヘッダを破損から保護するためにヘッダチェックサムを使用します。一般に、このチェックサムはアプリケーションデータも対象とします。ただし、DCCPアプリケーションは、ヘッダチェックサムがアプリケーションデータの一部のみ、あるいはまったく対象としないように要求できます。その場合、リンク層は、DCCPパケットの保護されていない部分に対する保護を減らすことができます。ノイズの多い一部のリンクや、破損を許容できるアプリケーションでは、これにより配信率と体感性能が大幅に向上する可能性があります。
Checksum coverage may eventually impact congestion control mechanisms as well. A packet with corrupt application data and complete checksum coverage is treated as lost. This incurs a heavy-duty loss response from the sender's congestion control mechanism, which can unfairly penalize connections on links with high background corruption. The combination of reduced checksum coverage and Data Checksum options may let endpoints report packets as corrupt rather than dropped, using Data Dropped options and Drop Code 3 (see Section 11.7). This may eventually benefit applications. However, further research is required to determine an appropriate response to corruption, which can sometimes correlate with congestion. Corrupt packets currently incur a loss response.
チェックサムの対象範囲は、将来的には輻輳制御メカニズムにも影響を与える可能性があります。アプリケーションデータが破損しており、チェックサムの対象範囲が完全なパケットは、失われたものとして扱われます。これは送信側の輻輳制御メカニズムによる強力な損失応答を招き、背景の破損が多いリンク上の接続を不当に不利にする可能性があります。チェックサム対象範囲の縮小とData Checksumオプションを組み合わせることで、エンドポイントは、Data DroppedオプションとDrop Code 3(11.7節参照)を使用して、パケットを破棄されたものではなく破損したものとして報告できるようになる可能性があります。これは将来的にアプリケーションにとって有益かもしれません。ただし、ときに輻輳と相関することのある破損に対する適切な応答を決定するには、さらなる研究が必要です。現在のところ、破損したパケットは損失応答を招きます。
The Data Checksum option, which contains a strong CRC, lets endpoints detect application data corruption. An API can then be used to avoid delivering corrupt data to the application, even if links deliver corrupt data to the endpoint due to reduced checksum coverage. However, the use of reduced checksum coverage for applications that demand correct data is currently considered experimental. This is because the combined loss-plus-corruption rate for packets with reduced checksum coverage may be significantly higher than that for packets with full checksum coverage, although the loss rate will generally be lower. Actual behavior will depend on link design; further research and experience is required.
強力なCRCを含むData Checksumオプションにより、エンドポイントはアプリケーションデータの破損を検出できます。そのうえでAPIを使用して、縮小されたチェックサム対象範囲のためにリンクが破損したデータをエンドポイントに配信した場合でも、破損したデータをアプリケーションに配信しないようにできます。ただし、正しいデータを必要とするアプリケーションに対してチェックサム対象範囲の縮小を使用することは、現在のところ実験的とみなされています。これは、チェックサム対象範囲が縮小されたパケットの損失と破損を合わせた割合が、チェックサム対象範囲が完全なパケットの割合よりも大幅に高くなる可能性があるためです(ただし、損失率は一般に低くなります)。実際の挙動はリンクの設計に依存します。さらなる研究と経験が必要です。
Reduced checksum coverage introduces some security considerations; see Section 18.1. See Appendix B for further motivation and discussion. DCCP's implementation of reduced checksum coverage was inspired by UDP-Lite [RFC3828].
チェックサム対象範囲の縮小には、いくつかのセキュリティ上の考慮事項があります。18.1節を参照してください。さらなる動機と議論については、付録Bを参照してください。DCCPにおけるチェックサム対象範囲の縮小の実装は、UDP-Lite [RFC3828] に着想を得ています。
DCCP uses the TCP/IP checksum algorithm. The Checksum field in the DCCP generic header (see Section 5.1) equals the 16-bit one's complement of the one's complement sum of all 16-bit words in the DCCP header, DCCP options, a pseudoheader taken from the network-layer header, and, depending on the value of the Checksum Coverage field, some or all of the application data. When calculating the checksum, the Checksum field itself is treated as 0. If a packet contains an odd number of header and payload bytes to be checksummed, 8 zero bits are added on the right to form a 16-bit word for checksum purposes. The pad byte is not transmitted as part of the packet.
DCCPはTCP/IPチェックサムアルゴリズムを使用します。DCCPジェネリックヘッダ(5.1節参照)のChecksumフィールドは、DCCPヘッダ、DCCPオプション、ネットワーク層ヘッダから取得した疑似ヘッダ、およびChecksum Coverageフィールドの値に応じてアプリケーションデータの一部またはすべて、に含まれるすべての16ビットワードの1の補数和の、16ビット1の補数に等しくなります。チェックサムを計算する際、Checksumフィールド自体は0として扱われます。チェックサムの対象となるヘッダおよびペイロードのバイト数が奇数の場合、チェックサム計算上は、右側に8個のゼロビットを追加して16ビットワードを形成します。このパディングバイトは、パケットの一部としては送信されません。
The pseudoheader is calculated as for TCP. For IPv4, it is 96 bits long and consists of the IPv4 source and destination addresses, the IP protocol number for DCCP (padded on the left with 8 zero bits), and the DCCP length as a 16-bit quantity (the length of the DCCP header with options, plus the length of any data); see [RFC793], Section 3.1. For IPv6, it is 320 bits long, and consists of the IPv6 source and destination addresses, the DCCP length as a 32-bit quantity, and the IP protocol number for DCCP (padded on the left with 24 zero bits); see [RFC2460], Section 8.1.
疑似ヘッダはTCPと同様に計算されます。IPv4の場合、疑似ヘッダは96ビット長で、IPv4の送信元アドレスと宛先アドレス、DCCPのIPプロトコル番号(左側に8個のゼロビットを付加したもの)、および16ビット量としてのDCCP長(オプションを含むDCCPヘッダの長さに、データの長さを加えたもの)で構成されます。[RFC793]の3.1節を参照してください。IPv6の場合、疑似ヘッダは320ビット長で、IPv6の送信元アドレスと宛先アドレス、32ビット量としてのDCCP長、およびDCCPのIPプロトコル番号(左側に24個のゼロビットを付加したもの)で構成されます。[RFC2460]の8.1節を参照してください。
Packets with invalid header checksums MUST be ignored. In particular, their options MUST NOT be processed.
ヘッダチェックサムが無効なパケットは、無視しなければなりません (MUST)。特に、そのオプションを処理してはなりません (MUST NOT)。
The Checksum Coverage field in the DCCP generic header (see Section 5.1) specifies what parts of the packet are covered by the Checksum field, as follows:
DCCPジェネリックヘッダ(5.1節参照)のChecksum Coverageフィールドは、パケットのどの部分がChecksumフィールドの対象となるかを、次のように指定します。
CsCov = 0 The Checksum field covers the DCCP header, DCCP options, network-layer pseudoheader, and all application data in the packet, possibly padded on the right with zeros to an even number of bytes.
CsCov = 0 Checksumフィールドは、DCCPヘッダ、DCCPオプション、ネットワーク層疑似ヘッダ、およびパケット内のすべてのアプリケーションデータを対象とします。必要に応じて、右側にゼロを埋めて偶数バイトにします。
CsCov = 1-15 The Checksum field covers the DCCP header, DCCP options, network-layer pseudoheader, and the initial (CsCov-1)*4 bytes of the packet's application data.
CsCov = 1-15 Checksumフィールドは、DCCPヘッダ、DCCPオプション、ネットワーク層疑似ヘッダ、およびパケットのアプリケーションデータの先頭 (CsCov-1)*4 バイトを対象とします。
Thus, if CsCov is 1, none of the application data is protected by the header checksum. The value (CsCov-1)*4 MUST be less than or equal to the length of the application data. Packets with invalid CsCov values MUST be ignored; in particular, their options MUST NOT be processed. The meanings of values other than 0 and 1 should be considered experimental.
したがって、CsCovが1の場合、アプリケーションデータはヘッダチェックサムによってまったく保護されません。(CsCov-1)*4 の値は、アプリケーションデータの長さ以下でなければなりません (MUST)。無効なCsCov値を持つパケットは無視しなければならず (MUST)、特に、そのオプションを処理してはなりません (MUST NOT)。0と1以外の値の意味は、実験的なものとみなすべきです。
Values other than 0 specify that corruption is acceptable in some or all of the DCCP packet's application data. In fact, DCCP cannot even detect corruption in areas not covered by the header checksum, unless the Data Checksum option is used. Applications should not make any assumptions about the correctness of received data not covered by the checksum and should, if necessary, introduce their own validity checks.
0以外の値は、DCCPパケットのアプリケーションデータの一部またはすべてにおいて破損が許容されることを指定します。実際、Data Checksumオプションを使用しない限り、DCCPはヘッダチェックサムの対象外の領域における破損を検出することさえできません。アプリケーションは、チェックサムの対象外の受信データの正しさについて何も仮定すべきではなく、必要であれば独自の妥当性検査を導入すべきです。
A DCCP application interface should let sending applications suggest a value for CsCov for sent packets, defaulting to 0 (full coverage). The Minimum Checksum Coverage feature, described below, lets an endpoint refuse delivery of application data on packets with partial checksum coverage; by default, only fully covered application data is accepted. Lower layers that support partial error detection MAY use the Checksum Coverage field as a hint of where errors do not need to be detected. Lower layers MUST use a strong error detection mechanism to detect at least errors that occur in the sensitive part of the packet, and to discard damaged packets. The sensitive part consists of the bytes between the first byte of the IP header and the last byte identified by Checksum Coverage.
DCCPのアプリケーションインターフェースは、送信側アプリケーションが送信パケットのCsCovの値を提案できるようにするのがよいでしょう。デフォルトは0(完全な対象範囲)です。後述のMinimum Checksum Coverage機能により、エンドポイントは、部分的なチェックサム対象範囲を持つパケットのアプリケーションデータの配信を拒否できます。デフォルトでは、完全に対象となるアプリケーションデータのみが受け入れられます。部分的なエラー検出をサポートする下位層は、Checksum Coverageフィールドを、どこでエラーを検出する必要がないかのヒントとして使用してもよいです (MAY)。下位層は、少なくともパケットの機密部分で発生するエラーを検出し、損傷したパケットを破棄するために、強力なエラー検出メカニズムを使用しなければなりません (MUST)。機密部分は、IPヘッダの最初のバイトから、Checksum Coverageで特定される最後のバイトまでのバイトで構成されます。
For more details on application and lower-layer interface issues relating to partial checksumming, see [RFC3828].
部分的なチェックサム処理に関するアプリケーションおよび下位層のインターフェース上の問題の詳細については、[RFC3828]を参照してください。
The Minimum Checksum Coverage feature lets a DCCP endpoint determine whether its peer is willing to accept packets with reduced Checksum Coverage. For example, DCCP A sends a "Change R(Minimum Checksum Coverage, 1)" option to DCCP B to check whether B is willing to accept packets with Checksum Coverage set to 1.
Minimum Checksum Coverage機能により、DCCPエンドポイントは、ピアがChecksum Coverageを縮小したパケットを受け入れる意思があるかどうかを判断できます。たとえば、DCCP Aは、DCCP Bに "Change R(Minimum Checksum Coverage, 1)" オプションを送信して、BがChecksum Coverageを1に設定したパケットを受け入れる意思があるかどうかを確認します。
Minimum Checksum Coverage has feature number 8 and is server-priority. It takes one-byte integer values between 0 and 15; values of 16 or more are reserved. Minimum Checksum Coverage/B reflects values of Checksum Coverage that DCCP B finds unacceptable. Say that the value of Minimum Checksum Coverage/B is MinCsCov. Then:
Minimum Checksum Coverageは機能番号8で、server-priorityです。0~15の1バイト整数値をとり、16以上の値は予約されています。Minimum Checksum Coverage/Bは、DCCP Bが受け入れ不可とするChecksum Coverageの値を反映します。Minimum Checksum Coverage/Bの値をMinCsCovとします。このとき、次のようになります。
o If MinCsCov = 0, then DCCP B only finds packets with CsCov = 0 acceptable.
o MinCsCov = 0 の場合、DCCP Bは CsCov = 0 のパケットのみを受け入れ可能とします。
o If MinCsCov > 0, then DCCP B additionally finds packets with CsCov >= MinCsCov acceptable.
o MinCsCov > 0 の場合、DCCP Bは、加えて CsCov >= MinCsCov のパケットも受け入れ可能とします。
DCCP B MAY refuse to process application data from packets with unacceptable Checksum Coverage. Such packets SHOULD be reported using Data Dropped options (Section 11.7) with Drop Code 0, Protocol Constraints. New connections start with Minimum Checksum Coverage 0 for both endpoints.
DCCP Bは、Checksum Coverageが受け入れ不可であるパケットからのアプリケーションデータの処理を拒否してもよいです (MAY)。そのようなパケットは、Drop Code 0, Protocol Constraintsを持つData Droppedオプション(11.7節)を使用して報告すべきです (SHOULD)。新しい接続では、両エンドポイントともMinimum Checksum Coverageは0で始まります。
The Data Checksum option holds a 32-bit CRC-32c cyclic redundancy-check code of a DCCP packet's application data.
Data Checksumオプションは、DCCPパケットのアプリケーションデータの32ビットCRC-32c巡回冗長検査コードを保持します。
+--------+--------+--------+--------+--------+--------+
|00101100|00000110| CRC-32c |
+--------+--------+--------+--------+--------+--------+
Type=44 Length=6
The sending DCCP computes the CRC of the bytes comprising the application data area and stores it in the option data. The CRC-32c algorithm used for Data Checksum is the same as that used for SCTP [RFC3309]; note that the CRC-32c of zero bytes of data equals zero. The DCCP header checksum will cover the Data Checksum option, so the data checksum must be computed before the header checksum.
送信側のDCCPは、アプリケーションデータ領域を構成するバイトのCRCを計算し、オプションデータに格納します。Data Checksumに使用されるCRC-32cアルゴリズムは、SCTP [RFC3309] で使用されるものと同じです。ゼロバイトのデータのCRC-32cはゼロに等しいことに注意してください。DCCPヘッダチェックサムはData Checksumオプションを対象とするため、データチェックサムはヘッダチェックサムより前に計算しなければなりません。
A DCCP endpoint receiving a packet with a Data Checksum option either MUST or MAY check the Data Checksum; the choice depends on the value of the Check Data Checksum feature described below. If it checks the checksum, it computes the received application data's CRC-32c using the same algorithm as the sender and compares the result with the Data Checksum value. If the CRCs differ, the endpoint reacts in one of two ways:
Data Checksumオプションを持つパケットを受信したDCCPエンドポイントは、Data Checksumを検査しなければならない (MUST) か、検査してもよい (MAY) かのいずれかです。どちらになるかは、後述のCheck Data Checksum機能の値によって決まります。チェックサムを検査する場合、エンドポイントは、送信側と同じアルゴリズムを使用して受信したアプリケーションデータのCRC-32cを計算し、その結果をData Checksumの値と比較します。CRCが異なる場合、エンドポイントは次の2通りのいずれかで対応します。
o The receiving application may have requested delivery of known-corrupt data via some optional API. In this case, the packet's data MUST be delivered to the application, with a note that it is known to be corrupt. Furthermore, the receiving endpoint MUST report the packet as delivered corrupt using a Data Dropped option (Drop Code 7, Delivered Corrupt).
o 受信側アプリケーションが、何らかの任意のAPIを介して、破損していることが判明しているデータの配信を要求している場合があります。この場合、パケットのデータは、破損していることが判明しているという注記とともに、アプリケーションに配信されなければなりません (MUST)。さらに、受信側エンドポイントは、Data Droppedオプション(Drop Code 7, Delivered Corrupt)を使用して、そのパケットが破損したまま配信されたと報告しなければなりません (MUST)。
o Otherwise, the receiving endpoint MUST drop the application data and report that data as dropped due to corruption using a Data Dropped option (Drop Code 3, Corrupt).
o そうでない場合、受信側エンドポイントはアプリケーションデータを破棄し、Data Droppedオプション(Drop Code 3, Corrupt)を使用してそのデータが破損のために破棄されたと報告しなければなりません (MUST)。
In either case, the packet is considered acknowledgeable (since its header was processed) and will therefore be acknowledged using the equivalent of Ack Vector's Received or Received ECN Marked states.
いずれの場合も、パケットは(ヘッダが処理されたため)確認応答可能とみなされ、したがって、Ack VectorのReceivedまたはReceived ECN Markedの状態に相当するものを使用して確認応答されます。
Although Data Checksum is intended for packets containing application data, it may be included on other packets, such as DCCP-Ack, DCCP- Sync, and DCCP-SyncAck. The receiver SHOULD calculate the application data area's CRC-32c on such packets, just as it does for DCCP-Data and similar packets. If the CRCs differ, the packets similarly MUST be reported using Data Dropped options (Drop Code 3), although their application data areas would not be delivered to the application in any case.
Data Checksumはアプリケーションデータを含むパケット向けですが、DCCP-Ack、DCCP-Sync、DCCP-SyncAckなどの他のパケットに含まれることもあります。受信側は、そのようなパケットについても、DCCP-Dataや同様のパケットの場合と同じように、アプリケーションデータ領域のCRC-32cを計算すべきです (SHOULD)。CRCが異なる場合、それらのパケットも同様にData Droppedオプション(Drop Code 3)を使用して報告しなければなりません (MUST)。ただし、そのアプリケーションデータ領域は、いずれにせよアプリケーションには配信されません。
The Check Data Checksum feature lets a DCCP endpoint determine whether its peer will definitely check Data Checksum options. DCCP A sends a Mandatory "Change R(Check Data Checksum, 1)" option to DCCP B to require it to check Data Checksum options (the connection will be reset if it cannot).
Check Data Checksum機能により、DCCPエンドポイントは、ピアがData Checksumオプションを確実に検査するかどうかを判断できます。DCCP Aは、Mandatoryの "Change R(Check Data Checksum, 1)" オプションをDCCP Bに送信して、Data Checksumオプションの検査を要求します(検査できない場合、接続はリセットされます)。
Check Data Checksum has feature number 9 and is server-priority. It takes one-byte Boolean values. DCCP B MUST check any received Data Checksum options when Check Data Checksum/B is one, although it MAY check them even when Check Data Checksum/B is zero. Values of two or more are reserved. New connections start with Check Data Checksum 0 for both endpoints.
Check Data Checksumは機能番号9で、server-priorityです。1バイトのブール値をとります。DCCP Bは、Check Data Checksum/Bが1のとき、受信したData Checksumオプションを検査しなければなりません (MUST)。ただし、Check Data Checksum/Bが0のときでも検査してもよいです (MAY)。2以上の値は予約されています。新しい接続では、両エンドポイントともCheck Data Checksumは0で始まります。
Internet links must normally apply strong integrity checks to the packets they transmit [RFC3828, RFC3819]. This is the default case when the DCCP header's Checksum Coverage value equals zero (full coverage). However, the DCCP Checksum Coverage value might not be zero. By setting partial Checksum Coverage, the application indicates that it can tolerate corruption in the unprotected part of the application data. Recognizing this, link layers may reduce error detection and/or correction strength when transmitting this unprotected part. This, in turn, can significantly increase the likelihood of the endpoint's receiving corrupt data; Data Checksum lets the receiver detect that corruption with very high probability.
インターネットのリンクは、通常、送信するパケットに強力な完全性検査を適用しなければなりません [RFC3828, RFC3819]。これは、DCCPヘッダのChecksum Coverageの値がゼロ(完全な対象範囲)のときのデフォルトの場合です。しかし、DCCPのChecksum Coverageの値がゼロでない場合もあります。部分的なChecksum Coverageを設定することで、アプリケーションは、アプリケーションデータの保護されていない部分における破損を許容できることを示します。これを認識して、リンク層は、この保護されていない部分を送信する際に、エラー検出や訂正の強度を下げることがあります。その結果、エンドポイントが破損したデータを受信する可能性が大幅に高まることがあります。Data Checksumにより、受信側は非常に高い確率でその破損を検出できます。
Each congestion control mechanism supported by DCCP is assigned a congestion control identifier, or CCID: a number from 0 to 255. During connection setup, and optionally thereafter, the endpoints negotiate their congestion control mechanisms by negotiating the values for their Congestion Control ID features. Congestion Control ID has feature number 1. The CCID/A value equals the CCID in use for the A-to-B half-connection. DCCP B sends a "Change R(CCID, K)" option to ask DCCP A to use CCID K for its data packets.
DCCPがサポートする各輻輳制御メカニズムには、輻輳制御識別子、すなわちCCID(0~255の番号)が割り当てられます。接続の確立時、およびその後は任意に、エンドポイントはCongestion Control ID機能の値をネゴシエーションすることで、輻輳制御メカニズムをネゴシエーションします。Congestion Control IDは機能番号1です。CCID/Aの値は、A-to-B半接続で使用されているCCIDに等しくなります。DCCP Bは、"Change R(CCID, K)" オプションを送信して、DCCP Aにそのデータパケットに対してCCID Kを使用するよう要求します。
CCID is a server-priority feature, so CCID negotiation options can list multiple acceptable CCIDs, sorted in descending order of priority. For example, the option "Change R(CCID, 2 3 4)" asks the receiver to use CCID 2 for its packets, although CCIDs 3 and 4 are also acceptable. (This corresponds to the bytes "35, 6, 1, 2, 3, 4": Change R option (35), option length (6), feature ID (1), CCIDs (2, 3, 4).) Similarly, "Confirm L(CCID, 2, 2 3 4)" tells the receiver that the sender is using CCID 2 for its packets, but that CCIDs 3 and 4 might also be acceptable.
CCIDはserver-priorityの機能であるため、CCIDのネゴシエーションオプションには、受け入れ可能な複数のCCIDを優先度の高い順に並べて列挙できます。たとえば、オプション "Change R(CCID, 2 3 4)" は、受信側にそのパケットに対してCCID 2を使用するよう要求しますが、CCID 3と4も受け入れ可能です。(これは、バイト列 "35, 6, 1, 2, 3, 4" に対応します。Change Rオプション (35)、オプション長 (6)、機能ID (1)、CCID (2, 3, 4) です。)同様に、"Confirm L(CCID, 2, 2 3 4)" は、送信側がそのパケットに対してCCID 2を使用していますが、CCID 3と4も受け入れ可能かもしれないことを受信側に伝えます。
Currently allocated CCIDs are as follows:
現在割り当てられているCCIDは次のとおりです。
Table 5: DCCP Congestion Control Identifiers
表5: DCCP輻輳制御識別子
New connections start with CCID 2 for both endpoints. If this is unacceptable for a DCCP endpoint, that endpoint MUST send Mandatory Change(CCID) options on its first packets.
新しい接続では、両エンドポイントともCCID 2で始まります。これがDCCPエンドポイントにとって受け入れられない場合、そのエンドポイントは最初のパケットでMandatory Change(CCID)オプションを送信しなければなりません (MUST)。
All CCIDs standardized for use with DCCP will correspond to congestion control mechanisms previously standardized by the IETF. We expect that for quite some time, all such mechanisms will be TCP friendly, but TCP-friendliness is not an explicit DCCP requirement.
DCCPで使用するために標準化されるすべてのCCIDは、IETFによって以前に標準化された輻輳制御メカニズムに対応します。当面の間、そのようなメカニズムはすべてTCPフレンドリーになると期待されますが、TCPフレンドリーであることはDCCPの明示的な要件ではありません。
A DCCP implementation intended for general use, such as an implementation in a general-purpose operating system kernel, SHOULD implement at least CCID 2. The intent is to make CCID 2 broadly available for interoperability, although particular applications might disallow its use.
汎用オペレーティングシステムのカーネルでの実装など、一般的な使用を意図したDCCP実装は、少なくともCCID 2を実装すべきです (SHOULD)。その意図は、相互運用性のためにCCID 2を広く利用可能にすることです。ただし、特定のアプリケーションはその使用を許可しない場合があります。
CCID 2, TCP-like Congestion Control, denotes Additive Increase, Multiplicative Decrease (AIMD) congestion control with behavior modelled directly on TCP, including congestion window, slow start, timeouts, and so forth [RFC2581]. CCID 2 achieves maximum bandwidth over the long term, consistent with the use of end-to-end congestion control, but halves its congestion window in response to each congestion event. This leads to the abrupt rate changes typical of TCP. Applications should use CCID 2 if they prefer maximum bandwidth utilization to steadiness of rate. This is often the case for applications that are not playing their data directly to the user.
CCID 2のTCP-like Congestion Controlは、輻輳ウィンドウ、スロースタート、タイムアウトなどを含め、TCPを直接モデルにした挙動を持つAdditive Increase, Multiplicative Decrease (AIMD) 輻輳制御を表します [RFC2581]。CCID 2は、エンドツーエンドの輻輳制御の使用と矛盾しない範囲で、長期的に最大の帯域幅を達成しますが、輻輳イベントのたびに輻輳ウィンドウを半分にします。これは、TCPに典型的な急激なレート変化につながります。アプリケーションは、レートの安定性よりも帯域幅の最大限の利用を好む場合は、CCID 2を使用するのがよいでしょう。これは、データをユーザーに直接再生しないアプリケーションでよく当てはまります。
For example, a hypothetical application that transferred files over DCCP, using application-level retransmissions for lost packets, would prefer CCID 2 to CCID 3. On-line games may also prefer CCID 2.
たとえば、DCCP上でファイルを転送し、失われたパケットに対してアプリケーションレベルの再送を使用する仮想的なアプリケーションは、CCID 3よりCCID 2を好むでしょう。オンラインゲームもCCID 2を好むかもしれません。
CCID 3 denotes TCP-Friendly Rate Control (TFRC), an equation-based rate-controlled congestion control mechanism. TFRC is designed to be reasonably fair when competing for bandwidth with TCP-like flows, where a flow is "reasonably fair" if its sending rate is generally within a factor of two of the sending rate of a TCP flow under the same conditions. However, TFRC has a much lower variation of throughput over time compared with TCP, which makes CCID 3 more suitable than CCID 2 for applications such as streaming media where a relatively smooth sending rate is important.
CCID 3は、式に基づくレート制御型の輻輳制御メカニズムであるTCP-Friendly Rate Control (TFRC) を表します。TFRCは、TCPのようなフローと帯域幅を競合する際に合理的に公平となるように設計されています。ここで、フローが「合理的に公平」であるとは、その送信レートが、同じ条件下でのTCPフローの送信レートの2倍以内の範囲に一般に収まることをいいます。ただし、TFRCはTCPに比べてスループットの経時的な変動がはるかに小さく、このため、比較的滑らかな送信レートが重要なストリーミングメディアなどのアプリケーションには、CCID 2よりCCID 3の方が適しています。
Half of the option types, feature numbers, and Reset Codes are reserved for CCID-specific use. CCIDs may often need new options, for communicating acknowledgement or rate information, for example; reserved option spaces let CCIDs create options at will without polluting the global option space. Option 128 might have different meanings on a half-connection using CCID 4 and a half-connection using CCID 8. CCID-specific options and features will never conflict with global options and features introduced by later versions of this specification.
オプションタイプ、機能番号、Reset Codeの半分は、CCID固有の用途のために予約されています。CCIDは、たとえば確認応答情報やレート情報を伝達するために、新しいオプションを必要とすることがよくあります。予約されたオプション空間により、CCIDは、グローバルなオプション空間を汚染することなく、自由にオプションを作成できます。オプション128は、CCID 4を使用する半接続とCCID 8を使用する半接続とで異なる意味を持つ場合があります。CCID固有のオプションと機能は、本仕様の後のバージョンで導入されるグローバルなオプションおよび機能と競合することはありません。
Any packet may contain information meant for either half-connection, so CCID-specific option types, feature numbers, and Reset Codes explicitly signal the half-connection to which they apply.
どのパケットも、いずれの半接続向けの情報も含む可能性があるため、CCID固有のオプションタイプ、機能番号、Reset Codeは、それらが適用される半接続を明示的に示します。
o Option numbers 128 through 191 are for options sent from the HC-Sender to the HC-Receiver; option numbers 192 through 255 are for options sent from the HC-Receiver to the HC-Sender.
o オプション番号128~191は、HC-SenderからHC-Receiverに送信されるオプション用です。オプション番号192~255は、HC-ReceiverからHC-Senderに送信されるオプション用です。
o Reset Codes 128 through 191 indicate that the HC-Sender reset the connection (most likely because of some problem with acknowledgements sent by the HC-Receiver). Reset Codes 192 through 255 indicate that the HC-Receiver reset the connection (most likely because of some problem with data packets sent by the HC-Sender).
o Reset Code 128 から 191 は、HC-Sender が接続をリセットしたことを示します(多くの場合、HC-Receiver が送信した確認応答に何らかの問題があったためです)。Reset Code 192 から 255 は、HC-Receiver が接続をリセットしたことを示します(多くの場合、HC-Sender が送信したデータパケットに何らかの問題があったためです)。
o Finally, feature numbers 128 through 191 are used for features located at the HC-Sender; feature numbers 192 through 255 are for features located at the HC-Receiver. Since Change L and Confirm L options for a feature are sent by the feature location, we know that any Change L(128) option was sent by the HC-Sender, while any Change L(192) option was sent by the HC-Receiver. Similarly, Change R(128) options are sent by the HC-Receiver, while Change R(192) options are sent by the HC-Sender.
o 最後に、機能番号 128 から 191 は HC-Sender に位置する機能に使用され、機能番号 192 から 255 は HC-Receiver に位置する機能に使用されます。ある機能に対する Change L オプションおよび Confirm L オプションは feature location が送信するため、Change L(128) オプションは必ず HC-Sender が送信したものであり、Change L(192) オプションは必ず HC-Receiver が送信したものであるとわかります。同様に、Change R(128) オプションは HC-Receiver が送信し、Change R(192) オプションは HC-Sender が送信します。
For example, consider a DCCP connection where the A-to-B half-connection uses CCID 4 and the B-to-A half-connection uses CCID 5. Here is how a sampling of CCID-specific options are assigned to half-connections.
例として、A から B への半接続が CCID 4 を使用し、B から A への半接続が CCID 5 を使用する DCCP 接続を考えます。CCID 固有のオプションが半接続にどのように割り当てられるかの例を以下に示します。
Relevant Relevant
Packet Option Half-conn. CCID
------ ------ ---------- ----
A > B 128 A-to-B 4
A > B 192 B-to-A 5
A > B Change L(128, ...) A-to-B 4
A > B Change R(192, ...) A-to-B 4
A > B Confirm L(128, ...) A-to-B 4
A > B Confirm R(192, ...) A-to-B 4
A > B Change R(128, ...) B-to-A 5
A > B Change L(192, ...) B-to-A 5
A > B Confirm R(128, ...) B-to-A 5
A > B Confirm L(192, ...) B-to-A 5
B > A 128 B-to-A 5
B > A 192 A-to-B 4
B > A Change L(128, ...) B-to-A 5
B > A Change R(192, ...) B-to-A 5
B > A Confirm L(128, ...) B-to-A 5
B > A Confirm R(192, ...) B-to-A 5
B > A Change R(128, ...) A-to-B 4
B > A Change L(192, ...) A-to-B 4
B > A Confirm R(128, ...) A-to-B 4
B > A Confirm L(192, ...) A-to-B 4
Using CCID-specific options and feature options during a negotiation for the corresponding CCID feature is NOT RECOMMENDED, since it is difficult to predict which CCID will be in force when the option is processed. For example, if a DCCP-Request contains the option sequence "Change L(CCID, 3), 128", the CCID-specific option "128" may be processed either by CCID 3 (if the server supports CCID 3) or by the default CCID 2 (if it does not). However, it is safe to include CCID-specific options following certain Mandatory Change(CCID) options. For example, if a DCCP-Request contains the option sequence "Mandatory, Change L(CCID, 3), 128", then either the "128" option will be processed by CCID 3 or the connection will be reset.
対応する CCID 機能のネゴシエーション中に CCID 固有のオプションや機能オプションを使用することは推奨されません (NOT RECOMMENDED)。オプションが処理される時点でどの CCID が有効になっているかを予測するのが難しいためです。たとえば、DCCP-Request がオプション列 "Change L(CCID, 3), 128" を含む場合、CCID 固有オプション "128" は、(サーバーが CCID 3 をサポートしていれば)CCID 3 で処理されるか、(サポートしていなければ)デフォルトの CCID 2 で処理されるかのどちらかです。ただし、特定の Mandatory Change(CCID) オプションの後に CCID 固有オプションを含めることは安全です。たとえば、DCCP-Request がオプション列 "Mandatory, Change L(CCID, 3), 128" を含む場合、"128" オプションは CCID 3 で処理されるか、接続がリセットされるかのどちらかになります。
Servers that do not implement the default CCID 2 might nevertheless receive CCID 2-specific options on a DCCP-Request packet. (Such a server MUST send Mandatory Change(CCID) options on its DCCP-Response, so CCID-specific options on any other packet won't refer to CCID 2.) The server MUST treat such options as non-understood. Thus, it will reset the connection on encountering a Mandatory CCID-specific option or feature negotiation request, send an empty Confirm for a non-Mandatory Change option for a CCID-specific feature, and ignore other CCID-specific options.
デフォルトの CCID 2 を実装していないサーバーでも、DCCP-Request パケットで CCID 2 固有のオプションを受信することがあります。(そのようなサーバーは DCCP-Response で Mandatory Change(CCID) オプションを送信しなければならない (MUST) ため、他のパケット上の CCID 固有オプションが CCID 2 を指すことはありません。)サーバーはそのようなオプションを理解できないものとして扱わなければなりません (MUST)。したがって、Mandatory の CCID 固有オプションまたは機能ネゴシエーション要求に遭遇した場合は接続をリセットし、CCID 固有機能に対する Mandatory でない Change オプションに対しては空の Confirm を送信し、その他の CCID 固有オプションは無視します。
Each CCID Profile document MUST address at least the following requirements:
各 CCID Profile 文書は、少なくとも次の要件を満たさなければなりません (MUST)。
o The profile MUST include the name and number of the CCID being described.
o Profile には、記述対象の CCID の名前と番号を含めなければなりません (MUST)。
o The profile MUST describe the conditions in which it is likely to be useful. Often the best way to do this is by comparison to existing CCIDs.
o Profile には、その CCID が有用となりそうな状況を記述しなければなりません (MUST)。多くの場合、既存の CCID との比較によるのが最良の方法です。
o The profile MUST list and describe any CCID-specific options, features, and Reset Codes and SHOULD list those general options and features described in this document that are especially relevant to the CCID.
o Profile には、CCID 固有のオプション、機能、Reset Code を列挙して記述しなければならず (MUST)、本文書で説明している一般的なオプションと機能のうち、その CCID に特に関連するものを列挙すべきです (SHOULD)。
o Any newly defined acknowledgement mechanism MUST include a way to transmit ECN Nonce Echoes back to the sender.
o 新たに定義する確認応答メカニズムには、ECN Nonce Echo を送信者に返す方法を含めなければなりません (MUST)。
o The profile MUST describe the format of data packets, including any options that should be included and the setting of the CCval header field.
o Profile には、データパケットの形式を記述しなければなりません (MUST)。これには、含めるべきオプションや CCval ヘッダフィールドの設定が含まれます。
o The profile MUST describe the format of acknowledgement packets, including any options that should be included.
o Profile には、確認応答パケットの形式を記述しなければなりません (MUST)。これには、含めるべきオプションが含まれます。
o The profile MUST define how data packets are congestion controlled. This includes responses to congestion events, to idle and application-limited periods, and to the DCCP Data Dropped and Slow Receiver options. CCIDs that implement per-packet congestion control SHOULD discuss how packet size is factored in to congestion control decisions.
o Profile には、データパケットに対してどのように輻輳制御を行うかを定義しなければなりません (MUST)。これには、輻輳イベント、アイドル期間およびアプリケーション制限期間、DCCP の Data Dropped オプションと Slow Receiver オプションへの応答が含まれます。パケット単位の輻輳制御を実装する CCID は、輻輳制御の判断においてパケットサイズをどのように考慮するかを論じるべきです (SHOULD)。
o The profile MUST specify when acknowledgement packets are generated and how they are congestion controlled.
o Profile には、確認応答パケットをいつ生成し、それをどのように輻輳制御するかを規定しなければなりません (MUST)。
o The profile MUST define when a sender using the CCID is considered quiescent.
o Profile には、その CCID を使用する送信者がいつ休止状態 (quiescent) とみなされるかを定義しなければなりません (MUST)。
o The profile MUST say whether its CCID's acknowledgements ever need to be acknowledged and, if so, how often.
o Profile には、その CCID の確認応答自体に対する確認応答が必要になることがあるかどうか、必要な場合はどの程度の頻度かを記述しなければなりません (MUST)。
Most congestion control algorithms depend on past history to determine the current allowed sending rate. In CCID 2, this congestion state includes a congestion window and a measurement of the number of packets outstanding in the network; in CCID 3, it includes the lengths of recent loss intervals. Both CCIDs use an estimate of the round-trip time. Congestion state depends on the network path and is invalidated by path changes. Therefore, DCCP senders and receivers SHOULD reset their congestion state -- essentially restarting congestion control from "slow start" or equivalent -- on significant changes in the end-to-end path. For example, an endpoint that sends or receives a Mobile IPv6 Binding Update message [RFC3775] SHOULD reset its congestion state for any corresponding DCCP connections.
ほとんどの輻輳制御アルゴリズムは、現在の許容送信レートを決定するために過去の履歴に依存します。CCID 2 では、この輻輳状態に輻輳ウィンドウとネットワーク内の未処理パケット数の測定値が含まれ、CCID 3 では最近の損失間隔の長さが含まれます。どちらの CCID もラウンドトリップ時間の推定値を使用します。輻輳状態はネットワーク経路に依存し、経路が変更されると無効になります。したがって、DCCP の送信者と受信者は、エンドツーエンドの経路に大きな変更があった場合、輻輳状態をリセットすべきです (SHOULD)。これは本質的に、「スロースタート」またはそれに相当する状態から輻輳制御をやり直すことを意味します。たとえば、Mobile IPv6 Binding Update メッセージ [RFC3775] を送信または受信したエンドポイントは、対応するすべての DCCP 接続について輻輳状態をリセットすべきです (SHOULD)。
A DCCP implementation MAY also reset its congestion state when a CCID changes (that is, when a negotiation for the CCID feature completes successfully and the new feature value differs from the old value). Thus, a connection in a heavily congested environment might evade end-to-end congestion control by frequently renegotiating a CCID, just as it could evade end-to-end congestion control by opening new connections for the same session. This behavior is prohibited. To prevent it, DCCP implementations MAY limit the rate at which CCID can be changed -- for instance, by refusing to change a CCID feature value more than once per minute.
DCCP 実装は、CCID が変更されたとき(つまり、CCID 機能のネゴシエーションが成功裏に完了し、新しい機能値が古い値と異なるとき)にも、輻輳状態をリセットしてもよいです (MAY)。そのため、非常に輻輳した環境にある接続が、CCID を頻繁に再ネゴシエーションすることでエンドツーエンドの輻輳制御を回避してしまう可能性があります。これは、同じセッションのために新しい接続を開くことでエンドツーエンドの輻輳制御を回避できるのと同様です。この動作は禁止されています。これを防ぐため、DCCP 実装は、たとえば CCID 機能値の変更を 1 分間に 1 回までに制限するなどして、CCID を変更できる頻度を制限してもよいです (MAY)。
Congestion control requires that receivers transmit information about packet losses and ECN marks to senders. DCCP receivers MUST report all congestion they see, as defined by the relevant CCID profile. Each CCID says when acknowledgements should be sent, what options they must use, and so on. DCCP acknowledgements are congestion controlled, although it is not required that the acknowledgement stream be more than very roughly TCP friendly; each CCID defines how acknowledgements are congestion controlled.
輻輳制御では、受信者がパケット損失と ECN マークに関する情報を送信者に送信する必要があります。DCCP の受信者は、関連する CCID Profile で定義されているとおり、観測したすべての輻輳を報告しなければなりません (MUST)。各 CCID は、確認応答をいつ送信すべきか、どのオプションを使用しなければならないか、などを定めます。DCCP の確認応答は輻輳制御の対象ですが、確認応答ストリームがごくおおまかに TCP フレンドリーである以上のことは求められていません。確認応答をどのように輻輳制御するかは CCID ごとに定義されます。
Most acknowledgements use DCCP options. For example, on a half-connection with CCID 2 (TCP-like), the receiver reports acknowledgement information using the Ack Vector option. This section describes common acknowledgement options and shows how acks using those options will commonly work. Full descriptions of the ack mechanisms used for each CCID are laid out in the CCID profile specifications.
ほとんどの確認応答は DCCP オプションを使用します。たとえば、CCID 2 (TCP-like) を使用する半接続では、受信者は Ack Vector オプションを使用して確認応答情報を報告します。本節では、一般的な確認応答オプションを説明し、それらのオプションを使用する ack が一般にどのように動作するかを示します。各 CCID で使用される ack メカニズムの完全な説明は、CCID Profile 仕様に記載されています。
Acknowledgement options, such as Ack Vector, depend on the DCCP Acknowledgement Number and are thus only allowed on packet types that carry that number. Acknowledgement options received on other packet types, namely DCCP-Request and DCCP-Data, MUST be ignored. Detailed acknowledgement options are not necessarily required on every packet that carries an Acknowledgement Number, however.
Ack Vector などの確認応答オプションは DCCP の Acknowledgement Number に依存するため、その番号を持つパケットタイプでのみ許可されます。他のパケットタイプ、すなわち DCCP-Request と DCCP-Data で受信した確認応答オプションは無視しなければなりません (MUST)。ただし、詳細な確認応答オプションが、Acknowledgement Number を持つすべてのパケットで必ずしも必要とは限りません。
DCCP was designed to work well for both bidirectional and unidirectional flows of data, and for connections that transition between these states. However, acknowledgements required for a unidirectional connection are very different from those required for a bidirectional connection. In particular, unidirectional connections need to worry about acks of acks.
DCCP は、データの双方向フローと単方向フローの両方、およびこれらの状態間を遷移する接続のいずれでもうまく動作するように設計されています。しかし、単方向接続に必要な確認応答は、双方向接続に必要なものとは大きく異なります。特に、単方向接続では ack の ack を考慮する必要があります。
The ack-of-acks problem arises because some acknowledgement mechanisms are reliable. For example, an HC-Receiver using CCID 2, TCP-like Congestion Control, sends Ack Vectors containing completely reliable acknowledgement information. The HC-Sender should occasionally inform the HC-Receiver that it has received an ack. If it did not, the HC-Receiver might resend complete Ack Vector information, going back to the start of the connection, with every DCCP-Ack packet! However, note that acks-of-acks need not be reliable themselves: when an ack-of-acks is lost, the HC-Receiver will simply maintain, and periodically retransmit, old acknowledgement-related state for a little longer. Therefore, there is no need for acks-of-acks-of-acks.
ack の ack の問題は、一部の確認応答メカニズムが信頼性を持つために生じます。たとえば、CCID 2 (TCP-like Congestion Control) を使用する HC-Receiver は、完全に信頼性のある確認応答情報を含む Ack Vector を送信します。HC-Sender は、ack を受信したことを HC-Receiver に時々通知すべきです。そうしないと、HC-Receiver は DCCP-Ack パケットのたびに、接続の開始時点にさかのぼる完全な Ack Vector 情報を再送してしまうかもしれません。ただし、ack の ack 自体は信頼性を持つ必要はありません。ack の ack が失われた場合、HC-Receiver は古い確認応答関連の状態をもう少し長く保持し、定期的に再送するだけです。したがって、ack の ack の ack は必要ありません。
When communication is bidirectional, any required acks-of-acks are automatically contained in normal acknowledgements for data packets. On a unidirectional connection, however, the receiver DCCP sends no data, so the sender would not normally send acknowledgements. Therefore, the CCID in force on that half-connection must explicitly say whether, when, and how the HC-Sender should generate acks-of-acks.
通信が双方向の場合、必要な ack の ack は、データパケットに対する通常の確認応答に自動的に含まれます。しかし、単方向接続では、受信側の DCCP はデータを送信しないため、送信者は通常は確認応答を送信しません。したがって、その半接続で有効な CCID が、HC-Sender が ack の ack を生成するかどうか、いつ、どのように生成するかを明示的に定めなければなりません。
For example, consider a bidirectional connection where both half-connections use the same CCID (either 2 or 3), and where DCCP B goes "quiescent". This means that the connection becomes unidirectional: DCCP B stops sending data and sends only DCCP-Ack packets to DCCP A. In CCID 2, TCP-like Congestion Control, DCCP B uses Ack Vector to reliably communicate which packets it has received. As described above, DCCP A must occasionally acknowledge a pure acknowledgement from DCCP B so that B can free old Ack Vector state. For instance, A might send a DCCP-DataAck packet instead of DCCP-Data every now and then. In CCID 3, however, acknowledgement state is generally bounded, so A does not need to acknowledge B's acknowledgements.
例として、両方の半接続が同じ CCID(2 または 3)を使用する双方向接続で、DCCP B が「休止状態 (quiescent)」になる場合を考えます。これは、接続が単方向になること、つまり DCCP B がデータの送信を停止し、DCCP A に DCCP-Ack パケットのみを送信することを意味します。CCID 2 (TCP-like Congestion Control) では、DCCP B は Ack Vector を使用して、受信したパケットを信頼性をもって伝えます。前述のとおり、B が古い Ack Vector 状態を解放できるように、DCCP A は DCCP B からの純粋な確認応答に時々確認応答しなければなりません。たとえば、A は時々 DCCP-Data の代わりに DCCP-DataAck パケットを送信することがあります。一方、CCID 3 では、一般に確認応答の状態は上限が決まっているため、A が B の確認応答に確認応答する必要はありません。
When communication is unidirectional, a single CCID -- in the example, the A-to-B CCID -- controls both DCCPs' acknowledgements, in terms of their content, their frequency, and so forth. For bidirectional connections, the A-to-B CCID governs DCCP B's acknowledgements (including its acks of DCCP A's acks) and the B-to-A CCID governs DCCP A's acknowledgements.
通信が単方向の場合、1 つの CCID(この例では A から B への CCID)が、内容や頻度などの面で、両方の DCCP の確認応答を制御します。双方向接続では、A から B への CCID が DCCP B の確認応答(DCCP A の ack に対する B の ack を含む)を制御し、B から A への CCID が DCCP A の確認応答を制御します。
DCCP A switches its ack pattern from bidirectional to unidirectional when it notices that DCCP B has gone quiescent. It switches from unidirectional to bidirectional when it must acknowledge even a single DCCP-Data or DCCP-DataAck packet from DCCP B.
DCCP A は、DCCP B が休止状態になったことに気づくと、ack のパターンを双方向から単方向に切り替えます。DCCP B からの DCCP-Data パケットまたは DCCP-DataAck パケットを 1 つでも確認応答しなければならなくなると、単方向から双方向に切り替えます。
Each CCID defines how to detect quiescence on that CCID, and how that CCID handles acks-of-acks on unidirectional connections. The B-to-A CCID defines when DCCP B has gone quiescent. Usually, this happens when a period has passed without B sending any data packets; in CCID 2, for example, this period is the maximum of 0.2 seconds and two round-trip times. The A-to-B CCID defines how DCCP A handles acks-of-acks once DCCP B has gone quiescent.
各 CCID は、その CCID における休止状態の検出方法と、単方向接続での ack の ack の扱い方を定義します。DCCP B が休止状態になったかどうかは B から A への CCID が定義します。通常、これは B がデータパケットを送信しないまま一定期間が経過したときに起こります。たとえば CCID 2 では、この期間は 0.2 秒と 2 ラウンドトリップ時間のうち大きい方です。DCCP B が休止状態になった後に DCCP A が ack の ack をどのように扱うかは、A から B への CCID が定義します。
Acknowledgements of A-to-B data MAY be piggybacked on data sent by DCCP B, as long as that does not delay the acknowledgement longer than the A-to-B CCID would find acceptable. However, data acknowledgements often require more than 4 bytes to express. A large set of acknowledgements prepended to a large data packet might exceed the allowed maximum packet size. In this case, DCCP B SHOULD send separate DCCP-Data and DCCP-Ack packets, or wait, but not too long, for a smaller datagram.
A から B へのデータに対する確認応答は、A から B への CCID が許容できる範囲を超えて確認応答を遅延させない限り、DCCP B が送信するデータにピギーバックしてもよいです (MAY)。ただし、データの確認応答を表現するには、4 バイトを超える長さが必要になることがよくあります。大きなデータパケットの前に大量の確認応答を付加すると、許容される最大パケットサイズを超える可能性があります。この場合、DCCP B は DCCP-Data パケットと DCCP-Ack パケットを別々に送信するか、より小さなデータグラムを(長すぎない範囲で)待つべきです (SHOULD)。
Piggybacking is particularly common at DCCP A when the B-to-A half-connection is quiescent -- that is, when DCCP A is just acknowledging DCCP B's acknowledgements. There are three reasons to acknowledge DCCP B's acknowledgements: to allow DCCP B to free up information about previously acknowledged data packets from A; to shrink the size of future acknowledgements; and to manipulate the rate at which future acknowledgements are sent. Since these are secondary concerns, DCCP A can generally afford to wait indefinitely for a data packet to piggyback its acknowledgement onto; if DCCP B wants to elicit an acknowledgement, it can send a DCCP-Sync.
ピギーバックは、B から A への半接続が休止状態のとき、つまり DCCP A が DCCP B の確認応答に確認応答しているだけのときに、DCCP A で特によく行われます。DCCP B の確認応答に確認応答する理由は 3 つあります。DCCP B が A からの以前に確認応答済みのデータパケットに関する情報を解放できるようにすること、将来の確認応答のサイズを縮小すること、そして将来の確認応答が送信される頻度を操作することです。これらは二次的な関心事なので、DCCP A は一般に、確認応答をピギーバックするデータパケットを無期限に待つ余裕があります。DCCP B が確認応答を引き出したい場合は、DCCP-Sync を送信できます。
Any restrictions on ack piggybacking are described in the relevant CCID's profile.
ack のピギーバックに関する制限は、関連する CCID の Profile に記述されています。
The Ack Ratio feature lets HC-Senders influence the rate at which HC-Receivers generate DCCP-Ack packets, thus controlling reverse-path congestion. This differs from TCP, which presently has no congestion control for pure acknowledgement traffic. Ack Ratio reverse-path congestion control does not try to be TCP friendly. It just tries to avoid congestion collapse, and to be somewhat better than TCP in the presence of a high packet loss or mark rate on the reverse path.
Ack Ratio 機能により、HC-Sender は HC-Receiver が DCCP-Ack パケットを生成する頻度に影響を与えることができ、逆方向経路の輻輳を制御できます。この点は、純粋な確認応答トラフィックに対する輻輳制御が現在存在しない TCP とは異なります。Ack Ratio による逆方向経路の輻輳制御は、TCP フレンドリーであろうとはしません。輻輳崩壊を避け、逆方向経路で高いパケット損失率またはマーク率が発生している場合に TCP よりもいくらか優れた動作をすることだけを目指しています。
Ack Ratio applies to CCIDs whose HC-Receivers clock acknowledgements off the receipt of data packets. The value of Ack Ratio/A equals the rough ratio of data packets sent by DCCP A to DCCP-Ack packets sent by DCCP B. Higher Ack Ratios correspond to lower DCCP-Ack rates; the sender raises Ack Ratio when the reverse path is congested and lowers Ack Ratio when it is not. Each CCID profile defines how it controls congestion on the acknowledgement path, and, particularly, whether Ack Ratio is used. CCID 2, for example, uses Ack Ratio for acknowledgement congestion control, but CCID 3 does not. However, each Ack Ratio feature has a value whether or not that value is used by the relevant CCID.
Ack Ratio は、HC-Receiver がデータパケットの受信を契機として確認応答を送信する CCID に適用されます。Ack Ratio/A の値は、DCCP A が送信するデータパケット数と DCCP B が送信する DCCP-Ack パケット数のおおよその比に等しくなります。Ack Ratio が高いほど DCCP-Ack の送信率は低くなります。送信者は、逆方向経路が輻輳しているときに Ack Ratio を上げ、そうでないときに下げます。各 CCID Profile は、確認応答経路の輻輳をどのように制御するか、特に Ack Ratio を使用するかどうかを定義します。たとえば、CCID 2 は確認応答の輻輳制御に Ack Ratio を使用しますが、CCID 3 は使用しません。ただし、各 Ack Ratio 機能は、関連する CCID がその値を使用するかどうかにかかわらず、値を持ちます。
Ack Ratio has feature number 5 and is non-negotiable. It takes two-byte integer values. An Ack Ratio/A value of four means that DCCP B will send at least one acknowledgement packet for every four data packets sent by DCCP A. DCCP A sends a "Change L(Ack Ratio)" option to notify DCCP B of its ack ratio. An Ack Ratio value of zero indicates that the relevant half-connection does not use an Ack Ratio to control its acknowledgement rate. New connections start with Ack Ratio 2 for both endpoints; this Ack Ratio results in acknowledgement behavior analogous to TCP's delayed acks.
Ack Ratio の機能番号は 5 で、ネゴシエーションはできません。2 バイトの整数値を取ります。Ack Ratio/A の値が 4 であるとは、DCCP A が送信する 4 つのデータパケットごとに、DCCP B が少なくとも 1 つの確認応答パケットを送信することを意味します。DCCP A は "Change L(Ack Ratio)" オプションを送信して、DCCP B に自身の ack ratio を通知します。Ack Ratio の値が 0 の場合、関連する半接続が確認応答レートの制御に Ack Ratio を使用しないことを示します。新しい接続は、両方のエンドポイントで Ack Ratio 2 から始まります。この Ack Ratio により、TCP の遅延 ack に類似した確認応答動作になります。
Ack Ratio should be treated as a guideline rather than a strict requirement. We intend Ack Ratio-controlled acknowledgement behavior to resemble TCP's acknowledgement behavior when there is no reverse-path congestion, and to be somewhat more conservative when there is reverse-path congestion. Following this intent is more important than implementing Ack Ratio precisely. In particular: o Receivers MAY piggyback acknowledgement information on data packets, creating DCCP-DataAck packets. The Ack Ratio does not apply to piggybacked acknowledgements. However, if the data packets are too big to carry acknowledgement information, or if the data sending rate is lower than Ack Ratio would suggest, then DCCP B SHOULD send enough pure DCCP-Ack packets to maintain the rate of one acknowledgement per Ack Ratio received data packets.
Ack Ratio は厳密な要件ではなく、指針として扱うべきです。Ack Ratio で制御される確認応答動作は、逆方向経路に輻輳がないときは TCP の確認応答動作に似せ、逆方向経路に輻輳があるときはやや保守的にすることを意図しています。この意図に従うことは、Ack Ratio を正確に実装することよりも重要です。特に次の点に注意してください。o 受信者は、確認応答情報をデータパケットにピギーバックして、DCCP-DataAck パケットを作成してもよいです (MAY)。Ack Ratio はピギーバックされた確認応答には適用されません。ただし、データパケットが大きすぎて確認応答情報を搭載できない場合や、データ送信レートが Ack Ratio の想定より低い場合、DCCP B は、受信したデータパケット Ack Ratio 個につき 1 つの確認応答というレートを維持するのに十分な数の純粋な DCCP-Ack パケットを送信すべきです (SHOULD)。
o Receivers MAY rate-pace their acknowledgements rather than send acknowledgements immediately upon the receipt of data packets. Receivers that rate-pace acknowledgements SHOULD pick a rate that approximates the effect of Ack Ratio and SHOULD include Elapsed Time options (Section 13.2) to help the sender calculate round-trip times.
o 受信者は、データパケットの受信直後に確認応答を送信する代わりに、確認応答をレートペーシングしてもよいです (MAY)。確認応答をレートペーシングする受信者は、Ack Ratio の効果に近いレートを選択すべきであり (SHOULD)、送信者がラウンドトリップ時間を計算しやすくするために Elapsed Time オプション(13.2 節)を含めるべきです (SHOULD)。
o Receivers SHOULD implement delayed acknowledgement timers like TCP's, whereby any packet's acknowledgement is delayed by at most T seconds. This delay lets the receiver collect additional packets to acknowledge and thus reduce the per-packet overhead of acknowledgements; but if T seconds have passed by and the ack is still around, it is sent out right away. The default value of T should be 0.2 seconds, as is common in TCP implementations. This may lead to sending more acknowledgement packets than Ack Ratio would suggest.
o 受信者は、TCP のような遅延確認応答タイマーを実装すべきです (SHOULD)。これは、どのパケットの確認応答も最大で T 秒しか遅延させないというものです。この遅延により、受信者は確認応答すべきパケットをさらに集めることができ、パケットごとの確認応答のオーバーヘッドを減らせます。ただし、T 秒が経過しても ack がまだ残っている場合は、直ちに送信されます。T のデフォルト値は、TCP 実装で一般的なように 0.2 秒とすべきです。これにより、Ack Ratio が示すよりも多くの確認応答パケットが送信されることがあります。
o Receivers SHOULD send acknowledgements immediately on receiving packets marked ECN Congestion Experienced or packets whose out-of-order sequence numbers potentially indicate loss. However, there is no need to send such immediate acknowledgements for marked packets more than once per round-trip time.
o 受信者は、ECN Congestion Experienced でマークされたパケット、またはシーケンス番号の順序が入れ替わっていて損失の可能性を示すパケットを受信したときは、直ちに確認応答を送信すべきです (SHOULD)。ただし、マークされたパケットに対するこのような即時の確認応答は、ラウンドトリップ時間あたり 1 回を超えて送信する必要はありません。
o Receivers MAY ignore Ack Ratio if they perform their own congestion control on acknowledgements. For example, a receiver that knows the loss and mark rate for its DCCP-Ack packets might maintain a TCP-friendly acknowledgement rate on its own. Such a receiver MUST either ensure that it always obtains sufficient acknowledgement loss and mark information or fall back to Ack Ratio when sufficient information is not available, as might happen during periods when the receiver is quiescent.
o 受信者は、確認応答に対して独自の輻輳制御を行う場合、Ack Ratio を無視してもよいです (MAY)。たとえば、自身の DCCP-Ack パケットの損失率とマーク率を把握している受信者は、独自に TCP フレンドリーな確認応答レートを維持できるかもしれません。そのような受信者は、確認応答の損失およびマークに関する十分な情報を常に得られるようにするか、受信者が休止状態にある期間などに十分な情報が得られない場合は Ack Ratio に戻るかのどちらかを行わなければなりません (MUST)。
The Ack Vector gives a run-length encoded history of data packets received at the client. Each byte of the vector gives the state of that data packet in the loss history, and the number of preceding packets with the same state. The option's data looks like this:
Ack Vector は、クライアントで受信したデータパケットの履歴をランレングス符号化して示します。ベクターの各バイトは、損失履歴におけるそのデータパケットの状態と、同じ状態が続く直前のパケット数を示します。オプションのデータは次のようになります。
+--------+--------+--------+--------+--------+--------
|0010011?| Length |SSLLLLLL|SSLLLLLL|SSLLLLLL| ...
+--------+--------+--------+--------+--------+--------
Type=38/39 \___________ Vector ___________...
The two Ack Vector options (option types 38 and 39) differ only in the values they imply for ECN Nonce Echo. Section 12.2 describes this further.
2 つの Ack Vector オプション(オプションタイプ 38 と 39)は、ECN Nonce Echo に対して暗示する値のみが異なります。これについては 12.2 節でさらに説明します。
The vector itself consists of a series of bytes, each of whose encoding is:
ベクター自体は一連のバイトで構成され、各バイトの符号化は次のとおりです。
0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|Sta| Run Length|
+-+-+-+-+-+-+-+-+
Sta[te] occupies the most significant two bits of each byte and can have one of four values, as follows:
Sta[te] は各バイトの上位 2 ビットを占め、次の 4 つの値のいずれかを取ります。
State Meaning
----- -------
0 Received
1 Received ECN Marked
2 Reserved
3 Not Yet Received
Table 6: DCCP Ack Vector States
表 6: DCCP Ack Vector の状態
The term "ECN marked" refers to packets with ECN code point 11, CE (Congestion Experienced); packets received with this ECN code point MUST be reported using State 1, Received ECN Marked. Packets received with ECN code points 00, 01, or 10 (Non-ECT, ECT(0), or ECT(1), respectively) MUST be reported using State 0, Received.
「ECN マーク」とは、ECN コードポイント 11 の CE (Congestion Experienced) を持つパケットを指します。この ECN コードポイントで受信したパケットは、State 1 (Received ECN Marked) を使用して報告しなければなりません (MUST)。ECN コードポイント 00、01、10(それぞれ Non-ECT、ECT(0)、ECT(1))で受信したパケットは、State 0 (Received) を使用して報告しなければなりません (MUST)。
Run Length, the least significant six bits of each byte, specifies how many consecutive packets have the given State. Run Length zero says the corresponding State applies to one packet only; Run Length 63 says it applies to 64 consecutive packets. Run lengths of 65 or more must be encoded in multiple bytes.
Run Length は各バイトの下位 6 ビットで、指定された State を持つ連続したパケットの数を示します。Run Length 0 は、対応する State が 1 つのパケットのみに適用されることを意味し、Run Length 63 は連続する 64 パケットに適用されることを意味します。65 以上のラン長は、複数のバイトで符号化しなければなりません。
The first byte in the first Ack Vector option refers to the packet indicated in the Acknowledgement Number; subsequent bytes refer to older packets. Ack Vector MUST NOT be sent on DCCP-Data and DCCP-Request packets, which lack an Acknowledgement Number, and any Ack Vector options encountered on such packets MUST be ignored.
最初の Ack Vector オプションの最初のバイトは Acknowledgement Number で示されるパケットを指し、それ以降のバイトはより古いパケットを指します。Ack Vector は、Acknowledgement Number を持たない DCCP-Data パケットおよび DCCP-Request パケットで送信してはならず (MUST NOT)、そのようなパケットで見つかった Ack Vector オプションは無視しなければなりません (MUST)。
An Ack Vector containing the decimal values 0,192,3,64,5 and for which the Acknowledgement Number is decimal 100 indicates that:
10 進値 0,192,3,64,5 を含み、Acknowledgement Number が 10 進数の 100 である Ack Vector は、次のことを示します。
Packet 100 was received (Acknowledgement Number 100, State 0, Run Length 0);
パケット 100 が受信された(Acknowledgement Number 100、State 0、Run Length 0)。
Packet 99 was lost (State 3, Run Length 0);
パケット 99 が失われた(State 3、Run Length 0)。
Packets 98, 97, 96 and 95 were received (State 0, Run Length 3);
パケット 98、97、96、95 が受信された(State 0、Run Length 3)。
Packet 94 was ECN marked (State 1, Run Length 0); and
パケット 94 が ECN マークされた(State 1、Run Length 0)。
Packets 93, 92, 91, 90, 89, and 88 were received (State 0, Run Length 5).
パケット 93、92、91、90、89、88 が受信された(State 0、Run Length 5)。
A single Ack Vector option can acknowledge up to 16192 data packets. Should more packets need to be acknowledged than can fit in 253 bytes of Ack Vector, then multiple Ack Vector options can be sent; the second Ack Vector begins where the first left off, and so forth.
1 つの Ack Vector オプションで、最大 16192 個のデータパケットを確認応答できます。253 バイトの Ack Vector に収まる数を超えるパケットを確認応答する必要がある場合は、複数の Ack Vector オプションを送信できます。2 つ目の Ack Vector は 1 つ目が終わった位置から始まり、以降も同様です。
Ack Vector states are subject to two general constraints. (These principles SHOULD also be followed for other acknowledgement mechanisms; referring to Ack Vector states simplifies their explanation.)
Ack Vector の状態には 2 つの一般的な制約があります。(これらの原則は、他の確認応答メカニズムでも従うべきです (SHOULD)。Ack Vector の状態を参照することで説明が簡単になります。)
1. Packets reported as State 0 or State 1 MUST be acknowledgeable: their options have been processed by the receiving DCCP stack. Any data on the packet need not have been delivered to the receiving application; in fact, the data may have been dropped.
1. State 0 または State 1 として報告されるパケットは、確認応答可能 (acknowledgeable) でなければなりません (MUST)。つまり、そのオプションが受信側の DCCP スタックで処理されている必要があります。パケット上のデータは、受信アプリケーションに配信されている必要はなく、実際にはデータが破棄されていてもかまいません。
2. Packets reported as State 3 MUST NOT be acknowledgeable. Feature negotiations and options on such packets MUST NOT have been processed, and the Acknowledgement Number MUST NOT correspond to such a packet.
2. State 3 として報告されるパケットは、確認応答可能であってはなりません (MUST NOT)。そのようなパケット上の機能ネゴシエーションとオプションは処理されていてはならず (MUST NOT)、Acknowledgement Number がそのようなパケットに対応していてはなりません (MUST NOT)。
Packets dropped in the application's receive buffer MUST be reported as Received or Received ECN Marked (States 0 and 1), depending on their ECN state; such packets' ECN Nonces MUST be included in the Nonce Echo. The Data Dropped option informs the sender that some packets reported as received actually had their application data dropped.
アプリケーションの受信バッファで破棄されたパケットは、その ECN 状態に応じて、Received または Received ECN Marked(State 0 と State 1)として報告しなければなりません (MUST)。そのようなパケットの ECN Nonce は Nonce Echo に含めなければなりません (MUST)。Data Dropped オプションは、受信済みと報告されたパケットの一部で、実際にはアプリケーションデータが破棄されたことを送信者に通知します。
One or more Ack Vector options that, together, report the status of a packet with a sequence number less than ISN, the initial sequence number, SHOULD be considered invalid. The receiving DCCP SHOULD either ignore the options or reset the connection with Reset Code 5, "Option Error". No Ack Vector option can refer to a packet that has not yet been sent, as the Acknowledgement Number checks in Section 7.5.3 ensure, but because of attack, implementation bug, or misbehavior, an Ack Vector option can claim that a packet was received before it is actually delivered. Section 12.2 describes how this is detected and how senders should react. Packets that haven't been included in any Ack Vector option SHOULD be treated as "not yet received" (State 3) by the sender.
初期シーケンス番号 ISN より小さいシーケンス番号を持つパケットの状態を(まとめて)報告する 1 つ以上の Ack Vector オプションは、無効とみなすべきです (SHOULD)。受信側の DCCP は、そのオプションを無視するか、Reset Code 5 "Option Error" で接続をリセットすべきです (SHOULD)。7.5.3 節の Acknowledgement Number のチェックにより、まだ送信されていないパケットを参照する Ack Vector オプションは存在し得ませんが、攻撃、実装のバグ、あるいは不正な動作により、Ack Vector オプションがパケットの実際の配信前に受信済みであると主張する可能性があります。これをどのように検出し、送信者がどのように対応すべきかは 12.2 節で説明します。どの Ack Vector オプションにも含まれていないパケットは、送信者が「まだ受信されていない」(State 3) として扱うべきです (SHOULD)。
Appendix A provides a non-normative description of the details of DCCP acknowledgement handling in the context of an abstract Ack Vector implementation.
付録 A では、抽象的な Ack Vector 実装を前提に、DCCP の確認応答処理の詳細を規範的でない形で説明します。
A DCCP sender will commonly receive multiple acknowledgements for some of its data packets. For instance, an HC-Sender might receive two DCCP-Acks with Ack Vectors, both of which contained information about sequence number 24. (Information about a sequence number is generally repeated in every ack until the HC-Sender acknowledges an ack. In this case, perhaps the HC-Receiver is sending acks faster than the HC-Sender is acknowledging them.) In a perfect world, the two Ack Vectors would always be consistent. However, there are many reasons why they might not be. For example:
DCCP の送信者は、自身のデータパケットの一部について、複数の確認応答を受信することがよくあります。たとえば、HC-Sender が Ack Vector を持つ 2 つの DCCP-Ack を受信し、どちらもシーケンス番号 24 に関する情報を含んでいる場合があります。(シーケンス番号に関する情報は、HC-Sender が ack に確認応答するまで、一般にすべての ack で繰り返されます。この場合は、おそらく HC-Receiver が、HC-Sender が確認応答するよりも速く ack を送信しているのでしょう。)理想的な環境では、2 つの Ack Vector は常に一貫しています。しかし、そうならない理由は数多くあります。たとえば次のとおりです。
o The HC-Receiver received packet 24 between sending its acks, so the first ack said 24 was not received (State 3) and the second said it was received or ECN marked (State 0 or 1).
o HC-Receiver が 2 つの ack を送信する間にパケット 24 を受信したため、最初の ack では 24 は未受信 (State 3) とされ、2 番目の ack では受信済みまたは ECN マーク済み (State 0 または 1) とされた。
o The HC-Receiver received packet 24 between sending its acks, and the network reordered the acks. In this case, the packet will appear to transition from State 0 or 1 to State 3.
o HC-Receiver が 2 つの ack を送信する間にパケット 24 を受信し、ネットワークが ack の順序を入れ替えた。この場合、パケットは State 0 または 1 から State 3 に遷移したように見えます。
o The network duplicated packet 24, and one of the duplicates was ECN marked. This might show up as a transition between States 0 and 1.
o ネットワークがパケット 24 を複製し、複製のうち 1 つが ECN マークされた。これは State 0 と State 1 の間の遷移として現れることがあります。
To cope with these situations, HC-Sender DCCP implementations SHOULD combine multiple received Ack Vector states according to this table:
これらの状況に対処するため、HC-Sender の DCCP 実装は、次の表に従って、受信した複数の Ack Vector の状態を結合すべきです (SHOULD)。
Received State
0 1 3
+---+---+---+
0 | 0 |0/1| 0 |
Old +---+---+---+
1 | 1 | 1 | 1 |
State +---+---+---+
3 | 0 | 1 | 3 |
+---+---+---+
To read the table, choose the row corresponding to the packet's old state and the column corresponding to the packet's state in the newly received Ack Vector; then read the packet's new state off the table. For an old state of 0 (received non-marked) and received state of 1 (received ECN marked), the packet's new state may be set to either 0 or 1. The HC-Sender implementation will be indifferent to ack reordering if it chooses new state 1 for that cell.
表の読み方は、パケットの古い状態に対応する行と、新しく受信した Ack Vector でのパケットの状態に対応する列を選び、表からパケットの新しい状態を読み取ります。古い状態が 0(マークなしで受信)で、受信した状態が 1(ECN マークありで受信)の場合、パケットの新しい状態は 0 または 1 のどちらに設定してもかまいません。そのセルで新しい状態として 1 を選択すれば、HC-Sender の実装は ack の順序入れ替えの影響を受けません。
The HC-Receiver should collect information about received packets according to the following table:
HC-Receiver は、次の表に従って、受信したパケットに関する情報を収集すべきです。
Received Packet
0 1 3
+---+---+---+
0 | 0 |0/1| 0 |
Stored +---+---+---+
1 |0/1| 1 | 1 |
State +---+---+---+
3 | 0 | 1 | 3 |
+---+---+---+
This table equals the sender's table except that, when the stored state is 1 and the received state is 0, the receiver is allowed to switch its stored state to 0.
この表は、保存されている状態が 1 で受信した状態が 0 の場合に、受信者が保存している状態を 0 に切り替えることが許可されている点を除いて、送信者の表と同じです。
An HC-Sender MAY choose to throw away old information gleaned from the HC-Receiver's Ack Vectors, in which case it MUST ignore newly received acknowledgements from the HC-Receiver for those old packets. It is often kinder to save recent Ack Vector information for a while so that the HC-Sender can undo its reaction to presumed congestion when a "lost" packet unexpectedly shows up (the transition from State 3 to State 0).
HC-Sender は、HC-Receiver の Ack Vector から得た古い情報を破棄することを選択してもよいです (MAY)。その場合、HC-Sender は、それらの古いパケットについて HC-Receiver から新たに受信した確認応答を無視しなければなりません (MUST)。「失われた」パケットが予期せず到着した(State 3 から State 0 への遷移)際に、HC-Sender が想定された輻輳に対する反応を取り消せるよう、最近の Ack Vector 情報をしばらく保存しておく方が望ましい場合が多くあります。
We can divide the packets that have been sent from an HC-Sender to an HC-Receiver into four roughly contiguous groups. From oldest to youngest, these are:
HC-Sender から HC-Receiver に送信されたパケットは、おおよそ連続した 4 つのグループに分けられます。古いものから新しいものの順に次のとおりです。
1. Packets already acknowledged by the HC-Receiver, where the HC-Receiver knows that the HC-Sender has definitely received the acknowledgements;
1. HC-Receiver がすでに確認応答済みで、HC-Sender がその確認応答を確実に受信したことを HC-Receiver が把握しているパケット。
2. Packets already acknowledged by the HC-Receiver, where the HC-Receiver cannot be sure that the HC-Sender has received the acknowledgements;
2. HC-Receiver がすでに確認応答済みだが、HC-Sender がその確認応答を受信したかどうかを HC-Receiver が確認できないパケット。
3. Packets not yet acknowledged by the HC-Receiver; and 4. Packets not yet received by the HC-Receiver.
3. HC-Receiver がまだ確認応答していないパケット。4. HC-Receiver がまだ受信していないパケット。
The union of groups 2 and 3 is called the Acknowledgement Window. Generally, every Ack Vector generated by the HC-Receiver will cover the whole Acknowledgement Window: Ack Vector acknowledgements are cumulative. (This simplifies Ack Vector maintenance at the HC-Receiver; see Appendix A, below.) As packets are received, this window both grows on the right and shrinks on the left. It grows because there are more packets, and shrinks because the HC-Sender's Acknowledgement Numbers will acknowledge previous acknowledgements, moving packets from group 2 into group 1.
グループ 2 とグループ 3 の和集合を Acknowledgement Window と呼びます。一般に、HC-Receiver が生成するすべての Ack Vector は Acknowledgement Window 全体を対象とします。Ack Vector の確認応答は累積的です。(これにより HC-Receiver での Ack Vector の維持が簡単になります。後述の付録 A を参照してください。)パケットが受信されるにつれて、このウィンドウは右側で広がり、左側で縮みます。パケットが増えるため広がり、HC-Sender の Acknowledgement Number が以前の確認応答を確認応答することでパケットがグループ 2 からグループ 1 に移るため縮みます。
The Send Ack Vector feature lets DCCPs negotiate whether they should use Ack Vector options to report congestion. Ack Vector provides detailed loss information and lets senders report back to their applications whether particular packets were dropped. Send Ack Vector is mandatory for some CCIDs and optional for others.
Send Ack Vector 機能により、DCCP は輻輳の報告に Ack Vector オプションを使用すべきかどうかをネゴシエーションできます。Ack Vector は詳細な損失情報を提供し、特定のパケットが破棄されたかどうかを送信者がアプリケーションに報告できるようにします。Send Ack Vector は、一部の CCID では必須で、他の CCID では任意です。
Send Ack Vector has feature number 6 and is server-priority. It takes one-byte Boolean values. DCCP A MUST send Ack Vector options on its acknowledgements when Send Ack Vector/A has value one, although it MAY send Ack Vector options even when Send Ack Vector/A is zero. Values of two or more are reserved. New connections start with Send Ack Vector 0 for both endpoints. DCCP B sends a "Change R(Send Ack Vector, 1)" option to DCCP A to ask A to send Ack Vector options as part of its acknowledgement traffic.
Send Ack Vector の機能番号は 6 で、server-priority です。1 バイトのブール値を取ります。DCCP A は、Send Ack Vector/A の値が 1 のとき、確認応答に Ack Vector オプションを送信しなければなりません (MUST)。Send Ack Vector/A が 0 の場合でも、Ack Vector オプションを送信してもよいです (MAY)。2 以上の値は予約されています。新しい接続は、両方のエンドポイントで Send Ack Vector 0 から始まります。DCCP B は、DCCP A に "Change R(Send Ack Vector, 1)" オプションを送信して、確認応答トラフィックの一部として Ack Vector オプションを送信するよう A に要求します。
An HC-Receiver sends the Slow Receiver option to its sender to indicate that it is having trouble keeping up with the sender's data. The HC-Sender SHOULD NOT increase its sending rate for approximately one round-trip time after seeing a packet with a Slow Receiver option. After one round-trip time, the effect of Slow Receiver disappears, allowing the HC-Sender to increase its rate. Therefore, the HC-Receiver SHOULD continue to send Slow Receiver options if it needs to prevent the HC-Sender from going faster in the long term. The Slow Receiver option does not indicate congestion, and the HC-Sender need not reduce its sending rate. (If necessary, the receiver can force the sender to slow down by dropping packets, with or without Data Dropped, or by reporting false ECN marks.) APIs should let receiver applications set Slow Receiver and sending applications determine whether their receivers are Slow.
HC-Receiver は、送信者のデータに追いつくのが難しい状態にあることを示すために、送信者に Slow Receiver オプションを送信します。HC-Sender は、Slow Receiver オプションを持つパケットを受信してから約 1 ラウンドトリップ時間の間、送信レートを増加させるべきではありません (SHOULD NOT)。1 ラウンドトリップ時間が経過すると Slow Receiver の効果は消え、HC-Sender はレートを増加できるようになります。したがって、HC-Receiver は、HC-Sender がそれ以上速度を上げるのを長期的に防ぐ必要がある場合、Slow Receiver オプションを送信し続けるべきです (SHOULD)。Slow Receiver オプションは輻輳を示すものではなく、HC-Sender は送信レートを下げる必要はありません。(必要であれば、受信者は、Data Dropped を伴うかどうかにかかわらずパケットを破棄するか、偽の ECN マークを報告することで、送信者に減速を強制できます。)API は、受信側アプリケーションが Slow Receiver を設定でき、送信側アプリケーションが受信者が Slow かどうかを判断できるようにすべきです。
Slow Receiver is a one-byte option.
Slow Receiver は 1 バイトのオプションです。
+--------+
|00000010|
+--------+
Type=2
Slow Receiver does not specify why the receiver is having trouble keeping up with the sender. Possible reasons include lack of buffer space, CPU overload, and application quotas. A sending application might react to Slow Receiver by reducing its application-level sending rate, for example.
Slow Receiver は、受信者が送信者に追いつくのが難しい理由を指定しません。考えられる理由には、バッファ領域の不足、CPU の過負荷、アプリケーションのクォータなどがあります。たとえば、送信側アプリケーションは、Slow Receiver に対してアプリケーションレベルの送信レートを下げることで対応するかもしれません。
The sending application should not react to Slow Receiver by sending more data, however. Although the optimal response to a CPU-bound receiver might be to reduce compression and send more data (a highly-compressed data format might overwhelm a slow CPU more seriously than would the higher memory requirements of a less-compressed data format), this kind of format change should be requested at the application level, not via the Slow Receiver option.
ただし、送信側アプリケーションは、Slow Receiver に対してより多くのデータを送信することで対応すべきではありません。CPU がボトルネックの受信者に対する最適な対応は、圧縮を減らしてより多くのデータを送信することかもしれません(高度に圧縮されたデータ形式は、圧縮の少ないデータ形式のメモリ要件の高さよりも、遅い CPU に深刻な負荷をかける可能性があります)。しかし、この種の形式変更は、Slow Receiver オプションを介してではなく、アプリケーションレベルで要求すべきです。
Slow Receiver implements a portion of TCP's receive window functionality.
Slow Receiver は、TCP の受信ウィンドウ機能の一部を実装します。
The Data Dropped option indicates that the application data on one or more received packets did not actually reach the application. Data Dropped additionally reports why the data was dropped: perhaps the data was corrupt, or perhaps the receiver cannot keep up with the sender's current rate and the data was dropped in some receive buffer. Using Data Dropped, DCCP endpoints can discriminate between different kinds of loss; this differs from TCP, in which all loss is reported the same way.
Data Dropped オプションは、受信した 1 つ以上のパケット上のアプリケーションデータが、実際にはアプリケーションに到達しなかったことを示します。Data Dropped はさらに、データが破棄された理由も報告します。データが破損していたのかもしれませんし、受信者が送信者の現在のレートに追いつけず、データがどこかの受信バッファで破棄されたのかもしれません。Data Dropped を使用することで、DCCP エンドポイントは異なる種類の損失を区別できます。これは、すべての損失が同じ方法で報告される TCP とは異なります。
Unless it is explicitly specified otherwise, DCCP congestion control mechanisms MUST react as if each Data Dropped packet was marked as ECN Congestion Experienced by the network. We intend for Data Dropped to enable research into richer congestion responses to corrupt and other endpoint-dropped packets, but DCCP CCIDs MUST react conservatively to Data Dropped until this behavior is standardized. Section 11.7.2, below, describes congestion responses for all current Drop Codes.
明示的に別途指定されていない限り、DCCP の輻輳制御メカニズムは、Data Dropped の各パケットがネットワークによって ECN Congestion Experienced としてマークされたかのように反応しなければなりません (MUST)。Data Dropped は、破損パケットやその他のエンドポイントで破棄されたパケットに対する、より豊富な輻輳応答の研究を可能にすることを意図していますが、この動作が標準化されるまで、DCCP の CCID は Data Dropped に対して保守的に反応しなければなりません (MUST)。現在のすべての Drop Code に対する輻輳応答は、後述の 11.7.2 節で説明します。
If a received packet's application data is dropped for one of the reasons listed below, this SHOULD be reported using a Data Dropped option. Alternatively, the receiver MAY choose to report as
受信したパケットのアプリケーションデータが以下に挙げる理由のいずれかで破棄された場合、このことは Data Dropped オプションを使用して報告すべきです (SHOULD)。あるいは、受信者は、「受信済み」として報告するパケットを、次のように選択してもよいです (MAY)。
"received" only those packets whose data were not dropped, subject to the constraint that packets not reported as received MUST NOT have had their options processed.
すなわち、データが破棄されなかったパケットのみを対象とします。ただし、受信済みとして報告されないパケットは、そのオプションが処理されていてはなりません (MUST NOT)。
The option's data looks like this:
オプションのデータは次のようになります。
+--------+--------+--------+--------+--------+--------
|00101000| Length | Block | Block | Block | ...
+--------+--------+--------+--------+--------+--------
Type=40 \___________ Vector ___________ ...
The Vector consists of a series of bytes, called Blocks, each of whose encoding corresponds to one of two choices:
Vector は、Block と呼ばれる一連のバイトで構成され、各 Block の符号化は次の 2 つのいずれかに対応します。
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
|0| Run Length | or |1|DrpCd|Run Len|
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
Normal Block Drop Block
The first byte in the first Data Dropped option refers to the packet indicated by the Acknowledgement Number; subsequent bytes refer to older packets. Data Dropped MUST NOT be sent on DCCP-Data or DCCP-Request packets, which lack an Acknowledgement Number, and any Data Dropped options received on such packets MUST be ignored.
最初の Data Dropped オプションの最初のバイトは Acknowledgement Number で示されるパケットを指し、それ以降のバイトはより古いパケットを指します。Data Dropped は、Acknowledgement Number を持たない DCCP-Data パケットまたは DCCP-Request パケットで送信してはならず (MUST NOT)、そのようなパケットで受信した Data Dropped オプションは無視しなければなりません (MUST)。
Normal Blocks, which have high bit 0, indicate that any received packets in the Run Length had their data delivered to the application. Drop Blocks, which have high bit 1, indicate that received packets in the Run Len[gth] were not delivered as usual. The 3-bit Drop Code [DrpCd] field says what happened; generally, no data from that packet reached the application. Packets reported as "not yet received" MUST be included in Normal Blocks; packets not covered by any Data Dropped option are treated as if they were in a Normal Block. Defined Drop Codes for Drop Blocks are as follows.
上位ビットが 0 の Normal Block は、Run Length 内の受信済みパケットのデータがアプリケーションに配信されたことを示します。上位ビットが 1 の Drop Block は、Run Len[gth] 内の受信済みパケットが通常どおりには配信されなかったことを示します。3 ビットの Drop Code [DrpCd] フィールドは何が起きたかを示します。一般に、そのパケットのデータはアプリケーションに到達していません。「まだ受信されていない」と報告されたパケットは Normal Block に含めなければなりません (MUST)。どの Data Dropped オプションにも含まれないパケットは、Normal Block にあるものとして扱われます。Drop Block に定義されている Drop Code は次のとおりです。
Drop Code Meaning
--------- -------
0 Protocol Constraints
1 Application Not Listening
2 Receive Buffer
3 Corrupt
4-6 Reserved
7 Delivered Corrupt
Table 7: DCCP Drop Codes
表 7: DCCP Drop Code
In more detail:
詳細は次のとおりです。
0 The packet data was dropped due to protocol constraints. For example, the data was included on a DCCP-Request packet, but the receiving application does not allow such piggybacking; or the data was included on a packet with inappropriately low Checksum Coverage.
0 パケットデータがプロトコル上の制約により破棄された。たとえば、データが DCCP-Request パケットに含まれていたが、受信アプリケーションがそのようなピギーバックを許可していない場合や、データが不適切に低い Checksum Coverage のパケットに含まれていた場合です。
1 The packet data was dropped because the application is no longer listening. See Section 11.7.2.
1 アプリケーションがもはや待ち受けていないため、パケットデータが破棄された。11.7.2 節を参照してください。
2 The packet data was dropped in a receive buffer, probably because of receive buffer overflow. See Section 11.7.2.
2 おそらく受信バッファのオーバーフローにより、パケットデータが受信バッファで破棄された。11.7.2 節を参照してください。
3 The packet data was dropped due to corruption. See Section 9.3.
3 破損により、パケットデータが破棄された。9.3 節を参照してください。
7 The packet data was corrupted but was delivered to the application anyway. See Section 9.3.
7 パケットデータは破損していたが、それでもアプリケーションに配信された。9.3 節を参照してください。
For example, assume that a packet arrives with Acknowledgement Number 100, an Ack Vector reporting all packets as received, and a Data Dropped option containing the decimal values 0,160,3,162. Then:
たとえば、Acknowledgement Number 100 を持つパケットが到着し、Ack Vector がすべてのパケットを受信済みと報告し、Data Dropped オプションが 10 進値 0,160,3,162 を含んでいるとします。この場合は次のようになります。
Packet 100 was received (Acknowledgement Number 100, Normal Block, Run Length 0).
パケット 100 が受信された(Acknowledgement Number 100、Normal Block、Run Length 0)。
Packet 99 was dropped in a receive buffer (Drop Block, Drop Code 2, Run Length 0).
パケット 99 が受信バッファで破棄された(Drop Block、Drop Code 2、Run Length 0)。
Packets 98, 97, 96, and 95 were received (Normal Block, Run Length 3).
パケット 98、97、96、95 が受信された(Normal Block、Run Length 3)。
Packets 95, 94, and 93 were dropped in the receive buffer (Drop Block, Drop Code 2, Run Length 2).
パケット 95、94、93 が受信バッファで破棄された(Drop Block、Drop Code 2、Run Length 2)。
Run lengths of more than 128 (for Normal Blocks) or 16 (for Drop Blocks) must be encoded in multiple Blocks. A single Data Dropped option can acknowledge up to 32384 Normal Block data packets, although the receiver SHOULD NOT send a Data Dropped option when all relevant packets fit into Normal Blocks. Should more packets need to be acknowledged than can fit in 253 bytes of Data Dropped, then multiple Data Dropped options can be sent. The second option will begin where the first left off, and so forth.
128 を超える(Normal Block の場合)または 16 を超える(Drop Block の場合)ラン長は、複数の Block で符号化しなければなりません。1 つの Data Dropped オプションで、Normal Block のデータパケットを最大 32384 個まで確認応答できますが、関連するすべてのパケットが Normal Block に収まる場合、受信者は Data Dropped オプションを送信すべきではありません (SHOULD NOT)。253 バイトの Data Dropped に収まる数を超えるパケットを確認応答する必要がある場合は、複数の Data Dropped オプションを送信できます。2 つ目のオプションは 1 つ目が終わった位置から始まり、以降も同様です。
One or more Data Dropped options that, together, report the status of more packets than have been sent, or that change the status of a packet, or that disagree with Ack Vector or equivalent options (by reporting a "not yet received" packet as "dropped in the receive buffer", for example) SHOULD be considered invalid. The receiving DCCP SHOULD either ignore such options, or respond by resetting the connection with Reset Code 5, "Option Error".
送信済みのパケット数より多くのパケットの状態を(まとめて)報告する、パケットの状態を変更する、または Ack Vector や同等のオプションと矛盾する(たとえば、「まだ受信されていない」パケットを「受信バッファで破棄された」と報告する)1 つ以上の Data Dropped オプションは、無効とみなすべきです (SHOULD)。受信側の DCCP は、そのようなオプションを無視するか、Reset Code 5 "Option Error" で接続をリセットして応答すべきです (SHOULD)。
A DCCP application interface should let receiving applications specify the Drop Codes corresponding to received packets. For example, this would let applications calculate their own checksums but still report "dropped due to corruption" packets via the Data Dropped option. The interface SHOULD NOT let applications reduce the "seriousness" of a packet's Drop Code; for example, the application should not be able to upgrade a packet from delivered corrupt (Drop Code 7) to delivered normally (no Drop Code).
DCCP アプリケーションインターフェースは、受信側アプリケーションが、受信したパケットに対応する Drop Code を指定できるようにすべきです。たとえば、これによりアプリケーションは独自のチェックサムを計算しながら、Data Dropped オプションを介して「破損により破棄された」パケットを報告できます。このインターフェースは、アプリケーションがパケットの Drop Code の「深刻度」を下げられるようにしてはなりません (SHOULD NOT)。たとえば、アプリケーションがパケットを「破損したまま配信された」(Drop Code 7) から「通常どおり配信された」(Drop Code なし) に引き上げられるべきではありません。
Data Dropped information is transmitted reliably. That is, endpoints SHOULD continue to transmit Data Dropped options until receiving an acknowledgement indicating that the relevant options have been processed. In Ack Vector terms, each acknowledgement should contain Data Dropped options that cover the whole Acknowledgement Window (Section 11.4.2), although when every packet in that window would be placed in a Normal Block, no actual option is required.
Data Dropped 情報は信頼性をもって送信されます。つまり、エンドポイントは、関連するオプションが処理されたことを示す確認応答を受信するまで、Data Dropped オプションを送信し続けるべきです (SHOULD)。Ack Vector の用語で言えば、各確認応答は Acknowledgement Window(11.4.2 節)全体をカバーする Data Dropped オプションを含むべきですが、そのウィンドウ内のすべてのパケットが Normal Block に入る場合は、実際のオプションは必要ありません。
When deciding on a response to a particular acknowledgement or set of acknowledgements containing Data Dropped options, a congestion control mechanism MUST consider dropped packets, ECN Congestion Experienced marks (including marked packets that are included in Data Dropped), and packets singled out in Data Dropped. For window-based mechanisms, the valid response space is defined as follows.
Data Dropped オプションを含む特定の確認応答または一連の確認応答に対する応答を決定する際、輻輳制御メカニズムは、破棄されたパケット、ECN Congestion Experienced マーク(Data Dropped に含まれるマーク済みパケットを含む)、および Data Dropped で個別に指摘されたパケットを考慮しなければなりません (MUST)。ウィンドウベースのメカニズムの場合、有効な応答の範囲は次のように定義されます。
Assume an old window of W. Independently calculate a new window W_new1 that assumes no packets were Data Dropped (so W_new1 contains only the normal congestion response), and a new window W_new2 that assumes no packets were lost or marked (so W_new2 contains only the Data Dropped response). We are assuming that Data Dropped recommended a reduction in congestion window, so W_new2 < W.
古いウィンドウを W とします。Data Dropped のパケットがなかったと仮定した新しいウィンドウ W_new1(したがって W_new1 には通常の輻輳応答のみが反映される)と、損失またはマークされたパケットがなかったと仮定した新しいウィンドウ W_new2(したがって W_new2 には Data Dropped の応答のみが反映される)を、それぞれ独立に計算します。ここでは、Data Dropped が輻輳ウィンドウの縮小を推奨したと仮定するため、W_new2 < W となります。
Then the actual new window W_new MUST NOT be larger than the minimum of W_new1 and W_new2; and the sender MAY combine the two responses, by setting
その場合、実際の新しいウィンドウ W_new は、W_new1 と W_new2 のうち小さい方より大きくしてはならず (MUST NOT)、送信者は次のように設定して 2 つの応答を組み合わせてもよいです (MAY)。
W_new = W + min(W_new1 - W, 0) + min(W_new2 - W, 0).
W_new = W + min(W_new1 - W, 0) + min(W_new2 - W, 0).
The details of how this is accomplished are specified in CCID profile documents. Non-window-based congestion control mechanisms MUST behave analogously; again, CCID profiles define how.
これをどのように実現するかの詳細は、CCID Profile 文書で規定されます。ウィンドウベースでない輻輳制御メカニズムも、同様に動作しなければなりません (MUST)。この場合も、方法は CCID Profile が定義します。
Drop Code 0, Protocol Constraints, does not indicate any kind of congestion, so the sender's CCID SHOULD react to packets with Drop Code 0 as if they were received (with or without ECN Congestion Experienced marks, as appropriate). However, the sending endpoint SHOULD NOT send data until it believes the protocol constraint no longer applies.
Drop Code 0 (Protocol Constraints) はいかなる種類の輻輳も示さないため、送信者の CCID は、Drop Code 0 のパケットに対して、(必要に応じて ECN Congestion Experienced マークの有無を含め)受信されたかのように反応すべきです (SHOULD)。ただし、送信エンドポイントは、プロトコル上の制約がもはや適用されないと判断するまで、データを送信すべきではありません (SHOULD NOT)。
Drop Code 1, Application Not Listening, means the application running at the endpoint that sent the option is no longer listening for data. For example, a server might close its receiving half-connection to new data after receiving a complete request from the client. This would limit the amount of state available at the server for incoming data and thus reduce the potential damage from certain denial-of-service attacks. A Data Dropped option containing Drop Code 1 SHOULD be sent whenever received data is ignored due to a non-listening application. Once an endpoint reports Drop Code 1 for a packet, it SHOULD report Drop Code 1 for every succeeding data packet on that half-connection; once an endpoint receives a Drop State 1 report, it SHOULD expect that no more data will ever be delivered to the other endpoint's application, so it SHOULD NOT send more data.
Drop Code 1 (Application Not Listening) は、オプションを送信したエンドポイントで動作しているアプリケーションが、もはやデータを待ち受けていないことを意味します。たとえば、サーバーは、クライアントから完全な要求を受信した後に、新しいデータに対する受信側の半接続を閉じることがあります。これにより、受信データのためにサーバーで利用可能な状態の量が制限され、特定のサービス拒否攻撃による潜在的な被害が軽減されます。受信したデータが、アプリケーションが待ち受けていないために無視された場合は常に、Drop Code 1 を含む Data Dropped オプションを送信すべきです (SHOULD)。エンドポイントはパケットについて一度 Drop Code 1 を報告したら、その半接続上のそれ以降のすべてのデータパケットについても Drop Code 1 を報告すべきです (SHOULD)。エンドポイントは Drop State 1 の報告を受信したら、相手エンドポイントのアプリケーションにデータが二度と配信されないと予期すべきであり (SHOULD)、したがってそれ以上データを送信すべきではありません (SHOULD NOT)。
Drop Code 2, Receive Buffer, indicates congestion inside the receiving host. For instance, if a drop-from-tail kernel socket buffer is too full to accept a packet's application data, that packet should be reported as Drop Code 2. For a drop-from-head or more complex socket buffer, the dropped packet should be reported as Drop Code 2. DCCP implementations may also provide an API by which applications can mark received packets as Drop Code 2, indicating that the application ran out of space in its user-level receive buffer. (However, it is not generally useful to report packets as dropped due to Drop Code 2 after more than a couple of round-trip times have passed. The HC-Sender may have forgotten its acknowledgement state for the packet by that time, so the Data Dropped report will have no effect.) Every packet newly acknowledged as Drop Code 2 SHOULD reduce the sender's instantaneous rate by one packet per round-trip time, unless the sender is already sending one packet per RTT or less. Each CCID profile defines the CCID-specific mechanism by which this is accomplished.
Drop Code 2 (Receive Buffer) は、受信ホスト内部での輻輳を示します。たとえば、drop-from-tail のカーネルソケットバッファがいっぱいで、パケットのアプリケーションデータを受け入れられない場合、そのパケットは Drop Code 2 として報告されるべきです。drop-from-head またはより複雑なソケットバッファの場合も、破棄されたパケットは Drop Code 2 として報告されるべきです。DCCP 実装は、アプリケーションが受信したパケットを Drop Code 2 としてマークできる API を提供してもよく、これはアプリケーションのユーザーレベル受信バッファの容量が不足したことを示します。(ただし、数ラウンドトリップ時間以上が経過した後に、Drop Code 2 によるパケット破棄を報告しても、一般には有用ではありません。その時点では HC-Sender がそのパケットの確認応答状態を忘れている可能性があり、その場合 Data Dropped の報告は効果を持ちません。)Drop Code 2 として新たに確認応答されたパケットごとに、送信者がすでにラウンドトリップ時間あたり 1 パケット以下で送信している場合を除き、送信者の瞬間的なレートをラウンドトリップ時間あたり 1 パケット分だけ減らすべきです (SHOULD)。これを実現する CCID 固有のメカニズムは、各 CCID Profile が定義します。
Currently, the other Drop Codes (namely Drop Code 3, Corrupt; Drop Code 7, Delivered Corrupt; and reserved Drop Codes 4-6) MUST cause the relevant CCID to behave as if the relevant packets were ECN marked (ECN Congestion Experienced).
現時点では、その他の Drop Code(すなわち Drop Code 3 (Corrupt)、Drop Code 7 (Delivered Corrupt)、および予約済みの Drop Code 4~6)については、関連する CCID は、関連するパケットが ECN マーク(ECN Congestion Experienced)されたかのように動作しなければなりません (MUST)。
The DCCP protocol is fully ECN-aware [RFC3168]. Each CCID specifies how its endpoints respond to ECN marks. Furthermore, DCCP, unlike TCP, allows senders to control the rate at which acknowledgements are generated (with options like Ack Ratio); since acknowledgements are congestion controlled, they also qualify as ECN-Capable Transport.
DCCP プロトコルは ECN [RFC3168] を完全に認識します。各 CCID は、そのエンドポイントが ECN マークにどのように応答するかを規定します。さらに、TCP と異なり、DCCP では送信者が(Ack Ratio などのオプションにより)確認応答が生成される頻度を制御できます。確認応答は輻輳制御の対象であるため、ECN-Capable Transport の資格も持ちます。
Each CCID profile describes how that CCID interacts with ECN, both for data traffic and pure-acknowledgement traffic. A sender SHOULD set ECN-Capable Transport on its packets' IP headers unless the receiver's ECN Incapable feature is on or the relevant CCID disallows it.
各 CCID Profile は、データトラフィックと純粋な確認応答トラフィックの両方について、その CCID が ECN とどのように相互作用するかを記述します。送信者は、受信者の ECN Incapable 機能が有効である場合、または関連する CCID が禁止している場合を除き、パケットの IP ヘッダに ECN-Capable Transport を設定すべきです (SHOULD)。
The rest of this section describes the ECN Incapable feature and the interaction of the ECN Nonce with acknowledgement options such as Ack Vector.
本節の残りの部分では、ECN Incapable 機能と、ECN Nonce と Ack Vector などの確認応答オプションとの相互作用について説明します。
DCCP endpoints are ECN-aware by default, but the ECN Incapable feature lets an endpoint reject the use of Explicit Congestion Notification. The use of this feature is NOT RECOMMENDED. ECN incapability both avoids ECN's possible benefits and prevents senders from using the ECN Nonce to check for receiver misbehavior. A DCCP stack MAY therefore leave the ECN Incapable feature unimplemented, acting as if all connections were ECN capable. Note that the inappropriate firewall interactions that dogged TCP's implementation of ECN [RFC3360] involve TCP header bits, not the IP header's ECN bits; we know of no middlebox that would block ECN-capable DCCP packets but allow ECN-incapable DCCP packets.
DCCP エンドポイントはデフォルトで ECN を認識しますが、ECN Incapable 機能により、エンドポイントは Explicit Congestion Notification の使用を拒否できます。この機能の使用は推奨されません (NOT RECOMMENDED)。ECN 非対応は、ECN の潜在的な利点を失わせるだけでなく、送信者が ECN Nonce を使用して受信者の不正な動作を確認することも妨げます。したがって、DCCP スタックは ECN Incapable 機能を実装せず、すべての接続が ECN 対応であるかのように動作してもよいです (MAY)。TCP の ECN 実装を悩ませた不適切なファイアウォールとの相互作用 [RFC3360] は、IP ヘッダの ECN ビットではなく TCP ヘッダのビットに関するものでした。ECN 対応の DCCP パケットをブロックしながら ECN 非対応の DCCP パケットを通すミドルボックスは、知られていません。
ECN Incapable has feature number 4 and is server-priority. It takes one-byte Boolean values. DCCP A MUST be able to read ECN bits from received frames' IP headers when ECN Incapable/A is zero. (This is independent of whether it can set ECN bits on sent frames.) DCCP A thus sends a "Change L(ECN Inapable, 1)" option to DCCP B to inform it that A cannot read ECN bits. If the ECN Incapable/A feature is one, then all of DCCP B's packets MUST be sent as ECN incapable. New connections start with ECN Incapable 0 (that is, ECN capable) for both endpoints. Values of two or more are reserved.
ECN Incapable の機能番号は 4 で、server-priority です。1 バイトのブール値を取ります。DCCP A は、ECN Incapable/A が 0 のとき、受信したフレームの IP ヘッダから ECN ビットを読み取れなければなりません (MUST)。(これは、送信フレームに ECN ビットを設定できるかどうかとは無関係です。)したがって DCCP A は、A が ECN ビットを読み取れないことを DCCP B に通知するために、"Change L(ECN Inapable, 1)" オプションを DCCP B に送信します。ECN Incapable/A 機能が 1 の場合、DCCP B のすべてのパケットは ECN 非対応として送信しなければなりません (MUST)。新しい接続は、両方のエンドポイントで ECN Incapable 0(つまり ECN 対応)から始まります。2 以上の値は予約されています。
If a DCCP is not ECN capable, it MUST send Mandatory "Change L(ECN Incapable, 1)" options to the other endpoint until acknowledged (by "Confirm R(ECN Incapable, 1)") or the connection closes. Furthermore, it MUST NOT accept any data until the other endpoint sends "Confirm R(ECN Incapable, 1)". It SHOULD send Data Dropped options on its acknowledgements, with Drop Code 0 ("protocol constraints"), if the other endpoint does send data inappropriately.
DCCP が ECN に対応していない場合、他方のエンドポイントに対して、確認応答されるまで ("Confirm R(ECN Incapable, 1)" によって) またはコネクションが閉じられるまで、Mandatory の "Change L(ECN Incapable, 1)" オプションを送信しなければなりません (MUST)。さらに、他方のエンドポイントが "Confirm R(ECN Incapable, 1)" を送信するまでは、いかなるデータも受け入れてはなりません (MUST NOT)。他方のエンドポイントが不適切にデータを送信してきた場合は、確認応答に Drop Code 0 ("protocol constraints") の Data Dropped オプションを含めて送信すべきです (SHOULD)。
Congestion avoidance will not occur, and the receiver will sometimes get its data faster, if the sender isn't told about congestion events. Thus, the receiver has some incentive to falsify acknowledgement information, reporting that marked or dropped packets were actually received unmarked. This problem is more serious with DCCP than with TCP, since TCP provides reliable transport: it is more difficult with TCP to lie about lost packets without breaking the application.
輻輳イベントが送信者に通知されなければ、輻輳回避は行われず、受信者は場合によってデータをより速く受け取れることになります。そのため、受信者には確認応答情報を偽り、マークされたパケットや破棄されたパケットが実際にはマークなしで受信されたと報告する動機があります。TCP は信頼性のあるトランスポートを提供するため、この問題は TCP よりも DCCP においてより深刻です。TCP では、アプリケーションを壊さずにパケット損失について嘘をつくことはより困難です。
ECN Nonces are a general mechanism to prevent ECN cheating (or loss cheating). Two values for the two-bit ECN header field indicate ECN-Capable Transport, 01 and 10. The second code point, 10, is the ECN Nonce. In general, a protocol sender chooses between these code points randomly on its output packets, remembering the sequence it chose. On every acknowledgement, the protocol receiver reports the number of ECN Nonces it has received thus far. This is called the ECN Nonce Echo. Since ECN marking and packet dropping both destroy the ECN Nonce, a receiver that lies about an ECN mark or packet drop has a 50% chance of guessing right and avoiding discipline. The sender may react punitively to an ECN Nonce mismatch, possibly up to dropping the connection. The ECN Nonce Echo field need not be an integer; one bit is enough to catch 50% of infractions, and the probability of success drops exponentially as more packets are sent [RFC3540].
ECN Nonce は、ECN の不正 (または損失の不正) を防ぐための一般的なメカニズムです。2 ビットの ECN ヘッダーフィールドの 2 つの値、01 と 10 が ECN-Capable Transport を示します。2 番目のコードポイントである 10 が ECN Nonce です。一般に、プロトコルの送信者は出力パケットでこれらのコードポイントをランダムに選択し、選択した順序を記憶します。受信者は確認応答のたびに、これまでに受信した ECN Nonce の数を報告します。これを ECN Nonce Echo と呼びます。ECN マークとパケット破棄はどちらも ECN Nonce を破壊するため、ECN マークやパケット破棄について嘘をつく受信者が正しく推測して制裁を免れる確率は 50% です。送信者は ECN Nonce の不一致に対して、場合によってはコネクションの切断に至るまで、懲罰的に反応してもかまいません。ECN Nonce Echo フィールドは整数である必要はありません。1 ビットあれば違反の 50% を検出でき、より多くのパケットが送信されるにつれて、不正が成功する確率は指数関数的に低下します [RFC3540]。
In DCCP, the ECN Nonce Echo field is encoded in acknowledgement options. For example, the Ack Vector option comes in two forms, Ack Vector [Nonce 0] (option 38) and Ack Vector [Nonce 1] (option 39), corresponding to the two values for a one-bit ECN Nonce Echo. The Nonce Echo for a given Ack Vector equals the one-bit sum (exclusive-or, or parity) of ECN nonces for packets reported by that Ack Vector as received and not ECN marked. Thus, only packets marked as State 0 matter for this calculation (that is, valid received packets that were not ECN marked). Every Ack Vector option is detailed enough for the sender to determine what the Nonce Echo should have been. It can check this calculation against the actual Nonce Echo and complain if there is a mismatch. (The Ack Vector could conceivably report every packet's ECN Nonce state, but this would severely limit its compressibility without providing much extra protection.)
DCCP では、ECN Nonce Echo フィールドは確認応答オプションの中に符号化されます。たとえば Ack Vector オプションには、1 ビットの ECN Nonce Echo の 2 つの値に対応する Ack Vector [Nonce 0] (オプション 38) と Ack Vector [Nonce 1] (オプション 39) の 2 つの形式があります。ある Ack Vector に対する Nonce Echo は、その Ack Vector が受信済みかつ ECN マークなしと報告したパケットの ECN Nonce の 1 ビット和 (排他的論理和、またはパリティ) に等しくなります。したがって、この計算では State 0 としてマークされたパケット (つまり、ECN マークされていない有効な受信パケット) だけが関係します。すべての Ack Vector オプションは、送信者が Nonce Echo がどうあるべきだったかを判定できるだけの詳細さを備えています。送信者はこの計算結果を実際の Nonce Echo と照合し、不一致があれば異議を申し立てることができます。(Ack Vector にすべてのパケットの ECN Nonce の状態を報告させることも考えられますが、そうすると大した追加の保護も得られないまま、圧縮性が著しく制限されてしまいます。)
Each DCCP sender SHOULD set ECN Nonces on its packets and remember which packets had nonces. When a sender detects an ECN Nonce Echo mismatch, it behaves as described in the next section. Each DCCP receiver MUST calculate and use the correct value for ECN Nonce Echo when sending acknowledgement options.
各 DCCP 送信者は、パケットに ECN Nonce を設定し、どのパケットに Nonce があったかを記憶すべきです (SHOULD)。送信者が ECN Nonce Echo の不一致を検出した場合は、次のセクションで説明するように動作します。各 DCCP 受信者は、確認応答オプションを送信するときに、ECN Nonce Echo の正しい値を計算して使用しなければなりません (MUST)。
ECN incapability, as indicated by the ECN Incapable feature, is handled as follows: an endpoint sending packets to an ECN-incapable receiver MUST send its packets as ECN incapable, and an ECN-incapable receiver MUST use the value zero for all ECN Nonce Echoes.
ECN Incapable 機能によって示される ECN 非対応は、次のように扱われます。ECN 非対応の受信者にパケットを送信するエンドポイントは、そのパケットを ECN 非対応として送信しなければならず (MUST)、ECN 非対応の受信者はすべての ECN Nonce Echo に値ゼロを使用しなければなりません (MUST)。
DCCP endpoints have several mechanisms for detecting congestion-related misbehavior. For example:
DCCP エンドポイントには、輻輳に関連する不正行為を検出するためのメカニズムがいくつかあります。たとえば次のとおりです。
o A sender can detect an ECN Nonce Echo mismatch, indicating possible receiver misbehavior.
o 送信者は ECN Nonce Echo の不一致を検出でき、これは受信者の不正行為の可能性を示します。
o A receiver can detect whether the sender is responding to congestion feedback or Slow Receiver.
o 受信者は、送信者が輻輳フィードバックまたは Slow Receiver に応答しているかどうかを検出できます。
o An endpoint may be able to detect that its peer is reporting inappropriately small Elapsed Time values (Section 13.2).
o エンドポイントは、相手が不適切に小さい Elapsed Time の値 (セクション 13.2) を報告していることを検出できる場合があります。
An endpoint that detects possible congestion-related misbehavior SHOULD try to verify that its peer is truly misbehaving. For example, a sending endpoint might send a packet whose ECN header field is set to Congestion Experienced, 11; a receiver that doesn't report a corresponding mark is most likely misbehaving.
輻輳に関連する不正行為の可能性を検出したエンドポイントは、相手が実際に不正行為をしているかどうかの確認を試みるべきです (SHOULD)。たとえば、送信側エンドポイントは ECN ヘッダーフィールドを Congestion Experienced (11) に設定したパケットを送信することができ、対応するマークを報告しない受信者は、ほぼ間違いなく不正行為をしています。
Upon detecting possible misbehavior, a sender SHOULD respond as if the receiver had reported one or more recent packets as ECN-marked (instead of unmarked), while a receiver SHOULD report one or more recent non-marked packets as ECN-marked. Alternately, a sender might act as if the receiver had sent a Slow Receiver option, and a receiver might send Slow Receiver options. Other reactions that serve to slow the transfer rate are also acceptable. An entity that detects particularly egregious and ongoing misbehavior MAY also reset the connection with Reset Code 11, "Aggression Penalty".
不正行為の可能性を検出した場合、送信者は、受信者が最近のパケットの 1 つ以上を (マークなしではなく) ECN マーク付きと報告したかのように応答すべきであり (SHOULD)、受信者は最近のマークなしパケットの 1 つ以上を ECN マーク付きとして報告すべきです (SHOULD)。あるいは、送信者は受信者が Slow Receiver オプションを送信したかのように動作し、受信者は Slow Receiver オプションを送信してもかまいません。転送速度を低下させるその他の反応も許容されます。特にひどい不正行為が継続的に行われていることを検出したエンティティは、Reset Code 11 "Aggression Penalty" でコネクションをリセットしてもよいです (MAY)。
However, ECN Nonce mismatches and other warning signs can result from innocent causes, such as implementation bugs or attack. In particular, a successful DCCP-Data attack (Section 7.5.5) can cause the receiver to report an incorrect ECN Nonce Echo. Therefore, connection reset and other heavyweight mechanisms SHOULD be used only as last resorts, after multiple round-trip times of verified aggression.
しかし、ECN Nonce の不一致やその他の警告サインは、実装上のバグや攻撃など、悪意のない原因から生じることもあります。特に、DCCP-Data 攻撃 (セクション 7.5.5) が成功すると、受信者が誤った ECN Nonce Echo を報告する原因となることがあります。したがって、コネクションのリセットなどの重いメカニズムは、複数のラウンドトリップ時間にわたって不正行為が確認された後の最後の手段としてのみ使用すべきです (SHOULD)。
The Timestamp, Timestamp Echo, and Elapsed Time options help DCCP endpoints explicitly measure round-trip times.
Timestamp、Timestamp Echo、Elapsed Time オプションは、DCCP エンドポイントがラウンドトリップ時間を明示的に測定するのに役立ちます。
This option is permitted in any DCCP packet. The length of the option is 6 bytes.
このオプションは任意の DCCP パケットで使用できます。オプションの長さは 6 バイトです。
+--------+--------+--------+--------+--------+--------+
|00101001|00000110| Timestamp Value |
+--------+--------+--------+--------+--------+--------+
Type=41 Length=6
The four bytes of option data carry the timestamp of this packet. The timestamp is a 32-bit integer that increases monotonically with time, at a rate of 1 unit per 10 microseconds. At this rate, Timestamp Value will wrap approximately every 11.9 hours. Endpoints need not measure time at this fine granularity; for example, an endpoint that preferred to measure time at millisecond granularity might send Timestamp Values that were all multiples of 100. The precise time corresponding to Timestamp Value zero is not specified: Timestamp Values are only meaningful relative to other Timestamp Values sent on the same connection. A DCCP receiving a Timestamp option SHOULD respond with a Timestamp Echo option on the next packet it sends.
4 バイトのオプションデータは、このパケットのタイムスタンプを運びます。タイムスタンプは時間とともに単調に増加する 32 ビット整数で、10 マイクロ秒ごとに 1 ずつ増加します。この速度では、Timestamp Value は約 11.9 時間ごとにラップします。エンドポイントがこのような細かい粒度で時間を測定する必要はありません。たとえば、ミリ秒単位で時間を測定したいエンドポイントは、すべて 100 の倍数である Timestamp Value を送信してもかまいません。Timestamp Value がゼロに相当する正確な時刻は規定されていません。Timestamp Value は、同じコネクション上で送信された他の Timestamp Value との相対でのみ意味を持ちます。Timestamp オプションを受信した DCCP は、次に送信するパケットで Timestamp Echo オプションを使って応答すべきです (SHOULD)。
This option is permitted in any DCCP packet that contains an Acknowledgement Number; such options received on other packet types MUST be ignored. It indicates how much time has elapsed since the packet being acknowledged -- the packet with the given Acknowledgement Number -- was received. The option may take 4 or 6 bytes, depending on the size of the Elapsed Time value. Elapsed Time helps correct round-trip time estimates when the gap between receiving a packet and acknowledging that packet may be long -- in CCID 3, for example, where acknowledgements are sent infrequently.
このオプションは、Acknowledgement Number を含む任意の DCCP パケットで使用できます。他のパケットタイプで受信したこのオプションは無視しなければなりません (MUST)。このオプションは、確認応答の対象となるパケット (指定された Acknowledgement Number を持つパケット) を受信してからどれだけの時間が経過したかを示します。オプションは Elapsed Time 値の大きさに応じて 4 バイトまたは 6 バイトになります。Elapsed Time は、パケットの受信からそのパケットの確認応答までの間隔が長くなりうる場合 (たとえば、確認応答の送信頻度が低い CCID 3 など) に、ラウンドトリップ時間の推定値を補正するのに役立ちます。
+--------+--------+--------+--------+
|00101011|00000100| Elapsed Time |
+--------+--------+--------+--------+
Type=43 Len=4
+--------+--------+--------+--------+--------+--------+
|00101011|00000110| Elapsed Time |
+--------+--------+--------+--------+--------+--------+
Type=43 Len=6
The option data, Elapsed Time, represents an estimated lower bound on the amount of time elapsed since the packet being acknowledged was received, with units of hundredths of milliseconds. If Elapsed Time is less than a half-second, the first, smaller form of the option SHOULD be used. Elapsed Times of more than 0.65535 seconds MUST be sent using the second form of the option. The special Elapsed Time value 4294967295, which corresponds to approximately 11.9 hours, is used to represent any Elapsed Time greater than 42949.67294 seconds. DCCP endpoints MUST NOT report Elapsed Times that are significantly larger than the true elapsed times. A connection MAY be reset with Reset Code 11, "Aggression Penalty", if one endpoint determines that the other is reporting a much-too-large Elapsed Time.
オプションデータである Elapsed Time は、確認応答の対象となるパケットを受信してから経過した時間の推定下限を、100 分の 1 ミリ秒単位で表します。Elapsed Time が半秒未満の場合は、オプションの最初の小さい方の形式を使用すべきです (SHOULD)。0.65535 秒を超える Elapsed Time は、オプションの 2 番目の形式を使用して送信しなければなりません (MUST)。特別な Elapsed Time 値 4294967295 (約 11.9 時間に相当) は、42949.67294 秒を超えるすべての Elapsed Time を表すために使用されます。DCCP エンドポイントは、真の経過時間よりも著しく大きい Elapsed Time を報告してはなりません (MUST NOT)。一方のエンドポイントが、他方が大きすぎる Elapsed Time を報告していると判断した場合、コネクションを Reset Code 11 "Aggression Penalty" でリセットしてもよいです (MAY)。
Elapsed Time is measured in hundredths of milliseconds as a compromise between two conflicting goals. First, it provides enough granularity to reduce rounding error when measuring elapsed time over fast LANs; second, it allows many reasonable elapsed times to fit into two bytes of data.
Elapsed Time を 100 分の 1 ミリ秒単位で測定するのは、相反する 2 つの目標の妥協点です。第一に、高速な LAN 上で経過時間を測定する際の丸め誤差を減らすのに十分な粒度を提供します。第二に、多くの妥当な経過時間を 2 バイトのデータに収められます。
This option is permitted in any DCCP packet, as long as at least one packet carrying the Timestamp option has been received. Generally, a DCCP endpoint should send one Timestamp Echo option for each Timestamp option it receives, and it should send that option as soon as is convenient. The length of the option is between 6 and 10 bytes, depending on whether Elapsed Time is included and how large it is.
このオプションは、Timestamp オプションを運ぶパケットが少なくとも 1 つ受信されていれば、任意の DCCP パケットで使用できます。一般に、DCCP エンドポイントは受信した Timestamp オプションごとに 1 つの Timestamp Echo オプションを送信するのがよいでしょう。また、都合がつき次第すぐにそのオプションを送信するのがよいでしょう。オプションの長さは、Elapsed Time を含むかどうか、およびその大きさによって、6 から 10 バイトの間になります。
+--------+--------+--------+--------+--------+--------+
|00101010|00000110| Timestamp Echo |
+--------+--------+--------+--------+--------+--------+
Type=42 Len=6
+--------+--------+------- ... -------+--------+--------+
|00101010|00001000| Timestamp Echo | Elapsed Time |
+--------+--------+------- ... -------+--------+--------+
Type=42 Len=8 (4 bytes)
+--------+--------+------- ... -------+------- ... -------+
|00101010|00001010| Timestamp Echo | Elapsed Time |
+--------+--------+------- ... -------+------- ... -------+
Type=42 Len=10 (4 bytes) (4 bytes)
The first four bytes of option data, Timestamp Echo, carry a Timestamp Value taken from a preceding received Timestamp option. Usually, this will be the last packet that was received -- the packet indicated by the Acknowledgement Number, if any -- but it might be a preceding packet. Each Timestamp received will generally result in exactly one Timestamp Echo transmitted. If an endpoint has received multiple Timestamp options since the last time it sent a packet, then it MAY ignore all Timestamp options but the one included on the packet with the greatest sequence number. Alternatively, it MAY include multiple Timestamp Echo options in its response, each corresponding to a different Timestamp option.
オプションデータの最初の 4 バイトである Timestamp Echo は、以前に受信した Timestamp オプションから取得した Timestamp Value を運びます。通常これは最後に受信したパケット (Acknowledgement Number で示されるパケットがあればそれ) のものですが、それより前のパケットのものであってもかまいません。受信した各 Timestamp は、一般に、ちょうど 1 つの Timestamp Echo の送信につながります。エンドポイントが、最後にパケットを送信してから複数の Timestamp オプションを受信している場合、最大のシーケンス番号を持つパケットに含まれていたもの以外のすべての Timestamp オプションを無視してもよいです (MAY)。あるいは、それぞれが異なる Timestamp オプションに対応する複数の Timestamp Echo オプションを応答に含めてもよいです (MAY)。
The Elapsed Time value, similar to that in the Elapsed Time option, indicates the amount of time elapsed since receiving the packet whose timestamp is being echoed. This time MUST have units of hundredths of milliseconds. Elapsed Time is meant to help the Timestamp sender separate the network round-trip time from the Timestamp receiver's processing time. This may be particularly important for CCIDs where acknowledgements are sent infrequently, so that there might be considerable delay between receiving a Timestamp option and sending the corresponding Timestamp Echo. A missing Elapsed Time field is equivalent to an Elapsed Time of zero. The smallest version of the option SHOULD be used that can hold the relevant Elapsed Time value.
Elapsed Time 値は、Elapsed Time オプションのものと同様に、タイムスタンプがエコーされるパケットを受信してから経過した時間を示します。この時間の単位は 100 分の 1 ミリ秒でなければなりません (MUST)。Elapsed Time は、Timestamp の送信者が、ネットワークのラウンドトリップ時間と Timestamp の受信者の処理時間を切り分けるのを助けることを意図しています。これは、確認応答の送信頻度が低く、Timestamp オプションを受信してから対応する Timestamp Echo を送信するまでにかなりの遅延が生じる可能性がある CCID では、特に重要になることがあります。Elapsed Time フィールドがない場合は、Elapsed Time がゼロであることと等価です。該当する Elapsed Time 値を保持できる最小バージョンのオプションを使用すべきです (SHOULD)。
A DCCP implementation MUST maintain the maximum packet size (MPS) allowed for each active DCCP session. The MPS is influenced by the maximum packet size allowed by the current congestion control mechanism (CCMPS), the maximum packet size supported by the path's links (PMTU, the Path Maximum Transmission Unit) [RFC1191], and the lengths of the IP and DCCP headers.
DCCP 実装は、アクティブな DCCP セッションごとに許容される最大パケットサイズ (MPS) を維持しなければなりません (MUST)。MPS は、現在の輻輳制御メカニズムが許容する最大パケットサイズ (CCMPS)、経路上のリンクがサポートする最大パケットサイズ (PMTU、Path Maximum Transmission Unit) [RFC1191]、および IP ヘッダーと DCCP ヘッダーの長さによって左右されます。
A DCCP application interface SHOULD let the application discover DCCP's current MPS. Generally, the DCCP implementation will refuse to send any packet bigger than the MPS, returning an appropriate error to the application. A DCCP interface MAY allow applications to request fragmentation for packets larger than PMTU, but not larger than CCMPS. (Packets larger than CCMPS MUST be rejected in any case.) Fragmentation SHOULD NOT be the default, since it decreases robustness: an entire packet is discarded if even one of its fragments is lost. Applications can usually get better error tolerance by producing packets smaller than the PMTU.
DCCP アプリケーションインターフェースは、アプリケーションが DCCP の現在の MPS を取得できるようにすべきです (SHOULD)。一般に、DCCP 実装は MPS より大きいパケットの送信を拒否し、適切なエラーをアプリケーションに返します。DCCP インターフェースは、PMTU より大きく CCMPS 以下のパケットについて、アプリケーションがフラグメンテーションを要求できるようにしてもよいです (MAY)。(CCMPS より大きいパケットは、いずれの場合も拒否しなければなりません (MUST)。) フラグメンテーションは、フラグメントが 1 つでも失われるとパケット全体が破棄されるため堅牢性を低下させるので、デフォルトにすべきではありません (SHOULD NOT)。通常、PMTU より小さいパケットを生成することで、アプリケーションはより良いエラー耐性を得られます。
The MPS reported to the application SHOULD be influenced by the size expected to be required for DCCP headers and options. If the application provides data that, when combined with the options the DCCP implementation would like to include, would exceed the MPS, the implementation should either send the options on a separate packet (such as a DCCP-Ack) or lower the MPS, drop the data, and return an appropriate error to the application.
アプリケーションに報告される MPS は、DCCP ヘッダーとオプションに必要と見込まれるサイズの影響を受けるべきです (SHOULD)。アプリケーションが提供したデータが、DCCP 実装が含めたいオプションと合わせて MPS を超える場合、実装はオプションを別のパケット (DCCP-Ack など) で送信するか、MPS を下げてデータを破棄し、適切なエラーをアプリケーションに返すのがよいでしょう。
Each DCCP endpoint MUST keep track of the current PMTU for each connection, except that this is not required for IPv4 connections whose applications have requested fragmentation. The PMTU SHOULD be initialized from the interface MTU that will be used to send packets. The MPS will be initialized with the minimum of the PMTU and the CCMPS, if any.
各 DCCP エンドポイントは、コネクションごとに現在の PMTU を追跡しなければなりません (MUST)。ただし、アプリケーションがフラグメンテーションを要求している IPv4 コネクションでは、これは必須ではありません。PMTU は、パケットの送信に使用されるインターフェースの MTU で初期化すべきです (SHOULD)。MPS は、PMTU と CCMPS (存在する場合) の小さい方の値で初期化されます。
Classical PMTU discovery uses unfragmentable packets. In IPv4, these packets have the IP Don't Fragment (DF) bit set; in IPv6, all packets are unfragmentable once emitted by an end host. As specified in [RFC1191], when a router receives a packet with DF set that is larger than the next link's MTU, it sends an ICMP Destination Unreachable message back to the source whose Code indicates that an unfragmentable packet was too large to forward (a "Datagram Too Big" message). When a DCCP implementation receives a Datagram Too Big message, it decreases its PMTU to the Next-Hop MTU value given in the ICMP message. If the MTU given in the message is zero, the sender chooses a value for PMTU using the algorithm described in [RFC1191], Section 7. If the MTU given in the message is greater than the current PMTU, the Datagram Too Big message is ignored, as described in [RFC1191]. (We are aware that this may cause problems for DCCP endpoints behind certain firewalls.)
従来の PMTU 探索ではフラグメント化できないパケットを使用します。IPv4 では、これらのパケットは IP の Don't Fragment (DF) ビットが設定されています。IPv6 では、エンドホストから送出されたすべてのパケットがフラグメント化不可です。[RFC1191] で規定されているように、ルーターは、次のリンクの MTU より大きい DF 付きパケットを受信すると、フラグメント化不可のパケットが大きすぎて転送できなかったことを Code で示す ICMP Destination Unreachable メッセージ ("Datagram Too Big" メッセージ) を送信元に返します。DCCP 実装は Datagram Too Big メッセージを受信すると、PMTU を ICMP メッセージで示された Next-Hop MTU の値まで減らします。メッセージで示された MTU がゼロの場合、送信者は [RFC1191] のセクション 7 で説明されているアルゴリズムを使用して PMTU の値を選択します。メッセージで示された MTU が現在の PMTU より大きい場合、[RFC1191] で説明されているように、Datagram Too Big メッセージは無視されます。(これが、特定のファイアウォールの背後にある DCCP エンドポイントで問題を引き起こす可能性があることは承知しています。)
A DCCP implementation may allow the application occasionally to request that PMTU discovery be performed again. This will reset the PMTU to the outgoing interface's MTU. Such requests SHOULD be rate limited, to one per two seconds, for example.
DCCP 実装は、アプリケーションが PMTU 探索の再実行を随時要求できるようにしてもかまいません。これにより PMTU は出力インターフェースの MTU にリセットされます。このような要求は、たとえば 2 秒に 1 回のようにレート制限すべきです (SHOULD)。
A DCCP sender MAY treat the reception of an ICMP Datagram Too Big message as an indication that the packet being reported was not lost due to congestion, and so for the purposes of congestion control it MAY ignore the DCCP receiver's indication that this packet did not arrive. However, if this is done, then the DCCP sender MUST check the ECN bits of the IP header echoed in the ICMP message and only perform this optimization if these ECN bits indicate that the packet did not experience congestion prior to reaching the router whose link MTU it exceeded.
DCCP 送信者は、ICMP Datagram Too Big メッセージの受信を、報告されたパケットが輻輳によって失われたのではないことの指標として扱ってもよく (MAY)、その場合、輻輳制御の目的では、このパケットが到着しなかったという DCCP 受信者の通知を無視してもよいです (MAY)。ただし、これを行う場合、DCCP 送信者は ICMP メッセージにエコーされた IP ヘッダーの ECN ビットを確認し、これらの ECN ビットが、パケットがリンク MTU を超えたルーターに到達するまでに輻輳を経験していないことを示している場合にのみ、この最適化を実行しなければなりません (MUST)。
A DCCP implementation SHOULD ensure, as far as possible, that ICMP Datagram Too Big messages were actually generated by routers, so that attackers cannot drive the PMTU down to a falsely small value. The simplest way to do this is to verify that the Sequence Number on the ICMP error's encapsulated header corresponds to a Sequence Number that the implementation recently sent. (According to current specifications, routers should return the full DCCP header and payload up to a maximum of 576 bytes [RFC1812] or the minimum IPv6 MTU [RFC2463], although they are not required to return more than 64 bits [RFC792]. Any amount greater than 128 bits will include the Sequence Number.) ICMP Datagram Too Big messages with incorrect or missing Sequence Numbers may be ignored, or the DCCP implementation may lower the PMTU only temporarily in response. If more than three odd Datagram Too Big messages are received and the other DCCP endpoint reports more than three lost packets, however, the DCCP implementation SHOULD assume the presence of a confused router and either obey the ICMP messages' PMTU or (on IPv4 networks) switch to allowing fragmentation.
DCCP 実装は、攻撃者が PMTU を偽りの小さな値まで引き下げることができないように、ICMP Datagram Too Big メッセージが実際にルーターによって生成されたものであることを、可能な限り確認すべきです (SHOULD)。これを行う最も簡単な方法は、ICMP エラーにカプセル化されたヘッダー上のシーケンス番号が、実装が最近送信したシーケンス番号に対応していることを検証することです。(現在の仕様によれば、ルーターは、最大 576 バイト [RFC1812] または IPv6 の最小 MTU [RFC2463] までの DCCP ヘッダー全体とペイロードを返すべきですが、64 ビットを超えて返すことは求められていません [RFC792]。128 ビットを超える量であれば、シーケンス番号が含まれます。) シーケンス番号が誤っている、または欠落している ICMP Datagram Too Big メッセージは無視してもかまいませんし、DCCP 実装はそれに応じて PMTU を一時的にのみ下げてもかまいません。ただし、3 つを超える不審な Datagram Too Big メッセージを受信し、かつ他方の DCCP エンドポイントが 3 つを超えるパケット損失を報告した場合、DCCP 実装は、混乱したルーターが存在すると想定し、ICMP メッセージの PMTU に従うか、(IPv4 ネットワークでは) フラグメンテーションを許可する方式に切り替えるべきです (SHOULD)。
DCCP also allows upward probing of the PMTU [PMTUD], where the DCCP endpoint begins by sending small packets with DF set and then gradually increases the packet size until a packet is lost. This mechanism does not require any ICMP error processing. DCCP-Sync packets are the best choice for upward probing, since DCCP-Sync probes do not risk application data loss. The DCCP implementation inserts arbitrary data into the DCCP-Sync application area, padding the packet to the right length. Since every valid DCCP-Sync generates an immediate DCCP-SyncAck in response, the endpoint will have a pretty good idea of when a probe is lost.
DCCP では、PMTU の上方向のプロービング [PMTUD] も可能です。この方式では、DCCP エンドポイントは DF を設定した小さなパケットの送信から始め、パケットが失われるまでパケットサイズを徐々に増やします。このメカニズムでは ICMP エラー処理は不要です。DCCP-Sync パケットは、DCCP-Sync によるプローブがアプリケーションデータを失うリスクを伴わないため、上方向のプロービングに最適です。DCCP 実装は DCCP-Sync のアプリケーション領域に任意のデータを挿入し、パケットを適切な長さになるようパディングします。有効な DCCP-Sync には必ず即座に DCCP-SyncAck が返されるため、エンドポイントはプローブが失われたタイミングをかなり正確に把握できます。
A DCCP sender SHOULD send every packet as unfragmentable, as described above, with the following exceptions.
DCCP 送信者は、以下の例外を除き、上述のようにすべてのパケットをフラグメント化不可として送信すべきです (SHOULD)。
o On IPv4 connections whose applications have requested fragmentation, the sender SHOULD send packets with the DF bit not set.
o アプリケーションがフラグメンテーションを要求している IPv4 コネクションでは、送信者は DF ビットを設定せずにパケットを送信すべきです (SHOULD)。
o On IPv6 connections whose applications have requested fragmentation, the sender SHOULD use fragmentation extension headers to fragment packets larger than PMTU into suitably-sized chunks. (Those chunks are, of course, unfragmentable.)
o アプリケーションがフラグメンテーションを要求している IPv6 コネクションでは、送信者は、PMTU より大きいパケットを適切なサイズの断片にフラグメント化するために、フラグメンテーション拡張ヘッダーを使用すべきです (SHOULD)。(もちろん、それらの断片はフラグメント化不可です。)
o It is undesirable for PMTU discovery to occur on the initial connection setup handshake, as the connection setup process may not be representative of packet sizes used during the connection, and performing MTU discovery on the initial handshake might unnecessarily delay connection establishment. Thus, DCCP-Request and DCCP-Response packets SHOULD be sent as fragmentable. In addition, DCCP-Reset packets SHOULD be sent as fragmentable, although typically these would be small enough to not be a problem. For IPv4 connections, these packets SHOULD be sent with the DF bit not set; for IPv6 connections, they SHOULD be preemptively fragmented to a size not larger than the relevant interface MTU.
o 初期のコネクション確立ハンドシェイクで PMTU 探索が行われるのは望ましくありません。コネクション確立の過程で使われるパケットサイズは、コネクション中に使われるパケットサイズを代表しているとは限らず、初期ハンドシェイクで MTU 探索を行うと、コネクションの確立が不必要に遅れる可能性があるためです。したがって、DCCP-Request パケットと DCCP-Response パケットはフラグメント化可能として送信すべきです (SHOULD)。加えて、DCCP-Reset パケットもフラグメント化可能として送信すべきです (SHOULD)。ただし、通常これらは問題にならないほど小さいパケットです。IPv4 コネクションでは、これらのパケットは DF ビットを設定せずに送信すべきです (SHOULD)。IPv6 コネクションでは、関連するインターフェースの MTU を超えないサイズに、あらかじめフラグメント化しておくべきです (SHOULD)。
If the DCCP implementation has decreased the PMTU, the sending application has not requested fragmentation, and the sending application attempts to send a packet larger than the new MPS, the API MUST refuse to send the packet and return an appropriate error to the application. The application should then use the API to query the new value of MPS. The kernel might have some packets buffered for transmission that are smaller than the old MPS but larger than the new MPS. It MAY send these packets as fragmentable, or it MAY discard these packets; it MUST NOT send them as unfragmentable.
DCCP 実装が PMTU を減らし、送信側アプリケーションがフラグメンテーションを要求しておらず、送信側アプリケーションが新しい MPS より大きいパケットを送信しようとした場合、API はそのパケットの送信を拒否し、適切なエラーをアプリケーションに返さなければなりません (MUST)。その後、アプリケーションは API を使用して MPS の新しい値を照会するのがよいでしょう。カーネルが、古い MPS より小さいが新しい MPS より大きい、送信待ちのパケットをバッファしている場合があります。カーネルはこれらのパケットをフラグメント化可能として送信してもよく (MAY)、これらのパケットを破棄してもよいです (MAY)。ただし、フラグメント化不可として送信してはなりません (MUST NOT)。
Future versions of DCCP may add new options and features. A few simple guidelines will let extended DCCPs interoperate with normal DCCPs.
将来のバージョンの DCCP では、新しいオプションや機能が追加される可能性があります。いくつかの簡単なガイドラインに従うことで、拡張された DCCP と通常の DCCP が相互運用できるようになります。
o DCCP processors MUST NOT act punitively towards options and features they do not understand. For example, DCCP processors MUST NOT reset the connection if some field marked Reserved in this specification is non-zero; if some unknown option is present; or if some feature negotiation option mentions an unknown feature. Instead, DCCP processors MUST ignore these events. The Mandatory option is the single exception: if Mandatory precedes some unknown option or feature, the connection MUST be reset.
o DCCP プロセッサは、理解できないオプションや機能に対して懲罰的に動作してはなりません (MUST NOT)。たとえば、本仕様で Reserved とされているフィールドがゼロ以外である場合、未知のオプションが存在する場合、または機能ネゴシエーションオプションが未知の機能に言及している場合に、DCCP プロセッサはコネクションをリセットしてはなりません (MUST NOT)。代わりに、DCCP プロセッサはこれらの事象を無視しなければなりません (MUST)。Mandatory オプションが唯一の例外です。Mandatory が未知のオプションまたは機能の前にある場合、コネクションはリセットされなければなりません (MUST)。
o DCCP processors MUST anticipate the possibility of unknown feature values, which might occur as part of a negotiation for a known feature. For server-priority features, unknown values are handled as a matter of course: since the non-extended DCCP's priority list will not contain unknown values, the result of the negotiation cannot be an unknown value. A DCCP MUST respond with an empty Confirm option if it is assigned an unacceptable value for some non-negotiable feature.
o DCCP プロセッサは、既知の機能のネゴシエーションの一部として発生しうる、未知の機能値の可能性を想定しなければなりません (MUST)。サーバー優先度の機能では、未知の値は当然のものとして処理されます。拡張されていない DCCP の優先度リストには未知の値が含まれないため、ネゴシエーションの結果が未知の値になることはありません。DCCP は、ネゴシエーション不可の機能に受け入れられない値を割り当てられた場合、空の Confirm オプションで応答しなければなりません (MUST)。
o Each DCCP extension SHOULD be controlled by some feature. The default value of this feature SHOULD correspond to "extension not available". If an extended DCCP wants to use the extension, it SHOULD attempt to change the feature's value using a Change L or Change R option. Any non-extended DCCP will ignore the option, thus leaving the feature value at its default, "extension not available".
o 各 DCCP 拡張は、何らかの機能によって制御されるべきです (SHOULD)。この機能のデフォルト値は「拡張は利用不可」に対応するべきです (SHOULD)。拡張された DCCP が拡張を使用したい場合は、Change L または Change R オプションを使用して機能の値を変更しようと試みるべきです (SHOULD)。拡張されていない DCCP はこのオプションを無視するため、機能の値はデフォルトの「拡張は利用不可」のままとなります。
Section 19 lists DCCP assigned numbers reserved for experimental and testing purposes.
セクション 19 に、実験およびテスト用に予約されている DCCP 割り当て番号を示します。
This section describes properties of DCCP that firewalls, network address translators, and other middleboxes should consider, including parts of the packet that middleboxes should not change. The intent is to draw attention to aspects of DCCP that may be useful, or dangerous, for middleboxes, or that differ significantly from TCP.
このセクションでは、ファイアウォール、ネットワークアドレス変換装置、その他のミドルボックスが考慮すべき DCCP の特性について説明します。これにはミドルボックスが変更してはならないパケットの部分も含まれます。その意図は、ミドルボックスにとって有用または危険になりうる、あるいは TCP と大きく異なる DCCP の側面に注意を促すことです。
The Service Code field in DCCP-Request packets provides information that may be useful for stateful middleboxes. With Service Code, a middlebox can tell what protocol a connection will use without relying on port numbers. Middleboxes can disallow connections that attempt to access unexpected services by sending a DCCP-Reset with Reset Code 8, "Bad Service Code". Middleboxes should not modify the Service Code unless they are really changing the service a connection is accessing.
DCCP-Request パケットの Service Code フィールドは、ステートフルなミドルボックスにとって有用な情報を提供します。Service Code により、ミドルボックスはポート番号に頼ることなく、コネクションがどのプロトコルを使用するかを判断できます。ミドルボックスは、Reset Code 8 "Bad Service Code" の DCCP-Reset を送信することで、想定外のサービスへのアクセスを試みるコネクションを拒否できます。ミドルボックスは、コネクションがアクセスするサービスを実際に変更する場合を除き、Service Code を変更すべきではありません。
The Source and Destination Port fields are in the same packet locations as the corresponding fields in TCP and UDP, which may simplify some middlebox implementations.
Source Port フィールドと Destination Port フィールドは、TCP や UDP の対応するフィールドと同じパケット位置にあり、これによってミドルボックスの実装が簡単になる場合があります。
The forward compatibility considerations in Section 15 apply to middleboxes as well. In particular, middleboxes generally shouldn't act punitively towards options and features they do not understand.
セクション 15 の前方互換性に関する考慮事項は、ミドルボックスにも適用されます。特に、ミドルボックスは一般に、理解できないオプションや機能に対して懲罰的に動作すべきではありません。
Modifying DCCP Sequence Numbers and Acknowledgement Numbers is more tedious and dangerous than modifying TCP sequence numbers. A middlebox that added packets to or removed packets from a DCCP connection would have to modify acknowledgement options, such as Ack Vector, and CCID-specific options, such as TFRC's Loss Intervals, at minimum. On ECN-capable connections, the middlebox would have to keep track of ECN Nonce information for packets it introduced or removed, so that the relevant acknowledgement options continued to have correct ECN Nonce Echoes, or risk the connection being reset for "Aggression Penalty". We therefore recommend that middleboxes not modify packet streams by adding or removing packets.
DCCP の Sequence Number と Acknowledgement Number の変更は、TCP のシーケンス番号の変更よりも面倒で危険です。DCCP コネクションにパケットを追加したり、そこからパケットを削除したりするミドルボックスは、少なくとも Ack Vector などの確認応答オプションや、TFRC の Loss Intervals などの CCID 固有のオプションを変更しなければなりません。ECN に対応したコネクションでは、ミドルボックスは自身が追加または削除したパケットの ECN Nonce 情報を追跡し、関連する確認応答オプションが正しい ECN Nonce Echo を持ち続けるようにしなければなりません。さもなければ、"Aggression Penalty" によってコネクションがリセットされるおそれがあります。したがって、ミドルボックスはパケットを追加または削除してパケットストリームを変更しないことを推奨します。
Note that there is less need to modify DCCP's per-packet sequence numbers than to modify TCP's per-byte sequence numbers; for example, a middlebox can change the contents of a packet without changing its sequence number. (In TCP, sequence number modification is required to support protocols like FTP that carry variable-length addresses in the data stream. If such an application were deployed over DCCP, middleboxes would simply grow or shrink the relevant packets as necessary without changing their sequence numbers. This might involve fragmenting the packet.)
TCP のバイト単位のシーケンス番号を変更する場合と比べて、DCCP のパケット単位のシーケンス番号を変更する必要性は低いことに注意してください。たとえば、ミドルボックスはシーケンス番号を変更せずにパケットの内容を変更できます。(TCP では、データストリーム内に可変長のアドレスを運ぶ FTP のようなプロトコルをサポートするために、シーケンス番号の変更が必要です。そのようなアプリケーションが DCCP 上に展開された場合、ミドルボックスは、シーケンス番号を変更することなく、必要に応じて該当するパケットを単に拡大または縮小します。これにはパケットのフラグメント化が伴うことがあります。)
Middleboxes may, of course, reset connections in progress. Clearly, this requires inserting a packet into one or both packet streams, but the difficult issues do not arise.
もちろん、ミドルボックスは進行中のコネクションをリセットしてもかまいません。これには明らかに一方または両方のパケットストリームへのパケットの挿入が必要ですが、難しい問題は生じません。
DCCP is somewhat unfriendly to "connection splicing" [SHHP00], in which clients' connection attempts are intercepted, but possibly later "spliced in" to external server connections via sequence number manipulations. A connection splicer at minimum would have to ensure that the spliced connections agreed on all relevant feature values, which might take some renegotiation.
DCCP は、クライアントのコネクション試行を横取りし、その後、シーケンス番号の操作によって外部サーバーへのコネクションに「接ぎ合わせる」ことがある「コネクションスプライシング」[SHHP00] に対して、やや不向きです。コネクションスプライサーは、少なくとも、接ぎ合わせるコネクションが関連するすべての機能の値について一致していることを保証する必要があり、そのためには再ネゴシエーションが必要になる場合があります。
The contents of this section should not be interpreted as a wholesale endorsement of stateful middleboxes.
このセクションの内容を、ステートフルなミドルボックスを全面的に支持するものと解釈すべきではありません。
The Real-Time Transport Protocol, RTP [RFC3550], is currently used over UDP by many of DCCP's target applications (for instance, streaming media). Therefore, it is important to examine the relationship between DCCP and RTP and, in particular, the question of whether any changes in RTP are necessary or desirable when it is layered over DCCP instead of UDP.
Real-Time Transport Protocol (RTP) [RFC3550] は、現在、DCCP の対象アプリケーション (ストリーミングメディアなど) の多くで UDP 上で使用されています。したがって、DCCP と RTP の関係、特に RTP を UDP ではなく DCCP の上位層として使用する場合に、RTP に何らかの変更が必要または望ましいかどうかを検討することは重要です。
There are two potential sources of overhead in the RTP-over-DCCP combination: duplicated acknowledgement information and duplicated sequence numbers. Together, these sources of overhead add slightly more than 4 bytes per packet relative to RTP-over-UDP, and eliminating the redundancy would not reduce the overhead.
RTP-over-DCCP の組み合わせには、確認応答情報の重複とシーケンス番号の重複という、オーバーヘッドの発生源が 2 つ考えられます。これらを合わせると、RTP-over-UDP と比べてパケットあたり 4 バイトをわずかに超えるオーバーヘッドが加わりますが、冗長性を排除してもオーバーヘッドは減りません。
First, consider acknowledgements. Both RTP and DCCP report feedback about loss rates to data senders, via RTP Control Protocol Sender and Receiver Reports (RTCP SR/RR packets) and via DCCP acknowledgement options. These feedback mechanisms are potentially redundant. However, RTCP SR/RR packets contain information not present in DCCP acknowledgements, such as "interarrival jitter", and DCCP's acknowledgements contain information not transmitted by RTCP, such as the ECN Nonce Echo. Neither feedback mechanism makes the other redundant.
まず、確認応答について考えます。RTP と DCCP はどちらも、RTP Control Protocol の Sender Report と Receiver Report (RTCP SR/RR パケット) および DCCP の確認応答オプションを介して、損失率に関するフィードバックをデータ送信者に報告します。これらのフィードバックメカニズムは冗長である可能性があります。しかし、RTCP SR/RR パケットには "interarrival jitter" など DCCP の確認応答にない情報が含まれ、DCCP の確認応答には ECN Nonce Echo など RTCP が伝送しない情報が含まれています。どちらのフィードバックメカニズムも、他方を冗長にするものではありません。
Sending both types of feedback need not be particularly costly either. RTCP reports may be sent relatively infrequently: once every 5 seconds on average, for low-bandwidth flows. In DCCP, some feedback mechanisms are expensive -- Ack Vector, for example, is frequent and verbose -- but others are relatively cheap: CCID 3 (TFRC) acknowledgements take between 16 and 32 bytes of options sent once per round-trip time. (Reporting less frequently than once per RTT would make congestion control less responsive to loss.) We therefore conclude that acknowledgement overhead in RTP-over-DCCP need not be significantly higher than for RTP-over-UDP, at least for CCID 3.
両方のフィードバックを送信することも、特にコストが高いわけではありません。RTCP レポートは比較的低頻度で送信されることがあり、低帯域幅のフローでは平均して 5 秒に 1 回です。DCCP では、Ack Vector のように頻繁で冗長なコストの高いフィードバックメカニズムもありますが、比較的低コストなものもあります。CCID 3 (TFRC) の確認応答は、ラウンドトリップ時間ごとに 1 回送信される 16 から 32 バイトのオプションで済みます。(ラウンドトリップ時間 (RTT) に 1 回より低い頻度で報告すると、輻輳制御の損失に対する応答性が低下します。) したがって、少なくとも CCID 3 では、RTP-over-DCCP の確認応答のオーバーヘッドが RTP-over-UDP のそれを大幅に上回る必要はないと結論付けられます。
One clear redundancy can be addressed at the application level. The verbose packet-by-packet loss reports sent in RTCP Extended Reports Loss RLE Blocks [RFC3611] can be derived from DCCP's Ack Vector options. (The converse is not true, since Loss RLE Blocks contain no ECN information.) Since DCCP implementations should provide an API for application access to Ack Vector information, RTP-over-DCCP applications might request either DCCP Ack Vectors or RTCP Extended Report Loss RLE Blocks, but not both.
明らかな冗長性の 1 つは、アプリケーションレベルで対処できます。RTCP Extended Reports の Loss RLE Block [RFC3611] で送信される冗長なパケット単位の損失レポートは、DCCP の Ack Vector オプションから導出できます。(Loss RLE Block には ECN 情報が含まれないため、その逆はできません。) DCCP 実装は Ack Vector 情報にアプリケーションがアクセスするための API を提供するのがよいため、RTP-over-DCCP アプリケーションは、DCCP の Ack Vector か RTCP Extended Report の Loss RLE Block のどちらか一方を要求し、両方は要求しないようにできます。
Now consider sequence number redundancy on data packets. The embedded RTP header contains a 16-bit RTP sequence number. Most data packets will use the DCCP-Data type; DCCP-DataAck and DCCP-Ack packets need not usually be sent. The DCCP-Data header is 12 bytes long without options, including a 24-bit sequence number. This is 4 bytes more than a UDP header. Any options required on data packets would add further overhead, although many CCIDs (for instance, CCID 3, TFRC) don't require options on most data packets.
次に、データパケットにおけるシーケンス番号の冗長性について考えます。埋め込まれた RTP ヘッダーには 16 ビットの RTP シーケンス番号が含まれます。ほとんどのデータパケットは DCCP-Data タイプを使用し、DCCP-DataAck パケットと DCCP-Ack パケットは通常送信する必要がありません。DCCP-Data ヘッダーはオプションなしで 12 バイトの長さで、24 ビットのシーケンス番号を含みます。これは UDP ヘッダーより 4 バイト多くなります。データパケットに必要なオプションがあれば、さらにオーバーヘッドが加わりますが、多くの CCID (たとえば CCID 3、TFRC) では、ほとんどのデータパケットにオプションは必要ありません。
The DCCP sequence number cannot be inferred from the RTP sequence number since it increments on non-data packets as well as data packets. The RTP sequence number cannot be inferred from the DCCP sequence number either [RFC3550]. Furthermore, removing RTP's sequence number would not save any header space because of alignment issues. We therefore recommend that RTP transmitted over DCCP use the same headers currently defined. The 4 byte header cost is a reasonable tradeoff for DCCP's congestion control features and access to ECN. Truly bandwidth-starved endpoints should use some header compression scheme.
DCCP のシーケンス番号は、データパケットだけでなく非データパケットでも増加するため、RTP シーケンス番号から推測することはできません。RTP シーケンス番号も、DCCP シーケンス番号から推測することはできません [RFC3550]。さらに、アラインメントの問題があるため、RTP のシーケンス番号を削除してもヘッダー領域は節約できません。したがって、DCCP 上で伝送される RTP には、現在定義されているものと同じヘッダーを使用することを推奨します。4 バイトのヘッダーコストは、DCCP の輻輳制御機能と ECN へのアクセスに対する妥当なトレードオフです。帯域幅が本当に不足しているエンドポイントは、何らかのヘッダー圧縮方式を使用するのがよいでしょう。
Since DCCP doesn't provide reliable, ordered delivery, multiple application sub-flows may be multiplexed over a single DCCP connection with no inherent performance penalty. Thus, there is no need for DCCP to provide built-in support for multiple sub-flows. This differs from SCTP [RFC2960].
DCCP は信頼性のある順序付き配信を提供しないため、複数のアプリケーションのサブフローを 1 つの DCCP コネクション上で多重化しても、本質的な性能上の不利益はありません。したがって、DCCP が複数のサブフローの組み込みサポートを提供する必要はありません。この点は SCTP [RFC2960] とは異なります。
Some applications might want to share congestion control state among multiple DCCP flows that share the same source and destination addresses. This functionality could be provided by the Congestion Manager [RFC3124], a generic multiplexing facility. However, the CM would not fully support DCCP without change; it does not gracefully handle multiple congestion control mechanisms, for example.
アプリケーションによっては、同じ送信元アドレスと宛先アドレスを共有する複数の DCCP フロー間で、輻輳制御の状態を共有したい場合があります。この機能は、汎用的な多重化機構である Congestion Manager [RFC3124] によって提供できる可能性があります。しかし、CM は変更なしでは DCCP を完全にはサポートしません。たとえば、複数の輻輳制御メカニズムをうまく扱えません。
DCCP does not provide cryptographic security guarantees. Applications desiring cryptographic security services (integrity, authentication, confidentiality, access control, and anti-replay protection) should use IPsec or end-to-end security of some kind; Secure RTP is one candidate protocol [RFC3711].
DCCP は暗号学的なセキュリティの保証を提供しません。暗号学的なセキュリティサービス (完全性、認証、機密性、アクセス制御、リプレイ防止) を必要とするアプリケーションは、IPsec または何らかのエンドツーエンドのセキュリティを使用すべきです。Secure RTP は候補となるプロトコルの 1 つです [RFC3711]。
Nevertheless, DCCP is intended to protect against some classes of attackers: Attackers cannot hijack a DCCP connection (close the connection unexpectedly, or cause attacker data to be accepted by an endpoint as if it came from the sender) unless they can guess valid sequence numbers. Thus, as long as endpoints choose initial sequence numbers well, a DCCP attacker must snoop on data packets to get any reasonable probability of success. Sequence number validity checks provide this guarantee. Section 7.5.5 describes sequence number security further. This security property only holds assuming that DCCP's random numbers are chosen according to the guidelines in [RFC4086].
それでも、DCCP は一部の種類の攻撃者から保護することを意図しています。攻撃者は、有効なシーケンス番号を推測できない限り、DCCP コネクションをハイジャックする (コネクションを予期せず閉じる、または攻撃者のデータが送信者から来たものとしてエンドポイントに受け入れさせる) ことはできません。したがって、エンドポイントが初期シーケンス番号を適切に選択している限り、DCCP の攻撃者が妥当な成功確率を得るにはデータパケットを盗聴しなければなりません。シーケンス番号の有効性チェックがこの保証を提供します。セクション 7.5.5 では、シーケンス番号のセキュリティについてさらに説明しています。このセキュリティ特性は、DCCP の乱数が [RFC4086] のガイドラインに従って選択されているという前提でのみ成り立ちます。
DCCP also provides mechanisms to limit the potential impact of some denial-of-service attacks. These mechanisms include Init Cookie (Section 8.1.4), the DCCP-CloseReq packet (Section 5.5), the Application Not Listening Drop Code (Section 11.7.2), limitations on the processing of options that might cause connection reset (Section 7.5.5), limitations on the processing of some ICMP messages (Section 14.1), and various rate limits, which let servers avoid extensive computation or packet generation (Sections 7.5.3, 8.1.3, and others).
DCCP はまた、一部のサービス拒否攻撃の潜在的な影響を抑えるためのメカニズムも提供します。これらのメカニズムには、Init Cookie (セクション 8.1.4)、DCCP-CloseReq パケット (セクション 5.5)、Application Not Listening Drop Code (セクション 11.7.2)、コネクションのリセットを引き起こしうるオプションの処理に対する制限 (セクション 7.5.5)、一部の ICMP メッセージの処理に対する制限 (セクション 14.1)、およびサーバーが大量の計算やパケット生成を回避できるようにするさまざまなレート制限 (セクション 7.5.3、8.1.3 など) が含まれます。
DCCP provides no protection against attackers that can snoop on data packets.
DCCP は、データパケットを盗聴できる攻撃者に対する保護を提供しません。
The partial checksum facility has a separate security impact, particularly in its interaction with authentication and encryption mechanisms. The impact is the same in DCCP as in the UDP-Lite protocol, and what follows was adapted from the corresponding text in the UDP-Lite specification [RFC3828].
部分チェックサム機能には、特に認証や暗号化メカニズムとの相互作用において、別個のセキュリティ上の影響があります。この影響は UDP-Lite プロトコルの場合と DCCP でも同じであり、以下は UDP-Lite 仕様 [RFC3828] の対応する文章を元に作成しました。
When a DCCP packet's Checksum Coverage field is not zero, the uncovered portion of a packet may change in transit. This is contrary to the idea behind most authentication mechanisms: authentication succeeds if the packet has not changed in transit. Unless authentication mechanisms that operate only on the sensitive part of packets are developed and used, authentication will always fail for partially-checksummed DCCP packets whose uncovered part has been damaged.
DCCP パケットの Checksum Coverage フィールドがゼロでない場合、パケットのカバーされない部分は転送中に変化する可能性があります。これは、パケットが転送中に変化していなければ認証が成功するという、ほとんどの認証メカニズムの考え方に反します。パケットの機密性の高い部分のみを対象とする認証メカニズムが開発され使用されない限り、カバーされない部分が破損した、部分チェックサム付きの DCCP パケットでは、認証は常に失敗します。
The IPsec integrity check (Encapsulation Security Protocol, ESP, or Authentication Header, AH) is applied (at least) to the entire IP packet payload. Corruption of any bit within that area will then result in the IP receiver's discarding a DCCP packet, even if the corruption happened in an uncovered part of the DCCP application data.
IPsec の完全性チェック (Encapsulation Security Protocol (ESP) または Authentication Header (AH)) は、(少なくとも) IP パケットペイロード全体に適用されます。その領域内のどのビットが破損しても、たとえその破損が DCCP アプリケーションデータのカバーされない部分で発生した場合でも、IP 受信者は DCCP パケットを破棄することになります。
When IPsec is used with ESP payload encryption, a link can not determine the specific transport protocol of a packet being forwarded by inspecting the IP packet payload. In this case, the link MUST provide a standard integrity check covering the entire IP packet and payload. DCCP partial checksums provide no benefit in this case.
IPsec を ESP ペイロード暗号化とともに使用する場合、リンクは IP パケットペイロードを検査して、転送中のパケットの具体的なトランスポートプロトコルを判別することができません。この場合、リンクは IP パケットとペイロード全体をカバーする標準的な完全性チェックを提供しなければなりません (MUST)。この場合、DCCP の部分チェックサムは何の利点ももたらしません。
Encryption (e.g., at the transport or application levels) may be used. Note that omitting an integrity check can, under certain circumstances, compromise confidentiality [B98].
暗号化 (たとえばトランスポート層やアプリケーション層での暗号化) を使用してもかまいません。完全性チェックを省略すると、状況によっては機密性が損なわれる場合があることに注意してください [B98]。
If a few bits of an encrypted packet are damaged, the decryption transform will typically spread errors so that the packet becomes too damaged to be of use. Many encryption transforms today exhibit this behavior. There exist encryption transforms, stream ciphers, that do not cause error propagation. Proper use of stream ciphers can be quite difficult, especially when authentication checking is omitted [BB01]. In particular, an attacker can cause predictable changes to the ultimate plaintext, even without being able to decrypt the ciphertext.
暗号化されたパケットの数ビットが破損した場合、復号変換は通常エラーを拡散させ、パケットが使い物にならないほど損傷します。現在の多くの暗号変換はこの挙動を示します。エラー伝播を引き起こさない暗号変換として、ストリーム暗号が存在します。ストリーム暗号の適切な使用は、特に認証チェックが省略されている場合には、非常に難しいことがあります [BB01]。特に、攻撃者は暗号文を復号できなくても、最終的な平文に予測可能な変更を加えることができます。
IANA has assigned IP Protocol Number 33 to DCCP.
IANA は IP プロトコル番号 33 を DCCP に割り当てました。
DCCP introduces eight sets of numbers whose values should be allocated by IANA. We refer to allocation policies, such as Standards Action, outlined in [RFC2434], and most registries reserve some values for experimental and testing use [RFC3692]. In addition, DCCP requires that the IANA Port Numbers registry be opened for DCCP port registrations; Section 19.9 describes how. The IANA should feel free to contact the DCCP Expert Reviewer with questions on any registry, regardless of the registry policy, for clarification or if there is a problem with a request.
DCCP は、IANA によって割り当てられるべき値を持つ 8 つの番号の集合を導入します。ここでは [RFC2434] で概説されている Standards Action などの割り当てポリシーを参照しており、ほとんどのレジストリは一部の値を実験およびテスト用に予約しています [RFC3692]。加えて、DCCP では、IANA Port Numbers レジストリを DCCP のポート登録のために開く必要があります。その方法はセクション 19.9 で説明されています。IANA は、レジストリのポリシーにかかわらず、どのレジストリについても、確認が必要な場合や要求に問題がある場合には、DCCP Expert Reviewer に遠慮なく問い合わせてください。
Each entry in the DCCP Packet Types registry contains a packet type, which is a number in the range 0-15; a packet type name, such as DCCP-Request; and a reference to the RFC defining the packet type. The registry is initially populated using the values in Table 1 (Section 5.1). This document allocates packet types 0-9, and packet type 14 is permanently reserved for experimental and testing use. Packet types 10-13 and 15 are currently reserved and should be allocated with the Standards Action policy, which requires IESG review and approval and standards-track IETF RFC publication.
DCCP Packet Types レジストリの各エントリには、0 から 15 の範囲の数値であるパケットタイプ、DCCP-Request などのパケットタイプ名、およびそのパケットタイプを定義する RFC への参照が含まれます。レジストリは、最初は表 1 (セクション 5.1) の値で埋められます。この文書はパケットタイプ 0 から 9 を割り当てており、パケットタイプ 14 は実験およびテスト用に恒久的に予約されています。パケットタイプ 10 から 13 および 15 は現在予約されており、IESG のレビューと承認、および標準化過程の IETF RFC の発行を必要とする Standards Action ポリシーで割り当てられるべきです。
Each entry in the DCCP Reset Codes registry contains a Reset Code, which is a number in the range 0-255; a short description of the Reset Code, such as "No Connection"; and a reference to the RFC defining the Reset Code. The registry is initially populated using the values in Table 2 (Section 5.6). This document allocates Reset Codes 0-11, and Reset Codes 120-126 are permanently reserved for experimental and testing use. Reset Codes 12-119 and 127 are currently reserved and should be allocated with the IETF Consensus policy, requiring an IETF RFC publication (standards track or not) with IESG review and approval. Reset Codes 128-255 are permanently reserved for CCID-specific registries; each CCID Profile document describes how the corresponding registry is managed.
DCCP Reset Codes レジストリの各エントリには、0 から 255 の範囲の数値である Reset Code、"No Connection" などの Reset Code の短い説明、およびその Reset Code を定義する RFC への参照が含まれます。レジストリは、最初は表 2 (セクション 5.6) の値で埋められます。この文書は Reset Code 0 から 11 を割り当てており、Reset Code 120 から 126 は実験およびテスト用に恒久的に予約されています。Reset Code 12 から 119 および 127 は現在予約されており、IESG のレビューと承認を伴う (標準化過程であるかどうかを問わない) IETF RFC の発行を必要とする IETF Consensus ポリシーで割り当てられるべきです。Reset Code 128 から 255 は CCID 固有のレジストリ用に恒久的に予約されており、対応するレジストリの管理方法は各 CCID Profile 文書で説明されます。
Each entry in the DCCP option types registry contains an option type, which is a number in the range 0-255; the name of the option, such as "Slow Receiver"; and a reference to the RFC defining the option type. The registry is initially populated using the values in Table 3 (Section 5.8). This document allocates option types 0-2 and 32-44, and option types 31 and 120-126 are permanently reserved for experimental and testing use. Option types 3-30, 45-119, and 127 are currently reserved and should be allocated with the IETF Consensus policy, requiring an IETF RFC publication (standards track or not) with IESG review and approval. Option types 128-255 are permanently reserved for CCID-specific registries; each CCID Profile document describes how the corresponding registry is managed.
DCCP option types レジストリの各エントリには、0 から 255 の範囲の数値であるオプションタイプ、"Slow Receiver" などのオプション名、およびそのオプションタイプを定義する RFC への参照が含まれます。レジストリは、最初は表 3 (セクション 5.8) の値で埋められます。この文書はオプションタイプ 0 から 2 および 32 から 44 を割り当てており、オプションタイプ 31 および 120 から 126 は実験およびテスト用に恒久的に予約されています。オプションタイプ 3 から 30、45 から 119、および 127 は現在予約されており、IESG のレビューと承認を伴う (標準化過程であるかどうかを問わない) IETF RFC の発行を必要とする IETF Consensus ポリシーで割り当てられるべきです。オプションタイプ 128 から 255 は CCID 固有のレジストリ用に恒久的に予約されており、対応するレジストリの管理方法は各 CCID Profile 文書で説明されます。
Each entry in the DCCP feature numbers registry contains a feature number, which is a number in the range 0-255; the name of the feature, such as "ECN Incapable"; and a reference to the RFC defining the feature number. The registry is initially populated using the values in Table 4 (Section 6). This document allocates feature numbers 0-9, and feature numbers 120-126 are permanently reserved for experimental and testing use. Feature numbers 10-119 and 127 are currently reserved and should be allocated with the IETF Consensus policy, requiring an IETF RFC publication (standards track or not) with IESG review and approval. Feature numbers 128-255 are permanently reserved for CCID-specific registries; each CCID Profile document describes how the corresponding registry is managed.
DCCP feature numbers レジストリの各エントリには、0 から 255 の範囲の数値である機能番号、"ECN Incapable" などの機能名、およびその機能番号を定義する RFC への参照が含まれます。レジストリは、最初は表 4 (セクション 6) の値で埋められます。この文書は機能番号 0 から 9 を割り当てており、機能番号 120 から 126 は実験およびテスト用に恒久的に予約されています。機能番号 10 から 119 および 127 は現在予約されており、IESG のレビューと承認を伴う (標準化過程であるかどうかを問わない) IETF RFC の発行を必要とする IETF Consensus ポリシーで割り当てられるべきです。機能番号 128 から 255 は CCID 固有のレジストリ用に恒久的に予約されており、対応するレジストリの管理方法は各 CCID Profile 文書で説明されます。
Each entry in the DCCP Congestion Control Identifiers (CCIDs) registry contains a CCID, which is a number in the range 0-255; the name of the CCID, such as "TCP-like Congestion Control"; and a reference to the RFC defining the CCID. The registry is initially populated using the values in Table 5 (Section 10). CCIDs 2 and 3 are allocated by concurrently published profiles, and CCIDs 248-254 are permanently reserved for experimental and testing use. CCIDs 0, 1, 4-247, and 255 are currently reserved and should be allocated with the IETF Consensus policy, requiring an IETF RFC publication (standards track or not) with IESG review and approval.
DCCP Congestion Control Identifiers (CCIDs) レジストリの各エントリには、0 から 255 の範囲の数値である CCID、"TCP-like Congestion Control" などの CCID の名前、およびその CCID を定義する RFC への参照が含まれます。レジストリは、最初は表 5 (セクション 10) の値で埋められます。CCID 2 と 3 は同時に発行されるプロファイルによって割り当てられ、CCID 248 から 254 は実験およびテスト用に恒久的に予約されています。CCID 0、1、4 から 247、および 255 は現在予約されており、IESG のレビューと承認を伴う (標準化過程であるかどうかを問わない) IETF RFC の発行を必要とする IETF Consensus ポリシーで割り当てられるべきです。
Each entry in the DCCP Ack Vector States registry contains an Ack Vector State, which is a number in the range 0-3; the name of the State, such as "Received ECN Marked"; and a reference to the RFC defining the State. The registry is initially populated using the values in Table 6 (Section 11.4). This document allocates States 0, 1, and 3. State 2 is currently reserved and should be allocated with the Standards Action policy, which requires IESG review and approval and standards-track IETF RFC publication.
DCCP Ack Vector States レジストリの各エントリには、0 から 3 の範囲の数値である Ack Vector State、"Received ECN Marked" などの State の名前、およびその State を定義する RFC への参照が含まれます。レジストリは、最初は表 6 (セクション 11.4) の値で埋められます。この文書は State 0、1、3 を割り当てています。State 2 は現在予約されており、IESG のレビューと承認、および標準化過程の IETF RFC の発行を必要とする Standards Action ポリシーで割り当てられるべきです。
Each entry in the DCCP Drop Codes registry contains a Data Dropped Drop Code, which is a number in the range 0-7; the name of the Drop Code, such as "Application Not Listening"; and a reference to the RFC defining the Drop Code. The registry is initially populated using the values in Table 7 (Section 11.7). This document allocates Drop Codes 0-3 and 7. Drop Codes 4-6 are currently reserved, and should be allocated with the Standards Action policy, which requires IESG review and approval and standards-track IETF RFC publication.
DCCPドロップコードレジストリの各エントリには、データドロップドロップコードが含まれています。これは、範囲0〜7の数字です。「リスニングしないアプリケーション」などのドロップコードの名前。ドロップコードを定義するRFCへの参照。レジストリは、最初に表7(セクション11.7)の値を使用して入力されます。このドキュメントは、ドロップコード0-3および7を割り当てます。ドロップコード4-6は現在予約されており、IESGのレビューと承認、および標準トラックIETF RFC出版物を必要とする標準アクションポリシーに割り当てる必要があります。
Each entry in the Service Codes registry contains a Service Code, which is a number in the range 0-4294967294; a short English description of the intended service; and an optional reference to an RFC or other publicly available specification defining the Service Code. The registry should list the Service Code's numeric value as a decimal number. When the Service Code may be represented in "SC:" format according to the rules in Section 8.1.2, the registry should also show the corresponding ASCII interpretation of the Service Code minus the "SC:" prefix. Thus, the number 1717858426 would additionally appear as "fdpz". Service Codes are not DCCP-specific. Service Code 0 is permanently reserved (it represents the absence of a meaningful Service Code), and Service Codes 1056964608-1073741823 (high byte ASCII "?") are reserved for Private Use. Note that 4294967295 is not a valid Service Code. Most of the remaining Service Codes are allocated First Come First Served, with no RFC publication required; exceptions are listed in Section 8.1.2. This document allocates a single Service Code, 1145656131 ("DISC"). This corresponds to the discard service, which discards all data sent to the service and sends no data in reply.
サービスコードレジストリの各エントリには、範囲0-4294967294の数字であるサービスコードが含まれています。意図したサービスの短い英語の説明。RFCまたはサービスコードを定義するその他の公開されている仕様へのオプションの参照。レジストリは、サービスコードの数値を10進数としてリストする必要があります。セクション8.1.2のルールに従って「sc:」形式でサービスコードを表すことができる場合、レジストリには、「sc: "prefixを差し引いたサービスコードの対応するASCII解釈も示す必要があります。したがって、番号1717858426はさらに「FDPZ」として表示されます。サービスコードはDCCP固有ではありません。サービスコード0は永続的に予約されています(意味のあるサービスコードの存在を表します)、サービスコード1056964608-1073741823(High byte ascii "?")は個人用に予約されています。4294967295は有効なサービスコードではないことに注意してください。残りのサービスコードのほとんどは、最初に提供される最初に提供されます。RFC出版物は必要ありません。例外はセクション8.1.2にリストされています。このドキュメントには、単一のサービスコード、1145656131( "disc")が割り当てられています。これは、廃棄サービスに対応し、サービスに送信されたすべてのデータを破棄し、返信にデータを送信しません。
DCCP services may use contact port numbers to provide service to unknown callers, as in TCP and UDP. IANA is therefore requested to open the existing Port Numbers registry for DCCP using the following rules, which we intend to mesh well with existing Port Numbers registration procedures.
DCCPサービスは、TCPやUDPのように、連絡先ポート番号を使用して未知の発信者にサービスを提供する場合があります。したがって、IANAは、次のルールを使用してDCCPの既存のポート番号レジストリを開くように要求されます。これは、既存のポート番号登録手順とうまくメッシュするつもりです。
Port numbers are divided into three ranges. The Well Known Ports are those from 0 through 1023, the Registered Ports are those from 1024 through 49151, and the Dynamic and/or Private Ports are those from 49152 through 65535. Well Known and Registered Ports are intended for use by server applications that desire a default contact point on a system. On most systems, Well Known Ports can only be used by system (or root) processes or by programs executed by privileged users, while Registered Ports can be used by ordinary user processes or programs executed by ordinary users. Dynamic and/or Private Ports are intended for temporary use, including client-side ports, out-of-band negotiated ports, and application testing prior to registration of a dedicated port; they MUST NOT be registered.
ポート番号は3つの範囲に分かれています。よく知られているポートは0〜1023のポート、登録済みポートは1024〜49151のポートであり、動的および/またはプライベートポートは49152〜65535です。システム上のデフォルトの連絡先。ほとんどのシステムでは、よく知られているポートは、システム(またはルート)プロセスまたは特権ユーザーが実行するプログラムによってのみ使用できますが、登録ポートは通常のユーザープロセスまたは通常のユーザーが実行するプログラムで使用できます。ダイナミックポートおよび/またはプライベートポートは、クライアント側のポート、バンド外交渉ポート、専用ポートの登録前のアプリケーションテストなど、一時的な使用を目的としています。登録してはなりません (MUST NOT)。
The Port Numbers registry should accept registrations for DCCP ports in the Well Known Ports and Registered Ports ranges. Well Known and Registered Ports SHOULD NOT be used without registration. Although in some cases -- such as porting an application from UDP to DCCP -- it may seem natural to use a DCCP port before registration completes, we emphasize that IANA will not guarantee registration of particular Well Known and Registered Ports. Registrations should be requested as early as possible.
ポート番号レジストリは、よく知られているポートおよび登録ポート範囲のDCCPポートの登録を受け入れる必要があります。よく知られているポートと登録済みのポートは、登録なしでは使用すべきではありません (SHOULD NOT)。場合によっては、UDPからDCCPへのアプリケーションを移植するなど、登録が完了する前にDCCPポートを使用するのは自然に思えるかもしれませんが、IANAは特定の既知の登録ポートの登録を保証しないことを強調します。登録はできるだけ早く要求する必要があります。
Each port registration SHALL include the following information:
各ポート登録には、以下の情報が含まれなければなりません (SHALL):
o A short port name, consisting entirely of letters (A-Z and a-z), digits (0-9), and punctuation characters from "-_+./*" (not including the quotes).
o 完全に文字(a-zおよびa-z)、数字(0-9)、および「-_ ./*」(引用符は含まれない)の句読文字で構成される短いポート名。
o The port number that is requested to be registered.
o 登録するように要求されるポート番号。
o A short English phrase describing the port's purpose. This MUST include one or more space-separated textual Service Code descriptors naming the port's corresponding Service Codes (see Section 8.1.2).
o ポートの目的を説明する短い英語のフレーズ。これには、ポートに対応するサービスコードを示す、スペースで区切られた1つ以上のテキストのサービスコード記述子を含めなければなりません (MUST)(セクション8.1.2を参照)。
o Name and contact information for the person or entity performing the registration, and possibly a reference to a document defining the port's use. Registrations coming from IETF working groups need only name the working group, but indicating a contact person is recommended.
o 登録を実行する個人またはエンティティの名前と連絡先情報、および場合によってはポートの使用を定義するドキュメントへの参照。IETFワーキンググループからの登録は、ワーキンググループに名前のみに名前を付ける必要がありますが、連絡先を示すことをお勧めします。
Registrants are encouraged to follow these guidelines when submitting a registration.
登録者は、登録を提出する際にこれらのガイドラインに従うことをお勧めします。
o A port name SHOULD NOT be registered for more than one DCCP port number.
o ポート名を複数のDCCPポート番号に登録すべきではありません (SHOULD NOT)。
o A port name registered for UDP MAY be registered for DCCP as well. Any such registration SHOULD use the same port number as the existing UDP registration.
o UDPに登録されているポート名もDCCPに登録できます (MAY)。そのような登録は、既存のUDP登録と同じポート番号を使用すべきです (SHOULD)。
o Concrete intent to use a port SHOULD precede port registration. For example, existing UDP ports SHOULD NOT be registered in advance of any intent to use those ports for DCCP.
o ポートを使用する具体的な意図が、ポート登録に先行すべきです (SHOULD)。たとえば、既存のUDPポートを、それらのポートをDCCPに使用する意図がないうちに事前に登録すべきではありません (SHOULD NOT)。
o A port name generally associated with TCP and/or SCTP SHOULD NOT be registered for DCCP, since that port name implies reliable transport. For example, we discourage registration of any "http" port for DCCP. However, if such a registration makes sense (that is, if there is concrete intent to use such a port), the DCCP registration SHOULD use the same port number as the existing registration.
o 一般的にTCPおよび/またはSCTPに関連付けられているポート名は、そのポート名が信頼できる輸送を意味するため、DCCPに登録すべきではありません (SHOULD NOT)。たとえば、DCCPの「HTTP」ポートの登録を思いとどまらせます。ただし、そのような登録が理にかなっている場合(つまり、そのようなポートを使用する具体的な意図がある場合)、DCCP登録は既存の登録と同じポート番号を使用すべきです (SHOULD)。
o Multiple DCCP registrations for the same port number are allowed as long as the registrations' Service Codes do not overlap.
o 登録のサービスコードが重複しない限り、同じポート番号の複数のDCCP登録が許可されます。
This document registers the following port. (This should be considered a model registration.)
このドキュメントは、次のポートを登録します。(これはモデル登録と見なされるべきです。)
discard 9/dccp Discard SC:DISC # IETF dccp WG, Eddie Kohler <kohler@cs.ucla.edu>, [RFC4340]
The discard service, which accepts DCCP connections on port 9, discards all incoming application data and sends no data in response. Thus, DCCP's discard port is analogous to TCP's discard port, and might be used to check the health of a DCCP stack.
ポート9のDCCP接続を受け入れる廃棄サービスは、すべての着信アプリケーションデータを破棄し、応答してデータを送信しません。したがって、DCCPの廃棄ポートはTCPの廃棄ポートに類似しており、DCCPスタックの健康を確認するために使用される場合があります。
Thanks to Jitendra Padhye for his help with early versions of this specification.
この仕様の初期バージョンの助けを借りてくれたJitendra Padhyeに感謝します。
Thanks to Junwen Lai and Arun Venkataramani, who, as interns at ICIR, built a prototype DCCP implementation. In particular, Junwen Lai recommended that the old feature negotiation mechanism be scrapped and co-designed the current mechanism. Arun Venkataramani's feedback improved Appendix A.
Junwen LaiとArun Venkataramaniのおかげで、ICIRのインターンとしてプロトタイプDCCP実装を作成しました。特に、Junwen Laiは、古い特徴交渉メカニズムを廃棄し、現在のメカニズムを共同設計することを推奨しました。Arun Venkataramaniのフィードバックは、付録Aを改善しました。
We thank the staff and interns of ICIR and, formerly, ACIRI, the members of the End-to-End Research Group, and the members of the Transport Area Working Group for their feedback on DCCP. We especially thank the DCCP expert reviewers Greg Minshall, Eric Rescorla, and Magnus Westerlund for detailed written comments and problem spotting, and Rob Austein and Steve Bellovin for verbal comments and written notes. We also especially thank Aaron Falk, the working group chair during the development of this specification.
ICIRのスタッフとインターン、以前はAciri、エンドツーエンドの研究グループのメンバー、およびDCCPに関するフィードバックについて輸送エリアワーキンググループのメンバーに感謝します。特に、DCCPの専門家レビュアーであるグレッグミンシャル、エリックレスルラ、マグナスウェスターランドの詳細なコメントと問題の発見をしてくれたこと、そして言葉によるコメントと書面によるメモについては、ロブオーストインとスティーブベロビンに感謝します。また、この仕様の開発中のワーキンググループチェアであるアーロンフォークに特に感謝します。
We also thank those who provided comments and suggestions via the DCCP BOF, Working Group, and mailing lists, including Damon Lanphear, Patrick McManus, Colin Perkins, Sara Karlberg, Kevin Lai, Bernard Aboba, Youngsoo Choi, Pengfei Di, Dan Duchamp, Lars Eggert, Gorry Fairhurst, Derek Fawcus, David Timothy Fleeman, John Loughney, Ghyslain Pelletier, Hagen Paul Pfeifer, Tom Phelan, Stanislav Shalunov, Somsak Vanit-Anunchai, David Vos, Yufei Wang, and Michael Welzl. In particular, Colin Perkins provided extensive, detailed feedback, Michael Welzl suggested the Data Checksum option, Gorry Fairhurst provided extensive feedback on various checksum issues, and Somsak Vanit-Anunchai, Jonathan Billington, and Tul Kongprakaiwoot's Colored Petri Net model [VBK05] discovered several problems with message exchange.
また、DCCP BOF、ワーキンググループ、およびデイモンランフィア、パトリックマクマナス、コリンパーキンス、サラカールバーグ、ケビンライ、バーナードアボバ、ヤングソーチョイ、ペンフェイディ、ダンデュシャン、ダンデュチャンプ、ラースなど、コメントや提案を提供してくれた人々に感謝します。エガート、ゴリー・フェアハースト、デレク・フォーカス、デビッド・ティモシー・フリーマン、ジョン・ラウニー、ギスレイン・ペレティエ、ハーゲン・ポール・ファイファー、トム・フェラン、スタニスラフ・シャルノフ、ソムサック・アヌンチャイ、デビッド・ヴォス、ユフェイ・ワン、マイケル・ウェルズル。特に、Colin Perkinsは広範な詳細なフィードバックを提供し、Michael Welzlはデータチェックサムオプションを提案し、Gorry Fairhurstはさまざまなチェックサムの問題について広範なフィードバックを提供し、Somsak Vanit-Anunchai、Jonathan Billington、Tul Kongprakaiootの色付きのPetri Net Model [VBK05]はいくつかの発見を発見しました。メッセージ交換の問題。
This appendix discusses particulars of DCCP acknowledgement handling in the context of an abstract implementation for Ack Vector. It is informative and not normative.
この付録では、ACKベクターの抽象的な実装のコンテキストでのDCCP確認処理の詳細について説明します。それは有益であり、規範的ではありません。
The first part of our implementation runs at the HC-Receiver, and therefore acknowledges data packets. It generates Ack Vector options. The implementation has the following characteristics:
実装の最初の部分はHC-Receiverで実行されるため、データパケットを確認します。ACKベクターオプションを生成します。実装には次の特性があります。
o At most one byte of state per acknowledged packet.
o 認められたパケットごとに、せいぜい1バイトの状態。
o O(1) time to update that state when a new packet arrives (normal case).
o o(1)新しいパケットが到着したときにその状態を更新する時間(通常のケース)。
o Cumulative acknowledgements.
o 累積的な謝辞。
o Quick removal of old state.
o 古い州の迅速な除去。
The basic data structure is a circular buffer containing information about acknowledged packets. Each byte in this buffer contains a state and run length; the state can be 0 (packet received), 1 (packet ECN marked), or 3 (packet not yet received). The buffer grows from right to left. The implementation maintains five variables, aside from the buffer contents:
基本的なデータ構造は、確認されたパケットに関する情報を含む円形のバッファーです。このバッファーの各バイトには、状態と実行の長さが含まれています。状態は0(パケット受信)、1(パケットECNマーク付き)、または3(まだ受信していないパケット)です。バッファーは右から左に成長します。実装は、バッファーの内容を除いて、5つの変数を維持します。
o "buf_head" and "buf_tail", which mark the live portion of the buffer.
o 「buf_head」および「buf_tail」。バッファのライブ部分をマークします。
o "buf_ackno", the Acknowledgement Number of the most recent packet acknowledged in the buffer. This corresponds to the "head" pointer.
o 「buf_ackno」、バッファで確認された最新のパケットの承認番号。これは、「ヘッド」ポインターに対応します。
o "buf_nonce", the one-bit sum (exclusive-or, or parity) of the ECN Nonces received on all packets acknowledged by the buffer with State 0.
o 「buf_nonce」、状態0のバッファーによって認められたすべてのパケットで受信されたECNノンセの1ビット合計(排他的またはパリティ)。
We draw acknowledgement buffers like this:
このような確認バッファーを描きます。
+---------------------------------------------------------------+
|S,L|S,L|S,L|S,L| | | | |S,L|S,L|S,L|S,L|S,L|S,L|S,L|S,L|
+---------------------------------------------------------------+
^ ^
buf_tail buf_head, buf_ackno = A buf_nonce = E
<=== buf_head and buf_tail move this way <===
Each "S,L" represents a State/Run length byte. We will draw these buffers showing only their live portion and will add an annotation showing the Acknowledgement Number for the last live byte in the buffer. For example:
各「s、l」は、状態/実行の長さバイトを表します。これらのバッファーを描画し、ライブ部分のみを示し、バッファ内の最後のライブバイトの確認番号を示す注釈を追加します。例えば:
+-----------------------------------------------+
A |S,L|S,L|S,L|S,L|S,L|S,L|S,L|S,L|S,L|S,L|S,L|S,L| T BN[E]
+-----------------------------------------------+
Here, buf_nonce equals E and buf_ackno equals A.
ここで、buf_nonceはeに等しく、buf_acknoはAに等しくなります
We will use this buffer as a running example.
このバッファーを実行する例として使用します。
+---------------------------+
10 |0,0|3,0|3,0|3,0|0,4|1,0|0,0| 0 BN[1] [Example Buffer]
+---------------------------+
In concrete terms, its meaning is as follows:
具体的には、その意味は次のとおりです。
Packet 10 was received. (The head of the buffer has sequence number 10, state 0, and run length 0.)
パケット10が受信されました。(バッファーのヘッドには、シーケンス番号10、状態0、および実行されます。
Packets 9, 8, and 7 have not yet been received. (The three bytes preceding the head each have state 3 and run length 0.)
パケット9、8、および7はまだ受信されていません。(ヘッドの前の3バイトのそれぞれが状態3と実行の長さ0です。)
Packets 6, 5, 4, 3, and 2 were received.
パケット6、5、4、3、および2が受信されました。
Packet 1 was ECN marked.
パケット1はECNマークされていました。
Packet 0 was received.
パケット0が受信されました。
The one-bit sum of the ECN Nonces on packets 10, 6, 5, 4, 3, 2, and 0 equals 1.
パケット上のECN Noncesの1ビット合計10、6、5、4、3、2、および0は1に等しくなります。
Additionally, the HC-Receiver must keep some information about the Ack Vectors it has recently sent. For each packet sent carrying an Ack Vector, it remembers four variables:
さらに、HC-Receiverは、最近送信したACKベクターに関する情報を保持する必要があります。ACKベクターを運ぶ送信されたパケットごとに、4つの変数を覚えています。
o "ack_seqno", the Sequence Number used for the packet. This is an HC-Receiver sequence number.
o 「ack_seqno」、パケットに使用されるシーケンス番号。これはHC-Receiverシーケンス番号です。
o "ack_ptr", the value of buf_head at the time of acknowledgement.
o 「ack_ptr」、承認時のbuf_headの価値。
o "ack_runlen", the run length stored in the byte of buffer data at buf_head at the time of acknowledgement.
o 「ack_runlen」、確認時にbuf_headのバッファデータのバイトに保存されている実行長。
o "ack_ackno", the Acknowledgement Number used for the packet. This is an HC-Sender sequence number. Since acknowledgements are cumulative, this single number completely specifies all necessary information about the packets acknowledged by this Ack Vector.
o 「ack_ackno」、パケットに使用される承認番号。これはHCセンダーシーケンス番号です。謝辞は累積的であるため、この単一の数値は、このACKベクターによって認められたパケットに関するすべての必要な情報を完全に指定します。
o "ack_nonce", the one-bit sum of the ECN Nonces for all State 0 packets in the buffer from buf_head to ack_ackno, inclusive. Initially, this equals the Nonce Echo of the acknowledgement's Ack Vector (or, if the ack packet contained more than one Ack Vector, the exclusive-or of all the acknowledgement's Ack Vectors). It changes as information about old acknowledgements is removed (so ack_ptr and buf_head diverge) and as old packets arrive (so they change from State 3 or State 1 to State 0).
o 「ack_nonce」、buf_headからack_acknoまでのバッファ内のすべての状態0パケットのECN NONCESの1ビット合計。当初、これはAncoundgementのACKベクトルのNonCeエコーに等しくなります(または、ACKパケットに複数のACKベクトルが含まれている場合、すべての謝辞のACKベクターの排他的または排他的なものです)。古い謝辞に関する情報が削除され(ack_ptrとbuf_headが分岐する)、古いパケットが到着すると(状態3または状態1から状態0に変更されると変わります。
This section describes how the HC-Receiver updates its acknowledgement buffer as packets arrive from the HC-Sender.
このセクションでは、HC-ReceiverがパケットがHCセンダーから到着したときに確認バッファーを更新する方法について説明します。
When a packet with Sequence Number greater than buf_ackno arrives, the HC-Receiver updates buf_head (by moving it to the left appropriately), buf_ackno (which is set to the new packet's Sequence Number), and possibly buf_nonce (if the packet arrived unmarked with ECN Nonce 1), in addition to the buffer itself. For example, if HC-Sender packet 11 arrived ECN marked, the Example Buffer above would enter this new state (changes are marked with stars):
buf_acknoより大きいシーケンス番号を持つパケットが到着すると、HC-Receiverはbuf_head(左に適切に移動することで)、buf_ackno(新しいパケットのシーケンス番号に設定されています)、およびbuf_nonce(パケットがマークなしで到着した場合に到着した場合、buf_acknoを更新するとecn nonce 1)、バッファ自体に加えて。たとえば、HC-SENDER PACKET 11がMARKEDに到着した場合、上記のバッファーの例はこの新しい状態に入ります(変更は星でマークされます)。
** +***----------------------------+
11 |1,0|0,0|3,0|3,0|3,0|0,4|1,0|0,0| 0 BN[1]
** +***----------------------------+
If the packet's state equals the state at the head of the buffer, the HC-Receiver may choose to increment its run length (up to the maximum). For example, if HC-Sender packet 11 arrived without ECN marking and with ECN Nonce 0, the Example Buffer might enter this state instead:
パケットの状態がバッファーの頭の状態に等しい場合、HC-Receiverは実行長(最大まで)を増加させることを選択できます。たとえば、HC-SENDERパケット11がECNマーキングなしで到着し、ECN NONCE 0で到着した場合、バッファの例は代わりにこの状態に入る可能性があります。
** +--*------------------------+
11 |0,1|3,0|3,0|3,0|0,4|1,0|0,0| 0 BN[1]
** +--*------------------------+
Of course, the new packet's sequence number might not equal the expected sequence number. In this case, the HC-Receiver will enter the intervening packets as State 3. If several packets are missing, the HC-Receiver may prefer to enter multiple bytes with run length 0, rather than a single byte with a larger run length; this simplifies table updates if one of the missing packets arrives. For example, if HC-Sender packet 12 arrived with ECN Nonce 1, the Example Buffer would enter this state:
もちろん、新しいパケットのシーケンス番号は、予想されるシーケンス番号に等しくない場合があります。この場合、HC-Receiverは介在するパケットを状態3として入力します。いくつかのパケットが欠落している場合、HC-Receiverは、実行された長さが大きい単一バイトではなく、実行された長さ0の複数バイトを入力することを好む場合があります。これにより、欠落しているパケットの1つが到着した場合、テーブルの更新が簡素化されます。たとえば、HC-SENDER PACKET 12がECN NONCE 1に到着した場合、バッファの例はこの状態に入ります。
** +*******----------------------------+ *
12 |0,0|3,0|0,1|3,0|3,0|3,0|0,4|1,0|0,0| 0 BN[0]
** +*******----------------------------+ *
Of course, the circular buffer may overflow when the HC-Sender is sending data at a very high rate, when the HC-Receiver's acknowledgements are not reaching the HC-Sender, or when the HC-Sender is forgetting to acknowledge those acks (so the HC-Receiver is unable to clean up old state). In this case, the HC-Receiver should either compress the buffer (by increasing run lengths when possible), transfer its state to a larger buffer, or, as a last resort, drop all received packets, without processing them at all, until its buffer shrinks again.
もちろん、HCセンダーが非常に高いレートでデータを送信している場合、HC-Receiverの謝辞がHCセンダーに到達していない場合、またはHCセンダーがそれらのACKを認めることを忘れている場合、円形バッファーはオーバーフローする場合があります(だからHC-Receiverは古い状態を掃除することができません)。この場合、HC-Receiverはバッファーを圧縮し(可能な場合は実行の長さを増やすことで)、その状態をより大きなバッファーに転送するか、最後の手段として、受け取ったパケットをすべて処理せずに、そのすべてを処理せずにドロップする必要があります。バッファは再び収縮します。
When a packet with Sequence Number S <= buf_ackno arrives, the HC-Receiver will scan the table for the byte corresponding to S. (Indexing structures could reduce the complexity of this scan.) If S was previously lost (State 3), and it was stored in a byte with run length 0, the HC-Receiver can simply change the byte's state. For example, if HC-Sender packet 8 was received with ECN Nonce 0, the Example Buffer would enter this state:
シーケンス番号s <= buf_acknoが到着するパケットが到着すると、HC-ReceiverはSに対応するバイトのテーブルをスキャンします(インデックス構造はこのスキャンの複雑さを減らすことができます。)Sが以前に失われた場合(状態3)、実行された長さ0のバイトに保存されていたため、HC-Receiverはバイトの状態を単純に変更できます。たとえば、HC-SENDERパケット8をECN NonCe 0で受信した場合、バッファの例は次の状態に入ります。
+--------*------------------+
10 |0,0|3,0|0,0|3,0|0,4|1,0|0,0| 0 BN[1]
+--------*------------------+
If S was not marked as lost, or if it was not contained in the table, the packet is probably a duplicate and should be ignored. (The new packet's ECN marking state might differ from the state in the buffer; Section 11.4.1 describes what is allowed then.) If S's buffer byte has a non-zero run length, then the buffer might need to be reshuffled to make space for one or two new bytes.
Sが失われたとマークされていない場合、またはテーブルに含まれていない場合、パケットはおそらく複製であり、無視する必要があります。(新しいパケットのECNマーキング状態は、バッファーの状態とは異なる場合があります。セクション11.4.1で許可されたものについて説明します。)Sのバッファーバイトにゼロの実行長がない場合、バッファーを再シャッフルしてスペースを作成する必要がある場合があります。1つまたは2つの新しいバイトの場合。
The ack_nonce fields may also need manipulation when old packets arrive. In particular, when S transitions from State 3 or State 1 to State 0, and S had ECN Nonce 1, then the implementation should flip the value of ack_nonce for every acknowledgement with ack_ackno >= S.
ack_nonceフィールドは、古いパケットが到着したときに操作が必要になる場合があります。特に、Sが状態3または状態1から状態0に遷移し、SがECN NonCE 1に遷移する場合、実装はack_ackno> = Sを使用したすべての確認のack_nonceの値をフリップする必要があります。
It is impossible with this data structure to shift packets from State 0 to State 1, since the buffer doesn't store individual packets' ECN Nonces.
このデータ構造では、バッファが個々のパケットのECN Noncesを保存しないため、パケットを状態0から状態1にシフトすることは不可能です。
Whenever the HC-Receiver needs to generate an acknowledgement, the buffer's contents can simply be copied into one or more Ack Vector options. Copied Ack Vectors might not be maximally compressed; for example, the Example Buffer above contains three adjacent 3,0 bytes that could be combined into a single 3,2 byte. The HC-Receiver might, therefore, choose to compress the buffer in place before sending the option, or to compress the buffer while copying it; either operation is simple.
HC-Receiverが確認を生成する必要があるときはいつでも、バッファーの内容を1つ以上のACKベクトルオプションにコピーするだけです。コピーされたACKベクターが最大限に圧縮されない可能性があります。たとえば、上記の例には、単一の3,2バイトに結合できる3つの隣接する3,0バイトが含まれています。したがって、HC-Receiverは、オプションを送信する前にバッファーを所定の位置に圧縮するか、コピー中にバッファーを圧縮することを選択する場合があります。どちらの操作も簡単です。
Every acknowledgement sent by the HC-Receiver SHOULD include the entire state of the buffer. That is, acknowledgements are cumulative.
HC-Receiverが送信したすべての承認は、バッファーの完全な状態を含めるべきです (SHOULD)。つまり、謝辞は累積的です。
If the acknowledgement fits in one Ack Vector, that Ack Vector's Nonce Echo simply equals buf_nonce. For multiple Ack Vectors, more care is required. The Ack Vectors should be split at points corresponding to previous acknowledgements, since the stored ack_nonce fields provide enough information to calculate correct Nonce Echoes. The implementation should therefore acknowledge data at least once per 253 bytes of buffer state. (Otherwise, there'd be no way to calculate a Nonce Echo.)
確認が1つのACKベクターに適合する場合、ACKベクターの非CEエコーはbuf_nonceに等しくなります。複数のACKベクターの場合、より多くの注意が必要です。ACKベクターは、保存されているack_nonceフィールドが正しいノンセエコーを計算するのに十分な情報を提供するため、以前の確認に対応するポイントで分割する必要があります。したがって、実装は、バッファー状態の253バイトに従って少なくとも1回データを確認する必要があります。(それ以外の場合、非CEエコーを計算する方法はありません。)
For each acknowledgement it sends, the HC-Receiver will add an acknowledgement record. ack_seqno will equal the HC-Receiver sequence number it used for the ack packet; ack_ptr will equal buf_head; ack_runlen will equal the run length stored in the buffer's buf_head byte; ack_ackno will equal buf_ackno; and ack_nonce will equal buf_nonce.
送信する各謝辞について、HC-Receiverは確認レコードを追加します。ack_seqnoは、ACKパケットに使用したHC-Receiverシーケンス番号に等しくなります。ack_ptrはbuf_headに等しくなります。ack_runlenは、バッファーのbuf_headバイトに保存されている実行長に等しくなります。ack_acknoはbuf_acknoに等しくなります。ack_nonceはbuf_nonceに等しくなります。
Some of the HC-Sender's packets will include acknowledgement numbers, which ack the HC-Receiver's acknowledgements. When such an ack is received, the HC-Receiver finds the acknowledgement record R with the appropriate ack_seqno and then does the following:
HC-SENDERのパケットには、HC-Receiverの謝辞をACKする承認番号が含まれます。そのようなACKを受信すると、HC-Receiverは、適切なack_seqnoを使用して確認レコードrを見つけ、次のことを行います。
o If the run length in the buffer's R.ack_ptr byte is greater than R.ack_runlen, then it decrements that run length by R.ack_runlen + 1 and sets buf_tail to R.ack_ptr. Otherwise, it sets buf_tail to R.ack_ptr + 1.
o バッファーのR.ack_ptrバイトの実行長がR.ack_runlenよりも大きい場合、R.ack_runlen 1によって実行された長さを減らし、buf_tailをR.ack_ptrに設定します。それ以外の場合、buf_tailをR.ack_ptr 1に設定します。
o If R.ack_nonce is 1, it flips buf_nonce, and the value of ack_nonce for every later ack record.
o R.ack_nonceが1の場合、buf_nonceをフリップし、後のACKレコードごとにack_nonceの値をフリップします。
o It throws away R and every preceding ack record.
o それはRとすべての先行するACKレコードを捨てます。
(The HC-Receiver may choose to keep some older information, in case a lost packet shows up late.) For example, say that the HC-Receiver storing the Example Buffer had sent two acknowledgements already:
(HC-Receiverは、紛失したパケットが遅れて表示された場合に備えて、いくつかの古い情報を保持することを選択できます。)たとえば、HC-Receiverを保存するHC-Receiverは、すでに2つの謝辞を送信していたと言います。
1. ack_seqno = 59, ack_runlen = 1, ack_ackno = 3, ack_nonce = 1.
1. ack_seqno = 59、ack_runlen = 1、ack_ackno = 3、ack_nonce = 1。
2. ack_seqno = 60, ack_runlen = 0, ack_ackno = 10, ack_nonce = 0.
2. ack_seqno = 60、ack_runlen = 0、ack_ackno = 10、ack_nonce = 0。
Say the HC-Receiver then received a DCCP-DataAck packet with Acknowledgement Number 59 from the HC-Sender. This informs the HC-Receiver that the HC-Sender received, and processed, all the information in HC-Receiver packet 59. This packet acknowledged HC-Sender packet 3, so the HC-Sender has now received HC-Receiver's acknowledgements for packets 0, 1, 2, and 3. The Example Buffer should enter this state:
HC-Receiverが、HC-Senderの謝辞番号59を備えたDCCP-DataAckパケットを受け取ったとします。これにより、HC-senderがHC-Receiverパケット59のすべての情報を受け取って処理したHC-Receiverに通知します。、1、2、および3。例のバッファーは、この状態を入力する必要があります。
+------------------*+ * *
10 |0,0|3,0|3,0|3,0|0,2| 4 BN[0]
+------------------*+ * *
The tail byte's run length was adjusted, since packet 3 was in the middle of that byte. Since R.ack_nonce was 1, the buf_nonce field was flipped, as were the ack_nonce fields for later acknowledgements (here, the HC-Receiver Ack 60 record, not shown, has its ack_nonce flipped to 1). The HC-Receiver can also throw away stored information about HC-Receiver Ack 59 and any earlier acknowledgements.
パケット3がそのバイトの中央にあるため、テールバイトの実行長が調整されました。R.ack_nonceは1だったため、buf_nonceフィールドが反転し、後の謝辞のack_nonceフィールドも同様でした(ここでは、HC-Receiver ACK 60レコードは、ack_nonceが1に反転しました)。HC-Receiverは、HC-Receiver ACK 59および以前の謝辞に関する保存された情報を捨てることもできます。
A careful implementation might try to ensure reasonable robustness to reordering. Suppose that the Example Buffer is as before, but that packet 9 now arrives, out of sequence. The buffer would enter this state:
慎重な実装は、並べ替えの合理的な堅牢性を確保しようとするかもしれません。例のバッファーは以前と同じであるが、そのパケット9が順番に到着すると仮定します。バッファはこの状態に入ります:
+----*----------------------+
10 |0,0|0,0|3,0|3,0|0,4|1,0|0,0| 0 BN[1]
+----*----------------------+
The danger is that the HC-Sender might acknowledge the HC-Receiver's previous acknowledgement (with sequence number 60), which says that Packet 9 was not received, before the HC-Receiver has a chance to send a new acknowledgement saying that Packet 9 actually was received. Therefore, when packet 9 arrived, the HC-Receiver might modify its acknowledgement record as follows: 1. ack_seqno = 59, ack_ackno = 3, ack_nonce = 1.
危険なのは、HC-SenderがHC-Receiver 9が受信されなかったと言っているHC-Receiverの以前の承認(シーケンス番号60)を認める可能性があることです。受け取られました。したがって、Packet 9が到着すると、HC-Receiverは次のように確認記録を変更する可能性があります。1。ACK_SEQNO = 59、ACK_ACKNO = 3、ACK_NONCE = 1。
2. ack_seqno = 60, ack_ackno = 3, ack_nonce = 1.
2. ack_seqno = 60、ack_ackno = 3、ack_nonce = 1。
That is, Ack 60 is now treated like a duplicate of Ack 59. This would prevent the Tail pointer from moving past packet 9 until the HC-Receiver knows that the HC-Sender has seen an Ack Vector indicating that packet's arrival.
つまり、ACK 60はACK 59の複製のように扱われています。これにより、HC-SENDERがHCセンダーがパケットの到着を示すACKベクターを見たことをHC-Receiverが知るまで、テールポインターがパケット9を過ぎて移動するのを防ぎます。
When the HC-Sender receives an acknowledgement, it generally cares about the number of packets that were dropped and/or ECN marked. It simply reads this off the Ack Vector. Additionally, it should check the ECN Nonce for correctness. (As described in Section 11.4.1, it may want to keep more detailed information about acknowledged packets in case packets change states between acknowledgements, or in case the application queries whether a packet arrived.)
HC-SENDERが謝辞を受け取ると、一般に、ドロップされたパケットおよび/またはマークが付けられたパケットの数を気にします。これをACKベクターから単に読み取ります。さらに、ECN Nonceの正確性を確認する必要があります。(セクション11.4.1で説明されているように、パケットが謝辞の間に状態を変更した場合、またはアプリケーションがパケットが到着したかどうかを照会した場合に、確認されたパケットに関するより詳細な情報を保持したい場合があります。)
The HC-Sender must also acknowledge the HC-Receiver's acknowledgements so that the HC-Receiver can free old Ack Vector state. (Since Ack Vector acknowledgements are reliable, the HC-Receiver must maintain and resend Ack Vector information until it is sure that the HC-Sender has received that information.) A simple algorithm suffices: since Ack Vector acknowledgements are cumulative, a single acknowledgement number tells HC-Receiver how much ack information has arrived. Assuming that the HC-Receiver sends no data, the HC-Sender can ensure that at least once a round-trip time, it sends a DCCP-DataAck packet acknowledging the latest DCCP-Ack packet it has received. Of course, the HC-Sender only needs to acknowledge the HC-Receiver's acknowledgements if the HC-Sender is also sending data. If the HC-Sender is not sending data, then the HC-Receiver's Ack Vector state is stable, and there is no need to shrink it. The HC-Sender must watch for drops and ECN marks on received DCCP-Ack packets so that it can adjust the HC-Receiver's ack-sending rate in response to congestion, for example, with Ack Ratio.
HC-Senderは、HC-Receiverが古いACKベクター状態を解放できるように、HC-Receiverの謝辞も認めなければなりません。(ACKベクトルの確認は信頼できるため、HC-Receiverは、HC-SENDEがその情報を受け取ることが確実になるまでACKベクター情報を維持および再送信する必要があります。)単純なアルゴリズムで十分です。HC-Receiverに、ACK情報の到着量を伝えます。HC-Receiverがデータを送信しないと仮定すると、HC-SENDERは、少なくとも往復時間に1回は、受信した最新のDCCP-CACKパケットを確認するDCCP-DataAckパケットを送信できます。もちろん、HC-SenderがHC-Senderもデータを送信している場合、HC-SenderはHC-Receiverの謝辞を認めるだけです。HC-SENDEがデータを送信していない場合、HC-ReceiverのACKベクター状態は安定しており、縮小する必要はありません。HC-SENDEは、受信したDCCP-CACKパケットのドロップとECNマークを監視する必要があり、HC-ReceiverのACK対応レートを、たとえばACK比で輻輳に応じて調整できるようにする必要があります。
If the other half-connection is not quiescent -- that is, the HC-Receiver is sending data to the HC-Sender, possibly using another CCID -- then the acknowledgements on that half-connection are sufficient for the HC-Receiver to free its state.
他のハーフ接続が静止していない場合 - つまり、HC-ReceiverがHC-SENDERにデータを送信し、おそらく別のCCIDを使用している場合、その半接続の謝辞はHC-Receiverが無料で十分ですその状態。
A great deal of discussion has taken place regarding the utility of allowing a DCCP sender to restrict the checksum so that it does not cover the complete packet. This section attempts to capture some of the rationale behind specific details of DCCP design.
完全なパケットをカバーしないように、DCCP送信者がチェックサムを制限できるようにすることの有用性に関して、多くの議論が行われました。このセクションでは、DCCP設計の特定の詳細の背後にある理論的根拠の一部をキャプチャしようとします。
Many of the applications that we envisage using DCCP are resilient to some degree of data loss, or they would typically have chosen a reliable transport. Some of these applications may also be resilient to data corruption -- some audio payloads, for example. These resilient applications might rather receive corrupted data than have DCCP drop corrupted packets. This is particularly because of congestion control: DCCP cannot tell the difference between packets dropped due to corruption and packets dropped due to congestion, and so it must reduce the transmission rate accordingly. This response may cause the connection to receive less bandwidth than it is due; corruption in some networking technologies is independent of, or at least not always correlated to, congestion. Therefore, corrupted packets do not need to cause as strong a reduction in transmission rate as the congestion response would dictate (as long as the DCCP header and options are not corrupt).
DCCPを使用して想定しているアプリケーションの多くは、ある程度のデータ損失に対して回復力があります。または、通常、信頼できる輸送を選択しています。これらのアプリケーションの一部は、データの破損に対しても回復力がある場合があります。たとえば、一部のオーディオペイロードなどです。これらの回復力のあるアプリケーションは、DCCPが破損したパケットをドロップするよりも、破損したデータを受信する場合があります。これは特に輻輳制御が原因です。DCCPは、破損のために落下したパケットと輻輳のために落下するパケットの違いを知らせることができないため、それに応じて送信速度を下げる必要があります。この応答により、接続が予定よりも少ない帯域幅を受け取る可能性があります。一部のネットワーキングテクノロジーの腐敗は、輻輳とは独立しているか、少なくとも常に相関しているわけではありません。したがって、破損したパケットは、輻輳応答が指示するほど強力な伝送速度を引き起こす必要はありません(DCCPヘッダーとオプションが破損していない限り)。
Thus DCCP allows the checksum to cover all of the packet, just the DCCP header, or both the DCCP header and some number of bytes from the application data. If the application cannot tolerate any data corruption, then the checksum must cover the whole packet. If the application would prefer to tolerate some corruption rather than have the packet dropped, then it can set the checksum to cover only part of the packet (but always the DCCP header). In addition, if the application wishes to decouple checksumming of the DCCP header from checksumming of the application data, it may do so by including the Data Checksum option. This would allow DCCP to discard corrupted application data without mistaking the corruption for network congestion.
したがって、DCCPでは、チェックサムがすべてのパケット、DCCPヘッダー、またはDCCPヘッダーの両方、およびアプリケーションデータからの数バイトの両方をカバーできます。アプリケーションがデータの腐敗に耐えられない場合、チェックサムはパケット全体をカバーする必要があります。アプリケーションがパケットを削除するのではなく、一部の破損に耐えることを好む場合、パケットの一部のみをカバーするようにチェックサムを設定できます(ただし、常にDCCPヘッダー)。さらに、アプリケーションがアプリケーションデータのチェックサムからDCCPヘッダーのチェックサムを切り離すことを希望する場合、データチェックサムオプションを含めることでそうすることができます。これにより、DCCPは、ネットワークの輻輳と腐敗を誤って誤って腐敗したアプリケーションデータを破棄することができます。
Thus, from the application point of view, partial checksums seem to be a desirable feature. However, the usefulness of partial checksums depends on partially corrupted packets being delivered to the receiver. If the link-layer CRC always discards corrupted packets, then this will not happen, and so the usefulness of partial checksums would be restricted to corruption that occurred in routers and other places not covered by link CRCs. There does not appear to be consensus on how likely it is that future network links that suffer significant corruption will not cover the entire packet with a single strong CRC. DCCP makes it possible to tailor such links to the application, but it is difficult to predict if this will be compelling for future link technologies.
したがって、アプリケーションの観点から、部分的なチェックサムは望ましい機能のようです。ただし、部分的なチェックサムの有用性は、受信機に配信される部分的に破損したパケットに依存します。リンク層CRCが常に破損したパケットを破棄する場合、これは発生しません。したがって、部分的なチェックサムの有用性は、リンクCRCでカバーされていないルーターや他の場所で発生した腐敗に限定されます。重大な腐敗に苦しむ将来のネットワークリンクがパケット全体を単一の強力なCRCでカバーしない可能性についてのコンセンサスはないようです。DCCPは、このようなリンクをアプリケーションに調整することを可能にしますが、これが将来のリンクテクノロジーにとって説得力があるかどうかを予測することは困難です。
In addition, partial checksums do not co-exist well with IP-level authentication mechanisms such as IPsec AH, which cover the entire packet with a cryptographic hash. Thus, if cryptographic authentication mechanisms are required to co-exist with partial checksums, the authentication must be carried in the application data. A possible mode of usage would appear to be similar to that of Secure RTP. However, such "application-level" authentication does not protect the DCCP option negotiation and state machine from forged packets. An alternative would be to use IPsec ESP, and to use encryption to protect the DCCP headers against attack, while using the DCCP header validity checks to authenticate that the header is from someone who possessed the correct key. While this is resistant to replay (due to the DCCP sequence number), it is not by itself resistant to some forms of man-in-the-middle attacks because the application data is not tightly coupled to the packet header. Thus, an application-level authentication probably needs to be coupled with IPsec ESP or a similar mechanism to provide a reasonably complete security solution. The overhead of such a solution might be unacceptable for some applications that would otherwise wish to use partial checksums.
さらに、部分的なチェックサムは、パケット全体を暗号化ハッシュでカバーするIPSEC AHなどのIPレベルの認証メカニズムとうまく存在しません。したがって、部分的なチェックサムと共存するために暗号化認証メカニズムが必要な場合は、アプリケーションデータに認証を実行する必要があります。可能な使用方法は、安全なRTPのモードと似ているように見えます。ただし、このような「アプリケーションレベル」認証は、DCCPオプションのネゴシエーションと状態マシンを偽造パケットから保護しません。別の方法は、IPSEC ESPを使用し、暗号化を使用してDCCPヘッダーを攻撃から保護し、DCCPヘッダー有効性チェックを使用して、ヘッダーが正しいキーを所有している人からのものであることを認証することです。これは(DCCPシーケンス番号のため)リプレイに対して耐性がありますが、アプリケーションデータがパケットヘッダーにしっかりと結合されていないため、いくつかの形式の中間攻撃に対して耐性はありません。したがって、アプリケーションレベルの認証は、おそらくIPSEC ESPまたは同様のメカニズムと組み合わせて、合理的に完全なセキュリティソリューションを提供する必要があります。このようなソリューションのオーバーヘッドは、部分的なチェックサムを使用したい場合は、一部のアプリケーションでは受け入れられない場合があります。
On balance, the authors believe that DCCP partial checksums have the potential to enable some future uses that would otherwise be difficult. As the cost and complexity of supporting them is small, it seems worth including them at this time. It remains to be seen whether they are useful in practice.
バランスをとって、著者は、DCCPの部分チェックサムが、そうでなければ困難な将来の使用を可能にする可能性があると考えています。それらをサポートするコストと複雑さは小さいため、現時点ではそれらを含める価値があるようです。それらが実際に役立つかどうかはまだ不明です。
[RFC793] Postel, J., "Transmission Control Protocol", STD 7, RFC 793, September 1981.
[RFC793] Postel, J.、「トランスミッションコントロールプロトコル」、STD 7、RFC 793、1981年9月。
[RFC1191] Mogul, J. and S. Deering, "Path MTU discovery", RFC 1191, November 1990.
[RFC1191] Mogul, J. and S. Deering、「Path MTU Discovery」、RFC 1191、1990年11月。
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC2119] Bradner, S.、「要件レベルを示すためにRFCで使用するためのキーワード」、BCP 14、RFC 2119、1997年3月。
[RFC2434] Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 2434, October 1998.
[RFC2434] Narten, T. and H. Alvestrand、「RFCSでIANA考慮事項セクションを書くためのガイドライン」、BCP 26、RFC 2434、1998年10月。
[RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 (IPv6) Specification", RFC 2460, December 1998.
[RFC2460] Deering, S. and R. Hinden、「インターネットプロトコル、バージョン6(IPv6)仕様」、RFC 2460、1998年12月。
[RFC3168] Ramakrishnan, K., Floyd, S., and D. Black, "The Addition of Explicit Congestion Notification (ECN) to IP", RFC 3168, September 2001.
[RFC3168] Ramakrishnan, K., Floyd, S., and D. Black、「IPへの明示的な輻輳通知(ECN)の追加」、RFC 3168、2001年9月。
[RFC3309] Stone, J., Stewart, R., and D. Otis, "Stream Control Transmission Protocol (SCTP) Checksum Change", RFC 3309, September 2002.
[RFC3309] Stone, J., Stewart, R., and D. Otis、「Stream Control Transmission Protocol(SCTP)Checkum Change」、RFC 3309、2002年9月。
[RFC3692] Narten, T., "Assigning Experimental and Testing Numbers Considered Useful", BCP 82, RFC 3692, January 2004.
[RFC3692] Narten, T.、「有用と見なされる実験数とテスト数の割り当て」、BCP 82、RFC 3692、2004年1月。
[RFC3775] Johnson, D., Perkins, C., and J. Arkko, "Mobility Support in IPv6", RFC 3775, June 2004.
[RFC3775] Johnson, D., Perkins, C., and J. Arkko、「IPv6のモビリティサポート」、RFC 3775、2004年6月。
[RFC3828] Larzon, L-A., Degermark, M., Pink, S., Jonsson, L-E., and G. Fairhurst, "The Lightweight User Datagram Protocol (UDP-Lite)", RFC 3828, July 2004.
[RFC3828] Larzon, L-A., Degermark, M., Pink, S., Jonsson, L-E., and G. Fairhurst、「The Lightweight User Datagram Protocol(UDP-Lite)」、RFC 3828、2004年7月。
[B98] Bellovin, S.M., "Cryptography and the Internet", CRYPTO '98 (LNCS 1462), pp 46-55, August 1988.
[B98] Bellovin, S.M.、「暗号化とインターネット」、Crypto '98(LNCS 1462)、PP 46-55、1988年8月。
[BB01] Bellovin, S.M. and M. Blaze, "Cryptographic Modes of Operation for the Internet", 2nd NIST Workshop on Modes of Operation, August 2001.
[BB01] Bellovin, S.M. and M. Blaze、「インターネットの暗号化モード」、2001年8月、操作モードに関する第2 NISTワークショップ。
[M85] Morris, R.T., "A Weakness in the 4.2BSD Unix TCP/IP Software", Computer Science Technical Report 117, AT&T Bell Laboratories, Murray Hill, NJ, February 1985.
[M85] Morris, R.T.、「4.2BSD UNIX TCP/IPソフトウェアの弱点」、コンピューターサイエンステクニカルレポート117、AT&T Bell Laboratories、NJ、NJ、1985年2月。
[PMTUD] Mathis, M. and J. Heffner, "Path MTU Discovery", Work in Progress, March 2006.
[PMTUD] Mathis, M. and J. Heffner、「Path MTU Discovery」、2006年3月、Work in Progress。
[RFC792] Postel, J., "Internet Control Message Protocol", STD 5, RFC 792, September 1981.
[RFC792] Postel, J.、「インターネット制御メッセージプロトコル」、STD 5、RFC 792、1981年9月。
[RFC1812] Baker, F., "Requirements for IP Version 4 Routers", RFC 1812, June 1995.
[RFC1812] Baker, F.、「IPバージョン4ルーターの要件」、RFC 1812、1995年6月。
[RFC1948] Bellovin, S., "Defending Against Sequence Number Attacks", RFC 1948, May 1996.
[RFC1948] Bellovin, S.、「シーケンス番号攻撃に対する防御」、RFC 1948、1996年5月。
[RFC1982] Elz, R. and R. Bush, "Serial Number Arithmetic", RFC 1982, August 1996.
[RFC1982] Elz, R. and R. Bush、「シリアル番号算術」、RFC 1982、1996年8月。
[RFC2018] Mathis, M., Mahdavi, J., Floyd, S., and A. Romanow, "TCP Selective Acknowledgement Options", RFC 2018, October 1996.
[RFC2018] Mathis, M., Mahdavi, J., Floyd, S., and A. Romanow、「TCP Selective Ascondage Options」、RFC 2018、1996年10月。
[RFC2401] Kent, S. and R. Atkinson, "Security Architecture for the Internet Protocol", RFC 2401, November 1998.
[RFC2401] Kent, S. and R. Atkinson、「インターネットプロトコルのセキュリティアーキテクチャ」、RFC 2401、1998年11月。
[RFC2463] Conta, A. and S. Deering, "Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification", RFC 2463, December 1998.
[RFC2463] Conta, A. and S. Deering、「インターネットプロトコルバージョン6(IPv6)仕様のインターネット制御メッセージプロトコル(ICMPV6)」、RFC 2463、1998年12月。
[RFC2581] Allman, M., Paxson, V., and W. Stevens, "TCP Congestion Control", RFC 2581, April 1999.
[RFC2581] Allman, M., Paxson, V., and W. Stevens、「TCP輻輳制御」、RFC 2581、1999年4月。
[RFC2960] Stewart, R., Xie, Q., Morneault, K., Sharp, C., Schwarzbauer, H., Taylor, T., Rytina, I., Kalla, M., Zhang, L., and V. Paxson, "Stream Control Transmission Protocol", RFC 2960, October 2000.
[RFC2960] Stewart, R., Xie, Q., Morneault, K., Sharp, C., Schwarzbauer, H., Taylor, T., Rytina, I., Kalla, M., Zhang, L., and V. Paxson、「Stream Control Transmission Protocol」、RFC 2960、2000年10月。
[RFC3124] Balakrishnan, H. and S. Seshan, "The Congestion Manager", RFC 3124, June 2001.
[RFC3124] Balakrishnan, H. and S. Seshan、「ザ・ミッシェンマネージャー」、RFC 3124、2001年6月。
[RFC3360] Floyd, S., "Inappropriate TCP Resets Considered Harmful", BCP 60, RFC 3360, August 2002.
[RFC3360] Floyd, S.、「不適切なTCPリセットは有害と見なされる」、BCP 60、RFC 3360、2002年8月。
[RFC3448] Handley, M., Floyd, S., Padhye, J., and J. Widmer, "TCP Friendly Rate Control (TFRC): Protocol Specification", RFC 3448, January 2003.
[RFC3448] Handley, M., Floyd, S., Padhye, J., and J. Widmer、「TCP Friendry Rate Control(TFRC):プロトコル仕様」、RFC 3448、2003年1月。
[RFC3540] Spring, N., Wetherall, D., and D. Ely, "Robust Explicit Congestion Notification (ECN) Signaling with Nonces", RFC 3540, June 2003.
[RFC3540] Spring, N., Wetherall, D., and D. Ely、「Noncesによる堅牢な明示的な輻輳通知(ECN)シグナル伝達」、RFC 3540、2003年6月。
[RFC3550] Schulzrinne, H., Casner, S., Frederick, R., and V. Jacobson, "RTP: A Transport Protocol for Real-Time Applications", STD 64, RFC 3550, July 2003.
[RFC3550] Schulzrinne, H., Casner, S., Frederick, R., and V. Jacobson、「RTP:リアルタイムアプリケーション用の輸送プロトコル」、STD 64、RFC 3550、2003年7月。
[RFC3611] Friedman, T., Caceres, R., and A. Clark, "RTP Control Protocol Extended Reports (RTCP XR)", RFC 3611, November 2003.
[RFC3611] Friedman, T., Caceres, R., and A. Clark、「RTP制御プロトコル拡張レポート(RTCP XR)」、RFC 3611、2003年11月。
[RFC3711] Baugher, M., McGrew, D., Naslund, M., Carrara, E., and K. Norrman, "The Secure Real-time Transport Protocol (SRTP)", RFC 3711, March 2004.
[RFC3711] Baugher, M., McGrew, D., Naslund, M., Carrara, E., and K. Norrman、「安全なリアルタイム輸送プロトコル(SRTP)」、RFC 3711、2004年3月。
[RFC3819] Karn, P., Bormann, C., Fairhurst, G., Grossman, D., Ludwig, R., Mahdavi, J., Montenegro, G., Touch, J., and L. Wood, "Advice for Internet Subnetwork Designers", BCP 89, RFC 3819, July 2004.
[RFC3819] Karn, P., Bormann, C., Fairhurst, G., Grossman, D., Ludwig, R., Mahdavi, J., Montenegro, G., Touch, J., and L. Wood、「アドバイス」アドバイスインターネットサブネットワークデザイナー向け」、BCP 89、RFC 3819、2004年7月。
[RFC4086] Eastlake, D., 3rd, Schiller, J., and S. Crocker, "Randomness Requirements for Security", BCP 106, RFC 4086, June 2005.
[RFC4086] Eastlake, D., 3rd, Schiller, J., and S. Crocker、「セキュリティのランダム性要件」、BCP 106、RFC 4086、2005年6月。
[RFC4341] Floyd, S. and E. Kohler, "Profile for Datagram Congestion Control Protocol (DCCP) Congestion Control ID 2: TCP-like Congestion Control", RFC 4341, March 2006.
[RFC4341] Floyd, S. and E. Kohler、「データグラムの輻輳制御プロトコルのプロファイル(DCCP)輻輳制御ID 2:TCP様輻輳制御」、RFC 4341、2006年3月。
[RFC4342] Floyd, S., Kohler, E., and J. Padhye, "Profile for Datagram Congestion Control Protocol (DCCP) Congestion Control ID 3: TCP-Friendly Rate Control (TFRC)", RFC 4342, March 2006.
[RFC4342] Floyd, S., Kohler, E., and J. Padhye、「データグラムの輻輳制御プロトコル(DCCP)輻輳制御IDのプロファイル:TCPに優しいレートコントロール(TFRC)」、RFC 4342、2006年3月。
[SHHP00] Spatscheck, O., Hansen, J.S., Hartman, J.H., and L.L. Peterson, "Optimizing TCP Forwarder Performance", IEEE/ACM Transactions on Networking 8(2):146-157, April 2000.
[SHHP00] Spatscheck, O., Hansen, J.S., Hartman, J.H., and L.L. Peterson、「TCP Forwarder Performanceの最適化」、Networking 8(2):146-157、2000年4月のIEEE/ACMトランザクション。
[SYNCOOKIES] Bernstein, D.J., "SYN Cookies", http://cr.yp.to/syncookies.html, as of March 2006.
[SYNCOOKIES] Bernstein, D.J.、「Syn Cookies」、http://cr.yp.to/syncookies.html、2006年3月現在。
[VBK05] Vanit-Anunchai, S., Billington, J., and T. Kongprakaiwoot, "Discovering Chatter and Incompleteness in the Datagram Congestion Control Protocol", FORTE 2005, pp 143-158, October 2005.
[VBK05] Vanit-Anunchai, S., Billington, J., and T. Kongprakaiwoot、「データグラムの輻輳制御プロトコルでのおしゃべりと不完全性の発見」、Forte 2005、PP 143-158、2005年10月。
Authors' Addresses
著者のアドレス
Eddie Kohler 4531C Boelter Hall UCLA Computer Science Department Los Angeles, CA 90095 USA
Eddie Kohler 4531C Boelter Hall UCLAコンピューターサイエンス部ロサンゼルス、カリフォルニア州90095 USA
EMail: kohler@cs.ucla.edu
Mark Handley Department of Computer Science University College London Gower Street London WC1E 6BT UK
マークハンドリーコンピュータサイエンス大学カレッジロンドンガワーストリートロンドンWC1E 6BT UK
EMail: M.Handley@cs.ucl.ac.uk
Sally Floyd ICSI Center for Internet Research 1947 Center Street, Suite 600 Berkeley, CA 94704 USA
サリーフロイドICSIセンターフォーインターネットリサーチ1947センターストリート、スイート600バークレー、カリフォルニア州94704 USA
EMail: floyd@icir.org
Full Copyright Statement
完全な著作権声明
Copyright (C) The Internet Society (2006).
Copyright(c)The Internet Society(2006)。
This document is subject to the rights, licenses and restrictions contained in BCP 78, and except as set forth therein, the authors retain all their rights.
この文書は、BCP 78に含まれる権利、ライセンス、および制限の対象となり、そこに記載されている場合を除き、著者はすべての権利を保持しています。
This document and the information contained herein are provided on an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
このドキュメントとここに含まれる情報は、「現状のまま」に基づいて提供されています。また、貢献者、彼/彼女が代表する組織(もしあれば)が後援する組織、インターネット協会とインターネット工学タスクフォースは、すべての保証、明示的または明示的、またはすべての保証を否認します。本書の情報の使用が、商品性または特定の目的に対する適合性の権利または黙示的な保証を侵害しないという保証を含むがこれらに限定されないことを含む。
Intellectual Property
知的財産
The IETF takes no position regarding the validity or scope of any Intellectual Property Rights or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; nor does it represent that it has made any independent effort to identify any such rights. Information on the procedures with respect to rights in RFC documents can be found in BCP 78 and BCP 79.
IETFは、知的財産権またはその他の権利の有効性または範囲に関して、本書に記載されている技術の実装または使用、またはそのような権利に基づくライセンスに基づくライセンスの範囲に関連すると主張される可能性のある他の権利に関しては、立場を取得しません。利用可能になります。また、そのような権利を特定するために独立した努力をしたことも表明していません。RFCドキュメントの権利に関する手順に関する情報は、BCP 78およびBCP 79に記載されています。
Copies of IPR disclosures made to the IETF Secretariat and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementers or users of this specification can be obtained from the IETF on-line IPR repository at http://www.ietf.org/ipr.
IETF事務局に行われたIPR開示のコピーと、利用可能にするライセンスの保証、またはこの仕様の実装者またはユーザーによるそのような独自の権利の使用のための一般的なライセンスまたは許可を取得しようとする試みの結果を取得できます。http://www.ietf.org/iprのIETFオンラインIPRリポジトリから。
The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights that may cover technology that may be required to implement this standard. Please address the information to the IETF at ietf-ipr@ietf.org.
IETFは、関心のある当事者に、著作権、特許、または特許出願、またはこの基準を実装するために必要なテクノロジーをカバーする可能性のあるその他の独自の権利を注意深く招待します。ietf-ipr@ietf.orgのIETFへの情報をお問い合わせください。
Acknowledgement
謝辞
Funding for the RFC Editor function is provided by the IETF Administrative Support Activity (IASA).
RFCエディター機能の資金は、IETF管理サポートアクティビティ(IASA)によって提供されます。