從零開始的計算機網路

2021-09-25 21:43:58 字數 3265 閱讀 5536

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)

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函式的返回值

addr:通訊位址結構體,實際給的是sockaddr_un或sockaddr_in,需要強制型別轉換。

addrlen:通訊位址結構體型別的位元組數,使用sizeof計算。

5、連線

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

sockfd:socket描述符

addr:通訊目標位址

addrlen:通訊位址結構體型別的位元組數,使用sizeof計算。

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

返回加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)

功能:把點分十進位制的ip位址(字串)轉換成32位無符號整數,使用結構指標獲取。

char *inet_ntoa(struct in_addr in);

功能:32位無符號整數表示的ip位址,轉換成點分十進位制的ip位址(字串)

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

程序a 程序b

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

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

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

接收資料 傳送資料

關閉套接字 關閉套接字

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) 關閉(close)

計算機網路02 從零開始學

物理層的任務 幾種常用的通道復用技術 幾種常用的寬頻接入技術 為資料端裝置提供傳送資料的通路 傳輸資料 完成物理層的一些管理工作 關於通道的幾個概念 單工通訊 即只有乙個方向的通訊而沒有反方向的互動,如廣播 半雙工通訊 通訊的雙發都可傳送資訊,但是不能同時。全雙工通訊 通訊的雙方可以同時傳送和接受資...

計算機網路系列 零

實現不同計算機之間的資料交換.靠協議.即對資料交換時的格式的一種約束.回答這個問題之前,有一點需要知道,協議不是唯一的乙個.相反,網際網路有一系列協議,每種協議的內容都不一樣.一系列的網路協議按功能不同,官方給分為七層.分別是物理層,資料鏈路層,網路層,傳輸層,會話層,表示層,應用層.在實際中的應用...

計算機網路 計算機網路的效能

目錄 1.網路效能的衡量指標 2.速率 3.頻寬 4.延遲 5.丟包率 6.時延頻寬積 7.吞吐率 網路效能的好壞可以由網路的速率 頻寬 延遲 丟包率 網路頻寬積 吞吐率等方面來判斷,下面讓我們一一詳細介紹。速率 資料率 data rate 也稱 資料傳輸速率或位元率 bit rate 指的是 單位...