如下簡單的一段在**,我們在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位址資訊。既然是驅動程...