一、網路協議
1、七層模型:包括物理層、資料鏈路層、網路層、傳輸層、會話層,表示層,應用層,由左至右,一層層往上構建而成,
-
- 物理層:建立、維護、斷開物理連接
- 資料鏈路層:底層的電子設備不認識IP,只認識MAC,資料鏈路層用的就是MAC尋址
- 網路層:進行邏輯地址尋址,實作不同網路之間的路徑選擇,我們使用的IP地址就處于這個層
- 傳輸層:定義傳輸資料的協議埠號,以及流控和差錯校驗,協議有:TCP和UDP,資料包一旦離開網卡即進入網路傳輸層
- 會話層:建立、管理、終止會話,對應主機行程,指本地主機與遠程主機正在進行的會話(在五層模型里面已經合并到了應用層)
- 表示層:資料的表示、安全、壓縮,(在五層模型里面已經合并到了應用層)比如:格式有,JPEG、ASCll、EBCDIC、加密格式等
- 應用層:網路服務與最終用戶的一個介面,協議有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP,我們看到的大部分協議都處于這個層,建立在TCP和UDP協議之上,就像不同國家的語言,定義了怎么收(解釋語意)和怎么發(語法)
2、而socket就是封裝了這些協議的簡單使用介面,如果需要開發自己的協議,至少要掌握socket的編程
二、socket中的地址簇:包括socket.AF_UNIX,socket.AF_INET,socket.AF_INET6
1、socket.AF_UNIX:用于本機間的行程通信,如果不用這個也可以用pickle序列化實作,不過效率低
2、socket.AF_INET:IPV4通信
3、socket.AF_INET6:IPV6通信
三、socket的型別:包括socket.SOCK_STRAEM,socket.SOCK_DGRAM,socket.SOCK_RAW
1、socket.SOCK_STRAEM:用于TCPIP通信
2、socket.SOCK_DGRAM:用于UDP通信
3、socket.SOCK_RAW:原始套接字,可以用來構造IP頭
四、基本的通信思路:
1、首先是先有接受端計算機,選擇socket地址簇和socket的型別(相當于告訴計算機使用何種方式發送和決議資料),需要監聽某個埠,等待遠程計算機發送資料,接受此資料,然后發送新的資料給遠程計算機,繼續保持監聽狀態,
2、然后有發送端計算機,選擇socket地址簇和socket的型別(相當于告訴計算機使用何種方式發送和決議資料),接受資料,關閉遠程連接,
3、客戶端代碼如下:
import socket # 如果socket不給引數,默認用AF_INET:IPV4通信,SOCK_STREAM:用于TCPIP通信 sock = socket.socket() sock.connect(("localhost",56418)) sock.send(b"hello") data = sock.recv(1024) print("服務器回傳了資料:%s" % data.decode("utf-8")) sock.close()
4、服務器端代碼如下:
import socket # 如果socket不給引數,默認用AF_INET:IPV4通信,SOCK_STREAM:用于TCPIP通信 server = socket.socket() # 系結IP和埠 server.bind(("localhost",56418)) # 監聽 server.listen() print("開始等待!") # 等待遠程物件連接,當有遠程計算機連接到此服務器,就會得到一個遠程物件和遠程物件的地址(遠程IP和遠程埠) clinet_obj,addr = server.accept() print("有資料進來了!", clinet_obj, addr) # 接收資訊 data = https://www.cnblogs.com/tangwei-fuzhou/p/clinet_obj.recv(1024) # 發送資訊 clinet_obj.send(data.upper()) # 關閉服務器 server.close() print("服務器關閉了!")
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/147258.html
標籤:Python
