網路程式設計第三章總結 位址族與資料序列

2021-10-12 01:31:17 字數 2668 閱讀 8840

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結構體主要引數:

struct sockaddr_in

;

結構體 sockaddr_in的成員分析:
af_inet   ipv4網路協議使用的位址族

af_inet6 ipv6網路協議使用的位址族

af_local 本地通訊中採用的unix協議的位址族

成員sin_port:儲存16位埠號,以網路位元組序儲存。

成員sin_addr:儲存32位ip位址資訊,也以網路位元組序儲存。

成員sin_zero:無特殊含義,必要時需要填充0.比如bind處(bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)))

struct sockaddr

此結構體成員sa_data儲存的位址資訊中需要包含ip位址和埠號,剩餘部分應填充0.

位元組序與網路位元組序cpu向記憶體儲存資料的方式有2種,這意味著cpu解析資料的方式也分為兩種;1、高位位元組放低位位址(大端序);2、高位位元組放高位位址(小端序)。在網路傳輸資料時約定統一網路位元組序為大端序。

位元組序轉換:

unsigned

/signed

short

/long htons/

ntohs

(unsigned

short

/long

);

htons中h代表主機位元組序,n代表網路位元組序 s表示short l表示long htons 表示 h to n s 把short的主機位元組序轉化為網路位元組序。

s作為字尾的函式中,s代表兩個位元組short,用於埠轉換;以l作為字尾的函式中,l代表4個位元組,用於ip位址轉換。

sockaddr_in中儲存位址資訊為32位整數型,為了分配位址,需要將字串轉化為32位整數型資料。

int_addr_t inet_addr

(const

char

* string)

;//成功返回32位大端序整數型值,失敗返回inaddr_none。

inet_aton函式與inet_addr函式在功能上完全相同,也將字串形式ip位址轉化為32位網路位元組序整數並返回。

int

inet_aton

(const

char

*string,

struct in_addr *addr)

;//成功返回1,失敗返回0.

char

*inet_ntoa

(struct in_addr adr)

;//成功返回轉換的字串位址值,失敗返回-1.

網路初始化eg:

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));

//基於字串的埠號初始化。

使用 inaddr_any,只需要修改一行**就行了,利用常數inaddr_any分配伺服器ip位址。

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屬性是乙個屬性節點 注釋屬於注釋節點 父節點與子節點的關係 在節點數中...