Thank you for ideas around QUICNetVConnection. It looks like well organized design!
> The QUIC has a handshake progress that is just like the TCP has the 3-ways handshake progress. > The tcp socket fd is returned by accept() only after handshake done. > Thus, the QUICConnection should be created and returned after handshake done. I'm worry about this. Because current QUIC specs (tls-mapping) says handshake use stream 0. So handshake needs to be build on frame reordering (stream) and loss detection. This is why current quic-latest branch implements QUICHandshake as a QUIC Application. - Masaori I'm glad to hear that you'll come to Tokyo :) 2017年10月17日(火) 15:33 Chao Xu <ok...@apache.org>: > Here is the url for the diagram : > http://home.apache.org/~oknet/QUIC.201710171429.png > > 2017-10-17 14:33 GMT+08:00 Chao Xu <ok...@apache.org>: > >> Here is the url for the diagram : >> http://home.apache.org/~oknet/QUIC.201710171429.png >> >> 2017-10-17 14:25 GMT+08:00 Chao Xu <ok...@apache.org>: >> >>> /cc dev >>> >>> @Masaori , I will join the QUIC Hack-a-thon in next January at Tokyo and >>> apply my visa right way. >>> >>> Attached the new diagram. In my opinion, it is the comparison between >>> TCP and QUIC. >>> >>> - The `QUIC Connection` is the same as `TCP Connection` >>> - A tcp socket fd is allocated by linux kernel for `TCP Connection` >>> - A QUICConnection object is allocated by iocore for `QUIC Connection` >>> - The `QUICConnection qcon` is equivalent to `int tcp_socket_fd` >>> >>> The QUIC has a handshake progress that is just like the TCP has the >>> 3-ways handshake progress. >>> The tcp socket fd is returned by accept() only after handshake done. >>> Thus, the QUICConnection should be created and returned after handshake >>> done. >>> >>> The QUICConnection handle the quic transaction as a State Machine to . >>> It is managed by QUICNetHandler. >>> >>> There is a acceptQueue inside the QUICNetHandler, a QUICNetVC is created >>> and initialized with a QUICConnection from the acceptQueue one by one. >>> >>> If a packet attached to an existing QUICConnection, it will be pushed >>> into the readyQueue. >>> >>> Similar to PollCont, it returns a set of QUICNetVC from readyQueue to >>> implement a `QUICPollCont`. >>> >>> Override the `net_read_io` and `load_buffer_and_write` in the QUICNetVC, >>> it will be managed by NetHandler just like SSLNetVC. >>> >>> >>> [image: 内嵌图片 3] >>> >>> >>> Oknet Xu >>> >>> ---------- Forwarded message ---------- >>> From: Masaori Koshiba <masa...@apache.org> >>> Date: 2017-10-13 20:01 GMT+08:00 >>> Subject: Re: Talk about the QUICNetVConnection >>> To: Chao Xu <ok...@apache.org>, Masakazu Kitajo <mas...@apache.org>, >>> sc...@apache.org >>> >>> >>> Would you mind if I add dev@trafficserver.apache.org to CC? >>> This should be discuss in public :) >>> >>> BTW, do you guys come to next ATS summit in this month or QUIC >>> Hack-a-thon in next January? >>> >>> - Masaori >>> >>> 2017年10月13日(金) 20:41 Chao Xu <ok...@apache.org>: >>> >>>> Hi Masaori and Masakazu, >>>> >>>> I have talked with @scw00, in my opinion, it is better to make the >>>> QUIConnection as a member of QUICNetVConnection. >>>> >>>> According to the design of UnixNetVConnection and NetVConnection, the >>>> `get_socket()` return the physical socket descriptor and a `Connection` >>>> object as a member of UnixNetVConnection. >>>> >>>> The class Connection is a interface for the physical socket descriptor. >>>> >>>> [image: image.png] >>>> >>>> >>>> To the design of QUICNetVConnection, the `QUICConnection` object is the >>>> physical socket descriptor. >>>> >>>> And the `UDPConnection` object is the physical socket descriptor of >>>> `QUICConnection`. >>>> >>>> >>>> ``` >>>> class QUICNetVConnection : public UnixNetVConnection, public >>>> QUICConnection >>>> ``` >>>> >>>> to >>>> >>>> ``` >>>> class QUICNetVConnection : public UnixNetVConnection >>>> { >>>> QUICConnection _qconn; >>>> ... >>>> ``` >>>> >>>> and >>>> >>>> ``` >>>> class QUICConnection : public QUICPacketTransmitter, public >>>> QUICFrameTransmitter, public QUICFrameHandler >>>> { >>>> UDPConnection *_udp_con; >>>> ... >>>> ``` >>>> >>>> Finally, the QUICNetVConnection will inherits NetVConnection directly >>>> and managed by QUICNetHandler. >>>> >>>> Oknet Xu >>>> >>> >>> >> >