傳輸控制協定(Transmission Control Protocol,TCP):
-建立在 IP 之上: TCP 是建立在 IP(網際網路協定)之上的,IP 負責將資料包傳送到正確的目的地,而 TCP 則負責確保資料的完整性、順序性和可靠性。
-假設 IP 可能丟包: TCP 意識到 IP 層級的傳輸可能發生丟包,因此它會儲存資料並在必要時重新傳輸,以確保所有資料都能成功送達目的地。
-流量控制: TCP 使用傳輸窗口來控制資料傳輸的速度,避免接收端被過多的資料淹沒,從而確保穩定的資料傳輸。
-提供可靠的管道: TCP 提供了一個可靠的資料傳輸管道,確保資料按照正確的順序傳送,並且沒有任何丟失或重複。
TCP 連線 / Socket:
-在電腦網路中,一個 TCP 連線或Socket代表著 兩個程式之間雙向通訊的端點。這就像是兩個電話之間的通話,每個電話就是一個插座,透過電話線進行連接。
-這些連線通常建立在 IP 網路 上,例如網際網路。
TCP Port Number(TCP 端口號):
-應用程式或程序的指定端點: 想像一台電腦就像是一棟大樓,每個應用程式就像是大樓裡的一個房間。端口號就像是每個房間的門牌號碼,用來區分不同的應用程式。
-允許多個應用程式共存: 透過端口號,一台伺服器可以同時運行多個網路應用程式。
-以下是常見的TCP端口號:
Sockets in Python:
HTTP(Hypertext Transfer Protocol超文本傳輸協定):
-網際網路上最主要的應用層協定: 這意味著 HTTP 是在網際網路上傳輸資料時最常用的通訊規則。
-為網頁而生: HTTP 最初是為了網頁而設計的,用來從伺服器擷取 HTML、圖片、文件等內容。
-擴展到資料傳輸: 除了網頁內容,HTTP 也被用來傳輸其他類型的資料,例如 RSS 訂閱、Web 服務等。
-基本概念: 建立連線 → 請求文件 → 接收文件 → 關閉連線。這是一個典型的 HTTP 請求-回應的過程。
網際網路標準(Internet Standard):
-所有網際網路協議(內部運作方式)的標準都是由一個組織制定的。
-網際網路工程任務組(IETF): 這個組織負責制定網際網路的標準。
-www.ietf.org: 這是 IETF 的官方網站,可以在這裡找到各種網際網路標準的相關資訊。
-RFC(Request for Comments,建議書): 網際網路標準的文件稱為 RFC。這些文件會詳細描述各種網路協議的規格、運作方式等等。
Python中的HTTP請求:
-程式碼:
-整體流程說明:
1.導入socket模組: 首先,我們需要導入Python內建的 socket 模組,這個模組提供了用來建立網路連接的函式。
2.建立TCP插座:
-mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM):這行程式碼創建了一個TCP插座,用於進行網路通訊。
-socket.AF_INET 表示使用 IPv4 地址,socket.SOCK_STREAM 表示使用TCP 協定。
3.連接伺服器:
-mysock.connect(('data.pr4e.org', 80)):這行程式碼將這個插座連接到指定的伺服器。
◆ 'data.pr4e.org' 是伺服器的域名。
◆ 80 是 HTTP 服務的標準端口號。
4.發送 HTTP 請求:
-cmd = 'GET http://data.pr4e.org/romeo.txt HTTP/1.0\r\n\r\n'.encode():這行程式碼構建了一個簡單的HTTP GET請求。
◆ GET 方法表示我們想要獲取資源。
◆ http://data.pr4e.org/romeo.txt 是我們要請求的資源的路徑。
◆ HTTP/1.0 表示使用的HTTP版本。
◆ \r\n\r\n 是HTTP請求的結束標記。
-mysock.send(cmd):將這個請求發送給伺服器。
5.接收伺服器回應:
-while True::進入一個循環,不斷接收伺服器的回應。
-data = mysock.recv(512):每次接收 512 個位元組的資料。
-if (len(data) < 1): break:如果接收到的資料長度為0,表示伺服器已經沒有更多資料要傳送,退出循環。
-print(data.decode()):將接收到的資料解碼並打印出來。
6.關閉連接:
-mysock.close():關閉與伺服器的連接。
以上圖片皆出自於Coursera上的課程「Python for Everybody」來自University of Michigan。