[Qirg] draft-dahlberg-ll-quantum-01 review comments

Bruno Rijsman <brunorijsman@gmail.com> Fri, 29 March 2019 14:37 UTC

Return-Path: <brunorijsman@gmail.com>
X-Original-To: qirg@ietfa.amsl.com
Delivered-To: qirg@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 0B1931202A3 for <qirg@ietfa.amsl.com>; Fri, 29 Mar 2019 07:37:17 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.998
X-Spam-Level:
X-Spam-Status: No, score=-1.998 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 9spy2r74GlBQ for <qirg@ietfa.amsl.com>; Fri, 29 Mar 2019 07:37:14 -0700 (PDT)
Received: from mail-qt1-x841.google.com (mail-qt1-x841.google.com [IPv6:2607:f8b0:4864:20::841]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id C0C3012021F for <qirg@irtf.org>; Fri, 29 Mar 2019 07:37:13 -0700 (PDT)
Received: by mail-qt1-x841.google.com with SMTP id z17so2509567qts.13 for <qirg@irtf.org>; Fri, 29 Mar 2019 07:37:13 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:mime-version:subject:message-id:date:to; bh=Y0cFR/44f/YywnPZGjxn2ejYZ3MVYnSrpwq8+Jjf6FA=; b=Y27DwU1USsyn+iCfMP8JMQyA2Si+tbwnXTJ13Kl6RBd8pLsIIz79ho0SH82oYSJicj 616t17oKx8W2nQDC8JqcyH9CkHalJuHJnudo3uSG/D/m0HHFI0d/OfgAfH01F0+WZE1h 6IWn5RBEGCh4j7TLMej+S8+smBI8m0mRgYwVYHUhRACcLKMwZSajcRO9Tazf0vSyriU8 YF0pcQqVLvQxy/3QCUiPO6IrB0XTILikf3R9xfjAeBmc98lWW6CLPSP9T/CqByKo4lNx ffeLJqQL1zRFy5TXqI/UQRc1WiQO8n/SOvaKbj4NqEodQEl+6pRt29dL8AvrNVaFun+5 yvUw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:mime-version:subject:message-id:date:to; bh=Y0cFR/44f/YywnPZGjxn2ejYZ3MVYnSrpwq8+Jjf6FA=; b=LUCmFlMFhoTPUWMe/fkgPLaIMBv+mhYfm/mNNHF9XDJR1rof3ZEb0NCoEKW9GyPPHC GeY3KVloBXWwR1uhELAdDnlDxl3Ymx53idyeH2tm+eubpojlOoVK7zo6dANJqCS03FXD B+GHKw/PSV0mDpvZTK8nKfyDMqTdWSaVx4ZiAr+6vSY6/fMIsHgMoPCeV6oSSA6pDyGL ofuUIUPrnbsv7oWp+QwdFqPACCLZAzjxpbmjbs67Ya4wKb7y5ZwP+5X9kJudFoGUpU2l vyKup5kFYM/ZMJdzU1Uhng+G/tAsEcBx0Sza0Uc0zKOWJnR6WSaxvK7xuhI0Odu1LlBZ qn/A==
X-Gm-Message-State: APjAAAXBtZX+vFZysOUEdPoT9ZCesqtZsEPvPxq+DcJRhRz11IwnH8ae O6/imafX9lRzuN4Q3kCv+rq+1Xkh
X-Google-Smtp-Source: APXvYqyl6sxqG1V3fVhWdqp/pTaXecofadi9+oCZYGIr5017hDuINnX/LbnK4Wy4lY8Q0459yNyeRg==
X-Received: by 2002:aed:2267:: with SMTP id o36mr41215679qtc.366.1553870232330; Fri, 29 Mar 2019 07:37:12 -0700 (PDT)
Received: from [192.168.20.114] ([200.63.168.130]) by smtp.gmail.com with ESMTPSA id n46sm1387136qtn.75.2019.03.29.07.37.10 for <qirg@irtf.org> (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 29 Mar 2019 07:37:11 -0700 (PDT)
From: Bruno Rijsman <brunorijsman@gmail.com>
Content-Type: multipart/alternative; boundary="Apple-Mail=_FC001CF9-FAE7-40FB-B80F-BBAC29EC17C8"
Mime-Version: 1.0 (Mac OS X Mail 11.5 \(3445.9.1\))
Message-Id: <AFB61389-F811-481C-A002-63F32F7A08CE@gmail.com>
Date: Fri, 29 Mar 2019 11:37:08 -0300
To: qirg@irtf.org
X-Mailer: Apple Mail (2.3445.9.1)
Archived-At: <https://mailarchive.ietf.org/arch/msg/qirg/_IYc37C61l199UJH4IFeYWUzHUk>
Subject: [Qirg] draft-dahlberg-ll-quantum-01 review comments
X-BeenThere: qirg@irtf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "Quantum Internet \(proposed\) RG" <qirg.irtf.org>
List-Unsubscribe: <https://www.irtf.org/mailman/options/qirg>, <mailto:qirg-request@irtf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/qirg/>
List-Post: <mailto:qirg@irtf.org>
List-Help: <mailto:qirg-request@irtf.org?subject=help>
List-Subscribe: <https://www.irtf.org/mailman/listinfo/qirg>, <mailto:qirg-request@irtf.org?subject=subscribe>
X-List-Received-Date: Fri, 29 Mar 2019 14:37:17 -0000

Dear authors of draft-dahlberg-ll-quantum-01,

I reviewed your draft-dahlberg-ll-quantum-01 (https://tools.ietf.org/html/draft-dahlberg-ll-quantum-01 <https://tools.ietf.org/html/draft-dahlberg-ll-quantum-01>).

I also attended your presentation of the draft in the QIRG research group meeting at the IETF-104, and I am in the process of reading your (truly excellent) recently published paper "A Link Layer Protocol for Quantum Networks" (https://arxiv.org/pdf/1903.09778.pdf <https://arxiv.org/pdf/1903.09778.pdf>).

Here are some comments on your draft from the perspective of a traditional network protocol designer:

Main comment

(M1) As was evident from the questions after the presentation of the draft at the QIRG research group meeting at the IETF-104 in Prague, classical network engineers are somewhat confused by this draft. See, for example, this question and answer recorded on YouTube: https://youtu.be/usU9j8lU2zk?t=1999 <https://youtu.be/usU9j8lU2zk?t=1999>. The confusion is mainly caused by that fact that the draft is in fact a datalink service definition and not a datalink protocol definition. It defines the service that the quantum datalink entity offers to the quantum network entity on the same (logical) node. The draft is quite clear about this, and uses the correct "service" terminology in the appropriate places. It defines the service using formal messages, which is somewhat unusual but not unprecedented (c.f. OpenFlow, ForCES, NETLINK, etc.) However, when an IETF engineer sees a message ASCII diagram such as Figure 1 in your draft, most IETF engineers will "instinctively" assume that it is a Protocol Data Unit (PDU). It is not; the diagram shows a Service Data Unit (SDU), or if you insist, a PDU for a service-access protocol. This is the root of the confusion. Although the draft is (as I mentioned) already using the correct service terminology, you might want to be even more explicit about the fact that you are defining a vertical service (SDUs) and not a horizontal protocol (PDUs). For those of you (maybe quantum physicists) who want more detail on the difference between a service and a protocol and the history behind it, I provided more details at http://bit.ly/osi-service-vs-protocol <http://bit.ly/osi-service-vs-protocol>.

Specific protocol comments

(P1) As already mentioned in comments on the open mike after your QIRG presentation, there is no need to invent a new "Node ID". You can use IPv6 addresses to identify quantum nodes in the quantum network. That will make it easier to re-use (modified) existing protocols in other parts of the quantum networking stack (e.g. existing routing protocols such as OSPF or ISIS to discover the topology of the quantum nodes and links, existing signaling protocols such as RSVP to setup end-to-end "paths", etc.)

(P2) That said, in this case the "Remote Node ID" is actually a datalink identifier, not a network identifier (this too was already mentioned at the mike after the presentation). Since all quantum links are point-to-point (there are no multi-point quantum links, right?) you don't really need datalink layer node ids. All you need in the CREATE message is some local identifier for the local interface. The remote node on the datalink is implied by the local interface. This might seem like semantic hair-splitting, but it is an important distinction because a local link identifier is a purely local matter (e.g. an interface name). But when you start introducing datalink layer node IDs (the moral equivalent of Ethernet addresses, or in this case perhaps LAPD DLCIs) you immediately open up a whole can of worms related to addressing (format, allocation, scope of uniqueness, address discovery). None of those complications are needed because all links are point-to-point and there is always only one "remote node" on a datalink. Thus, it is best to simply avoid those complications by not having any addresses at the datalink layer, and just stick with locally significant interface identifiers (names).

(P3) You should define the transport mechanism for the proposed protocol. If you need messages to be reliable and ordered, TCP or TLS is the obvious choice. If not, UDP will do. I strongly recommend the former. We have to define what happens when the TCP connection is lost (flush? graceful restart? etc.) We have to think about all the usual session establishment issues (authentication, versioning, capability negotiation, etc. etc. 

(P4) For future extensibility, I strongly recommend using Type-Length-Value (TLV) messages. You might want to consider defining the protocol using a formal data modeling language such as Thrift, instead of drawing the traditional ASCII diagrams. For example, see the definition of the RIFT protocol (https://datatracker.ietf.org/doc/draft-ietf-rift-rift/ <https://datatracker.ietf.org/doc/draft-ietf-rift-rift/>)

(P5) The purpose of the "Purpose ID" (no pun intended) is not very clear. The main use seems to be identifying a network layer path. It would probably be better to keep a clean separation of layers, to keep any knowledge of path ID out of the datalink layer, and to introduce a separate path ID concept in the network layer.

(P6) In general you are very stingy with the number of bits in identifiers. Only 16 bits for number of pairs? Only 16 bits for create ID? Only 4 bits for logical qubit id? There is no harm in being more future proof by allocating (much) bigger identifiers, even if the prospects of the hardware supporting much larger numbers are very distant. How much trouble would we have saved ourselves if IPv4 addresses were much bigger than 32 bits right from the get-go?

(P7) The current mechanism for allocating Create IDs on the server side (datalink service provider side) does not allow for pipelining of requests, unless we assume all requests are serviced in order. For example, consider a network layer client that sends two CREATE requests without waiting for any ACK. When it eventually receives an ACK, it won't know whether it was the ACK for the first or the second request. Thus, we need (or also need) client-allocated IDs for the purpose of correlating messages. If the ID is allocated by the client, it will only be unique within the scope of the client (note that a multiple clients may be co-located on the same physical node.)

(P8) Looking at the Directionality flag, it appears that there are some scenarios would a local node ever receive a datalink service response to a datalink service request that was initiated by the remote node? Similarly, it appears that there scenarios where the network layer "spontaneously" sends a message to the higher layer to inform it that something happened (e.g. ERR_EXPIRE to report that decoherence occurred). I would recommend using something more formal along the following lines:

 * Entangled-Pairs-Create-Request (request-id)

 * Entangled-Pairs-Create-Confirm (request-id, pair-id) => success or error code, possibly multiple responses if more than 1 pair requested

 * Entangled-Pairs-Create-Indication (link-id, pair-id) => report that a pair was created here as a result of a request by the remote id. Maybe this should be an -Indication and -Response if you want the network layer to have the opportunity to accept or refuse the pair.

 * Entangled-Pairs-Change-Indication (create-id, pair-id) => spontaneously report something happened (e.g. decoherence) Or maybe, this could be a -Destroy-Indication.

(P9) I would recommend having a consistent header for all messages in both directions (as opposed to the current approach of only having a header for datalink to network layer messages).

(P10) Reading the text for Sequence Number, it seems that a single CREATE (CREATE-Request) message can result in multiple ACK (CREATE-Confirm) messages, if the CREATE had Number > 1. Is that correct? Would each generated pair have its own sequence number?

(P11) You probably also need a message to CANCEL a pending request (and maybe also messages to QUERY and MODIFY pending requests): Entangled-Pairs-Cancel-Request, etc.

Nitpicks

(N1) Section 1: "and send the measurement outcome (2 bits) over a classical channel to A or C". Should this be "... to A and C"? 

(N2) "Max Time" is defined as a float. Floats are generally not used in protocols. It might be more expedient to define it as an integer in usec or msec.

(N3) For unused bits, say "set to 0 on transmit, ignore on receive".

(N4) Create ID -> Entangled Pairs Generation Request ID.  (Note the s for plural pairs)

(N5) Sequence number -> Entangle Pair ID.  (Note the absence of s, singular?)