Re: [MMUSIC] draft-ivov-dispatch-trickle-ice-sip/draft-ivov-mmusic-trickle-ice

Emil Ivov <emcho@jitsi.org> Thu, 04 April 2013 18:05 UTC

Return-Path: <emil@sip-communicator.org>
X-Original-To: mmusic@ietfa.amsl.com
Delivered-To: mmusic@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 7942E21F9452 for <mmusic@ietfa.amsl.com>; Thu, 4 Apr 2013 11:05:21 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -0.132
X-Spam-Level:
X-Spam-Status: No, score=-0.132 tagged_above=-999 required=5 tests=[AWL=-2.867, BAYES_00=-2.599, FH_HOST_ALMOST_IP=1.889, HOST_EQ_MODEMCABLE=1.368, J_CHICKENPOX_18=0.6, J_CHICKENPOX_19=0.6, RCVD_IN_SORBS_DUL=0.877]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id WCukav9tVjmw for <mmusic@ietfa.amsl.com>; Thu, 4 Apr 2013 11:05:20 -0700 (PDT)
Received: from mail-wi0-x22b.google.com (mail-wi0-x22b.google.com [IPv6:2a00:1450:400c:c05::22b]) by ietfa.amsl.com (Postfix) with ESMTP id D41D921F942C for <mmusic@ietf.org>; Thu, 4 Apr 2013 11:05:19 -0700 (PDT)
Received: by mail-wi0-f171.google.com with SMTP id hn17so4991617wib.10 for <mmusic@ietf.org>; Thu, 04 Apr 2013 11:05:18 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:message-id:date:from:organization:user-agent :mime-version:to:cc:subject:references:in-reply-to:content-type :content-transfer-encoding:x-gm-message-state; bh=1HYefznS+j7bk/ESoIvT1N0Cer6FwY5KRCw10VhEGKo=; b=mL5YbmnReD2yNWESF0WJN5n9PWXYlXxvg8y09rsN2MzW7MiZvvbYCtXBf1e/kIGfKD 2pqyfMmv/DiNoypl3ERIOLUPfNC75QFjNB5s9JUh+u980hAO9WG26kvDV11twbG2ZNpX UDMSvIJPqU/WcvYzm2m77ftKWiofsmv6ZvCDQJc16fwy4b/W2YkF/zSUBZgkvNYtyL9/ BWGyrSmeEUS+JEgK4PDEsLcS7dE81+02jEKag3b5t/IMyKDEqqDEwbmP+hylOyu4yKla hB/coyqHRFc2CjBfu55E/wdMMGASlurWi5mfqzYbTeUTSpfIg/tGlt9EiwYfujLoZsIS PzCw==
X-Received: by 10.180.92.229 with SMTP id cp5mr30871948wib.20.1365098718573; Thu, 04 Apr 2013 11:05:18 -0700 (PDT)
Received: from camionet.local (ip-15.net-81-220-185.rev.numericable.fr. [81.220.185.15]) by mx.google.com with ESMTPS id s2sm17773296wib.4.2013.04.04.11.05.16 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 04 Apr 2013 11:05:17 -0700 (PDT)
Message-ID: <515DC0DE.7010809@jitsi.org>
Date: Thu, 04 Apr 2013 20:05:18 +0200
From: Emil Ivov <emcho@jitsi.org>
Organization: Jitsi
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130328 Thunderbird/17.0.5
MIME-Version: 1.0
To: Marc Petit-Huguenin <petithug@acm.org>
References: <515AFCFE.7030608@acm.org> <515CB4F2.3010404@jitsi.org> <515D853C.6020107@alum.mit.edu> <515DAE70.7070106@acm.org>
In-Reply-To: <515DAE70.7070106@acm.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit
X-Gm-Message-State: ALoCoQlTPiaRt4RiUI/TMYQq8KS9l6kFwKxRrkwdu8CU2DM5m9L1EDw4UFHe0VyiZYWwx8h+WmOf
Cc: "mmusic@ietf.org" <mmusic@ietf.org>, Paul Kyzivat <pkyzivat@alum.mit.edu>
Subject: Re: [MMUSIC] draft-ivov-dispatch-trickle-ice-sip/draft-ivov-mmusic-trickle-ice
X-BeenThere: mmusic@ietf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: Multiparty Multimedia Session Control Working Group <mmusic.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/mmusic>, <mailto:mmusic-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/mmusic>
List-Post: <mailto:mmusic@ietf.org>
List-Help: <mailto:mmusic-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/mmusic>, <mailto:mmusic-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 04 Apr 2013 18:05:21 -0000

