原创 skb_alloc()

/*allocate a network buffer, and init the skb->data and skb->tail to skb->head*/ struct sk_buff *alloc_skb(unsigned int

原创 關於recv()和send()的返回值

當發送數據量較大時,send()函數不會一次性將數據發送出去(send()實際只是把數據拷貝到緩衝區中,然後由協議來發送),而是分多次發送,所以其返回值小於想要發送的數據長度。   recv()函數會等待對方的發送緩衝中的數據被協議傳送完

原创 offsetof(TYPE, MEMBER)和 container_of(ptr, type, member)

offsetof(TYPE, MEMBER) 該宏在Linux內核代碼(版本2.6.22)中定義如下:#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER);   分析

原创 結構struct 聯合Union和枚舉Enum的細節討論

聯合(Union)是一種構造數據類型,它提供了一種使不同類型數據類型成員之間共享存儲空間的方法,同時可以實現不同類型數據成員之間的自動類型轉換。聯合體對象在同一時間只能存儲一個成員的值。聯合的內存大小取決於其中字節數最多的成員,而不是累加

原创 vlan相關

一、pvid:  端口vlan id.    從某個端口接收到的數據包將被賦予該端口的pvid 值,然後,將該數據包轉發到其目的地址(查看 交換機的轉發地址表)。如果接收數據包的端口的pvid 與將轉發該數據包的端口的pvid 不同,那麼

原创 非阻塞(O_NONBLOCK)

非阻塞I/O使我們的操作要麼成功,要麼立即返回錯誤,不被阻塞。 對於一個給定的描述符兩種方法對其指定非阻塞I/O: (1)調用open獲得描述符,並指定O_NONBLOCK標誌 (2)對已經打開的文件描述符,調用fcntl,打開O_NON

原创 IP包校驗和

RFC 1071中定義了Checksum的算法: (1) Adjacent octets to be checksummed are paired to form 16-bit integers, and the 1

原创 SNMP代理簡單開發

1、  參照網上到處能下到的《net-snmp安裝配置手冊》編譯安裝net-snmp5.4.2,並參照《net-snmp安裝配置手冊》進行相應配置。 2、  根據ASN.1語法編寫MIB庫BAMBOO-MIB.txt。內容如下: BAMB

原创 [精華] 網絡socket編程指南

    Beej網絡socket編程指南 -------------------------------------------------------------------------------- 介紹   Socket 編

原创 主動FTP和被動FTP

主動FTP 主動方式的FTP是這樣的:客戶端從一個任意的非特權端口N(N>1024)連接到FTP服務器的命令端口,也就是21端口。然後客戶端開始端口N+1,併發送FTP命令“port N+1”到FTP服務器。接着服務器會從它自己的數據端

原创 SSL握手過程

一、SSL握手有三個目的:1. 客戶端與服務器需要就一組用於保護數據的算法達成一致;2. 它們需要確立一組由那些算法所使用的加密密鑰;3. 握手還可以選擇對客戶端進行認證。 二、SSL握手過程:1. 客戶端將它所支持的算法列表和一個用作產

原创 連接追蹤表

連接追蹤表它會記錄修改前的源、目的 IP,以及修改後的源、目的 IP,並以 hash 結構存儲當數據包過來時,無論是從外網還是內網過來,都逃不開上述兩種情況,如果不屬於上述兩種情況,則一定不是表裏的內容如果查到表,則自動取出需要轉換後的數

原创 C語言常用宏定義技巧

1、防止一個頭文件被重複包含#ifndef COMDEF_H#define COMDEF_H //頭文件內容#endif2、重新定義一些類型,防止由於各種平臺和編譯器的不同,而產生的類型字節數差異,方便移植。typedef  unsig

原创 openssl靜態編譯和動態編譯

1、靜態編譯 ./Configure linux-elf-arm -DB_ENDIAN linux:'armeb-linux-gcc -mbig-endian' --prefix=$(pwd)/OpenSSL a、 將openssl-0.

原创 main函數和啓動例程

2. main函數和啓動例程 請點評爲什麼彙編程序的入口是_start,而C程序的入口是main函數呢?本節就來解釋這個問題。在講例 18.1 “最簡單的彙編程序”時,我們的彙編和鏈接步驟是: $ as hello.s -o hello.