ip位址分為ipv4 和ipv6,書中主要講解ipv4,但其實截至到目前ipv4已經全部耗盡,開始使用ipv6了。
網路位址分類:
ipv4一共分為abcde5類,但e類一般不使用。可以通過ip第乙個位元組判斷網路位址占用的位元組數。
用於區分套接字的埠號:a類位址 (0-
127)
0 開始
b類位址 (
128-
191)
10 開始
c類位址 (
192-
223)
110開始
埠號就是同一作業系統內為區分不同套接字而設定的,因此無法將乙個埠號分配給不同的套接字。埠號由16位構成,可分配的埠號範圍是0-65535,但0-1023是知名埠號,一般給特定程式。由於tcp和udp不共用埠號,所以兩個協議可以同時使用乙個埠號。(比如都使用9000這個埠號)
目標位址 = ip位址 + 埠號
ipv4結構體主要引數:
結構體 sockaddr_in的成員分析:struct sockaddr_in
;
成員sin_port:儲存16位埠號,以網路位元組序儲存。af_inet ipv4網路協議使用的位址族
af_inet6 ipv6網路協議使用的位址族
af_local 本地通訊中採用的unix協議的位址族
成員sin_addr:儲存32位ip位址資訊,也以網路位元組序儲存。
成員sin_zero:無特殊含義,必要時需要填充0.比如bind處(bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)))
位元組序與網路位元組序cpu向記憶體儲存資料的方式有2種,這意味著cpu解析資料的方式也分為兩種;1、高位位元組放低位位址(大端序);2、高位位元組放高位位址(小端序)。在網路傳輸資料時約定統一網路位元組序為大端序。struct sockaddr
此結構體成員sa_data儲存的位址資訊中需要包含ip位址和埠號,剩餘部分應填充0.
位元組序轉換:
htons中h代表主機位元組序,n代表網路位元組序 s表示short l表示long htons 表示 h to n s 把short的主機位元組序轉化為網路位元組序。unsigned
/signed
short
/long htons/
ntohs
(unsigned
short
/long
);
s作為字尾的函式中,s代表兩個位元組short,用於埠轉換;以l作為字尾的函式中,l代表4個位元組,用於ip位址轉換。
sockaddr_in中儲存位址資訊為32位整數型,為了分配位址,需要將字串轉化為32位整數型資料。
inet_aton函式與inet_addr函式在功能上完全相同,也將字串形式ip位址轉化為32位網路位元組序整數並返回。int_addr_t inet_addr
(const
char
* string)
;//成功返回32位大端序整數型值,失敗返回inaddr_none。
網路初始化eg:int
inet_aton
(const
char
*string,
struct in_addr *addr)
;//成功返回1,失敗返回0.
char
*inet_ntoa
(struct in_addr adr)
;//成功返回轉換的字串位址值,失敗返回-1.
使用 inaddr_any,只需要修改一行**就行了,利用常數inaddr_any分配伺服器ip位址。struct sockaddr_in addr;
char
* serv_ip =
"211.217.168.13"
;char
* serv_port =
"9190"
;memset
(&addr,0,
sizeof
(addr));
addr.sin_family = af_inet;
addr.sin_addr.s_addr =
inet_addr
(serv_ip)
;addr.sin_port =
htons
(atoi
(serv_port));
//基於字串的埠號初始化。
addr.sin_addr.s_addr =
htonl
(inaddr_any)
;
第三章 位址族與資料序列
tcp ip網路程式設計 尹聖雨 p36 p45 1分配給套接字的ip位址與埠號 ip 是為收發網路資料而分配給計算機的值。埠號是為區分程式中建立的套接字而分配給套接字的序號。ip位址分為2類 ipv4和ipv6,主要差別是表示ip位址所用的位元組數。ipv4標準的4位元組ip位址分為網路位址和主機...
unix 網路程式設計 第三章
包裹函式 就是對有錯誤返回值的函式的封裝。在unix網路程式設計中用大寫表示。err sys 必須要errno 的值才能輸出錯誤?執行緒函式遇到錯誤的時候 不設定errno的值,而是把error的值作為函式的返回值。必須檢查某個確定的錯誤,並處理它,而不是終止程序執行。unix errno 值 每當...
第三章總結
1.dom操作 1.1dom操作分類 1 dom core 2.html dom 3 css dom 1.2節點和節點關係 整個文件是乙個文件節點 每個html標籤是乙個元素節點。包含在html元素中的文字是文字節點 每個html屬性是乙個屬性節點 注釋屬於注釋節點 父節點與子節點的關係 在節點數中...