Linux 網路編程是一個基於客戶端/伺服器(即:client/server)的套接字編程結構(即:socket 編程)。
在Linux網路編程的過程中,使用到的協議主要有:TCP/IP(基於連接的協議)、UDP(基於無連接的協議)、ICMP(通常我們在 DOS 狀態下通過使用 ping 命令,檢查網路的通斷,就是依靠該協議)。
在Linux系統的套接字編程中,有標準的 socket( )、client( ) 代碼的編寫風格。涉及到的主要庫函數有:bind( )、listen( )、accept( )、read( )、write( ) 等。
至於說要想學習詳細的Linux網路編程技術實現細節,你可以參考《TCP/IP詳解》一書。一套共三本。
2. 網路編程中~~icmp協議有幾個概念性的疑問不太理解啊,求解答
ICMP是網路控制報文協議,使用IP報文進行信息的傳遞,說其面向連接是不對的。
由於ICMP使用IP報文進行信息的傳遞,多用於一些網路層的跟蹤和診斷功能而設計,並不屬於傳輸層,是一種較為特殊的TCPIP的子協議。可以這么認為IP報文中的數據部分可以是ICMP的負載數據,也可以TCP報文體,也可以UDP的報文體。因此可以簡單地認為ICMP是和TCP,UDP等並列的一種協議,但是不同的是ICMP並不針對上次的應用,主要針對網路中的各種網路設備,如路由器、交換機、防火牆等設備。
有以上可知,IP的總長並不存在一個ICMP部分的長度,一個IP報文,要麼是承載ICMP報文,要麼是承載TCP報文、UDP報文或者其他傳輸層的報文。
3. 網路編程中*** ping程序發送的ICMP報文,對方的埠號要怎麼寫啊
這個不是0埠,而是NULL,NULL就是0,意思就是,不指定埠號。
你這段代碼用的是原聲的SOCKET,其實默認的sin_port應該就是NULL的,這里應該只是顯式地再賦值了一遍吧。
4. 網路編程中,ping程序發送的ICMP報文,對方的埠號要怎麼寫啊
在網上找了類似的問題,也許對你有幫助:
問題:
在UDP定義中,sin.sin_port = htons(0); 的0是何意思?是否只要在sendto指定對方地址就可以,本方port不用指定,除非也要收
回答:
在Internet地址族中,一個名字包括幾個組成部分,對於SOCK_PGRAM和SOCK_STREAM類套介面,名字由三部分組成:主機地址,協議號(顯式設置為UDP和TCP)和用以區分應用的埠號。如果一個應用並不關心分配給它的地址,則可將Internet地址設置為INADDR_ANY,
或將埠號置為0。如果Internet地址段為INADDR_ANY,則可使用任意網路介面;在有多種主機環境下可簡化編程。如果埠號置為0,則
WINDOWS套介面實現將給應用程序分配一個值在1024到5000之間的唯一的埠。
參見:
http://bbs.csdn.net/topics/20304114