SylixOS 網路協議棧lwip介紹2-----UDP資料傳送流程
UDP資料包的傳送是通過sendto()發起的(其他介面類似),整體實現流
程如下:
(1) 通過檔案描述符fd獲取檔案結構,並提取lwipfd。再通過lwipfd從socket表中獲取socket結構。Socket結構中包含了此udp連結中的connect資訊;
(2) 使用netbuf_alloc(),建立netbuf結構,這其中包含了pbuf結構。向這個結構匯入需要傳送的資料;
(3) Netbuf結構最終會傳入udp_send()或udp_sendto(),這其中會通過ip_route()確定最終需要傳送的網絡卡結構netif;
(4) Udp_sendto_if_src()新增udp包頭;
(5) If_output_if_src()新增IP包頭;
(6) 根據網絡卡結構netif獲取傳送介面netdev_netif_linkoutput(),最終呼叫網絡卡傳送函式dm9000_transmit();
傳送流程圖如下:
相關推薦
SylixOS 網路協議棧lwip介紹2-----UDP資料傳送流程
UDP資料包的傳送是通過sendto()發起的(其他介面類似),整體實現流 程如下: (1) 通過檔案描述符fd獲取檔案結構,並提取lwipfd。再通過lwipfd從socket表中獲取socket結構。Socket結構中包含了此udp連結中的connec
SylixOS 網路協議棧lwip介紹3-----udp資料接收
資料包接收包括兩個部分。首先網絡卡獲取一個數據包並使用中斷通知系統,系統解析這個資料包放入緩衝佇列中。再由應用層呼叫介面recv()或recvfrom()獲取這個資料包。 1、中斷接收 (1) 系統在初始化時會註冊網絡卡中斷,處理函式為dm9000IntI
SylixOS 網路協議棧lwip介紹1-----pbuf結構
SylixOS網路協議棧使用目前非常流行的嵌入式TCP/IP協議棧lwip。lwip是瑞典電腦科學院(SICS)的AdamDunkels 開發的一個小型開源的TCP/IP協議棧。lwip特點是對RAM與ROM的佔用非常少,只需十幾KB的RAM和40
SylixOS網路協議棧---Lwip協議棧之ARP表
1 適用範圍 本文件適用於分析SylixOS網路相關問題的技術人員。 2 ARP介紹 地址解析協議,即ARP(Address Resolution Protocol),是根據IP地址獲取實體地址的一個TCP/IP協議。主機發送資訊時將包含目標IP地址的
Linux 核心網路協議棧 中最重要的資料結構 SKB
在計算機的世界裡,備份是一種美德。-------------漫步雲端 作為核心網路協議部分最重要的資料結構SKB,有很多值得仔細推敲的問題。 SKB這種說法實際包含了兩部分,即skb描述符和skb資料。 Skb描述符即核心中的skbuff結構體,裡面含有大量的指標變數
-1-7 java 網路程式設計基本知識點 計算機網路 TCP/IP協議棧 通訊必備 tcp udp
Socket和ServerSocket 建立客戶端和伺服器端 建立連線後,通過Socket中的IO流進行資料的傳輸 關閉socket 同樣,客戶端與伺服器端是兩個獨立的應用程式。
學習Linux-4.12核心網路協議棧(2.1)——介面層加快傳輸速率的特性
前面花了好多篇幅,終於將網路協議棧的初始化相關的內容介紹完了,也就是說完成前面的那些步驟以後,網路協議棧具備了資料包的收發功能。在網路介面層,它只負責資料包的接收與傳送,而不關注資料包在網路層的型別是什麼,所以傳輸速率的快慢往往與介面層的處理有著密切的關係,下面我們來了解一下在提供傳輸速率上面,現在的核心都
學習Linux-4.12核心網路協議棧(2.2)——介面層資料包的接收(上半部)
前面寫了這麼多,終於可以開始分析資料報的傳輸過程了,那我們就愉快的開始吧! 我們知道,一箇中斷處理函式主要分兩個部分,上半部和下半部,這篇文章主要介紹上半部分。 當一個數據包到達的時候,網絡卡驅動會完成接收並且觸發中斷,我們就從這個中斷處理函式開始: 當一箇中斷產生併發送
Linux 核心網路協議棧 ----- Linux 核心路由機制(一) (2.6.25)
核心的路由部分是是網路中重要部分,目前在Linux核心中預設的路由查詢演算法使用的是Hash查詢,所以你會看到很多的資料結構是XXX_hash什麼之類(例如fn_hash)。Linux核心從2.1開始就支援基於策略的路由,那麼什麼是基於策略的路由呢?我們一般
Linux 核心網路協議棧 ------sk_buff 結構體 以及 完全解釋 (2.6.16)
在2.6.24之後這個結構體有了較大的變化,此處先說一說2.6.16版本的sk_buff,以及解釋一些問題。 一、 先直觀的看一下這個結構體~~~~~~~~~~~~~~~~~~~~~~在下面解釋每個欄位的意義~~~~~~~~~~~ struct sk_buff {
Linux 核心網路協議棧 -sk_buff結構體
sk_buff結構體是linux網路程式碼中最重要的資料結構,是整個網路傳輸載體。所以sk_buff結構體裡面有很多關於其他功能的成員欄位,比如:防火牆,子路由系統,多播等。這些欄位並不是一定有的,只有在滿足特點條件才有的。 sk_buff結構體是雙鏈表結構,sk_buf
Linux 核心網路協議棧 ------ 擁塞避免處理函式 tcp_reno_cong_avoid
慢啟動和快速重傳擁塞避免演算法,函式tcp_reno_cong_avoid 在“慢開始”階段,每收到一個ACK,cwnd++一次,那麼一個RTT之後,cwnd就會加倍 擁塞避免階段,其實就是在一個RTT時間內將cwnd++一次( 注意在不丟包的情況下 ) /* *
學習Linux-4.12核心網路協議棧(1.6)——協議棧的初始化(inet_init實現過程)
這篇文章主要分析inet_init()函式的實現過程: 1796 static int __init inet_init(void) 1797 { 1798 struct inet_protosw *q; 1799 struct list_head *r;
開放原始碼的TCPIP協議棧--LwIP
1、BSD TCP/IP協議棧 BSD棧歷史上是其他商業棧的起點,大多數專業TCP/IP棧(VxWorks內嵌的TCP/IP 棧)是BSD棧派生的。這是因為BSD棧在BSD許可協議下提供了這些專業棧的雛形,BSD許用證允許BSD棧以修改
學習Linux-4.12核心網路協議棧(1.7)——網路裝置的初始化(struct net_device)
在linux的網路裝置裡,其中一個最關鍵的結構體應該要算net_device了,它由對應的網路裝置驅動進行建立和初始化,服務於核心網路子系統。 1. struct net_device 註釋分析 struct net_device這個結構體比較大,在瞭解它之前,我們先看一下
linux網路協議棧(五)網路層 (1)L2與L3
5.1、L2與L3: 網路的目的是使可以訪問不同主機的資源,僅以最簡單的使用如訪問我們軟體四部閘道器技術組的伺服器,是通過訪問192.168.36.XXX的IP地址達到訪問那臺主機的目的,而我們自己的主機IP都是192.168.10.XXX,我們的主機和閘道器技術組的主機不
學習Linux-4.12核心網路協議棧(1.5)——協議棧的初始化(inet_init主要資料結構)
前面瞭解到網路初始化申請了兩塊skb快取記憶體和建立了一個/proc/net/protocols檔案,現在開始重頭戲,網路協議棧的初始化。這篇文章主要介紹網路棧中使用到的主要資料結構。 網路協議棧的核心實現和理論上的分層有些不一樣,在程式碼裡面的分層如下圖: 開始前,
linux核心網路協議棧學習筆記(6)
本篇討論IP包的收發(暫不包括路由) 先來看inet_init, 首先是呼叫proto_register,註冊了tcp_prot, udp_prot, raw_prot,其中proto_register前半部分是初始化各種slab_cache,後半部分把這些struct
linux網路協議棧(四)鏈路層 (5)vlan處理
4.6、VLAN處理: 4.6.1、vlan原理 對於帶vlan的乙太網報文,其乙太網型別為0x8100,所以鏈路層中對於帶vlan報文的處理就是對於乙太網型別為0x8100的報文的處理; vlan,用於在鏈路層劃分廣播域,實現資料在鏈路層分流,在二層交換機中,vlan實際
Linux 網路協議棧開發(一)—— 網路協議棧核心分析
1.1 傳送端 1.1.1 應用層 (1) Socket 應用層的各種網路應用程式基本上都是通過 Linux Socket 程式設計介面來和核心空間的網路協議棧通訊的。Linux Socket 是從 BSD Socket 發展而來的,它是 Linux 作業系統的重要組成部分之一,它是網路應用程式