Linux網路程式設計基礎知識 詳細版

2021-10-08 19:37:22 字數 2013 閱讀 3789

1、協議

協議就是計算機與計算機之間通過網路實現通訊時,事先達成的一種「約定」.

只要遵循相同的協議就能夠實現通訊。

為了更好的促進網際網路的發展,iso(國際標準化組織)制定了一套普遍適用的規範集合,使全世界的計算機可進行開放式通訊。

這套規範集合涉及計算機的各個層面,包括底層硬體、中間的作業系統及上層的應用程式。總共分7層。

一般稱為開放系統互連參考模型,簡稱為osi參考模型。

osi分層模型請參考圖示。

osi參考模型具有重要的理論指導意義,但目前實際使用的通訊模型,是tcp/ip分層模型。

tcp/ip分層模型請參考圖示。

2、ip位址

ip位址是網際網路協議位址的簡寫,ip位址是ip協議提供的一種統一的位址格式,它為網際網路上每台裝置分配乙個邏輯位址,供網中其它裝置來精確訪問。

ip協議目前有兩個版本:

ipv4 和 ipv6

ipv4版本的ip位址本質上是乙個32位的整數,ipv6使用的是乙個128位的整數。

為了方便記憶ipv4,把32位切分成8位一組,以10進製表示,每個8位的10進製之間用點號隔開,稱為"點分十進位制",如

192.168.31.254

為了方便使用ipv6,以16進製制來表示ipv6的位址,如:

fe80::88ca:4dc2:a4b5:f456

主流的作業系統都會提供相應的指令,以檢視ip址

linux中使用 ifconfig 或 ip addr

windows中使用 ipconfig

ipv4分類

網際網路是由許多小網路構成的,每個網路上都有許多主機,這樣就構成了乙個有層次的結構。

ip位址在設計時就考慮到位址分配的層次特點,將每個ip位址分割成網路號與主機號,以便ip位址的定址操作。

網路號表示 其所屬的網路段編號,主機號表示該網段中主機的位址編號。

按照網路規模大小,ip位址可以分為abcde五類,其中abc三種是主要的位址型別,d類為多(組)播位址,e類保留備用。

具體請參考示例圖。

隨著網路的發展,ipv4的弊端也暴露出來,網路號佔位太多,而主機號佔位太少,能提供的主機位址越來越少

為了充分利用ip位址,通常對乙個高類別的ip位址進行再次劃分,以形成多個子網。

子網掩碼

主要用來指明乙個ip位址中哪些位是網路號,哪些位是主機號

子網掩碼不能單獨使用,必須與ip位址一起使用。

例:子網掩碼: 255.255.255.0

-------------------------- & 運算

網路號 192.168.31.0

網路號相同的ip就能直接通訊

ip位址根據用途可以分為 公有ip和私有ip兩種.

所謂的私有位址就是abc三類ip位址中保留下來為企業內部網路分配時使用的ip位址,在internet上是無效的.

a: 10.0.0.0 ~ 10.255.255.255 即 10.0.0.0/8

b: 172.16.0.0 ~ 172.31.255.255 即 172.16.0.0/12

c: 192.168.0.0 ~ 192.168.255.255 即 192.168.0.0/16

特殊的ip位址

0.0.0.0 (inaddr_any) 本機任意ip位址

255.255.255.255/192.168.31.255 (inaddr_broadcast) 廣播位址,表示某個網路中所有的主機

127.0.0.1 (inaddr_loopback) 本地回環位址, 只代表本機

linux網路程式設計基礎知識

int connect int sockfd,const struct sockaddr servaddr,socklen t addrlen 引數 sock是socket返回的套接字描述符,第二個和第三個引數是伺服器的套接字位址結構的指標和該結構的大小。作用 tcp客戶端通過connect函式建立...

Linux網路程式設計 基礎知識(1)

linux網路程式設計 基礎知識 1 1.linux網路知識介紹 1.1 客戶端程式和服務端程式 網路程式和普通的程式有乙個最大的區別是網路程式是由兩個部分組成的 客戶端和伺服器端.網路程式是先有伺服器程式啟動,等待客戶端的程式執行並建立連線.一般的來說是服務端的程式 在乙個埠上監聽,直到有乙個客戶...

Linux網路程式設計1 基礎知識

從應用的角度出發,協議可理解為 規則 是資料傳輸和資料的解釋的規則。簡單講就是網路各層傳輸資料時規定如何傳輸。傳輸層常見協議有tcp udp協議。應用層常見的協議有http協議,ftp協議。網路層常見協議有ip協議 icmp協議 igmp協議。網路介面層常見協議有arp協議 rarp協議。linux...