您好,登錄后才能下訂單哦!
1 QoS簡介
QoS(Quality of Service,服務質量)指一個網絡能夠利用各種基礎技術,為指定的網絡通信提供更好的服務能力,是網絡的一種安全機制,是用來解決網絡延遲和阻塞等問題的一種技術。在正常情況下,如果網絡只用于特定的無時間限制的應用系統,并不需要QoS,比如Web應用,或E-mail設置等。但是對關鍵應用和多媒體應用就十分必要。當網絡過載或擁塞時,QoS 能確保重要業務量不受延遲或丟棄,同時保證網絡的高效運行。如提高QQ的所有數據報文優先級并設置dont_drop選項,保證QQ在網絡環境較差時不掉線。
2 QoS操作方法
QoS相關的操作命令有三個,添加(qosruleadd)、刪除(qosruledel)和查看(qoss)。
2.1 添加
如下是一條添加ip規則命令:
# qosruleadd en1 ip 192.168.31.1 192.168.31.5 SRC 5 no
其中“en1”表示網絡接口,“ip”表示規則針對的數據包類型,后面緊跟IP地址范圍。IP地址范圍之后為方法及表示這條規則針對源地址(SRC)、目的地址(DEST)還是所有地址(BOTH)都有效。方法后是優先級,范圍為1到7。最后是是否打開dont_drop選項及不丟包選項,“yes”就表示此包不會被協議棧丟失。
若針對tcp或udp的數據包類型,則需要加上對應的端口號范圍,如下:
# qosruleadd en1 tcp 192.168.31.1 192.168.31.5 1000 10010 BOTH 4 yes
2.2 查看
查看使用qoss命令,如圖 2.1所示。
圖 2.1 qoss查看
2.3 刪除
刪除時需要使用到網卡名和對應的序列號,即使用qoss查看得出的序列號,如下:
# qosruledel en1 0
3 QoS實現原理
3.1 QoS網絡層次
QoS層處于TCP/IP協議棧與netjob之間,解析每一個提交給協議棧和從協議棧發出的數據包。并針對不同類型的數據包按照指定的規則操作,基本結構如圖 3.1所示。
圖 3.1 QoS網絡層次結構
3.2 QoS數據結構
QoS相關的數據主要有2類,規則結構和QoS接口結構。規則結構又分TCP、UDP、IP三種,共4種結構,如程序清單 3.1所示。
程序清單 3.1 QoS數據結構
typedef struct {
LW_LIST_LINE QOSRI_lineManage; /* IP 規則管理鏈表 */
INT QOSRI_iRule;
INT QOSRI_iCmpMethod; /* srouce, destination, both */
ip4_addr_t QOSRI_ipaddrHboS; /* IP 段起始 IP 地址 */
ip4_addr_t QOSRI_ipaddrHboE; /* IP 段結束 IP 地址 */
u8_t QOSRI_ucPrio; /* QoS 優先級 */
u8_t QOSRI_ucDontDrop; /* QoS 可靠服務 */
} __QOS_RULE_IP;
typedef __QOS_RULE_IP *__PQOS_RULE_IP;
typedef struct {
LW_LIST_LINE QOSRU_lineManage; /* UDP 規則管理鏈表 */
INT QOSRU_iRule;
INT QOSRU_iCmpMethod; /* srouce, destination, both */
ip4_addr_t QOSRU_ipaddrHboS; /* IP 段起始 IP 地址 */
ip4_addr_t QOSRU_ipaddrHboE; /* IP 段結束 IP 地址 */
u16_t QOSRU_usPortHboS; /* 端口起始 主機序 */
u16_t QOSRU_usPortHboE; /* 端口結束 */
u8_t QOSRU_ucPrio; /* QoS 優先級 */
u8_t QOSRU_ucDontDrop; /* QoS 可靠服務 */
} __QOS_RULE_UDP;
typedef __QOS_RULE_UDP *__PQOS_RULE_UDP;
typedef struct {
LW_LIST_LINE QOSRT_lineManage; /* TCP 規則管理鏈表 */
INT QOSRT_iRule;
INT QOSRT_iCmpMethod; /* srouce, destination, both */
ip4_addr_t QOSRT_ipaddrHboS; /* IP 段起始 IP 地址 */
ip4_addr_t QOSRT_ipaddrHboE; /* IP 段結束 IP 地址 */
u16_t QOSRT_usPortHboS; /* 端口起始 主機序 */
u16_t QOSRT_usPortHboE; /* 端口結束 */
u8_t QOSRT_ucPrio; /* QoS 優先級 */
u8_t QOSRT_ucDontDrop; /* QoS 可靠服務 */
} __QOS_RULE_TCP;
typedef __QOS_RULE_TCP *__PQOS_RULE_TCP;
/*********************************************************************************************************
QoS 網絡接口結構
*********************************************************************************************************/
typedef struct {
LW_LIST_LINE QOSNI_lineHash; /* hash 表 */
LW_LIST_LINE_HEADER QOSNI_qosrnRule[__QOS_NETIF_RULE_MAX]; /* 規則表 */
CHAR QOSNI_cName[IF_NAMESIZE]; /* 網絡接口名 */
BOOL QOSNI_bAttached; /* 是否已經連接 */
} __QOS_NETIF_CB;
typedef __QOS_NETIF_CB *__PQOS_NETIF_CB;
3.3 QoS插入規則流程
插入一個新規則時會根據網絡接口名創建對應的QoS接口結構并放入QoS哈希表中,同樣將此QoS接口保存到對應的網絡接口結構中,以便此網絡接口有數據交換時可以查找對應的規則。如圖 3.2所示。
圖 3.2 QoS哈希表結構框圖
然后將對應的規則保存到QoS接口結構的規則鏈表中,若之后需加入相同網絡接口名的規則則添加到此鏈表中,如圖 3.3所示。
圖 3.3 QoS規則鏈表
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。