小河學習日記 網路通訊基礎知識篇

2021-09-25 23:27:45 字數 3341 閱讀 1444

二、網路通訊的基本概念

1、tcp和udp的區別

tcp:傳輸控制協議,面向連線的服務(打**),安全、可靠(三次握手、響應+重傳、四次揮手),速度相對較慢,一般應用在對安全性、完整性有嚴格要求的場景:ftp、smtp、http。

三次握手:

a要知道,a能到b,b也能到a。

b要也要知道,a能到b,b也能到a。

a 你聽的到嗎-> b (此b知道了a能到b)

(a能到b且b能到a)a <-我能聽到,你呢 b

a 我也能聽到-> b (此b知道了b也能到a)

四手揮手:

目的是保證關閉前傳送完所有資料報(應用層已經交給底層了,位底還沒有完全傳送出去)。

a 傳送關閉請求-> b

a <-傳送請求響應 b

b檢查是否有末傳送完成的資料

<-可以關閉 b

a 傳送關閉訊息-> b

2、訊息流

應用層->表示層->會話層->網路層->傳輸層->資料鏈路層->物理層->物理層->資料鏈路層->傳輸層->網路層->會話層->表示層->應用層。

3、訊息包

當socket收到乙個要送的資料時,發先資料進行拆分成bit流,然後再組成(防丟失)資料報(可能會丟包)。

三、套接字

socket是一種介面機制,可以讓程式無論使用什麼埠、協議,都可以從socket進出資料,它負責了程序與協議之間的連線。

1、程式設計模型

點對點(p2p):一對一通訊。

客戶機/伺服器(c/s):一對多通訊。

2、建立socket

#include

#include

int socket(int domain, int type, int protocol);

功能:建立socket描述符,可以把socket當作檔案來看待,傳送資料就是寫檔案,接收資料就是讀檔案。

domain:位址型別

af_unix/af_local/af_file 本地通訊(程序間通訊)。

af_inet 基本32位ip位址通訊,ipv4

af_inet6 基本128位ip位址通訊,ipv6

type:通訊協議

sock_stream 資料流協議,tcp

sock_dgram 資料報協議,udp

protocol:特別通訊協議,給0即可。

返回值:socket描述符,類似檔案描述符。

3、通訊位址

注意:函式介面定義的是sockaddr,而實際提供的是sockaddr_un或sockaddr_in

struct sockaddr

struct sockaddr_un

; struct sockaddr_in

struct in_addr

;4、繫結

socket描述符與物理通訊載體(網絡卡或socket檔案)繫結在一起。

int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

sockfd:socket描述符:socket函式的返回值

5、連線

int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

sockfd:socket描述符

返回值:在不同的程式設計模型下返回值意義不同,在本地通訊

返回加0,失敗返回-1。

6、資料接收與傳送:read/write

ssize_t recv(int sockfd, void *buf, size_t len, int flags);

ssize_t send(int sockfd, const void *buf, size_t len, int flags);

recv/send與read/write功能一樣,flags多了是否阻塞的功能(0阻塞,1不阻塞)。

7、關閉套接字:close

如果是網路通訊,埠號並不會立即**,大概會占用3分鐘左右。

8、位元組序轉換

uint32_t htonl(uint32_t hostlong);

功能:把32位本機位元組序轉換成32位的網路位元組序

uint16_t htons(uint16_t hostshort);

功能:把16位本機位元組序轉換成16位的網路位元組序

uint32_t ntohl(uint32_t netlong);

功能:把32位的網路位元組序轉換成32位的本機位元組序

uint16_t ntohs(uint16_t netshort);

功能:把16位的網路位元組序轉換成16位的本機位元組序

9、ip位址轉換

int inet_aton(const char *cp, struct in_addr *inp)

in_addr_t inet_addr(const char *cp);

char *inet_ntoa(struct in_addr in);

10、本地通訊程式設計模型

程序a 程序b

建立套接字(af_local) 建立套接字(af_local)

準備位址(sockaddr_un) 準備位址(sockaddr_un)

繫結(自己的socket/位址) 連線(connect,連線程序a的位址)。

接收資料 傳送資料

關閉套接字 關閉套接字

47.97.229.46

四、基於tcp協議的c/s模型

int listen(int sockfd, int backlog);

功能:設定等待連線的最大數量

sockfd:被監聽的socket描述符

backlog:等待連線的最大數量(排隊的數量)

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

功能:等待連線sockfd連線

addr:獲取連線的位址

addrlen:設定連線位址結構體的長度

返回值:專門用於通訊的描述符

程式設計模型:

server client

建立socket套接字 建立socket套接字

準備位址(sockaddr_in,本機位址) 準備位址(伺服器位址)

繫結(bind) …

監聽(listen) …

等待連線(accept、fork) 連線(connect)

接收請求(read/recv) 傳送請求(write/send)

響應請求(write/send) 接收響應(read/recv)

關閉(close) 關閉

網路通訊基礎知識

tcp ip的分層模型 osi協議參考模型,它是基於國際標準化組織 iso 的建議發展起來的,它分為7個層次 應用層 表示層 會話層 傳輸層 網路層 資料鏈路層及物理層。這個7層的協議模型雖然規定得非常細緻和完善,但在實際中卻得不到廣泛的應用,其重要的原因之一就在於它過於複雜。但它仍是此後很多協議模...

網路通訊基礎知識4

1 dhcp dynamic host configuration protocl,動態主機配置協議 1 每台計算機都需要乙個ip位址,且區域網內各電腦ip位址不能重複,否則就會位址衝突。2 計算機的ip位址可以是靜態設定,也可以是動態分配 3 動態分配是區域網內的dhcp伺服器來協調的,很多裝置都...

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

協議就是一種提前約定好的規則。b s模式 瀏覽器 伺服器模式 tcp ip模型 網路層使用ip協議,傳輸層使用tcp udp協議,應用層使用http ssh ftp 藍芽等協議。在實際程式設計的時候,真正打交道的是應用層,至於其他層是依靠作業系統來幫助我們進行通訊。我們說的使用tcp ip協議,並不...