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 指的是 單位...