天天看點

端口号和套接字 | 手把手教你入門Python之九十五

上一篇: 網絡通信原理及通信方式 | 手把手教你入門Python之九十四 下一篇: udp網絡程式 | 手把手教你入門Python之九十六 本文來自于千鋒教育在阿裡雲開發者社群學習中心上線課程 《Python入門2020最新大課》 ,主講人姜偉。

端口号和套接字

端口

端口就像一個房子的門,是出入這間房子的必經之路。如果一個程式需要收發網絡資料,那麼就需要有這樣的端口

在linux系統中,端口可以有65536(2的16次方)個之多!

既然有這麼多,作業系統為了統一管理,是以進行了編号,這就是端口号

端口号

端口是通過端口号來标記的,端口号隻有整數,範圍是從0到65535.端口号不是随意使用的,而是按照一定的規定進行配置設定。端口的分類标準有好幾種,我們這裡不做詳細講解,隻介紹一下知名端口和動态端口。

知名端口号

知名端口是衆所周知的端口号,範圍從0到1023,以了解為,一些常用的功能使用的号碼是估計的,好比 電話号碼110、10086、10010一樣。一般情況下,如果一個程式需要使用知名端口的需要有root權限。

動态端口号

動态端口的範圍是從1024到65535

之是以稱為動态端口,是因為它一般不固定配置設定某種服務,而是動态配置設定。

動态配置設定是指當一個系統程式或應用程式程式需要網絡通信時,它向主機申請一個端口,主機從可用的端口号中配置設定一個供它使用。

當這個程式關閉時,同時也就釋放了所占用的端口号。

端口号作用

我們知道,一台擁有IP位址的主機可以提供許多服務,比如HTTP(網際網路服務)、FTP(檔案傳輸)、SMTP(電子郵件)等,這些服務完全可以通過1個IP位址來實作。那麼,主機是怎樣區分不同的網絡服務呢?顯然不能隻靠IP位址,因為IP位址與網絡服務的關系是一對多的關系。實際上是通過“IP位址+端口号”來區分不同的服務的。 需要注意的是,端口并不是一一對應的。比如你的電腦作為客戶機通路一台WWW伺服器時,WWW伺服器使用“80”端口與你的電腦通信,但你的電腦則可能使用“3457”這樣的端口。

socket簡介

  1. 不同電腦上的程序之間如何通信

首要解決的問題是如何唯一辨別一個程序,否則通信無從談起! 在1台電腦上可以通過程序号(PID)來唯一辨別一個程序,但是在網絡中這是行不通的。 其實TCP/IP協定族已經幫我們解決了這個問題,網絡層的“ip位址”可以唯一辨別網絡中的主機,而傳輸層的“協定+端口”可以唯一辨別主機中的應用程序(程序)。 這樣利用ip位址,協定,端口就可以辨別網絡的程序了,網絡中的程序通信就可以利用這個标志與其它程序進行互動。

注意:

所謂程序指的是:運作的程式以及運作時用到的資源這個整體稱之為程序(在講解多任務程式設計時進行詳細講解)

所謂程序間通信指的是:運作的程式之間的資料共享

什麼是socket

socket(簡稱 套接字) 是程序間通信的一種方式,它與其他程序間通信的一個主要不同是:

它能實作不同主機間的程序間通信,我們網絡上各種各樣的服務大多都是基于 Socket 來完成通信的

例如我們每天浏覽網頁、QQ 聊天、收發 email 等等。

建立socket

在 Python 中 使用socket 子產品的函數 socket 就可以完成:

import socket
socket.socket(AddressFamily, Type)           

說明:

函數 socket.socket 建立一個 socket,該函數帶有兩個參數:

  • Address Family:可以選擇 AF_INET(用于 Internet 程序間通信) 或者 AF_UNIX(用于同一台機器程序間通信),實際工作中常用AF_INET
  • Type:套接字類型,可以是 SOCK_STREAM(流式套接字,主要用于 TCP 協定)或者 SOCK_DGRAM(資料報套接字,主要用于 UDP 協定)

建立一個tcp socket(tcp套接字)

import socket

# 建立tcp的套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# ...這裡是使用套接字的功能(省略)...

# 不用的時候,關閉套接字
s.close()           

建立一個udp socket(udp套接字)

import socket

# 建立udp的套接字
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# ...這裡是使用套接字的功能(省略)...
# 不用的時候,關閉套接字
s.close()           

套接字使用流程 與 檔案的使用流程很類似

  1. 建立套接字
  2. 使用套接字收/發資料
  3. 關閉套接字

配套視訊