Hi Jakob, Ack on all. The difference between sequence numbers in TCP transport and BMP application is clear. What I wondered if you could describe a bit more what benefit we would gain with BMP sequence numbers. At which point within the BMP client application loss technically could occur.
Best wishes Thomas -----Original Message----- From: Jakob Heitz (jheitz) <jhe...@cisco.com> Sent: Wednesday, March 10, 2021 7:38 AM To: Graf Thomas, INI-NET-TCZ-ZH1 <thomas.g...@swisscom.com>; job=40fastly....@dmarc.ietf.org Cc: draft-tppy-bmp-seamless-sess...@ietf.org; grow@ietf.org Subject: RE: [GROW] is TCP the right layer for BMP session resumption? TCP sequence numbers are for TCP only. It would be nice if TCP were to acknowledge received data only after all application layers have fully processed it. However, TCP sequence numbers are only for TCP. The application cannot acknowledge full processing of received data back to TCP through the socket layer. If the application layer wants to signal full processing of received data back to the sender, then it needs its own sequence numbers. It's these sequence numbers that I want to be in 64 bits, not the session ID. Storing the withdraw messages is an optimization that would work for monitor mode. In general, the sender has to store all data that has not been acknowledged at the application layer (not the TCP layer) if it is going to be retransmitted in any subsequent TCP session. In monitor mode, the sender can retrieve the non-withdraw messages from the information stored in the BGP table. Regards, Jakob. -----Original Message----- From: thomas.g...@swisscom.com <thomas.g...@swisscom.com> Sent: Tuesday, March 9, 2021 10:19 PM To: Jakob Heitz (jheitz) <jhe...@cisco.com>; job=40fastly....@dmarc.ietf.org Cc: draft-tppy-bmp-seamless-sess...@ietf.org; grow@ietf.org Subject: RE: [GROW] is TCP the right layer for BMP session resumption? Hi Job and Jakob, Many thanks for the good inputs which I consolidated in this reply. In regards to TFO applicability to the BMP application. During my initial research I was encouraged my section 6 of TFO RFC 7413 https://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Ftools.ietf.org%2Fhtml%2Frfc7413%23section-6&data=04%7C01%7CThomas.Graf%40swisscom.com%7Cdba64e44152c438cbab708d8e38f7972%7C364e5b87c1c7420d9beec35d19b557a1%7C1%7C0%7C637509552641063005%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=fPQYYJPEYnfYwyC7bT4LZCfkUZUdlz1ZuLN9F3oT7Kg%3D&reserved=0 It is well understood that the original intend of the RFC is two fold: - allow to re-establish a TCP session - performance gain for short-lived connections While the first is the motivation why TFO was chosen in this draft, the second is a welcomed by product where BMP could benefit from. Regarding the TCP_FAST_OPEN cookie handling and the separation between application (BMP) and transport (TCP). The goal of the draft is that both sides, the BMP client and the BMP server can decide wherever the new transport session belongs to the previous BMP session or not. This is done on the BMP client side by either clearing the TCP_FAST_OPEN cookie for transport or not. The BMP client does not need to know the previous value. It needs only to distinguish between establish a new session or re-establish an existing session. Different to the BMP client, the BMP server does the same but instead of clearing the TCP_FAST_OPEN cookie for transport it sets a new, different to the previous, cookie. I like to take your input Job about the TFO applicability to the BMP application and do my due diligence by going to the TCPM working group and get their opinion. I will also do my own research on applications using TFO and for which purpose. I will present then that to the GROW list and the next GROW session. Does that make sense? As you already pointed out the goal can be achieved not only on the TCP transport layer but also on the BMP application layer. There with the drawback that BMP is strictly speaking no longer unidirectional. Here my proposal would be to extend the BMP Initiation Message with another TLV containing the BMP session identifier. I agree that the size should large enough to be unique and I take the input being 64 bit as a proposal. The client set's the BMP session identifier and the server stores it. When a BMP session is established, a new BMP session identifier is set be the client and stored at the BMP server. When the BMP client establishes the BMP session, the server decides wherever to reply with the previously stored value (signaling its state) or 0 (a new session). BMP client acts wherever on exporting its queue or start a new RIB dump depending if BMP session identifier is different to the previous or not. Regarding the input from Jakob that not all the BMP message types should be queued, only BGP withdrawals. This is an interesting proposal I like to follow up and further like to understand it. If I understand correctly, only withdrawals would be queued during the re-establish time window and updates would be locally generated for the re-establish time window once the BMP session is re-established. Correct? Regarding the proposal of sequence numbers. It would imply that the BMP Common Header needs to be extended. Here I like to hear your thoughts why a session identifier is not enough and what benefit a sequence number would bring on the application layer when we already have sequence numbers on the TCP transport session. As you might recall, one of the objectives of the BMP hackathon was to detect loss of BMP messages. Also many thanks to Jeff about the feedback in regards to BGP NSR. I agree that solving the goal on a TCP transport layer would prevent implications onto BGP/BMP application in such condition when BGP process is being restarted. Best wishes Thomas -----Original Message----- From: Jakob Heitz (jheitz) <jhe...@cisco.com> Sent: Wednesday, March 10, 2021 4:09 AM To: Job Snijders <job=40fastly....@dmarc.ietf.org> Cc: draft-tppy-bmp-seamless-sess...@ietf.org; grow@ietf.org Subject: RE: [GROW] is TCP the right layer for BMP session resumption? >From the BGP speaker (client) implementation point of view, I would do it like this: The client keeps a ring buffer of data it sent to the server. The bottom of the buffer is at a certain sequence number. As messages are created, that bottom moves up. If the server were to restart, it would send its last received sequence number and session ID. If the buffer still contains the sequence number, then you're in luck, else big bang restart. The content of the buffer could be optimized by retrieving some of the information from the bgp table (adj-rib's are conceptual only) instead of literally storing it. How and if any optimization is done is implementation specific and not part of an RFC. Regards, Jakob. -----Original Message----- From: Job Snijders <job=40fastly....@dmarc.ietf.org> Sent: Tuesday, March 9, 2021 4:50 PM To: Jakob Heitz (jheitz) <jhe...@cisco.com> Cc: draft-tppy-bmp-seamless-sess...@ietf.org; grow@ietf.org Subject: Re: [GROW] is TCP the right layer for BMP session resumption? On Tue, Mar 09, 2021 at 08:44:18PM +0000, Jakob Heitz (jheitz) wrote: > BMP is a one-way protocol. The BMP server sends nothing. In the proposal at hand, the BMP server would send a client-specific TCP_FAST_OPEN cookie (on top of TCP ACKs), and possibly eventually a TCP RST, which is slightly more than 'nothing'... :-) As TCP_FAST_OPEN already is a published RFC, existing BMP clients & servers are free and able to opportunistically use TCP Fast Open. For the sake of conversation I'll consider TCP_FAST_OPEN out-of-scope for BMP and GROW in the rest this email. BMP - one way protocol on reliable transport: are successive RSTs a signal? =========================================================================== In a one-way protocol where the recipient essentially is limited to 'TCP ACK' and 'TCP RST' as response options, would it perhaps make sense to outline a BMP protocol where both BMP client and BMP server assume more delibrate intent from the timing of TCP reconnection events? If the BMP client includes a 'session_id' message as its first message towards the BMP server, then when the client loses its connection to the BMP server, it can continue buffering messages destined for that specific BMP server linked to the previously sent 'session_id'. Then, if the BMP client manages to reconnect to the BMP server within 60 seconds, the client will flush all buffered messages associated with the session_id also communicated in prior BMP sessions. However if the BMP server closes the TCP session within that 60 seconds buffer window, a subsequent successful reconnection would result in the BGP client sending a new session_id followed by all 'Peer Up' messages, because the previous BMP session (and buffer) were terminated. The BMP server can immediately disconnect when it receives a BMP session_id it does not recognize (by issuing a TCP RST). When a BMP client receives the 'second' TCP RST within 60 seconds, it can choose to reconnect following an linear backoff model and for the duration of wait periods exceeding 1 minute not bother buffering for 'unreachable' BMP servers. The heuristic is that the BMP client considers the BMP session 'resumed', iff a BMP server doesn't disconnect within 60 seconds. The BMP server can use the session_id as input to its decision process whether to disconnect within 60 seconds or not. Blink once the BMP session survives... blink twice, game over! Kind regards, Job
smime.p7s
Description: S/MIME Cryptographic Signature
_______________________________________________ GROW mailing list GROW@ietf.org https://www.ietf.org/mailman/listinfo/grow