Hey Marc,

On 04.04.13, 18:46, Marc Petit-Huguenin wrote:
>>>> 1. Trickle ICE is not a new mechanism. It has been out there with XMPP 
>>>> for almost 8 years and it is now also part of WebRTC. SIP is the late 
>>>> arriver here and SIP implementations of trickle ICE are more likely to 
>>>> have to adapt to existing working systems than the other way around.
>>>> We therefore believed that it would be a good think to preserve as much
>>>> as possible the way that trickle ICE has been implemented with these
>>>> other protocols.
> 
> It is not the trickle mechanism that my original email tried to fix, but the
> mapping between this mechanism and SIP which, as you said yourself, is new so
> there is nothing to preserve here.

I get this. My point was that it would make sense to have it
interoperate easily. Specifically, if I am translating WebRTC into SIP,
I would just be getting individual a=candidate lines from WebRTC. It
would be nice if I could just paste that candidate in a SIP message and
send it through. It would be not so nice if I have to keep a state in
the gateway so that I can regenerate the entire candidate list every
time this happens.

Emil

>>> ISTM that there is likely to be a lot of sip-sip use, perhaps more than
>>> any other kind, perhaps not. If so, that would argue for something that
>>> most naturally integrates into existing sip signaling.
>>
>>>> 2. We do not need to use offer answer. The exchange of trickled 
>>>> candidates has nothing to do with offer/answer. It is simply 
>>>> communication between ICE agents, pretty much the way connectivity 
>>>> checks are. Trickled candidates are actually quite similar to 
>>>> peer-reflexive candidates in that they are learned outside of the 
>>>> offer-answer exchange. So, in other words, there is no reason
>>>> whatsoever that would really require use of offer/answer. There are
>>>> however many reasons not to:
>>
>>> Of course it has something to do with O/A. ICE is also exchanged in O/A.
>>> And the candidates you need to exchange are coupled to what was exchanged
>>> in O/A.
>>
>>> Suppose you do one O/A exchange including ICE candidates, and then one or
>>> both sides starts to trickle candidates with INFO. Then one side sends a
>>> new offer, that changes the m-lines in some way. Presumably it will also
>>> contain some ICE candidates. And then the other side sends another
>>> trickle ICE INFO. How do all of these things relate? Is this even legal?
>>
>>> Certainly you can set down a set of protocol rules so that it becomes
>>> well defined. But you are going to need to take the SIP O/A rules into
>>> account while doing that.
>>
>>>> 3. Glare and blocking. Alice INVITEs Bob with an ICE offer. Bob
>>>> answers. Both do full trickle. One O/A exchange has completed so now
>>>> either of them can re-Offer. Obviously, if both are trickling, there's
>>>> a pretty good chance for glare to occur. Also, after Bob sends a
>>>> re-offer with trickled candidates, and then immediately learns of new
>>>> candidates, it will not be able to immediately send them because it
>>>> needs to first obtain an answer from Alice. Alice on the other hand may
>>>> have nothing to say at the moment, but she may be giving it some
>>>> thought (i.e. waiting for some checks to complete).
>>
>>> You assume that a subsequent offer is used *only* to update trickle ICE.
>>> There are other reasons for a new offer.
>>
>>> Or are you assuming some constraints such as that first you do an O/A,
>>> and then agree not to do another one until all trickling for the first
>>> one has been completed?
>>
>>>> 4. Constantly updating the state of the offer answer machine. Oh my
>>>> ... I get goose bumps only thinking about it. Every time new candidates
>>>> are sent, new offers and answers will be exchanged. Clients would need
>>>> to make sure that their view of the O/A state is properly updated and
>>>> not only that but we would also need to make sure that:
>>>>
>>>> 5. All media aware intermediaries will also have to track the deluge
>>>> of offers and answers and update their own states. It should be
>>>> perfectly fine for such intermediaries to see the first offer and then
>>>> the updated ICE offer. And that's that.
>>
>>> That doesn't work so well for those intermediaries that gate media, and
>>> so won't let anything through (including ICE) until they have seen the
>>> address in signaling and opened the gate for it.
>>
>>>> 6. ... And all this diffing. To me difs, are one of the worst parts of 
>>>> the O/A model. Analysing thousands of bytes just to find that the only 
>>>> difference is an added a=sendonly attribute ... how did this ever
>>>> happen (in comparison XMPP only sends <hold/>).
>>
>>> It is called idempotence.
>>
>>> This presumes that you implement this by first finding the difference and
>>> then applying it to your current state, rather than just setting out to
>>> apply the entire new specification to your current state.
>>
>>> There are pros/cons to both ways, and its not surprising that people are
>>> most comfortable with the one most familiar to them.
>>
>>>> Adding the same thing for trickle would make for extremely complicated
>>>> code. You'd have to be prepared to update ICE state, remap your
>>>> streams, add new ones, change codecs, and basically redo your entire
>>>> session while trickling. Toe me it sounds like of of this is not even
>>>> possible. Why would we lock ourselves into something like this?
>>
>>> So what do you propose to happen if it *does* prove necessary to do a new
>>> O/A after trickling has begun? Are you going to put the all the trickled
>>> candidates into the offer? If not, are you going to require that the
>>> candidates be identical to what was in the prior offer?
>>
>>> ISTM you must confront this in any case.
>>
>>> Thanks, Paul
>>
>>>> Pretty much everyone in RAI agrees that SDP and O/A is something we
>>>> are just stuck with and that it would be great if we weren't. Well in
>>>> this case we aren't. So why would we do it? Unless we overlooked some 
>>>> substantial issue with INFO and that issue is resolved by use of O/A
>>>> and UPDATE, then I think it would really be best for everyone not to go
>>>> there :)
>>>>
>>>> Cheers, Emil
>>>>
>>
>> Here's the call flow:
>>
>> STUN/Turn                                                STUN/TURN Servers
>> Alice                      Bob          Servers |               |
>> |               | |<--------------|                         |
>> | |   Candidate   |                         |               | |   Discovery
>> |                         |               | (1)       |-------------->|
>> INVITE (Offer)          |               | |
>> |------------------------>|               | (2)       |               |
>> 183 (Answer) |-------------->| |               |<------------------------|
>> | |               | PRACK                   |               | |
>> |------------------------>|               | |               |
>> 200 PRACK |               | |               |<------------------------|
>> | |               |                         |               | (3)       |
>> |     UPDATE (more cands) |   Candidate   | |
>> |<------------------------|               | (4)       |               |
>> 200 UPDATE |               | |               |------------------------>|
>> Discovery   | |               |  Connectivity Checks    |               | |
>> |<=======================>|               | (5)       |               |
>> UPDATE (last cands) |<--------------| |
>> |<------------------------|               | (6)       |               |
>> 200 UPDATE |               | |               |------------------------>|
>> | |               |                     180 |               | |
>> |<------------------------|               | |               |  Connectivity
>> Checks    |               | |               |<=======================>|
>> | |               |                         |               | |
>> |             200 INVITE  |               | |
>> |<------------------------|               | |               |
>> |               | |               |    5245 SIP re-INVITE   |
>> | |               |------------------------>|               | |
>> |            200 reINVITE |               | |
>> |<------------------------|               | |               |
>> |               | |               |                         |
>> | |               |<===== MEDIA FLOWS =====>|               | |
>> |                         |               |
>>
>>
>> 3. Use accumulated candidate list
>>
>> As far as I understand the documents, the candidates are sent as soon as
>> they are discovered.  I think that it would be better to send an
>> accumulated list of candidates instead of the delta list of candidates.
>> The priority calculation and the elimination of redundant candidates do not
>> need to know the complete list of candidate to work, but sending the
>> accumulated list instead of a delta could permit in the future to remove
>> candidates, if we find a need to do so.  This also removed the need for
>> sdpfrag.
>>
>> But the most important reason is for the next step.
>>
>>
>> 4. Replace end-of-candidates attribute by precandidate attributes
>>
>> There is currently an end-of-candidates attribute that is sent to signal
>> the end of the candidate gathering phase.  I think it is better to do it
>> the opposite way, i.e. to send candidates as they are discovered under a
>> different attribute name, and then to send all the candidates only when the
>> gathering phase is done.  Here's the partial SDPs exchanged in the call
>> flow in 2) but skipping one update (examples are from RFC 5245):
>>
>> (1) Alice sends all the candidates after the end of the gathering phase 
>> (half-trickle).  She also signals that she supports trickle.
>>
>> a=ice-options:trickle a=candidate:1 1 UDP 2130706431 192.0.2.1 3478 typ
>> host
>>
>> (2) Bob knows that Alice supports half trickle, so he sends only the host 
>> candidates, which is all he has so far, but using the attribute
>> precandidate instead of candidate.  He sends them in a reliable 183:
>>
>> a=ice-options:trickle a=precandidate:1 1 UDP 2130706431 10.0.1.1 8998 typ
>> host a=precandidate:1 1 UDP 2130706431 10.0.1.2 8998 typ host
>>
>> If Bob supported ICE but not trickle, he would have answered with its
>> complete list of candidates.
>>
>> (3) Bob discovers some candidates, but there is more to come, so it sends
>> a accumulated list of precandidates:
>>
>> a=ice-options:trickle a=precandidate:1 1 UDP 2130706431 10.0.1.1 8998 typ
>> host a=precandidate:2 1 UDP 1694498815 192.0.2.3 45664 typ srflx raddr
>> 10.0.1.1 rport 8998 a=precandidate:1 1 UDP 2130706431 10.0.1.2 8998 typ
>> host
>>
>> (4)  Alice responds with the same SDP than in (1)
>>
>> (5) Bob receives the last batch of candidates, so now it sends an SDP 
>> containing the all the candidates, as if it did not understand trickle.:
>>
>> a=ice-options:trickle a=candidate:1 1 UDP 2130706431 10.0.1.1 8998 typ
>> host a=candidate:2 1 UDP 1694498815 192.0.2.3 45664 typ srflx raddr
>> 10.0.1.1 rport 8998 a=candidate:1 1 UDP 2130706431 10.0.1.2 8998 typ host
>>
>> (6) Alice sends back the same SDP.  Because Bob use candidate attributes 
>> instead of precandidate, she knows that she has all the candidates, as if 
>> end-of-candidates was received.
>>
>>>> _______________________________________________ mmusic mailing list 
>>>> mmusic@ietf.org https://www.ietf.org/mailman/listinfo/mmusic
>>>>
>>>
>>
>> _______________________________________________ mmusic mailing list 
>> mmusic@ietf.org https://www.ietf.org/mailman/listinfo/mmusic
>>
> 
> - -- 
> Marc Petit-Huguenin
> Email: marc@petit-huguenin.org
> Blog: http://blog.marc.petit-huguenin.org
> Profile: http://www.linkedin.com/in/petithug
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.12 (GNU/Linux)
> 
> iQIcBAEBCAAGBQJRXa5lAAoJECnERZXWan7E710QAN3hWWnsPCQw8iCFPHl6HxZ+
> Q48BfHNKKzHe3n0ApJxeRTm8w2M11nj4J6vC1OdAHpWDEElzeLJjMGExdnLBwxOy
> wHS3jDGgKA9DVw2kBox7IIHMpbOoW2UwCx0lwM3YkwL8q4xrb4F3FmTHA5gAGgks
> P/mXJdRR8DCP1oiWYQELb+QmnuvFgBYbcGBUBy8P+XfL7f04IPTe8Cre6DaXqmVP
> CfAToyeiQKo/WTa5rk7sKr2veqsSPmQ5ZnyyHxMy+K42mrC2CD43bNR+HjfvUa24
> pzZWxGQdNHZymccs0IP/TdP0N2oA4fv+TEVPsGLjHyUdTuObP7PunZvCDWFxls+S
> 3OOnTBILlor1BCUR50LtWPeqhjylFywQLTDHVdiz62b9URdfeQPT8ANJSVsplCpf
> //ep2AbRZEbdRtbfUjpSBs5uTX2N7SjJ50PRX0tqDlZ6E33GVFjjh9R/PHFLUrlV
> BQxN3vuEnXZJzas3j747eaEqDBENYF4RfDjJf237VQ4lFBTQHkkkHA5h5wr+Fl9N
> JKMNyrlTctvEOfJ9A11SCfikySjUuE+ZxMz6Z58teQqqatGWwJpMOlfZdDDHMAUA
> YC0PB2dPT6XbsRs9mhkqovMpzLoL9mlVz7LbKI+8Y9mIfVHNquerJR6x7D5JGGBA
> gmxM38lPaf5NLOzqEeAv
> =I//c
> -----END PGP SIGNATURE-----
> 

-- 
https://jitsi.org