#8 Python網路編程(一)

来源:https://www.cnblogs.com/minutesheep/archive/2019/04/12/10659700.html
-Advertisement-
Play Games

本篇博文主要記錄網路編程的先修知識,重點講解了五層網路體繫結構和TCP/IP協議 ...


前言

語言是用來交流的,人類語言使人與人交流,編程語言使人與機器交流,那麼問題來了,機器如何與機器交流。你是否疑惑過:為什麼我們可以使用瀏覽器查資料、為什麼我們可以使用聊天軟體聊天、為什麼我們可以通過網路傳輸文件.etc。會與機器交流的人是少部分的,正是這少部分人讓幾乎所有人方便的使用網路,對於這所有人來說,他們想要聊天,只需要打開一個聊天視窗,輸入文字,然後發送即可,他們並不會關註其背後的具體過程,因為背後的過程是複雜的,是由少部分人完成的。通過這本次系列的學習,你將成為少部分人!

一、網路編程概念

1.1 網路編程概念

網路編程聽起來很高大上,但其實質就是進程之間的通信。再說的直白點,就是軟體間的通信,可以是同一電腦的同一軟體、同一電腦的不同軟體、不同電腦的不同軟體、不同電腦的同一軟體。(看到這裡,應該大概明白了進程就是軟體了哇)

二、網路編程先修知識

2.1 電腦網路五層協議體繫結構

為了介紹網路原理,通常習慣將電腦網路分為五層協議體繫結構,從下至上分別為:物理層、數據鏈路層、網路層、運輸層、應用層。

2.1.1 應用層

應用層是體繫結構的最高層。直接為用戶的應用進程提供服務,主要任務是通過應用進程間的交互來完成特定的網路應用。應用層協議定義的是應用進程間通信和交互的規則。

應用層的協議很多,例如大家熟知的HTTP協議、DNS、SMTP協議、FTP等等

『防抄襲:讀者請忽略這段文字,文章作者是博客園的MinuteSheep

2.1.2 運輸層

運輸層的主要任務是負責向兩台主機中進程之間的通信提供通用的數據傳輸服務。

運輸層主要有以下兩種協議:

傳輸控制協議TCP(Transmission Control Protool)—— 提供面向連接的、可靠的數據傳輸服務

用戶數據協議UDP(User Datagram Protool)—— 提供無連接的、盡最大努力的數據傳輸服務

2.1.3 網路層

網路層負責為分組交換網上的不同主機提供通信服務。

網路層最常用的協議為IP(Internet Protool)協議

2.1.4 數據鏈路層

兩台主機之間的數據傳輸,總是在一段一段的鏈路上傳送的,這就需要使用專門的鏈路層協議。

2.1.5 物理層

物理層主要的任務是傳送比特流。

2.2 圖解數據在各層之間的傳遞過程

上圖是從《電腦網路》(第七版,謝希仁)掃描下來的,這幅圖顯示了整個電腦網路體系的傳遞過程。

假定主機1的應用進程AP1向主機2的應用進程AP2傳送數據。AP1先將其數據交給本主機的第5層(應用層)。第5層加上必要的控制信息H5就變成了下一層的數據單元。第4層(運輸層)收到這個數據單元後,加上本層的控制信息H4,在交給第3層(網路層),成為第3層的數據單元。一次類推,不過到了第2層(數據鏈路層)後,控制信息被分為兩部分,分別加到本層數據單元的首部(H2)和尾部(T2);而第1層(物理層)由於是比特流的傳送,所以不在加上控制信息。

當這串的比特流離開主機1經網路的物理媒體傳送到路由器時,就從路由器的第1層依次上升到第3層。每層都根據控制信息進行必要的操作,然後將控制信息剝去,將該層剩下的數據單元上交給更高的一層。當分組上升到了第3層時,就根據首部中的目的地址查找路由器中的轉發表,找出轉發分組的介面,然後往下傳送到第2層,加上新的首部和尾部後,再到最下麵的第1層,然後在物理媒體上把每-個比特發送出去。

