網路部分之link layer

2021-06-28 03:34:40 字數 1699 閱讀 4848

在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 ...