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
