{"id":713,"date":"2017-06-20T01:47:18","date_gmt":"2017-06-19T17:47:18","guid":{"rendered":"https:\/\/laszlo.tw\/?p=713"},"modified":"2021-05-04T04:46:25","modified_gmt":"2021-05-04T04:46:25","slug":"p4%e8%88%87openflow%e4%b9%8b%e9%96%93%e7%9a%84%e5%b7%ae%e7%95%b0","status":"publish","type":"post","link":"https:\/\/blog.laszlo.tw\/?p=713","title":{"rendered":"P4\u8207OpenFlow\u4e4b\u9593\u7684\u5dee\u7570(\u7ffb\u8b6f)"},"content":{"rendered":"<p>Origin from: <a href=\"http:\/\/p4.org\/p4\/clarifying-the-differences-between-p4-and-openflow\/\">Clarifying the differences between P4 and OpenFlow<\/a><\/p>\n<p><!--more--><\/p>\n<p>\u5e7e\u500b\u4eba\u66fe\u554f\u904e P4 \u8207 OpenFlow \u4e4b\u9593\u7684\u5dee\u7570\u662f\u4ec0\u9ebc\u3002P4 \u53ea\u662f\u53e6\u4e00\u7a2e\u7248\u672c\u7684 OpenFlow\u55ce\uff1f\u5728\u6b64\u6587\u7ae0\u6211\u5011\u5c07\u6703\u89e3\u91cb\u70ba\u4f55 P4 \u6bd4\u8d77 OpenFlow \u53ef\u4ee5\u89e3\u6c7a\u4e00\u500b\u66f4\u70ba\u666e\u904d\u7684\u554f\u984c\u3002\u5728 P4 \u4e2d\uff0cOpenFlow \u662f\u773e\u591a\u53ef\u80fd\u7684\u7a0b\u5f0f\u4e4b\u4e00\u4f86\u63cf\u8ff0 forwarding plane \u600e\u9ebc\u904b\u884c\u3002P4 \u4e0d\u662f\u5982\u67d0\u4e9b\u4eba\u5efa\u8b70\u7684\u90a3\u6a23\u662f OpenFlow 2.0\u3002\u96d6\u7136\u4ed6\u5011\u90fd\u5c08\u6ce8\u65bc\u5728\u958b\u653e\u5f0f forwarding plane\uff0cP4 \u89e3\u6c7a\u4e86\u7db2\u8def\u4e2d\u7684\u90a3\u4e9b\u9700\u8981\u7a0b\u5f0f\u5316data plane\u7684\u4e0d\u540c\u9700\u6c42\u3002<\/p>\n<p>\u65e9\u5728 2007 \u5e74\uff0c\u7576 OpenFlow \u7b2c\u4e00\u6b21\u88ab\u63d0\u51fa\uff0c\u6211\u5011\u5e0c\u671b\u900f\u904e\u4e00\u7a2e\u8edf\u9ad4&nbsp;control planes \u7684\u65b9\u5f0f\u4f86\u9060\u7aef\u63a7\u5236\u8a31\u591a\u4e0d\u540c\u7684 switches\u3002\u6211\u5011\u767c\u73fe\u5230\u5728\u5927\u90e8\u5206\u7684\u7db2\u8def\u4e2d switch \u90fd\u505a\u76f8\u540c\u7684\u4e8b\u60c5\uff1aEthernet, IPv4, Access Control Lists (ACLs), VLANs \u8af8\u5982\u6b64\u985e\u3002\u5982\u679c\u6211\u5011\u80fd\u5b9a\u7fa9\u4e00\u7a2e\u6a19\u6e96\u4e14\u958b\u653e\u7684\u4ecb\u9762\u4f86\u5efa\u7acb switch \u5167\u7684 forwarding tables (\u67e5\u8a62Ethernet address\u7684hash tables\u548c\u7528\u65bcACL\u4e2dIPv4\u8207wildcard\u67e5\u8a62\u7684longest-prefix match tables)\uff0c\u6211\u5011\u4fbf\u53ef\u4ee5\u5275\u9020 control planes \u4f86\u63a7\u5236\u4f86\u81ea\u5404\u7a2e\u4e0d\u540c\u4f9b\u61c9\u5546\u7684 switch\u3002\u9019\u500b\u60f3\u6cd5\u5f88\u7c21\u55ae (\u96d6\u7136\u4e00\u4e9b\u4f9b\u61c9\u5546\u5bb3\u6015\u5546\u54c1\u5316\u4ed6\u5011\u7684 switch \u7522\u54c1\u4e26\u4e14\u591a\u5c11\u6703\u5a01\u8105\u5230\u4ed6\u5011\u7684\u5229\u6f64)\u3002\u4e3b\u8981\u76ee\u6a19\u662f\u4f7f\u90a3\u4e9b\u60f3\u8981\u5275\u9020\u66f4\u597d\u7db2\u8defcontrol planes\u7684\u4eba\u66f4\u5bb9\u6613\u9054\u6210\u3002\u6211\u5011\u53ef\u4ee5\u770b\u898b\u9019\u78ba\u5be6\u6709\u6548\uff0c\u5982\u540c\u4eca\u65e5\u8a31\u591a\u5927\u578b data centers\u900f\u904e\u81ea\u88fd\u7684control planes\u4e2d\u5229\u7528\u90e8\u5206\u6216\u662f\u5168\u90e8\u7684\u958b\u653e\u5f0fdata plane\u4ecb\u9762\u6240\u5efa\u7acb\u800c\u6210\u7684\u3002<\/p>\n<p>\u91cd\u8981\u7684\u662f\u8a18\u5f97 OpenFlow \u662f\u5047\u5b9a switch \u6709\u56fa\u5b9a\u4e26\u5df2\u77e5\u7684\u884c\u70ba\u4e14\u901a\u5e38\u63cf\u8ff0\u65bcswitch ASIC\u6676\u7247\u7684\u6578\u64da\u8868\u4e2d\u3002\u50b3\u7d71\u7684\u9ad8\u6027\u80fdswitch\u6676\u7247\u80fd\u652f\u63f4\u56fa\u5b9a\u7684\u5354\u5b9a\u56e0\u70ba\u4ed6\u5011\u76f4\u63a5\u5728\u77fd\u6676\u7247\u4e2d\u5be6\u73fe\u4e86IEEE\u8207IETF \u6a19\u6e96\u5354\u5b9a\u3002\u4f60\u4e0d\u80fd\u6539\u8b8a\u4ed6\u5011\u7684\u884c\u70ba\u6216\u662f\u65b0\u589e\u65b0\u7684\u5354\u8b70\u6216\u662f\u7528\u65b0\u65b9\u6cd5\u4f86\u6e2c\u91cf\u6216\u63a7\u5236\u6578\u64da (\u4eca\u65e5\u5728\u56fa\u5b9a\u529f\u80fdASIC\u4e2d\u65b0\u589e\u4e00\u500b\u5354\u8b70\u9700\u8981\u82b1\u4e0a\u56db\u5e74\u7684\u6642\u9593\uff01) \u56e0\u6b64\u7b2c\u4e00\u7248\u7684 OpenFlow \u53ea\u80fd\u5920\u5efa\u7acb\u5e38\u898b\u7684\u56db\u7a2e\u5354\u5b9a\u8868 (Ethernet, VLANs, IPv4, ACLs)\u3002\u96a8\u8457\u9700\u6c42\u589e\u9577\uff0c\u8d8a\u4f86\u8d8a\u591a\u7a2e\u7684header\u88ab\u52a0\u9032 OpenFlow \u4e2d\uff0c\u50cf\u662fIPv6\u3001MPLS \u8207 VXLAN\u3002 \u4eca\u5929 OpenFlow \u5141\u8a31\u6211\u5011\u5728&nbsp;forwarding entries \u589e\u52a0\u6216\u522a\u9664\u7d04\u4e94\u5341\u7a2e\u4e0d\u540c\u7684header\u7a2e\u985e\u3002Switch\u4f9b\u61c9\u5546\u53ef\u4ee5\u4f7f\u7528Open Networking Foundation (ONF)\u4e2d\u7684Table Type Patterns (TTP)\u6a19\u6e96\u4f86\u544a\u77e5control plane\u652f\u63f4\u54ea\u4e9bheaders\u3002OpenFlow \u4e26\u4e0d\u662f\u771f\u6b63\u63a7\u5236 switch \u7684\u884c\u70ba\uff0c\u800c\u662f\u7d66\u4e86\u6211\u5011\u4e00\u500b\u5efa\u7acb\u4e00\u5957\u5df2\u77e5\u8868\u683c\u7684\u65b9\u6cd5\u3002<\/p>\n<p>\u4f60\u53ef\u80fd\u5df2\u7d93\u8a8d\u8b58 OpenFlow \u4e26\u60f3\u77e5\u9053\u5b83\u662f\u5426\u6703\u652f\u63f4\u8d8a\u4f86\u8d8a\u591a\u7684 headers \u3002\u9019\u662f\u5f88\u591a\u4eba\u6240\u64d4\u5fc3\u7684\u554f\u984c\u3002\u662f\u56e0\u65bc&nbsp;switch \u6676\u7247\u7279\u6027\u4f7f OpenFlow \u5f37\u5236\u59a5\u5354\u3002\u9019\u7a2e&nbsp;Switch \u6676\u7247\u662f\u4e0d\u53ef\u4ee5\u908a\u7a0b\u7684\u7279\u6027\u6211\u5011\u8996\u70ba\u7406\u6240\u7576\u7136\u3002\u5982\u679c\u4ed6\u5011\u8981\u662f\u53ef\u7de8\u7a0b\uff0c\u6211\u5011\u4fbf\u4e0d\u9700\u8981\u50cf\u662fOpenFlow\u9019\u7a2e\u56fa\u5b9a\u7684 protocol \u3002 \u53cd\u4e4b\uff0c\u6211\u5011\u53ef\u4ee5\u7c21\u55ae\u7684\u544a\u8a34 switch \u5982\u4f55\u8655\u7406\u5c01\u5305\u4ee5\u53ca\u8981\u4fdd\u7559\u54ea\u4e9b tables \u3002\u7a0b\u5f0f\u8a2d\u8a08\u5e2b\u53ef\u4ee5\u5b9a\u7fa9\u4efb\u4f55\u6709\u610f\u7fa9\u7684 API \u4f86\u586b\u5145 switches \u4e2d\u5efa\u7acb\u7684 tables\u3002<\/p>\n<p>\u90a3\u9ebc\u70ba\u4ec0\u9ebc switch \u7684\u6676\u7247\u662f\u56fa\u5b9a\u529f\u80fd\u7684\u5462\uff1f \u9019\u662f\u4e00\u500b\u5f88\u597d\u7684\u554f\u984c\uff0c\u662f\u9019\u4e9b\u7db2\u8def\u4e2d\u8996\u70ba\u201c\u5e38\u898f\u7684\u667a\u6167\u201d (\u6216\u795e\u8056\u4e0d\u53ef\u4fb5\u72af)\u5e38\u5e38\u91cd\u65b0\u63a2\u8a0e\u7684\u554f\u984c\u4e4b\u4e00\u3002<span style=\"color: #ff0000;\">\u5728\u904e\u53bb\u53ef\u4ee5\u7de8\u7a0b\u7684 switch \u6676\u7247\u53ea\u80fd\u7d04\u4ee5\u56fa\u5b9a\u5f0f\u7684ASICs(\u8a18\u5f97NPUs?)\u76841\/10\u62161\/100\u7684\u901f\u5ea6\u8655\u7406\u5c01\u5305\u3002\u4f46\u662f\u4eca\u5929\u5728\u5e02\u5834\u4e0a\u5df2\u6709\u8207\u6700\u5feb\u901f\u56fa\u5b9a\u5f0f switch \u8655\u7406\u901f\u5ea6\u8fd1\u4e4e\u76f8\u540c\u7684\u53ef\u914d\u7f6e\u6676\u7247<\/span>\u3002\u6211\u5011\u9032\u4e00\u6b65\u7684\u5c55\u793a\u6587\u7ae0 &#8211; <span style=\"color: #3366ff;\"><a href=\"http:\/\/conferences.sigcomm.org\/sigcomm\/2013\/papers\/sigcomm\/p99.pdf\">\u53ef\u7de8\u7a0b\u7684switch\u9054\u5230\u8ddf\u56fa\u5b9a\u5f0f\u904b\u884c\u901f\u5ea6\u4e00\u6a23\u5feb<\/a><\/span>\u3002\u6211\u5011\u7a31\u547c\u9019\u7a2e\u53ef\u7de8\u7a0b\u7684\u6676\u7247\u70ba\u201cPISA\u201d(Protocol Independent Switch Architecture)\u3002\u5982\u679c\u53ef\u7de8\u7a0b PISA \u6676\u7247\u904b\u884c\u7684\u8ddf\u56fa\u5b9a\u5f0f\u7684\u4e00\u6a23\u5feb\uff0c\u90a3\u9ebc\u6211\u5011\u4fbf\u80fd\u5920\u958b\u95e2\u4e00\u500b\u53ef\u4ee5\u5b9a\u7fa9 switch \u5982\u4f55\u8655\u7406\u5c01\u5305\u7684\u65b0\u7db2\u8def\u6642\u4ee3\u3002\u6b64\u5916\uff0c\u5982\u679c\u6211\u5011\u5b9a\u7fa9\u4e00\u500b\u8a9e\u8a00\u4f86\u8a2d\u8a08\u5feb\u901f\u7684switch\u4e5f\u53ef\u4ee5\u4f7f\u7528\u76f8\u540c\u7684\u8a9e\u8a00\u4f86\u8a2d\u8a08\u8f03\u6162\u7684&nbsp;switches \u50cf\u662f\u4f7f\u7528NPUs\u3001 FPGAs \u6216\u662f\u8edf\u9ad4 switch (\u5982vSwitch)\u3002\u6211\u5011\u8a8d\u70ba\u5982\u679c\u6211\u5011\u80fd\u627e\u5230\u4e00\u7a2e\u8a9e\u8a00\u4f86\u7de8\u7a0b\u7db2\u8def\u4e2d\u7684\u6bcf\u4e00\u53f0 switch\uff0c\u90a3\u9ebc switch \u9593\u7684\u4e92\u901a\u6027\u5e7e\u4e4e\u7acb\u523b\u5be6\u73fe \u2013 \u80fd\u5920\u4ee5\u76f8\u540c\u7684\u65b9\u5f0f\u5c0d\u6240\u6709 switch \u9032\u884c\u7de8\u7a0b\u3002\u751a\u81f3\u4e5f\u80fd\u4f7f\u7528\u76f8\u540c\u7684\u8a9e\u8a00\u4f86\u660e\u78ba\u63cf\u8ff0\u56fa\u5b9a\u5f0f\u7684ASICs switch\uff0c\u800c\u4e0d\u662f\u5fc5\u9808\u4f9d\u8cf4\u4ee5\u82f1\u6587\u7406\u89e3\u4e0d\u660e\u78ba\u7684\u6578\u64da\u8868 (\u4f8b\u5982\u5728\u6a19\u6e96\u624b\u518a\u4e2d\u7406\u89e3SHOULD\u8207MAY\u610f\u7fa9)\u3002<\/p>\n<p>\u6240\u4ee5\u57282013\u5e74\uff0c\u8003\u616e\u5230\u9019\u4e9b\u76ee\u6a19\uff0c\u4f86\u81eaGoogle, Intel, Microsoft, Stanford, Princeton,\u4ee5\u53ca Barefoot \u7684\u5718\u968a\u958b\u59cb\u8a2d\u8a08P4 language\u3002<\/p>\n<p><a href=\"https:\/\/laszlo.tw\/wp-content\/uploads\/2017\/06\/p4-openflow.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-776 size-full\" src=\"https:\/\/laszlo.tw\/wp-content\/uploads\/2017\/06\/p4-openflow.png\" alt=\"\" width=\"2559\" height=\"1437\" srcset=\"https:\/\/blog.laszlo.tw\/wp-content\/uploads\/2017\/06\/p4-openflow.png 2559w, https:\/\/blog.laszlo.tw\/wp-content\/uploads\/2017\/06\/p4-openflow-300x168.png 300w, https:\/\/blog.laszlo.tw\/wp-content\/uploads\/2017\/06\/p4-openflow-768x431.png 768w, https:\/\/blog.laszlo.tw\/wp-content\/uploads\/2017\/06\/p4-openflow-1024x575.png 1024w\" sizes=\"auto, (max-width: 2559px) 100vw, 2559px\" \/><\/a>P4 \u6210\u70ba\u9019\u7a2e\u201cbottom-up\u201d\u7db2\u8def\u6a21\u5f0f\u9818\u982d\u3002P4 \u7d66\u4e88\u6211\u5011\u80fd\u5920\u544a\u8a34 switch \u8a72\u600e\u9ebc\u505a\u4ee5\u53ca\u8a72\u5982\u4f55\u8655\u7406\u5c01\u5305\u7684\u80fd\u529b\u800c\u4e0d\u662f\u8b93 switch \u9650\u5236\u6211\u5011\u80fd\u5920\u505a\u7684\u4e8b\u60c5\u3002P4 \u8b93\u6211\u5011\u80fd\u5b9a\u7fa9 switch \u80fd\u8fa8\u8b58\u600e\u6a23\u7684 header (\u6216\u662f\u201cparse\u201d)\uff0c \u5982\u4f55\u6839\u64da\u6bcf\u500b header \u4f86 match\uff0c\u4ee5\u53ca\u8a72\u6839\u64da\u6bcf\u500bheader\u8a72\u63a1\u53d6\u600e\u6a23\u7684action\u3002\u8209\u4f8b\u4f86\u8aaa\uff0c\u6211\u5011\u53ef\u80fd\u6703\u544a\u8a34 switch \u4f7f\u7528longest-prefix match \u8655\u7406 IPv4 headers\u768432-bit destination address\uff0c\u5c07\u5b83\u9001\u81f3next hop\uff0c\u78ba\u8a8dTTL\u4e26\u6e1b\u5c11\u4e4b\uff0c\u66f4\u65b0checksum\u6700\u5f8c\u91cd\u65b0\u5c01\u88dd\u65b0\u7684Ethernet header\u3002\u5354\u5b9a\u53ea\u662f\u4e00\u500b\u5728P4\u4e2d\u88ab\u9673\u8ff0\u7684\u7a0b\u5f0f\u3002 P4 \u7cbe\u6e96\u660e\u78ba\u7684\u6307\u51fa headers \u8a72\u5982\u4f55 match \u4e14\u8a72\u5be6\u884c\u4ec0\u9ebc\u6a23\u7684 actions\u3002\u4e8b\u5be6\u4e0a, \u4f60\u53ef\u4ee5\u76f4\u63a5\u7de8\u8b6f P4 \u7684\u7a0b\u5f0f\u4f86\u76f4\u63a5\u7522\u751f\u4e00\u500b\u53ef\u4ee5\u57f7\u884c\u7684 switch \u2013 \u5df2\u7d93\u5b58\u5728\u7684 open-source \u7de8\u8b6f\u5668\u7528\u4f86\u6e2c\u8a66\u65b0\u7684 switch \u529f\u80fd\u3002\u4e00\u4e9b\u516c\u53f8\u5df2\u7d93\u52a0\u5165\u4e86P4.org \u5354\u52a9\u793e\u7fa4\u767c\u5c55\uff0c\u90e8\u5206\u4e5f\u5c55\u793a\u4e86P4 \u89e3\u6c7a\u65b9\u6848\u4e26\u63d0\u4f9b\u5ba2\u6236\u5de5\u5177\u96c6\u3002<\/p>\n<p>\u56e0\u6b64\u85c9\u7531\u5148\u6307\u5b9a\u8f49\u767c\u7684\u884c\u70ba\u7136\u5f8c\u586b\u5145\u6211\u5011\u5b9a\u7fa9\u7684 table\uff0cP4 \u8b93\u6211\u5011\u4ee5\u201ctop-down\u201d\u7684\u65b9\u5f0f\u4f86\u63a7\u5236 switch\u3002\u6b64\u5916\uff0cP4 \u7de8\u8b6f\u5668\u901a\u5e38\u4e5f\u6703\u81ea\u52d5\u7522\u751f\u7528\u4f86\u586b\u5145 table\u7528\u7684 API\u3002\u9019\u4f7f\u4eca\u5929\u80fd\u5920\u5ee2\u9664 switch \u6676\u7247\u7684\u56fa\u5b9a\u5c01\u9589\u7684API\u3002\u800c\u4e0d\u662f\u8b93switch\u6676\u7247\u5546\u70ba\u6211\u5011\u5b9a\u7fa9API\u4e26\u7d81\u5b9a\u6211\u5011\u4f7f\u7528\u4f9b\u61c9\u5546\u7684\u4e0b\u500b\u6676\u7247\uff0cP4 \u8b93\u6211\u5011\u80fd\u5b9a\u7fa9\u5fc5\u9808\u586b\u5145&nbsp;switch \u7528\u7684 API\u3002\u6211\u5011\u8aaaP4\u662f\u201ctop-down\u201d\u662f\u56e0\u70ba\u5b83\u8b93\u7db2\u8def\u67b6\u69cb\u5e2b\u3001\u7a0b\u5f0f\u8a2d\u8a08\u5e2b\u4ee5\u53ca\u958b\u767c\u8005\u4e3b\u5bb0\u800c\u4e0d\u662f\u90a3\u4e9b\u6676\u7247\u4f9b\u61c9\u5546\u3002<\/p>\n<p>OpenFlow \u5c0d\u65bc\u8655\u65bc\u652f\u63f4OpenFlow\u56fa\u5b9a\u5f0f\u4ee5\u53ca\u53ef\u7a0b\u5f0f\u5316 switch \u7684\u6df7\u5408\u7db2\u8def\u4f86\u8aaa\u662f\u7d55\u5c0d\u4ecd\u7136\u6709\u7528\u3002\u4e8b\u5be6\u4e0a\uff0c\u5df2\u7d93\u6709\u500b\u540d\u70ba <span style=\"color: #3366ff;\"><a href=\"https:\/\/github.com\/p4lang\/switch\/blob\/master\/p4src\/openflow.p4\">openflow.p4<\/a><\/span>&nbsp;\u7528\u4f86\u8a2d\u8a08PISA\u652f\u63f4 OpenFlow \u7684P4\u7a0b\u5f0f\u53ef\u4ee5\u4f7f\u7528\u3002\u63db\u53e5\u8a71\u8aaa\uff0cOpenFlow\u5728P4\u8a9e\u8a00\u4e2d\u53ea\u662f\u4e00\u500b\u7a0b\u5e8f\u3002\u5982\u6b64 OpenFlow \u8207 P4 \u53ef\u4ee5\u540c\u6642\u5728\u7db2\u8def\u4e2d\u76f8\u4e92\u904b\u4f5c\u3002\u7136\u800c <span style=\"color: #ff0000;\">OpenFlow \u662f\u88ab\u8a2d\u8a08\u4f86\u5c07 SDN networks \u4e2d control plane \u8207 forwarding plane \u5206\u96e2\uff0cP4 \u5247\u662f\u8a2d\u8a08\u4f86\u7a0b\u5f0f\u5316\u4efb\u4f55&nbsp;switch \u6216 router \u7684\u884c\u70ba\uff0c\u800c\u4e0d\u7ba1\u662f\u900f\u904eOS\u7684\u672c\u6a5f\u63a7\u5236\u6216\u662f\u9060\u7aef SDN controller\u6240\u63a7\u5236<\/span>\u3002<\/p>\n<p>\u6c92\u6709\u7279\u5225\u7684\u7406\u7531\u8a8d\u70baP4\u5c07\u6703\u8b93 OpenFlow \u5728\u4e0d\u4e45\u4e4b\u5f8c\u904e\u6642\u3002\u5e02\u5834\u4e0a\u4ecd\u6709\u5927\u91cf\u56fa\u5b9a\u5f0fASICs switch\u4e26\u4e14\u5176\u4e2d\u5f88\u591a\u53ef\u4ee5\u900f\u904eOpenFlow\u9032\u884c\u63a7\u5236\u3002\u4e8b\u5be6\u4e0a\uff0c\u96a8\u8457\u6108\u591a\u7684\u56fa\u5b9a\u5f0fswitch\u6676\u7247\u900f\u904eTTPs\u6a19\u6e96\u8a2d\u8a08\uff0c\u5c31\u6709\u66f4\u597d\u7406\u7531\u8a8d\u70ba OpenFlow \u6703\u5b58\u5728\u4e00\u6bb5\u6642\u9593\u3002P4 \u63d0\u4f9b\u4e86\u4e00\u7a2e\u5efa\u69cb\u53ef\u7de8\u7a0b\u8207\u56fa\u5b9a\u5f0fswitch\u6df7\u5408\u7db2\u8def\u7684\u7121\u7e2b\u65b9\u5f0f\u4e26\u8b93\u6211\u5011\u80fd\u4ee5\u8edf\u9ad4\u7684\u65b9\u5f0f\u5f15\u9032\u65b0\u7684\u529f\u80fd\u8207\u5354\u5b9a\u800c\u4e0d\u662f\u9700\u8981\u7b49\u5f85\u65b0\u7684\u786c\u9ad4\u3002\u800c P4 \u8a2d\u8a08\u5e2b\u80fd\u4fdd\u6709\u8207\u4ed6\u4eba\u5340\u5206\u7684\u7368\u7279\u529f\u80fd\uff0c\u800c\u4e0d\u662f\u5fc5\u9808\u8207\u6676\u7247\u4f9b\u61c9\u5546\u5206\u4eab\u6240\u6709\u6771\u897f\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Origin from: Clarifying t<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/blog.laszlo.tw\/?p=713\">\u95b1\u8b80\u5168\u6587<span class=\"screen-reader-text\">P4\u8207OpenFlow\u4e4b\u9593\u7684\u5dee\u7570(\u7ffb\u8b6f)<\/span><\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[15],"tags":[47,46,92,49,48],"class_list":["post-713","post","type-post","status-publish","format-standard","hentry","category-p4","tag-openflow","tag-p4","tag-sdn","tag-translation","tag-48","entry"],"_links":{"self":[{"href":"https:\/\/blog.laszlo.tw\/index.php?rest_route=\/wp\/v2\/posts\/713","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.laszlo.tw\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.laszlo.tw\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.laszlo.tw\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.laszlo.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=713"}],"version-history":[{"count":86,"href":"https:\/\/blog.laszlo.tw\/index.php?rest_route=\/wp\/v2\/posts\/713\/revisions"}],"predecessor-version":[{"id":1193,"href":"https:\/\/blog.laszlo.tw\/index.php?rest_route=\/wp\/v2\/posts\/713\/revisions\/1193"}],"wp:attachment":[{"href":"https:\/\/blog.laszlo.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=713"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.laszlo.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=713"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.laszlo.tw\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=713"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}