Linux資料報文接收傳送總結1

2021-10-11 13:22:49 字數 1277 閱讀 3988

如下簡單的一段在**,我們在linux上執行;同時再執行一服務端的回顯;

#include #include #include #include #include int main(void)

; int addr_len = 0;

int ret = 0;

sk = socket(af_inet, sock_dgram, 0);

if(0 > sk)

sprintf(buf, "hello ! %u", time(null));

memset(&ser, 0x0, sizeof(ser));

ser.sin_family = af_inet;

ser.sin_port = htons(2323);

ser.sin_addr.s_addr = inet_addr("192.168.185.1");

ret = sendto(sk, buf, sizeof(buf), 0 , (struct sockaddr *)&ser, sizeof(ser));

if(0 > ret)

printf("-> %s\n", buf);

memset(&ser, 0x0, sizeof(ser));

memset(buf, 0x0, sizeof(buf));

addr_len = sizeof(ser);

ret = recvfrom(sk, buf, sizeof(buf), 0 , (struct sockaddr *)&ser, &addr_len);

if(0 > ret)

printf("recv %s:%d\n", inet_ntoa(ser.sin_addr), ntohs(ser.sin_port));

printf("<- %s\n", buf);

close(sk);

return 0;

}

執行結果如下:

[root@localhost test]# ./a.out 

-> hello ! 1605946250

recv 192.168.185.1:2323

<- hello ! 1605946250

[root@localhost test]#

在這個過程中,linux系統是如何建立socket的,以及資料報文是如何從網絡卡上傳送和接收,並再返回給應用程式的,本次就開始我們的探險之旅。

通過本文,意在貫穿linux網路系統內部是如何處理的,以及各個部分之間如何互動。限作者水平,如有錯誤,請不吝指出。

Linux資料報文接收傳送總結2

此處重點介紹基礎概念,為後面介紹資料報收發打下基礎。本次 層面基於linux 4.4 kernel。linux的系統執行分為使用者態和核心態,核心態控制著系統資源。通過定時器進行排程,把cpu分配給使用者程序使用 通過中斷來響應外設請求 並有一定的框架來管理記憶體 檔案 網路等。系統呼叫流程如下 核...

網絡卡傳送與接收資料報

網絡卡如何傳送資料報 ip報文可以看作乙個包。linux網絡卡驅動程式,將ip包新增14位元組的mac包頭,構成mac包。mac包中含有傳送端和接收端的mac位址資訊。既然是驅動程式建立的mac包頭資訊,當然可以隨便輸入位址資訊的。主機偽裝就是這麼實現的。驅動程式將mac包拷貝到網絡卡晶元內部的緩衝...

網絡卡如何傳送和接收資料報

網絡卡如何傳送資料報 文章出處 http blog.21ic.org user1 1066 archives 2007 40803.html ip報文可以看作乙個包。linux網絡卡驅動程式,將ip包新增14位元組的mac包頭,構成mac包。mac包中含有傳送端和接收端的mac位址資訊。既然是驅動程...