《網路協議學習筆記》之ip位址 port轉換

2021-08-09 08:01:32 字數 1310 閱讀 9933

前言:總是遇到一堆奇怪的ip、port的轉換函式,由於只是簡單地發個socket訊息,所以也沒打算詳細研究。今天研究tcp長短連線的時候,遇到了time_wait狀態相關的知識點,需要顯示本地埠號,所以記錄以便梳理邏輯。

位元組序

- 網路位元組序(大端位元組序)

- 主機位元組序(小端位元組序)

概念

乙個32位的無符號整型(以網路位元組序,即大端位元組序,儲存的整型資料)
ip位址表示形式

在不同主機、網路環境下的通訊需要制定一系列標準,tcp/ip協議族的一部分通訊標準如下:

1. 位元組序標準:ip位址、port在網路通訊過程中必須以網路位元組序傳輸(大端位元組序);
於是乎,就需要兩類轉換函式

位元組序轉換函式

uint32_t htonl(uint32_t hostlong);  //ip轉換:主機(host)位元組序->>網路(netword)位元組序

uint16_t htons(uint16_t hostshort); //port轉換:主機(host)位元組序->>網路(netword)位元組序

uint32_t ntohl(uint32_t netlong); //ip轉換:網路(netword)位元組序->>主機(host)位元組序

uint16_t ntohs(uint16_t netshort); //port轉換:網路(netword)位元組序->>主機(host)位元組序

note:

由於ip位址儲存在32位無符號的整型中,所以採用uint32_t型別(unsigned long int)儲存;

由於port儲存在16位的無符號整型中,所以採用uint16_t型別(unsigned short int)儲存;

ip位址表示(儲存)形式轉換函式

char *inet_ntoa(struct in_addr in);     //二進位制形式->>點分十進位制

int inet_aton(const

char *cp, struct in_addr *inp); //點分十進位制->>二進位制形式

in_addr_t inet_addr(const

char *cp); //點分十進位制->>二進位制形式

in_addr_t inet_network(const

char *cp); //點分十進位制->>二進位制形式

note

網路位址 IP協議

網路位址 ip協議 規定網路位址的協議,叫做 ip 協議。它所定義的位址,就被稱為 ip 位址。目前,廣泛採用的是 ip 協議第四版,簡稱 ipv4。這個版本規定,網路位址由 32 個二進位制位組成。習慣上,我們用分成四段的十進位制數表示 ip 位址,從 0.0.0.0 一直到 255.255.25...

tcp ip學習筆記 關於IP協議層 IP位址

ip協議是一種無連線不可靠的資料報傳輸協議,因為ip協議不能保證資料報能正確的傳輸到目標主機,他只負責在網路層傳輸,但是回盡最大努力傳輸。而且每次傳輸所走的路線都不一樣。現在ipv4網路位址是一組32位的二進位制數。因為上面的位址前面網路號佔8位,所以在網際網路中只能定義256個網路,那是相當不夠用...

網路協議之IP

首先我們肯定知道 在windows下我們通過ipconfig命令可以獲知ip資訊 在linux系統下我們通過ifconfig ipp addr命令來或者ip資訊,這兩個命令的而不同主要是因為linux系統自帶的兩個不同的工具導致的 32位的ip位址主要分為以上5類。a b c類被劃分為兩部分 一部分...