Re: [hybi] Ping/Pong body (was Re: TSV-Directorate review of draft-ietf-hybi-thewebsocketprotocol-07)

Bruce Atherton <bruce@callenish.com> Sun, 22 May 2011 21:03 UTC

Return-Path: <bruce@callenish.com>
X-Original-To: hybi@ietfa.amsl.com
Delivered-To: hybi@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id E745BE068F for <hybi@ietfa.amsl.com>; Sun, 22 May 2011 14:03:26 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.599
X-Spam-Level:
X-Spam-Status: No, score=-2.599 tagged_above=-999 required=5 tests=[AWL=0.001, BAYES_00=-2.599]
Received: from mail.ietf.org ([64.170.98.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id D5jHkUaqTX6b for <hybi@ietfa.amsl.com>; Sun, 22 May 2011 14:03:25 -0700 (PDT)
Received: from biz82.inmotionhosting.com (biz82.inmotionhosting.com [74.124.202.87]) by ietfa.amsl.com (Postfix) with ESMTP id E3649E0651 for <hybi@ietf.org>; Sun, 22 May 2011 14:03:25 -0700 (PDT)
Received: from [24.108.133.142] (helo=[192.168.145.101]) by biz82.inmotionhosting.com with esmtpa (Exim 4.69) (envelope-from <bruce@callenish.com>) id 1QOEdI-0000kc-7x for hybi@ietf.org; Sun, 22 May 2011 12:48:12 -0700
Message-ID: <4DD9686C.7020509@callenish.com>
Date: Sun, 22 May 2011 12:47:56 -0700
From: Bruce Atherton <bruce@callenish.com>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.17) Gecko/20110414 Lightning/1.0b2 Thunderbird/3.1.10
MIME-Version: 1.0
To: "hybi@ietf.org" <hybi@ietf.org>
References: <ED13A76FCE9E96498B049688227AEA292C6A81E4@TK5EX14MBXC206.redmond.corp.microsoft.com>
In-Reply-To: <ED13A76FCE9E96498B049688227AEA292C6A81E4@TK5EX14MBXC206.redmond.corp.microsoft.com>
Content-Type: text/plain; charset="ISO-8859-1"; format="flowed"
Content-Transfer-Encoding: 7bit
X-AntiAbuse: This header was added to track abuse, please include it with any abuse report
X-AntiAbuse: Primary Hostname - biz82.inmotionhosting.com
X-AntiAbuse: Original Domain - ietf.org
X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12]
X-AntiAbuse: Sender Address Domain - callenish.com
Subject: Re: [hybi] Ping/Pong body (was Re: TSV-Directorate review of draft-ietf-hybi-thewebsocketprotocol-07)
X-BeenThere: hybi@ietf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: Server-Initiated HTTP <hybi.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/hybi>, <mailto:hybi-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/hybi>
List-Post: <mailto:hybi@ietf.org>
List-Help: <mailto:hybi-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/hybi>, <mailto:hybi-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sun, 22 May 2011 21:03:27 -0000

It seems there are still a number of issues around Ping/Pong. Here are 
my thoughts on them:

1) Should multiple Pings be allowed before a response Pong is received?

Surely this is the business of the implementation/application and not 
the specification. If someone has a use for such a thing, why not allow it?

2) Should Ping and Pong be allowed to have a body?

I think it is a useful and desirable feature. It allows matching Pongs 
to Pings, as well as being an area for experimenting with new ideas in 
how the Ping and Pong are used.

The argument has been brought up that the bodies are useless without a 
standard way of interpreting them. This is absolutely true. Why not 
allow experimentation so that people can come up with standards for them?

What is the downside to allowing it?

3) Should there be an indicator for unsolicited Pongs and/or Pings that 
need no response.

I don't see why this is necessary or desirable so long as the body of 
the Pong in some way indicates the Ping it is responding to. Allowing 
unsolicited Pongs removes any usecase for Pings without responses as far 
as I can see. As far as unsolicited Pongs go, if the Pong body does not 
match a Ping that was sent out, then surely it can be assumed to be an 
unsolicited Pong.

What is the marker trying to indicate? That if we have a Pong that 
claims to be solicited and does not match the Ping body that there is a 
bug in the server implementation, or perhaps that the server is mistaken 
in the client it thinks it is communicating with? Is this really necessary?

4) Should we allow the Pong body to contain extra data beyond just 
echoing the Ping body?

Again, I think this is a harmless way to allow experimentation on uses 
for Ping and Pong. I don't see any reason for disallowing it.

It has been claimed that there could not be any value in allowing 
additional information because Ping/Pong frames run at a higher priority 
than other Websocket traffic, and so any data they carry on network 
characteristics would not reflect the behaviour of other data in the 
channel. This makes a couple of assumptions that I think are 
questionable. First, are all possible uses of Ping and Pong concerned 
with network characteristics? Even if so, are all possible network 
characteristics rendered moot by higher priority traffic? I don't see it 
necessarily follows that these two assumptions are valid.

So if it were up to me, I would just change the spec to indicate that 
the Pong must respond with the Ping body, but is allowed to add any data 
it wishes to afterward. In fact, you could even change it to respond 
with just a hash of the Ping body followed by any other data it wanted 
to (SHA1 + Base64 for consistency).

I wouldn't add in a flag for unsolicited vs. solicited Pongs since the 
Pong response does that for us by indicating the Ping it is responding 
to, but if others wanted it then I wouldn't stand in their way. 
Although, if you are going to specify a byte for a single flag then you 
may want to indicate the other 7 bits are reserved for future use.