當這一串的比特流離開路由器到達目的站主機2時,就從主機2的第1層按照上面講過的方式,依次上升到第5層。最後,把應用進程AP1發送的數據交給目的站的應用進程AP2。

『防抄襲:讀者請忽略這段文字,文章作者是博客園的MinuteSheep

2.3 TCP/IP簡介

瞭解了上面五層網路體繫結構之後,兩台主機之間想要通信,那麼最重要的問題就是:要給誰發?怎麼發?發送的信息是否可以沒有任何錯誤的到達?

2.3.1 IP協議

為瞭解決要給誰發?怎麼發的問題,IP協議就誕生了。

  • 為每一臺電腦做了標識,這個標識就是IP地址,例如233.233.233.233,有了這個標識,就可以知道給誰發送了
  • IP協議負責將數據從一臺主機發送到另一臺主機。發送方式是將數據劃分為一段一段的,以IP包的形式發出去

2.3.2 TCP協議

發是能發了,但是能不能無差錯的送到對方手中,又成了一個難題,TCP的誕生解決了這個問題:

  • TCP是建立在IP協議之上的
  • TCP通過3次握手的方式建立連接,然後對IP包進行編號,保證每個IP包可以順利發送到對方手中,如果有一個包出現差錯,就重新發送這個包

 上圖就是TCP建立連接(三次握手

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • PyQtdeploy 用戶指南 目錄 介紹 與V1.0+的差異 作者 證書 安裝 "部署過程概覽" PyQt的演示 構建演示 Android IOS Linux MacOS Windos 構建系統根目錄 標準組建插件 創建Sysroot規範文件 PyQt演示的Sysroot 命令行 編寫組建插件 創 ...
  • 我國互聯網的發展道路與歐美不同,在內容的形式上,我們似乎實現了跨越式的發展——早早進入了移動互聯網時代,直播和短視頻等形式的內容成為了潮流,而文字形式的博客(blog)與聲音形式的播客(podcast)則(逐漸)成為了小眾。智能手機極大地改變了我們的上網習慣。 誠然,仍有一些受眾廣泛的聚合類的平臺, ...
  • 一、線程的生命周期 進程與線程一樣,都具有一定的生命周期,線程的生命周期包括四個狀態:創建狀態、就緒狀態、阻塞狀態、死亡狀態。 1.創建狀態 1)是指使用new實例化一個線程對象,但該線程對象還未使用start()方法啟動線程這個階段,該階段只在記憶體的堆中為該對象的實例變數分配了記憶體空間,但線程還無 ...
  • 一:MyBatis的架構 1.mybatis配置SqlMapConfig.xml,此文件作為mybatis的全局配置文件,配置了mybatis的運行環境等信息。 mapper.xml文件即sql映射文件,文件中配置了操作資料庫的sql語句。此文件需要在SqlMapConfig.xml中載入。 2.通 ...
  • 最近在開發時遇到一個非常奇怪的問題,在tomcat8中使用Spring MVC框架,在Controller中的方法參數無法正常獲取到相應的值,將tomcat版本換成7.0就解決了。 記錄以下解決過程,先上圖: 項目採用ssm架構,在這裡獲取不到參數password的值,在網上查詢相關資料,得到以下幾 ...
  • jQuery+php+Ajax實現的一個簡單實用的文章列表點擊載入更多功能,點擊載入更多按鈕,文章列表載入更多數據,載入中有loading動畫效果。 ...
  • PyQtdeploy 用戶指南 目錄 "介紹" "與V1.0+的差異" "作者" "證書" "安裝" 部署過程概覽 PyQt的演示 構建演示 Android IOS Linux MacOS Windos 構建系統根目錄 標準組建插件 創建Sysroot規範文件 PyQt演示的Sysroot 命令行 ...
  • 使用pip3 安裝cv2包的時候報錯 解決方案: pip3 install opencv-python ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...