linux 系統程式設計 網路通訊基礎知識 (十)

2021-09-21 13:50:44 字數 2012 閱讀 7741

協議就是一種提前約定好的規則。

b/s模式: 瀏覽器/伺服器模式

tcp/ip模型: 網路層使用ip協議,傳輸層使用tcp/udp協議,應用層使用http/ssh/ftp/藍芽等協議。

在實際程式設計的時候,真正打交道的是應用層,至於其他層是依靠作業系統來幫助我們進行通訊。我們說的使用tcp/ip協議,並不是真正與傳輸層網路層打交道,本質上還是在應用層。

乙個資料要在網路傳輸,需要逐層封裝打包,接收方獲取資料報後也需要逐層解包,以獲取真正的資料。這個過程都是作業系統來幫我們完成了。

路由器的ip屬於公網ip(唯一性),它內部有乙個nat對映表,可以把鏈結到路由器的那個終端ip(區域網ip)對映成公網ip。

所以,公網ip 訪問 公網ip -----直接訪問。

公網ip 訪問 私網ip ------借助nat對映

私網ip 訪問 公網ip -------借助nat對映

私網ip 訪問 私網ip ------- nat對映或打洞機制

套接字的概念

socket本意是插座,因此socket都是成對出現;借助ip與埠,ip可以在網路中唯一確定一台主機,而埠可以在主機中唯一確定乙個程序。

linux核心實現socket抽象成檔案描述符,乙個檔案描述符對應兩個核心緩衝區,乙個緩衝區專門用於讀,另乙個緩衝區專門用於寫,所以socket既能同時讀與寫,不會衝突。

tcp/ip協議規定,網路資料流應採用大端位元組序,x86平台用的是小端位元組序,為了使網路程式具有可移植性,同樣的c**能在大端和小端計算機上正常執行,提供了以下庫函式做網路位元組序與主機位元組序的轉換。

#include uint32_t htonl(uint32_t hostlong);

uint16_t htons(uint16_t hostshort);

uint32_t ntohl(uint32_t netlong);

uint16_t ntons(uint16_t netshort);

h表示主機host,n表示網路network,l表示32位整數,s表示16位整數。

ip位址是32位,使用 htonl、 ntohl

埠號是16位,使用htons、ntons

如果主機是小端位元組序,這些函式將引數做相應的轉換然後返回,如果主機是大端位元組序,這些函式不做轉換,引數原封不動的返回。

因為ip是一串數字(點分十進位制),而計算機內部是一串整型數字,還需要再轉換成網路位元組序。

比如192.168.1.12----> unsigned int ----->htonl------>大端網路位元組序

linux作業系統提供了更好的方法來做這種轉換,一步到位。

inet _pton函式把點分ip位址一步到位轉換成網路位元組序。

反之,inet_ntop函式把網路位元組序一步到位轉換成點分ip位址。

#include int inet _pton(int af,const char*scr,void *dst);

const char*inet_ntop(int af,const void*scr, char*dst, sockelen_t size);

引數af指定選擇的ip版本,af_inet表示是ipv4,af_inet6表示是ipv6.

scr就是點分十進位制,dst就是最後轉換完成的網路位元組序

Linux系統程式設計 網路程式設計基礎(三)

若在網路中,需要使客戶端連線的位址為乙個有效的ip位址,這樣就能在兩台計算機之間通訊。除ip位址外,計算機名也可用來代表一台網路中的計算機。通過訪問主機資料庫實現的。伺服器資料庫介面函式在標頭檔案netdb.h中定義。與此相關的函式有gethostbyaddr 和gethostbyname 兩個,一...

網路通訊基礎

目錄 一 網路通訊概述 1 網路通訊屬於程序間通訊 2 網路通訊的通次 3 本部分學習方法 二 網路通訊基礎知識1 1 網路通訊的發展歷程 2 三大網路 3 通訊網路的傳輸媒介 三 網路通訊基礎知識2 1 osi open system interconnect,開放式系統互聯 參考模型 2 網絡卡...

網路通訊基礎

1,tcp協議 1 server端 serversocket serversocket new serversocket 10086 socket socket serversocket.accept 等待客戶端的連線 獲取客戶端發來的資料 bufferedreader reader new buf...