Mitsuho Iizuka wrote:

> It seems they are equivalent according to the welknown mathematics
> formula ?
> 
>     !(A U B) = (!A && !B).

Predicate calculus (first-order logic), with the "for all" and "there 
exist" constructs, is a better model than just propositional calculus. 
There can, in a packet, be *more than one instance* of a field.

"{field} {op} {value}" means

        there exists an instance of the field {field} whose value "v" is such 
that v {op} {value}

so "tcp.port != 1035" means

        there exists an instance of "tcp.port" whose value is not equal to 1035.

Thus, "tcp.port != 1035 && tcp.port != 1036" means

        (there exists an instance of "tcp.port" whose value is not equal to 
1035) and (there exists an instance of "tcp.port" whose value is not 
equal to 1036)

with *NO* guarantee that the two instances of "tcp.port" are the same.

!(tcp.port == 1035 || tcp.port == 1036)" means

        it is not true that (there exists an instance of "tcp.port" whose value 
is equal to 1035 or there exists an instance of "tcp.port" whose value 
is equal to 1036)

The law you cite means that's equivalent to

        (it is not true that there exists an instance of "tcp.port" whose value 
is equal to 1035) and (it is not true that there exists an instance of 
"tcp.port" whose value is equal to 1036)

which is equivalent to

        (for all instances of "tcp.port", the value is not equal to 1035) and 
(for all instances of "tcp.port", the value is not equal to 1036)

which is not equivalent to

        (there exists an instance of "tcp.port" whose value is not equal to 
1035) and (there exists an instance of "tcp.port" whose value is not 
equal to 1036)

In particular, a packet with a source port of 1035 and a destination 
port of 1036 is matched by

        (there exists an instance of "tcp.port" whose value is not equal to 
1035) and (there exists an instance of "tcp.port" whose value is not 
equal to 1036)

as the second instance of "tcp.port" has a value of 1036, which is not 
1035, and the first instance of "tcp.port" has a value of 1035, which is 
not 1036.  That packet is, however, not matched by

        (for all instances of "tcp.port", the value is not equal to 1035) and 
(for all instances of "tcp.port", the value is not equal to 1036)

because the packet has one instance of "tcp.port" equal to 1035 and one 
instance of "tcp.port" equal to 1036.
> 
> It was long before. Anyway I have a simple packet dump now.
> 
> I looked at above Gotchas. But Gotchas paragraph seems to describe
> a different context.

Different in what fields it discusses (IP source and destination 
addresses, and the synthetic "ip.addr" field which is added for both of 
them, rather than TCP source and destination ports, and the synthetic 
"tcp.port" field which is added for both of them), but it's the same 
underlying problem ("X != Y" is *NOT* equivalent to "!(X == Y)" - the 
first is "there exists an X that is not equal to Y", the latter is "it 
is not the case that (there exists an X that is equal to Y)", which is 
"for all X, X is not equal to Y").
_______________________________________________
Wireshark-users mailing list
[email protected]
http://www.wireshark.org/mailman/listinfo/wireshark-users

Reply via email to