UNIX網路程式設計

2021-05-06 16:25:36 字數 1279 閱讀 7417

在unix network programming 的

3.7 inet_pton and inet_ntop functions

中提到中有如下兩個巨集定義:

#define inet_addrstrlen 16 /* for ipv4 dotted-decimal */

#define inet6_addrstrlen 46 /* for ipv6 hex string */

第1個是將32位ipv4的位址,

使用10進製+句點表示時,所占用的char * 陣列的長度

為什麼需要16位呢?

這取決於儲存ipv4

的char * 陣列的最大可能長度。

如:" 201.199.244.101"就是乙個最大可能長度的例子。

其內容包括:

4組10進製整數,每組3個;

3個句點;

還有乙個null結束符。

因此,最大可能長度 = 4 * 3 + 3 + 1 = 16

所以, inet_addrstrlen定義為16。

第2個是將128位ipv6的位址,

使用16進製制+冒號+句點表示時,所占用的char * 陣列的長度

為什麼需要46位呢?

這取決於儲存ipv6

的char * 陣列的最大可能長度。

ipv6包括如下幾種表示方式:

1.x:x:x:x:x:x:x:x,如 "cdcd:910a:2222:5498:8475:1111:3900:2020" 這是純ipv6位址

2.x:x:x:x:x:x:d.d.d.d,如 "cdcd:910a:2222:5498:8475:201.199.244.101" 這是與ipv4混合的ipv6位址

3.加字首的ipv6, x:x:x:x:x:x:d.d.d.d/字首 , 如 "12ab:0000:0000:cd30:0000:0000:0000:0000/60"

4.其他:詳細參閱http://www.faqs.org/rfcs/rfc2373.html

其中,擁有最大可能長度的是第2種

如 "cdcd:910a:2222:5498:8475:201.199.244.101"

其內容包括:

3組16進製制整數,每組4個16進製制數的字元形態;

6個冒號;

乙個ipv4位址(不算末尾的null,就是15位)

還有乙個null結束符。

因此,最大可能長度 = 6 * 4 + 6 + 15 + 1 = 46

所以, inet6_addrstrlen定義為46。

unix網路程式設計

任何tcp的實現都需要為msl選擇乙個合適的值,rfc的建議值是2分鐘。分組可能出現迷途,若迷途分組在msl中找到路,造成重複,tcp必須修復 time wait存在的理由 可靠的實現全雙工的連線和終止 考慮最終ack丟失的情況,允許老的重複分組在網路中消逝 tcp的化生身現象,因為time wai...

unix 網路程式設計 UDP

udp user datagram protocol 程式傳送資料給 udp socket,資料先被封裝成 udp資料報,然後又被封裝成ip資料報,然後被傳送到目標方。資料是否被正確傳輸無任何保證 是否到達目標方,是否按正確順序到達,是否目標方只收到乙份資料 每個udp資料報都有長度,這個長度包含在...

Unix網路程式設計思想

本次部落格主要總結參考 unix網路程式設計 卷一前四章的知識,對tcp一對一通訊進行重新改造和分析,經典就是經典,無可替代!一 為什麼使用包裹函式listenfd socket af inet,sock stream,0 包裹函式socket定義為 int socket int family,in...