在100base-x
中,使用
4b/5b encoding。
這種編碼的特點是將欲傳送的資料流每4bit
作為乙個組,然後按照
4b/5b
編碼規則將其轉換成相應
5bit
碼。5bit
碼共有32
種組合,但只採用其中 的
16種對應
4bit
碼的16
種,其他的
16種或者未用或者用作控制碼,以表示幀的開始和結束、光纖線路的狀態(靜止、空閒、暫停)等。
8b/10b編碼與
4b/5b
的概念類似,例如在千兆乙太網中就採用了
8b/10b
的編碼方式。
有兩種方法:checksum
和 crc。
checksum用在高層協議,如:
tcp、ip、
udp等,用軟體很容易實現。
crc比較複雜,但可以用硬體很容易的實現(如:用移位暫存器和
exclusive-or
來實現),所以
ethernet
和wireless
的網絡卡晶元中實現了
crc校驗。
sk_buff的幾個關鍵的成員:
sk_buff_data_t transport_header;
sk_buff_data_t network_header;
sk_buff_data_t mac_header;
unsigned char *head, *data;
接收資料報
網絡卡收到乙個frame
後會產生乙個
interrupt
,cpu
的pipeline
會因此而中斷,轉向執行
handler
,該handler
會呼叫dev_alloc_skb()
分配乙個空的
sk_buff
,然後copy frame
到sk_buff
中,該handler
最後會通知核心以便做進一步的處理。
有兩種通知的機制:1
)netif_rx();2
)net_rx_action() for 2.6
,在高流量負荷中,
net_rx_action()
具有優勢,它有效的降低了
cpu load
。因為它採用了
interrupt
和polling
相結合的方式。它可以在乙個
interrupt
中將多個
frame
放到ingress queue
中,依次處理。而
netif_rx()
卻做不到這一點。
傳送資料報
有乙個對應的函式叫做net_tx_action()
,當乙個
soft interrupt net_tx_softirq發生時,它會被呼叫。它主要有兩個任務:1
)確保要傳送的
frame
確實被dev_queue_xmit()
傳送了2
)釋放sk_buff
。
陣列部分之和問題
乙個集合x有都不相同的n個元素,使用這個集合中的不定個數的元素,組成乙個和為s的序列,求出所有符合的序列,元素可以重複使用,只要元素的個數相同不考慮順序。比如集合是x n 5,s 12可以得出以下的序列 2 2 2 2 2 2 2 2 2 2 4 2 2 2 3 3 2 2 3 5 2 2 4 4 ...
鍊錶部分之單鏈表
鍊錶類 class heronode override public string tostring 新增 有兩種方法,頭插法和尾插法,頭插法新增的第乙個元素為鍊錶的最後乙個,新增順序與鍊錶順序相反 尾插法新增順序與鍊錶順序一致。我覺得頭插法有點不好理解,特別是鍊錶反轉的時候 下面新增只寫了尾插法的...
C 基礎知識部分之二
1 變數 c 中可以申請設定變數,然後在某些地方使用它。申請變數時最好賦初值,否則這些未初始化的變數通常會被賦予乙個半隨機值,這個值取決於當時記憶體中的內容,這個也是許多bug的 下面是常見的c 變數的型別 int signed 正整數或者負整數 short 短整型整數,通常是兩個位元組 long ...