0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

lwip協(xié)議棧代碼分析

傅里葉的貓 ? 來(lái)源:傅里葉的貓 ? 2023-10-29 17:37 ? 次閱讀

lwIP(Lightweight IP)是一個(gè)為嵌入式系統(tǒng)設(shè)計(jì)的輕量級(jí)TCP/IP協(xié)議棧。它旨在為資源受限的環(huán)境提供完整的網(wǎng)絡(luò)協(xié)議功能,同時(shí)保持低內(nèi)存使用和代碼大小。由于其模塊化的設(shè)計(jì),開發(fā)者可以根據(jù)需要選擇包含或排除特定功能,以滿足特定應(yīng)用的資源要求。

Xilinx的lwIP是基于開源lwIP TCP/IP協(xié)議棧的一個(gè)適應(yīng)版本,專門為Xilinx的硬件平臺(tái),如Zynq-7000和MicroBlaze,進(jìn)行了優(yōu)化和集成。Xilinx為其硬件平臺(tái)提供了lwIP的庫(kù),使得開發(fā)者可以輕松地在其FPGA和SoC設(shè)計(jì)中實(shí)現(xiàn)網(wǎng)絡(luò)通信功能。

以lwip TCP Perf Client為例,這是一個(gè)fpga作為TCP Client,像TCP Server發(fā)送批量數(shù)據(jù),并測(cè)試傳輸性能的例程。

255d8102-7634-11ee-939d-92fbcf53809c.png

TCP參數(shù)

先看幾個(gè)TCP相關(guān)的參數(shù)

TCP_CONN_PORT表示TCP的端口號(hào),在Server中,需要指定該端口號(hào),如果發(fā)現(xiàn)tcp一直不通,但ping是可以通的,多半原因是這個(gè)端口被占用了;

TCP_SERVER_IP_ADDRESS表示TCP Server的IP地址

2571fede-7634-11ee-939d-92fbcf53809c.png

FPGA的IP地址是在main.c里面指定的:

258f1e88-7634-11ee-939d-92fbcf53809c.png

如果TCP Server使用網(wǎng)絡(luò)調(diào)試助手接收數(shù)據(jù),設(shè)置如下:(需要注意,本地端口號(hào)應(yīng)該是5001,跟代碼中匹配)

259e9386-7634-11ee-939d-92fbcf53809c.png

main函數(shù)

main函數(shù)的內(nèi)容如下:

