On May 3, 2012, at 9:40 PM, bbs wrote:

>     Recently I read a paper about nox and an sentence said "For TCP traffic 
> only the first packet header of a new flow is sent to the controller, while 
> for UDP all packets are relayed until a flow rule is in place". TCP flow 
> needs to receive SYN ack so there is only one packet arriving at the switch, 
> but UDP flow has persistent packets.
>     Previously I thought that the packets will be buffered. Is that right?

When a packet doesn't match a table entry, the packet (or at least some part of 
it) will be sent to the controller.  This is always true.  It doesn't matter if 
it's TCP, UDP, ICMP, or anything else at all -- OpenFlow switches should always 
behave the same way.  If a packet doesn't match a flow rule, it's sent to the 
controller.  (It may or may not be buffered on the switch -- that's actually up 
to the switch.)

In practice, this may have secondary effects.  If Host A sends a handshake 
packet of some sort to Host B (like TCP does) and won't send another packet 
until it receives some sort of handshake reply from Host B, then it will have 
to wait for the switch and the controller to have somehow forwarded the 
handshake packet (e.g., via a flow_mod) and for the same to have happened to 
Host B's reply before it will send additional packets.  There won't be any more 
packets from A to B for the controller TO buffer until that happens -- Host A 
is sitting there WAITING for the handshake reply.  This really has nothing to 
do with OpenFlow -- it's the design of the protocol itself.  Maybe *most* 
UDP-based protocols don't operate this way, but it's not fundamental to UDP at 
all.  One could easily implement a protocol on top of UDP that exhibits this 
behavior.

Hope that makes sense.

-- Murphy

Reply via email to