目錄
網路編程
1.網路編程基礎知識
1.1 什么是網路
1.2 網路協議
OSI 7層模型
TCP/IP模型
1.3 Linux Windows 命令列查看網路資訊
1.4 IP地址
1.4.1 概念:
1.4.2 IP地址分類:
1.5 埠
1.5.1 概念
1.6 服務器和客戶端
1.6.1 服務端(Server):
1.6.2 客戶端(Client) :
2.傳輸方法
2.1套接字簡介
2.2 套接字型別
1. 流套接字(SOCK_STREAM)
2. 資料報套接字(SOCK_DGRAM)
3. 原始套接字(SOCK_RAW)
2.3 UDP套接字編程
2.3.1 UDP套接字特點
2.3.2 UDP套接字傳輸服務端客戶端流程圖
2.3.3 UDP實作代碼
2.4 TCP 傳輸方法
2.4.1 TCP傳輸特點
2.4.2 TCP套接字傳輸服務端客戶端流程圖
三次握手(建立連接)
四次揮手(斷開連接)
2.4.3 TCP服務端(實作代碼)
2.4.4 TCP客戶端(實作代碼)
2.4.5 TCP套接字細節
2.5 TCP與UDP對比
網路編程
1.網路編程基礎知識
1.1 什么是網路
什么是網路 : 計算機網路功能主要包括實作資源共享,實作資料資訊的快速傳遞,
1.2 網路協議
OSI 7層模型
?
TCP/IP模型
?
1.3 Linux Windows 命令列查看網路資訊
Linux: ifconfig
windows: ipconfig
開/關網卡:sudo ifconfig ###(網卡名) up/down
?
1.4 IP地址
1.4.1 概念:
IP地址(Internet Protocol Address)是指互聯網協議地址,又譯為網際協議地址,
IP地址是IP協議提供的一種統一的地址格式,它為互聯網上的每一個網路和每一臺主機分配一個邏輯地址,以此來屏蔽物理地址的差異,
1.4.2 IP地址分類:
TCP/IP協議 之IPV4與IPV6的區別;5G無線通信與4G的典型區別有哪些?_洋蔥專欄-有靈魂的程式員-CSDN博客
1.5 埠
1.5.1 概念
?
如果把IP地址比作一間房子 ,埠就是出入這間房子的門,
真正的房子只有幾個門,但是一個IP地址的埠可以有65536(即:2^16)個之多!埠是通過埠號來標記的,埠號只有整數,范圍是從0 到65535(2^16-1),
我們知道,一臺擁有IP地址的主機可以提供許多服務,比如Web服務、FTP服務、SMTP服務等,這些服務完全可以通過1個IP地址來實作,
那么,主機是怎樣區分不同的網路服務呢?
顯然不能只靠IP地址,因為IP 地址與網路服務的關系是一對多的關系,實際上是通過“IP地址+埠號”來區分不同的服務的,
需要注意的是,埠并不是一一對應的,
比如你的電腦作為客戶機訪 問一臺WWW服務器時,WWW服務器使用“80”埠與你的電腦通信,但你的電腦則可能使用“3457”這樣的埠,
網路埠的作用及分類_TerryZjl的博客-CSDN博客_埠
1.6 服務器和客戶端
1.6.1 服務端(Server):
服務端是為客戶端服務的,服務的內容諸如向客戶端提供資源,保存客戶端資料,處理客戶端請求等,
1.6.2 客戶端(Client) :
也稱為用戶端,是指與服務端相對應,為客戶提供一定應用功能的程式,我們平時使用的手機或者電腦上的程式基本都是客戶端程式
?
2.傳輸方法
2.1套接字簡介
2.2 套接字型別
1. 流套接字(SOCK_STREAM)
流套接字用于提供面向連接、可靠的資料傳輸服務,
該服務將保證資料能夠實作無差錯、無重復送,并按順序接收,
流套接字之所以能夠實作可靠的資料服務,原因在于其使用了傳輸控制協議,即TCP(The Transmission Control Protocol)協議
2. 資料報套接字(SOCK_DGRAM)
資料報套接字提供一種無連接的服務,
該服務并不能保證資料傳輸的可靠性,數據有可能在傳輸程序中丟失或出現資料重復,且無法保證順序地接收到資料,
資料報套接字使用UDP( User DatagramProtocol)協議進行資料的傳輸,由于資料報套接字不能保證資料傳輸的可靠性,對于有可能出現的資料丟失情況,需要在程式中做相應的處理 ,
3. 原始套接字(SOCK_RAW)
原始套接字與標準套接字(標準套接字指的是前面介紹的流套接字和資料報套接字)的區別在于:
原始套接字可以讀寫內核沒有處理的IP資料包,而流套接字只能讀取TCP協議的資料,資料報套接字只能讀取UDP協議的資料,
因此,如果要訪問其他協議發送的資料必須使用原始套接 ,
2.3 UDP套接字編程
2.3.1 UDP套接字特點
2.3.2 UDP套接字傳輸服務端客戶端流程圖
?
2.3.3 UDP實作代碼
創建UDP套接字
sockfd=socket.socket(socket_family,socket_type,proto=0)
功能:創建套接字
引數:
socket_family 網路地址型別 AF_INET表示ipv4
socket_type 套接字型別 SOCK_DGRAM 表示udp套接字 (也叫資料報套接字)
proto 通常為0 選擇子協議 回傳值: 套接字物件
系結地址
?
sockfd.bind(addr)
功能: 系結本機網路地址
引數: 二元元組 (ip,port) ('0.0.0.0',8888)
訊息收發
接收訊息:
data,addr = sockfd.recvfrom(buffersize)
功能: 接收UDP訊息
引數: 每次最多接收多少位元組
回傳值:
data 接收到的內容
addr 訊息發送方地址
發送訊息:
n = sockfd.sendto(data,addr)
功能: 發送UDP訊息
引數:
data 發送的內容 bytes格式
addr 目標地址
回傳值:發送的位元組數
關閉套接字
sockfd.close()
功能:關閉套接字
2.4 TCP 傳輸方法
2.4.1 TCP傳輸特點
2.4.2 TCP套接字傳輸服務端客戶端流程圖
?
三次握手(建立連接)
?
四次揮手(斷開連接)
?
2.4.3 TCP服務端(實作代碼)
?
a.創建套接字
sockfd=socket.socket(socket_family,socket_type,proto=0)
功能:創建套接字
引數:
socket_family 網路地址型別 AF_INET表示ipv4
socket_type 套接字型別 SOCK_STREAM 表示tcp套接字 (也叫流式套接字)
proto :通常為0 選擇子協議
回傳值: 套接字物件
sockfd.bind(addr)
功能: 系結本機網路地址
引數: 二元元組 (ip,port) ('0.0.0.0',8888)
sockfd.listen(n)
功能 : 將套接字設定為監聽套接字,確定監聽佇列大小
引數 : 監聽佇列大小
?
d.處理客戶端連接請求
connfd,addr = sockfd.accept()
功能: 阻塞等待處理客戶端請求
回傳值: connfd 客戶端連接套接字
addr 連接的客戶端地址
e.訊息收發
接收訊息:
data = connfd.recv(buffersize)
功能 : 接受客戶端訊息
引數 :每次最多接收訊息的大小
回傳值: 接收到的內容
發送訊息:
n = connfd.send(data)
功能 : 發送訊息
引數 :要發送的內容 bytes格式
回傳值: 發送的位元組數
f. 關閉套接字 (與udp套接字相同)
sockfd.close()
功能:關閉套接字
2.4.4 TCP客戶端(實作代碼)
?
創建套接字
sockfd.connect(server_addr)
功能:連接服務器
引數:元組 服務器地址
2.4.5 TCP套接字細節
實際網路作業程序比較復雜,導致訊息收發速度不一致 tcp以位元組流方式
帶來的影響
進行資料傳輸,在接收時不區分訊息邊界
2.5 TCP與UDP對比
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/305646.html
標籤:其他
上一篇:<架構師必修課>-nginx
下一篇:高中資訊技術教資知識點(二)
