Flow-based Cost Query
draft-gao-alto-fcs-01
Kai Gao 1 J. Jensen Zhang 2 J. Austin Wang 2 Qiao Xiang 3 Y. Richard Yang 3
1 Tsinghua University 2 Tongji University 3 Yale University
Flow-based Cost Query draft-gao-alto-fcs-01 Kai Gao 1 J. Jensen - - PowerPoint PPT Presentation
Flow-based Cost Query draft-gao-alto-fcs-01 Kai Gao 1 J. Jensen Zhang 2 J. Austin Wang 2 Qiao Xiang 3 Y. Richard Yang 3 1 Tsinghua University 2 Tongji University 3 Yale University March 31@IETF 98 Flow-based Design in a Nutshell Cost Services:
draft-gao-alto-fcs-01
1 Tsinghua University 2 Tongji University 3 Yale University
2
Cost Services: Cost Map (Non-Query Service), Filtered Cost Map, ECS (Query Service) Motivations:
➜ Extend the query scheme ➜ Augment request or introduce new media-type of request
➜ Effect both request and response ➜ Why not introduce a new resource (service)? (incomplete) ➜ Why not introduce a unified resource (service)? (complete) Previous work:
Major update since -00:
3
○ <src, dst> (downward compatible) ○ {attribute -> value} (novel specification)
○ “Boolean flow-query-support;”? ○ “JSONString support-attributes<1..*>;”? ○ TLV dependencies?
○ CommodityFilter? FlowNameFilter? FlowSpecFilter?
○ Provide statistics? Exploration? Warning?
Flow expression: { “src”: “tcp:192.168.1.2:80”, “dst”: “tcp:192.168.1.3:51234” }
Advanced Flow Encoding
○ Same format as a PIDName [RFC7285#Section 10.1]
○ <protocol-name>:<field-name>
Flow expression: “ssh-flow”: { “ipv4:source”: “192.168.1.2”, “ipv4:destination”: “192.168.1.3”, “tcp:destination”: 22, “ethernet:vlan-id”: 20 }
4
Basic Flow Encoding
○ <src, dst>
○ <protocol>:<address|name>[:<port>]
Object { JSONString cost-type-names<1..*>; [JSONBool cost-constraints;] [JSONBool flow-based-filter;] [JSONString protocols<1..*>;] } FlowFilteredCostMapCapabilities; { // ECS IRD Example “cost-type-names”: [“pv-ane”], “flow-based-filter”: true, “protocols”: [“ipv4”, “tcp”, “udp”] } { // ECS Request Example “cost-type”: {“cost-mode”: “path-vector”, “cost-metric”: “ane”}, “flows”: [{“src”: “tcp:10.0.0.1:8080”, “dst”: “tcp:10.0.0.2:51234”}] }
5
Object { JSONString cost-type-names<1..*>; TypedHeaderField required<1..*>; [TypedHeaderField optional<1..*>;] [JSONBool cost-constraints;] } FlowCostMapCapabilities; { // FCS IRD Example “cost-type-names”: [“pv-ane”], “required”: [“ipv4:src”, “ipv4:dst”], “optional”: [“tcp:src”, “tcp:dst”] } { // FCS Request Example “cost-type”: ..., “flows”: { “test-l3-flow”: { “ipv4:src”: “10.0.0.1”, “ipv4:dst”: “10.0.0.2”, “tcp:src”: “8080”, “tcp:dst”: “51234”} }}
// Statistics (Recommended) { “test-l3-flow”: {“min”: 20, “max”: 40, “avg”: 30, “var”: 50}, } // How to deal with the path vector? // List all the potential paths { “test-l3-flow”: [20, 40], // Means two different path matching the same flow spec } // How to work with multi-cost extension together? // Warning { “test-l3-flow”: “MP”, } // The client may waste a query (this result is useless for the client)
6
Notice that it is not a flow-based-specific issue. It exists for both flow-based query and non-flow-based query
Basic Flow-based Error Handling
EndpointURI -> DstErrors; } EndpointCostErrorMap;
EndpointURI -> EndpointFilterError; [JSONString unsupported;] } DstErrors;
[JSONString conflicts<2..2>;] [JSONString unsupported;] } EndpointFilterError;
Advanced Flow-based Error Handling
FlowId -> FlowCostError; } FlowCostErrorMap;
[TypedHeaderField conflicts<2..*>;] [TypedHeadreField missing<2..*>;] [TypedHeaderField unsupported<1..*>;] } FlowFilterError;
7
8
○ Client-defined: specify the flow definition in the request -> TLV dependencies? ○ Server-defined: maybe in a prop-map, provided to the client for querying
Open discussion: possible to use property map to implement flow-based query?
○ Declare the supported header fields for each endpoints?
○ List all supported flows? (Too complex. A huge map)
○ Depends on the flow definitions
9
○ { “properties”: [“ipv4:src”, “tcp:src”], “constraints”: [“[1] eq 8080”]}
○ “flow-cost-prop-map” uses “flow-spec-prop-map” ○ The client can send a joint query:
10
HTTP/1.1 OK { “flow-spec-prop-map”: { “properties”: [“ipv4:src”, “tcp:src”], “constraints”: [“[0] eq 10.0.0.1”, “[1] eq 8080”] }, “flow-cost-prop-map”: { “entities”: “flow-spec-prop-map.keys”, “properties”: [“cost”] } }
11
{ “test-l3-flow-agg”: { “ipv4:src”: “10.0.1.0/24”, “ipv4:dst”: “10.0.2.0/24”, “eth:vlan-id”: “10” } }
Status:
Next Step:
12
13
14
15
Object { FlowFilterMap flows; } FlowCostRequest : MultiCostRequestBase; Object { [CostType cost-type;] [CostType multi-cost-types<1..*>;] [CostType testable-cost-types<1..*>;] [JSONString constraints<0..*>;] [JSONString or-constraints<0..*><0..*>;] } MultiCostRequestBase; Object-map { FlowId -> FlowFilter; } FlowFilterMap; Object-map { TypedHeaderField -> JSONValue; } FlowFilter; Object { CostType cost-type; [JSONString constraints<0..*>;] EndpointFilter endpoints; } ReqEndpointCostMap; Object { [EndpointDescriptor srcs<0..*>;] [EndpointDescriptor dsts<0..*>;] } EndpointFilter; EndpointDescriptor := protocol:address:port | protocol:address
16
{ “cost-type”: { “cost-mode”: “numerical”, “cost-metric”: “routingcost” }, “flows”: { “l3-flow”: { “ipv4:source”: “192.168.1.1”, “ipv4:DESTination”: “192.168.1.2” }, “optional-l3-flow”: { “ipv4:sourcE”: “192.168.1.1”, “Ipv4:destination”: “192.168.1.2”, “ethernet:sOuRce”: “12:34:56:78:00:01”, “ethernet:destination”: “12:34:56:78:00:02” } } } { “cost-type”: { “cost-mode”: “ordinal”, “cost-metric”: “routingcost” }, “endpoints”: { “srcs”: [“ipv4:192.168.1.1”], “dsts”: [ “ssh:192.168.1.2”, “http:192.168.1.2”, “tcp:192.168.1.3:6655” ] } }
17
18
both FCS/ECS
query
○ Combine the results of all paths and use standard deviation: 1 - | deviation / mean | ○ Select only one path and use the probability: P(|selected path|)/P(all possible path)
19
{"meta": {"cost-type": { "cost-mode": "numerical", "cost-metric": "routingcost" },}, "flow-cost-map": { "l3-flow": 10, "l3-flow-aggr": 50, "optional-l3-flow": 5, }, "flow-cost-confidences": { "l3-flow": 70, "l3-flow-aggr": 40, "optional-l3-flow": 90 } }
Conflict/Missing/Unsupported
failures and partial recoveries (useful when combined with incremental updates)
20
FlowId -> FlowCostError; } FlowCostErrorMap;
[TypedHeaderField conflicts<2..*>;] [TypedHeadreField missing<2..*>;] [TypedHeaderField unsupported<1..*>;] } FlowFilterError;
○ Multi-cost ○ Calendar ○ Path vector
21
○ Original (ECS): IP addresses/prefixes ○ draft-wang-alto-ecs-flow: Tuples encoded as URI ○ FCS: Tuples similar to OpenFlow match
○ Use case: flow scheduling ○ ECS may not be efficient
○ Flow-based cost map ○ Cost confidence: evaluating the effects of ambiguous paths ○ Flow-based error map
22
Design related:
○ For example, a client must query a flow with tcp:source port for fine-grained result. But the client cannot decide which tcp:source port will be used when the application executed.
Implementation related:
23
Network routing trends to be fine-grained
24
H1 H3 SW1 SW2 SW3 Flow1 (tcp:dest==21) Flow2 (tcp:dest==22)
O Expressive O Accurate
H2 Flow3 (tcp:dest==443)
Network routing trends to be fine-grained
25
H1 H3 SW1 SW2 SW3
O Expressive O Accurate
H2
Network routing trends to be fine-grained
26
H1 H3 SW1 SW2 SW3
O Expressive O Accurate
H2
Network routing trends to be fine-grained
27
H1 H3 SW1 SW2 SW3
O Expressive O Accurate
H2
Network routing trends to be fine-grained
28
H1 H3 SW1 SW2 SW3 Flow1 (tcp:dest==21) Flow2 (tcp:dest==22)
O Expressive O Accurate
H2
Flow correlation: the costs of different flows are related
29
H1 H3 SW1 SW3 Flow1 Flow2
O Side-effect O Non-peer
H2 SW2 SW4 H4 SW5 SW6 Flow3 Flow4