資料從主機進入線路這段旅程,需要經過以下幾個環節:
1、應用程式首先將要傳送的資料寫入該程序的記憶體位址空間中,通常在程式開發中這只需要一般的執行時變數賦值即可。
2、應用程式通過系統函式庫介面(比如send函式)向核心發出函式呼叫,由系統核心來進行隨後的操作,它將這些資料從使用者態記憶體區複製到核心維護的一段成為核心緩衝區的記憶體位址空間。這塊位址空間的大小通常是有限的,所以要傳送的資料將以佇列的形式進入這裡,這些資料可能來自於多個程序,每塊資料都有一定的額外記號來標記它們的去向。如果要傳送的資料比較多,那麼該系統呼叫需要多次執行,每次賦值一定的資料大小,這個大小取決於網路資料報的大小以及核心緩衝區的承載能力。重複的系統呼叫體現在應用程式設計層面重複呼叫send函式。
3、當資料寫入核心緩衝區後,核心會通知網絡卡控制器前來取資料,同時cpu轉而處理其他程序。網絡卡控制器接到通知後,便根據網絡卡驅動資訊得知對應核心緩衝區的位址,將要傳送的資料複製到網絡卡的緩衝區中。注意在以上一系列的資料複製中,資料始終按照連線兩端裝置的內部匯流排寬度來複製,也就是位元組的整數倍,比如在32位匯流排的主機系統中,採用pci-x匯流排介面的網絡卡一般使用32位匯流排寬度,那麼從核心緩衝區到網絡卡緩衝區的資料複製過程中,任何時刻只能複製32位位元資訊。
5、傳送時,網絡卡會使用內部特定的物理裝置來生成可以傳播的各種訊號,比如在使用銅線線路時,網絡卡會根據「0」和「1」的變化產生不同的電訊號;而使用光纖線路時,網絡卡會產生不同的光訊號。
如何使用C 傳送網路資料
步驟如下 1.新建乙個超大的 char p 陣列.大到足夠容納你所需要的資料為止 2.將每乙個string的內容放到這個 p陣列裡面.比如 如果是 std string 就 strcpy p,str.c str 如果是 std wstring 就 memcpy p,str.c str str.siz...
網絡卡如何傳送和接收資料報
網絡卡如何傳送資料報 文章出處 http blog.21ic.org user1 1066 archives 2007 40803.html ip報文可以看作乙個包。linux網絡卡驅動程式,將ip包新增14位元組的mac包頭,構成mac包。mac包中含有傳送端和接收端的mac位址資訊。既然是驅動程...
乙太網資料報如何傳送
在乙太網中資料報是如何傳送的?ip和mac有什麼關係呢?下面所講的資料傳送只設計網路層和資料鏈路層。在linux下。在區域網內,一台主機h1 192.168.1.110 想傳送資料給主機h2 192.168.1.111 時。資料是怎樣過去的呢?首先h1會檢視自己的route table 命令rout...