標籤:預設 add SM 網路位元組序 ntop 應用 www. nec inet_ntoa
ISO(國際標準組織)---》網路體繫結構標準 OSI模型
OSI 七層模型
- 應用程式層 :提供使用者服務,具體內容由特定程式規定
- 展示層 :提供資料的壓縮解壓和加密等
- 會話層 :建立程式級的串連,決定使用什麼樣的傳輸服務
- 傳輸層 :提供合適的通訊服務,流量控制
- 網路層 : 路由選擇,網路互聯,分組傳輸
- 鏈路層 : 提供鏈路交換,具體訊息發送
- 物理層 : 物理硬體,介面
OSI 模型優點 : 將功能分開,降低網路傳輸中的耦合度,每一部分完成自己的功能,開發更加清晰。
高內聚 :使模組功能單一,不混雜。
低耦合 :模組之間盡量減少相互的關聯和影響
四層、五層模型四層模型
- 應用程式層 : 應用程式層 展示層 會話層
- 傳輸層 : 傳輸層
- 網路層 : 網路層
- 物理鏈路層 : 鏈路層 物理層
五層模型(TCP/IP模型)
- 應用程式層 : 應用程式層 展示層 會話層
- 傳輸層 : 傳輸層
- 網路層 : 網路層
- 鏈路層 : 鏈路層
- 物理層 : 物理層
什麼是協議
網路通訊協定 : 網路通訊中,各方必須遵守的規定,包括建立什麼串連,如何識別,訊息結構等
應用程式層: TFTP HTTP SMTP DNS
傳輸層: TCP UDP
網路層: IP
網路概念
主機 : 電腦的名稱 localhost
#擷取主機名稱In [3]: socket.gethostname()Out[3]: 'tedu'
通過主機名稱解析IPIn [4]: socket.gethostbyname('tedu')Out[4]: '127.0.1.1'In [5]: socket.gethostbyname('localhost')Out[5]: '127.0.0.1'
IP
IPv4 : 192.168.1.2
點分是十進位:三個點分為四個部分,0--255
IPv6 : ip地址更多
127.0.0.1 : 本地測試ip
0.0.0.0 : 區域網路可用IP
192.168.1.0 : 表示網段
192.168.1.1 : 網關
192.168.1.255 : 廣播位址
2---254
ifconfig ping
#通過主機名稱擷取地址In [6]: socket.gethostbyaddr('www.baidu.com')Out[6]: ('127.0.0.1', [], ['119.75.216.20']) 主機名稱 別名 IP將IP地址轉換為二進位In [7]: socket.inet_aton('192.168.1.2')Out[7]: b'\xc0\xa8\x01\x02'將二進位轉換為點分十進位In [8]: socket.inet_ntoa(b'\xc0\xa8\x01\x02')Out[8]: '192.168.1.2'
inet_pton inet_ntop 功能同上,只是第一個參數用
socket.AF_IENT表示IPv4 socket.AF_INET6--->IPv6
連接埠號碼
連接埠號碼是地址的組成部分,在一個系統中區分應用程式層程式
1--65535 : 1--255 眾所周知的連接埠 256---1023 系統連接埠
10000 6666 7777 8888 9999
擷取一個應用的連接埠In [11]: socket.getservbyname('mysql')Out[11]: 3306
子網路遮罩:和IP配合過濾網段
dns:網域名稱解析
位元組序
- 大端序:高位元組存在低地址
- 小端序:低位元組存在低地址
網路位元組序 : 將位元組序發送方式統一
傳輸層服務tcp協議
連線導向 ,是一種可靠的資料轉送
三向交握
- 用戶端向伺服器發起串連請求(問是否可以串連)
- 伺服器接收到請求後進行確認(允許串連)返回報文
- 用戶端收到許可,建立串連
四次揮手
- 主動方發送報文告知被動方要中斷連線
- 被動方返回報文,告知受到請求,準備斷開
- 被動方發送報文給主動方告知準備就緒可以斷開
- 主動方發送報文確定斷開
可靠傳輸 : 無失序 無差錯 無丟失 無重複
應用情況 : 適用於傳輸內容較大,網路情況好,需要提供準確傳輸的情況
比如 : 聊天資訊 ,檔案傳輸,郵件
udp協議
面向不需連線的服務是一種不可靠的資料轉送發送時由發送端自主進行,不考慮接收端
- 適用情況:網路較差,對傳輸準確性要求低,廣播組播
- 比如:視頻會議, 廣播資料
通訊端編程
通訊端: 進行網路通訊的一種手段 socket
- 流式通訊端(SOCK_STREAM) :傳輸層基於tcp協議進行通訊
- 資料通訊端(SOCK_DGRAM) :傳輸層基於udp協議進行通訊
- 原始通訊端(SOCK_RAW): 訪問底層協議的通訊端
TCP 服務端
from socket import *
1. 建立通訊端
socket (socket_family = AF_INET, socket_type = SOCK_STREAM, proto = 0)功能 : 建立通訊端參數 : socket_family:選擇地址族種類 AF_INET (UNIX) socket_type : 通訊端類型 SOCK_STREAM 流式 SOCK_DGRAM 資料報 proto :子協議類型預設為0傳回值 : 返回建立的通訊端
2. 綁定 IP 和連接埠號碼
sockfd.bind()功能 : 綁定IP和連接埠參數 : 是一個元組 ,第一項是字串形式的IP 第二項是連接埠號碼 (‘192.168.1.2’,8888)
3. 讓通訊端具有監聽功能
s
ockfd.listen(n)功能 : 使通訊端變為監聽通訊端,同時建立監聽隊列參數 : n 監聽隊列大小
4. 等待用戶端串連
sockfd.accept()功能 : 阻塞等待用戶端串連傳回值 : 第一個:返回一個新的通訊端用來和用戶端通訊 第二個:返回串連的用戶端的地址
5. 訊息的收發
recv(buffer)功能 : 接收訊息參數 : 一次接收訊息的大小 位元組傳回值: 接收到的內容send(data)功能: 發送訊息參數: 發送的內容 (byte)傳回值 : 發送了多少個位元組
- 當沒有接收端的時候send操作會導致 broken pipe
6. 關閉通訊端
close()
功能 : 關閉通訊端
tcp用戶端流程
connect()功能:發起串連參數 : 一個元組 第一個元素 : 伺服器的IP 第二個元素 : 伺服器的port
Python網路通訊 (一)