#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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...