iT邦幫忙

2024 iThome 鐵人賽

DAY 13
0
  • 傳輸控制協定(Transmission Control Protocol,TCP):
    -建立在 IP 之上: TCP 是建立在 IP(網際網路協定)之上的,IP 負責將資料包傳送到正確的目的地,而 TCP 則負責確保資料的完整性、順序性和可靠性。
    -假設 IP 可能丟包: TCP 意識到 IP 層級的傳輸可能發生丟包,因此它會儲存資料並在必要時重新傳輸,以確保所有資料都能成功送達目的地。
    -流量控制: TCP 使用傳輸窗口來控制資料傳輸的速度,避免接收端被過多的資料淹沒,從而確保穩定的資料傳輸。
    -提供可靠的管道: TCP 提供了一個可靠的資料傳輸管道,確保資料按照正確的順序傳送,並且沒有任何丟失或重複。

  • TCP 連線 / Socket:
    -在電腦網路中,一個 TCP 連線或Socket代表著 兩個程式之間雙向通訊的端點。這就像是兩個電話之間的通話,每個電話就是一個插座,透過電話線進行連接。
    -這些連線通常建立在 IP 網路 上,例如網際網路。

  • TCP Port Number(TCP 端口號):
    -應用程式或程序的指定端點: 想像一台電腦就像是一棟大樓,每個應用程式就像是大樓裡的一個房間。端口號就像是每個房間的門牌號碼,用來區分不同的應用程式。
    -允許多個應用程式共存: 透過端口號,一台伺服器可以同時運行多個網路應用程式。
    -以下是常見的TCP端口號:
    https://ithelp.ithome.com.tw/upload/images/20240927/20168364bE1Kr5ulOj.png

  • Sockets in Python:

  • Python內建支援TCP Sockets。
    -建立TCP Sockets:
    https://ithelp.ithome.com.tw/upload/images/20240927/201683640gghiDRf1B.png
    -說明:
    ◆ 第一行:首先,我們需要導入 socket 模組。
    ◆ 第二行: 這行程式碼創建了一個新的 TCP socket。
    ■ socket.AF_INET 表示使用 IPv4 地址。
    ■ socket.SOCK_STREAM 表示使用 TCP 協定。
    ◆ 第三行:將這個socket連接到指定的伺服器。
    -Host (主機): 要連接的伺服器的主機名或 IP 地址。
    -Port (端口): 伺服器上提供服務的應用程式所使用的端口號。
  • 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請求:
    -程式碼:
    https://ithelp.ithome.com.tw/upload/images/20240927/20168364i0pWyriOcI.png
    -整體流程說明:
    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。


上一篇
Day12. 正規表達式Regular Expressions
下一篇
Day14. 網路爬蟲Program that Surf the Web
系列文
Python學習馬拉松:30天挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言