intmain(void)
{
structnetif*netif;

/*themacaddressoftheboard.thisshouldbeuniqueperboard*/
unsignedcharmac_ethernet_address[]={
0x00,0x0a,0x35,0x00,0x01,0x02};

netif=&server_netif;
#ifdefined(__arm__)&&!defined(ARMR5)
#ifXPAR_GIGE_PCS_PMA_SGMII_CORE_PRESENT==1||
XPAR_GIGE_PCS_PMA_1000BASEX_CORE_PRESENT==1
ProgramSi5324();
ProgramSfpPhy();
#endif
#endif

/*DefinethisboardspecificmacroinorderperformPHYreset
*onZCU102
*/
#ifdefXPS_BOARD_ZCU102
IicPhyReset();
#endif

init_platform();

xil_printf("

");
xil_printf("-----lwIPRAWModeTCPClientApplication-----
");

/*initializelwIP*/
lwip_init();

/*Addnetworkinterfacetothenetif_list,andsetitasdefault*/
if(!xemac_add(netif,NULL,NULL,NULL,mac_ethernet_address,
PLATFORM_EMAC_BASEADDR)){
xil_printf("ErroraddingN/Winterface
");
return-1;
}

netif_set_default(netif);

/*nowenableinterrupts*/
platform_enable_interrupts();

/*specifythatthenetworkifisup*/
netif_set_up(netif);
assign_default_ip(&(netif->ip_addr),&(netif->netmask),&(netif->gw));
print_ip_settings(&(netif->ip_addr),&(netif->netmask),&(netif->gw));

xil_printf("
");

/*printappheader*/
print_app_header();

/*starttheapplication*/
start_application();
xil_printf("
");

while(1){
if(TcpFastTmrFlag){
tcp_fasttmr();
TcpFastTmrFlag=0;
}
if(TcpSlowTmrFlag){
tcp_slowtmr();
TcpSlowTmrFlag=0;
}
xemacif_input(netif);
transfer_data();
}

/*neverreached*/
cleanup_platform();

return0;
}

在main函數(shù)中,首先就是定義各種網(wǎng)口接口相關(guān)的變量,并定義了MAC地址。

netif

這個(gè)netif的指針,需要多關(guān)注一下。

在lwIP中,netif(網(wǎng)絡(luò)接口)是一個(gè)核心的結(jié)構(gòu)體,它代表了一個(gè)網(wǎng)絡(luò)接口,例如以太網(wǎng)接口、Wi-Fi接口等。netif結(jié)構(gòu)體用于定義和管理這些接口,使lwIP可以在多個(gè)接口上運(yùn)行并進(jìn)行路由決策。

具體來(lái)說,netif結(jié)構(gòu)體包括了以下幾個(gè)主要的部分:

硬件地址:例如MAC地址。

IP地址、子網(wǎng)掩碼和網(wǎng)關(guān):這些用于IP層的路由和地址決策。

狀態(tài)標(biāo)志:表示接口的狀態(tài),例如是否激活、是否為默認(rèn)接口等。

輸入和輸出函數(shù)指針:這些函數(shù)用于處理從該接口接收到的數(shù)據(jù)包或向該接口發(fā)送數(shù)據(jù)包。

其他驅(qū)動(dòng)特定的數(shù)據(jù):例如用于DMA的描述符、緩沖區(qū)等。

當(dāng)你在lwIP中添加一個(gè)新的網(wǎng)絡(luò)接口時(shí),你通常會(huì)初始化一個(gè)netif結(jié)構(gòu)體并使用netif_add()函數(shù)將其添加到lwIP的接口列表中。這樣,lwIP就可以開始在該接口上接收和發(fā)送數(shù)據(jù)包了。

簡(jiǎn)而言之,netif是lwIP中用于表示和管理網(wǎng)絡(luò)接口的關(guān)鍵結(jié)構(gòu)體。

init_platform

在init_platform()函數(shù)中,初始化定時(shí)器和中斷。

25b878c8-7634-11ee-939d-92fbcf53809c.png

接下來(lái)就是lwip的初始化,這三個(gè)初始化都是在platform的庫(kù)里面寫好的,直接調(diào)用就行。

xemac_add

后面xemac_add的原型如下,可以簡(jiǎn)單理解為設(shè)置網(wǎng)口的mac地址,此處沒有設(shè)置IP的信息,可以看到傳進(jìn)去的參數(shù)都是NULL。

structnetif*
xemac_add(structnetif*netif,
ip_addr_t*ipaddr,ip_addr_t*netmask,ip_addr_t*gw,
unsignedchar*mac_ethernet_address,
UINTPTRmac_baseaddr)

netif_set_default

netif_set_default函數(shù)在lwIP中用于設(shè)置默認(rèn)的網(wǎng)絡(luò)接口。在一個(gè)系統(tǒng)中可能存在多個(gè)網(wǎng)絡(luò)接口,但通常只有一個(gè)被視為默認(rèn)接口。當(dāng)lwIP需要發(fā)送數(shù)據(jù)包,但不知道應(yīng)該通過哪個(gè)接口發(fā)送時(shí),它會(huì)選擇默認(rèn)接口。

函數(shù)原型如下:

/**
*@ingroupnetif
*Setanetworkinterfaceasthedefaultnetworkinterface
*(usedtooutputallpacketsforwhichnospecificrouteisfound)
*
*@paramnetifthedefaultnetworkinterface
*/
void
netif_set_default(structnetif*netif)
{
LWIP_ASSERT_CORE_LOCKED();

if(netif==NULL){
/*removedefaultroute*/
mib2_remove_route_ip4(1,netif);
}else{
/*installdefaultroute*/
mib2_add_route_ip4(1,netif);
}
netif_default=netif;
LWIP_DEBUGF(NETIF_DEBUG,("netif:settingdefaultinterface%c%c
",
netif?netif->name[0]:''',netif?netif->name[1]:'''));
}

其中,netif是你希望設(shè)置為默認(rèn)的網(wǎng)絡(luò)接口的指針。

當(dāng)你調(diào)用這個(gè)函數(shù)時(shí),傳入的netif結(jié)構(gòu)體會(huì)被設(shè)置為默認(rèn)網(wǎng)絡(luò)接口。這意味著,除非有特定的路由決策指示其他接口,否則所有的出站數(shù)據(jù)包都會(huì)通過這個(gè)接口發(fā)送。

例如,如果你有一個(gè)以太網(wǎng)接口和一個(gè)Wi-Fi接口,并且你希望所有的通信默認(rèn)通過Wi-Fi接口進(jìn)行,那么你會(huì)在初始化Wi-Fi接口后調(diào)用netif_set_default函數(shù),并傳入Wi-Fi接口的netif結(jié)構(gòu)體指針。

這個(gè)函數(shù)對(duì)于確保正確的網(wǎng)絡(luò)通信行為非常重要,特別是在存在多個(gè)網(wǎng)絡(luò)接口的系統(tǒng)中。

platform_enable_interrupts

這個(gè)函數(shù)就很容易理解了,就是使能中斷,函數(shù)原型如下:

voidplatform_enable_interrupts()
{
/*
*Enablenon-criticalexceptions.
*/
Xil_ExceptionEnableMask(XIL_EXCEPTION_IRQ);
XScuTimer_EnableInterrupt(&TimerInstance);
XScuTimer_Start(&TimerInstance);
return;
}

netif_set_up

netif_set_up函數(shù)在lwIP中用于激活一個(gè)網(wǎng)絡(luò)接口。當(dāng)你初始化一個(gè)網(wǎng)絡(luò)接口并準(zhǔn)備好開始接收和發(fā)送數(shù)據(jù)時(shí),你需要調(diào)用這個(gè)函數(shù)來(lái)標(biāo)記該接口為"up"狀態(tài)。

函數(shù)原型如下:

void
netif_set_up(structnetif*netif)
{
LWIP_ASSERT_CORE_LOCKED();

LWIP_ERROR("netif_set_up:invalidnetif",netif!=NULL,return);

if(!(netif->flags&NETIF_FLAG_UP)){
netif_set_flags(netif,NETIF_FLAG_UP);

MIB2_COPY_SYSUPTIME_TO(&netif->ts);

NETIF_STATUS_CALLBACK(netif);

#ifLWIP_NETIF_EXT_STATUS_CALLBACK
{
netif_ext_callback_args_targs;
args.status_changed.state=1;
netif_invoke_ext_callback(netif,LWIP_NSC_STATUS_CHANGED,&args);
}
#endif

netif_issue_reports(netif,NETIF_REPORT_TYPE_IPV4|NETIF_REPORT_TYPE_IPV6);
#ifLWIP_IPV6
nd6_restart_netif(netif);
#endif/*LWIP_IPV6*/
}
}

其中,netif是你希望激活的網(wǎng)絡(luò)接口的指針。

當(dāng)你調(diào)用netif_set_up函數(shù)時(shí),它會(huì)執(zhí)行以下操作:

設(shè)置netif結(jié)構(gòu)體中的flags字段,標(biāo)記該接口為"up"狀態(tài)。

如果配置了lwIP的相關(guān)回調(diào),例如NETIF_STATUS_CALLBACK,那么這些回調(diào)函數(shù)也會(huì)被觸發(fā),通知應(yīng)用程序該接口的狀態(tài)已經(jīng)改變。

通常,在你完成網(wǎng)絡(luò)接口的硬件初始化、分配了必要的資源,并確信接口已經(jīng)準(zhǔn)備好進(jìn)行通信后,你會(huì)調(diào)用netif_set_up函數(shù)。這樣,lwIP就知道它可以開始在該接口上接收和發(fā)送數(shù)據(jù)包了。

相反地,如果你需要將一個(gè)接口標(biāo)記為"down"狀態(tài),例如在接口遇到錯(cuò)誤或需要進(jìn)行維護(hù)時(shí),你可以調(diào)用netif_set_down函數(shù)。這會(huì)告訴lwIP停止在該接口上的通信,直到接口再次被設(shè)置為"up"狀態(tài)。

assign_default_ip

從名字也可以看到出來(lái),就是設(shè)置ip地址、Netmask和gate way

函數(shù)原型也非常直觀,不做過多解釋了

staticvoidassign_default_ip(ip_addr_t*ip,ip_addr_t*mask,ip_addr_t*gw)
{
interr;

xil_printf("ConfiguringdefaultIP%s
",DEFAULT_IP_ADDRESS);

err=inet_aton(DEFAULT_IP_ADDRESS,ip);
if(!err)
xil_printf("InvaliddefaultIPaddress:%d
",err);

err=inet_aton(DEFAULT_IP_MASK,mask);
if(!err)
xil_printf("InvaliddefaultIPMASK:%d
",err);

err=inet_aton(DEFAULT_GW_ADDRESS,gw);
if(!err)
xil_printf("Invaliddefaultgatewayaddress:%d
",err);
}

start_application

start_application函數(shù)是一個(gè)啟動(dòng)網(wǎng)絡(luò)應(yīng)用的函數(shù)。在很多l(xiāng)wIP的示例應(yīng)用中,這個(gè)函數(shù)被用來(lái)初始化和啟動(dòng)特定的網(wǎng)絡(luò)應(yīng)用,例如啟動(dòng)一個(gè)HTTP服務(wù)器、TCP客戶端、UDP回聲服務(wù)等。具體的功能和行為取決于應(yīng)用的需求和設(shè)計(jì)。這個(gè)函數(shù)可能會(huì)初始化所需的網(wǎng)絡(luò)資源,設(shè)置回調(diào)函數(shù),并開始監(jiān)聽網(wǎng)絡(luò)事件。

初始化變量:函數(shù)開始時(shí),初始化了一些變量,如err用于錯(cuò)誤處理,pcb代表TCP控制塊,remote_addr用于存儲(chǔ)遠(yuǎn)程服務(wù)器的IP地址,以及一個(gè)循環(huán)計(jì)數(shù)器i。

設(shè)置遠(yuǎn)程服務(wù)器的IP地址

如果啟用了IPv6(LWIP_IPV6==1),則使用inet6_aton函數(shù)將TCP_SERVER_IPV6_ADDRESS字符串轉(zhuǎn)換為IPv6地址格式并存儲(chǔ)在remote_addr中。

如果未啟用IPv6,則使用inet_aton函數(shù)將TCP_SERVER_IP_ADDRESS字符串轉(zhuǎn)換為IPv4地址格式。

檢查IP地址的有效性:如果IP地址轉(zhuǎn)換失敗,函數(shù)會(huì)打印錯(cuò)誤消息并返回。

創(chuàng)建TCP控制塊(PCB):使用tcp_new_ip_type函數(shù)為客戶端創(chuàng)建一個(gè)新的TCP控制塊。

連接到遠(yuǎn)程服務(wù)器:使用tcp_connect函數(shù)嘗試連接到遠(yuǎn)程服務(wù)器的指定IP地址和端口TCP_CONN_PORT。如果連接成功,tcp_client_connected回調(diào)函數(shù)將被注冊(cè),以便在連接建立后進(jìn)行處理。

錯(cuò)誤處理:如果在上述步驟中出現(xiàn)任何錯(cuò)誤,函數(shù)會(huì)打印相應(yīng)的錯(cuò)誤消息并關(guān)閉TCP連接。

初始化發(fā)送緩沖區(qū):為send_buf緩沖區(qū)填充數(shù)據(jù),數(shù)據(jù)內(nèi)容是0到9的數(shù)字字符。

總的來(lái)說,start_application函數(shù)的主要目的是初始化一個(gè)TCP客戶端,嘗試連接到指定的遠(yuǎn)程服務(wù)器,并準(zhǔn)備發(fā)送數(shù)據(jù)。

函數(shù)原型如下:

voidstart_application(void)
{
err_terr;
structtcp_pcb*pcb;
ip_addr_tremote_addr;
u32_ti;

#ifLWIP_IPV6==1
remote_addr.type=IPADDR_TYPE_V6;
err=inet6_aton(TCP_SERVER_IPV6_ADDRESS,&remote_addr);
#else
err=inet_aton(TCP_SERVER_IP_ADDRESS,&remote_addr);
#endif/*LWIP_IPV6*/

if(!err){
xil_printf("InvalidServerIPaddress:%d
",err);
return;
}

/*CreateClientPCB*/
pcb=tcp_new_ip_type(IPADDR_TYPE_ANY);
if(!pcb){
xil_printf("ErrorinPCBcreation.outofmemory
");
return;
}

err=tcp_connect(pcb,&remote_addr,TCP_CONN_PORT,
tcp_client_connected);
if(err){
xil_printf("Errorontcp_connect:%d
",err);
tcp_client_close(pcb);
return;
}
client.client_id=0;

/*initializedatabufferbeingsentwithsameasusediniperf*/
for(i=0;i

tcp_fasttmr和tcp_slowtmr

在lwip的TCP視線中,快速定時(shí)器(tcp_fasttmr)和慢速定時(shí)器(tcp_slowtmr)都是為了TCP連接的維護(hù)而存在的,但它們關(guān)注的方面和執(zhí)行頻率是不同的。

運(yùn)行頻率

快速定時(shí)器:通常每250毫秒被調(diào)用一次(這是默認(rèn)值,但可以配置)。

慢速定時(shí)器:通常每500毫秒被調(diào)用一次(這也是默認(rèn)值,但同樣可以配置)。

關(guān)注的方面

連接的生命周期管理:例如,關(guān)閉那些已經(jīng)結(jié)束但還沒有完全關(guān)閉的連接。

持續(xù)活動(dòng)檢測(cè):例如,檢查長(zhǎng)時(shí)間沒有活動(dòng)的連接,并可能發(fā)送探測(cè)數(shù)據(jù)段來(lái)檢查對(duì)方是否仍然活躍。

超時(shí)管理:管理那些因?yàn)殚L(zhǎng)時(shí)間沒有響應(yīng)而需要關(guān)閉的連接。

擁塞控制:調(diào)整窗口大小和其他與流量控制相關(guān)的參數(shù)。

重傳管理:如果一個(gè)數(shù)據(jù)段沒有得到確認(rèn),它會(huì)被重新發(fā)送??焖俣〞r(shí)器負(fù)責(zé)處理這些重傳。

延遲確認(rèn):TCP不會(huì)立刻確認(rèn)每一個(gè)接收到的數(shù)據(jù)段,而是稍作延遲,以期待有數(shù)據(jù)可以與確認(rèn)一同發(fā)送,從而減少網(wǎng)絡(luò)的數(shù)據(jù)包數(shù)量??焖俣〞r(shí)器可以觸發(fā)這些延遲確認(rèn)的發(fā)送。

快速定時(shí)器 (tcp_fasttmr)

主要關(guān)注:

慢速定時(shí)器 (tcp_slowtmr)

主要關(guān)注:

簡(jiǎn)而言之,快速定時(shí)器主要關(guān)注與數(shù)據(jù)傳輸直接相關(guān)的事務(wù),如重傳和確認(rèn),而慢速定時(shí)器則更多地關(guān)注連接的維護(hù)、超時(shí)和流控制。

tcp_write

tcp_write 函數(shù)用于將數(shù)據(jù)排入到一個(gè)TCP連接的發(fā)送隊(duì)列。它是應(yīng)用程序與 lwIP TCP層之間的一個(gè)關(guān)鍵接口,允許應(yīng)用程序發(fā)送數(shù)據(jù)到其TCP連接。

以下是關(guān)于 tcp_write 函數(shù)的一些關(guān)鍵點(diǎn):

非阻塞:與某些TCP/IP實(shí)現(xiàn)不同,tcp_write 是非阻塞的。這意味著,如果當(dāng)前沒有足夠的可用緩沖區(qū)來(lái)容納你想發(fā)送的數(shù)據(jù),函數(shù)將不會(huì)阻塞,而是返回一個(gè)錯(cuò)誤。

排隊(duì),不是直接發(fā)送:當(dāng)你調(diào)用 tcp_write 時(shí),你實(shí)際上是將數(shù)據(jù)放入發(fā)送隊(duì)列,而不是立即發(fā)送數(shù)據(jù)。真正的數(shù)據(jù)傳輸將在后續(xù)的 lwIP 處理中進(jìn)行,這可能涉及與其他TCP機(jī)制的交互,如擁塞控制。

參數(shù):該函數(shù)通常接受以下參數(shù):

pcb:代表TCP連接的控制塊。

data:指向要發(fā)送數(shù)據(jù)的指針。

len:要發(fā)送的數(shù)據(jù)的長(zhǎng)度。

flags:與數(shù)據(jù)發(fā)送相關(guān)的標(biāo)志。例如,TCP_WRITE_FLAG_COPY 表示應(yīng)從應(yīng)用程序的數(shù)據(jù)緩沖區(qū)復(fù)制數(shù)據(jù)(而不是直接引用)。

確認(rèn)機(jī)制:使用 tcp_write 發(fā)送的數(shù)據(jù)將在對(duì)方確認(rèn)收到之后才從發(fā)送隊(duì)列中移除。這意味著,即使你已經(jīng)調(diào)用了 tcp_write,你也需要確保你的應(yīng)用程序繼續(xù)處理(例如,通過調(diào)用 tcp_output 或等待 lwIP 的主循環(huán))來(lái)確保數(shù)據(jù)被實(shí)際發(fā)送和確認(rèn)。

合適的調(diào)用時(shí)間:為了避免不必要的網(wǎng)絡(luò)擁塞和效率低下,建議在連接建立后或在接收到數(shù)據(jù)或發(fā)送緩沖區(qū)有可用空間時(shí)(通過相關(guān)的TCP回調(diào)函數(shù))再調(diào)用 tcp_write。

tcp_write 是 lwIP 的TCP API的一部分,與其他函數(shù)(如 tcp_connect, tcp_listen, tcp_close 等)一起,提供了完整的TCP功能。在使用它時(shí),重要的是要理解其工作原理,以及與其他TCP操作的交互方式。







審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1625

    文章

    21620

    瀏覽量

    601231
  • 嵌入式系統(tǒng)
    +關(guān)注

    關(guān)注

    41

    文章

    3551

    瀏覽量

    129104
  • SoC設(shè)計(jì)
    +關(guān)注

    關(guān)注

    1

    文章

    148

    瀏覽量

    18752
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1347

    瀏覽量

    78933
  • LwIP協(xié)議棧
    +關(guān)注

    關(guān)注

    0

    文章

    19

    瀏覽量

    7330

原文標(biāo)題:lwip代碼分析

文章出處:【微信號(hào):傅里葉的貓,微信公眾號(hào):傅里葉的貓】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于MM32F5270的Ethernet實(shí)現(xiàn)LwIP協(xié)議移植

    LwIP是輕量化的TCP/IP協(xié)議,由瑞典計(jì)算機(jī)科學(xué)院(SICS)的Adam Dunkels 開發(fā)的一個(gè)小型開源的TCP/IP協(xié)議。LwIP
    的頭像 發(fā)表于 06-21 10:28 ?1064次閱讀
    基于MM32F5270的Ethernet實(shí)現(xiàn)<b class='flag-5'>LwIP</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>棧</b>移植

    LwIP協(xié)議源碼詳解

    LwIP協(xié)議源碼詳解
    發(fā)表于 08-20 23:17

    LwIP協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)資料分享!

    LwIP協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)_中文譯稿LwIP協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)_中文譯稿.pdf (493.54
    發(fā)表于 07-31 23:47

    lwIP協(xié)議是什么?

    lwIP協(xié)議是什么?
    發(fā)表于 12-20 06:17

    嵌入式TCPIP協(xié)議LWIP的內(nèi)部結(jié)構(gòu)

    分析了嵌入式 TCPIP協(xié)議主要對(duì)LWIP的基本結(jié)構(gòu),介紹了嵌入式TCPIP協(xié)議
    發(fā)表于 02-17 15:55 ?76次下載
    嵌入式TCPIP<b class='flag-5'>協(xié)議</b><b class='flag-5'>棧</b><b class='flag-5'>LWIP</b>的內(nèi)部結(jié)構(gòu)

    Lwip協(xié)議的設(shè)計(jì)方案

    LWIP是TCP/IP協(xié)議的一種實(shí)現(xiàn)。LWIP的主要目的是減少存儲(chǔ)器利用量和代碼尺寸,使LWIP
    發(fā)表于 09-16 15:18 ?33次下載
    <b class='flag-5'>Lwip</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>棧</b>的設(shè)計(jì)方案

    基于ARM的LwIP協(xié)議研究與移植

    提出基于ARM的LwIP協(xié)議研究與移植
    發(fā)表于 10-14 17:50 ?65次下載
    基于ARM的<b class='flag-5'>LwIP</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>棧</b>研究與移植

    lwip協(xié)議中文版

    LWIP是TCP/IP協(xié)議的一種實(shí)現(xiàn)。LWIP的主要目的是減少存儲(chǔ)器利用量和代碼尺寸,使LWIP
    發(fā)表于 02-03 16:47 ?0次下載
    <b class='flag-5'>lwip</b><b class='flag-5'>協(xié)議</b>中文版

    LwIP協(xié)議詳解

    LwIP協(xié)議詳解,LwIP是Light Weight (輕型)IP協(xié)議,有無(wú)操作系統(tǒng)的支持都可以運(yùn)行。LwIP實(shí)現(xiàn)的重點(diǎn)是在保持TCP
    發(fā)表于 11-09 18:25 ?49次下載

    TCPIP協(xié)議的實(shí)現(xiàn)lwip

    TCPIP協(xié)議的實(shí)現(xiàn)lwip方便初學(xué)者剛開始接觸lwip,有個(gè)大概的了解與認(rèn)識(shí)。
    發(fā)表于 03-14 15:40 ?13次下載

    lwip協(xié)議源碼詳解說明

    lwip是瑞典計(jì)算機(jī)科學(xué)院(SICS)的Adam Dunkels 開發(fā)的一個(gè)小型開源的TCP/IP協(xié)議。實(shí)現(xiàn)的重點(diǎn)是在保持TCP協(xié)議主要功能的基礎(chǔ)上減少對(duì)RAM 的占用。
    發(fā)表于 12-11 15:27 ?3.7w次閱讀
    <b class='flag-5'>lwip</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>棧</b>源碼詳解說明

    介紹tcp_ip協(xié)議lwip的特點(diǎn)

    簡(jiǎn)介了嵌入式tcp_ip協(xié)議lwip的基本信息
    的頭像 發(fā)表于 07-03 13:05 ?3621次閱讀

    LWIP協(xié)議中Raw TCP中使用

    本文檔的主要內(nèi)容詳細(xì)介紹的是LWIP協(xié)議中Raw TCP中使用的資料免費(fèi)下載
    發(fā)表于 11-05 17:36 ?17次下載
    <b class='flag-5'>LWIP</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>棧</b>中Raw TCP中使用

    使用LwIP協(xié)議淺析實(shí)戰(zhàn)分析(i.MX RT)

    LWIP協(xié)議與網(wǎng)絡(luò)分層 LwIP(Light weight IP),是一種輕量化且開源的TCP/IP協(xié)議,它可以在有限的RAM和ROM條件
    的頭像 發(fā)表于 02-02 17:05 ?1498次閱讀
    使用<b class='flag-5'>LwIP</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>棧</b>淺析實(shí)戰(zhàn)<b class='flag-5'>分析</b>(i.MX RT)

    LwIP協(xié)議源碼詳解—TCP/IP協(xié)議的實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《LwIP協(xié)議源碼詳解—TCP/IP協(xié)議的實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 07-03 11:22 ?3次下載