python網路-電腦網路基礎(23)

来源:https://www.cnblogs.com/Se7eN-HOU/archive/2019/04/20/10739619.html
-Advertisement-
Play Games

一、網路簡介 網路是由節點和連線構成,表示諸多對象及其相互聯繫。 一個人玩: 兩個人玩: 多個人玩: 說明 網路就是一種輔助雙方或者多方能夠連接在一起的工具 如果沒有網路可想單機的世界是多麼的孤單 使用網路的目的 就是為了聯通多方然後進行通信用的,即把數據從一方傳遞給另外一方 前面的學習編寫的程式都 ...


一、網路簡介

網路是由節點和連線構成,表示諸多對象及其相互聯繫。

一個人玩:

 

兩個人玩:

 

多個人玩:

說明

  • 網路就是一種輔助雙方或者多方能夠連接在一起的工具
  • 如果沒有網路可想單機的世界是多麼的孤單

使用網路的目的

  • 就是為了聯通多方然後進行通信用的,即把數據從一方傳遞給另外一方
  • 前面的學習編寫的程式都是單機的,即不能和其他電腦上的程式進行通信
  • 為了讓在不同的電腦上運行的軟體,之間能夠互相傳遞數據,就需要藉助網路的功能
  • 所謂的網路編程就是,讓在不同的電腦上的軟體能夠進行數據傳遞,即進程之間的通信

 

二、tcp/ip簡介

1. 什麼是協議

有的說英語,有的說中文,有的說德語,說同一種語言的人可以交流,不同的語言之間就不行了

為瞭解決不同種族人之間的語言溝通障礙,現規定國際通用語言是英語,這就是一個規定,這就是協議

2. 電腦網路溝通用什麼

現在的生活中,不同的電腦只需要能夠聯網(有線無線都可以)那麼就可以相互進行傳遞數據,那麼不同種類之間的電腦到底是怎麼進行數據傳遞的呢?就像說不同語言的人溝通一樣,只要有一種大家都認可都遵守的協議即可,那麼這個電腦都遵守的網路通信協議叫做TCP/IP協議

3. TCP/IP協議(族)

早期的電腦網路,都是由各廠商自己規定一套協議,IBM、Apple和Microsoft都有各自的網路協議,互不相容

為了把全世界的所有不同類型的電腦都連接起來,就必須規定一套全球通用的協議,為了實現互聯網這個目標,互聯網協議簇(Internet Protocol Suite)就是通用協議標準。

因為互聯網協議包含了上百種協議標準,但是最重要的兩個協議是TCP和IP協議,所以,大家把互聯網的協議簡稱TCP/IP協議

常用的網路協議如下圖所示:

說明:

  • 網際層也稱為:網路層
  • 網路介面層也稱為:鏈路層

 

三、埠簡介

那麼TCP/IP協議中的埠指的是什麼呢?埠就好一個房子的門,是出入這間房子的必經之路。

如果一個進程需要收髮網絡數據,那麼就需要有這樣的埠

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

既然有這麼多,操作系統為了統一管理,所以進行了編號,這就是埠號

2. 埠號

埠是通過埠號來標記的,埠號只有整數,範圍是從0到65535

3. 埠是怎樣分配的

  • 埠號不是隨意使用的,而是按照一定的規定進行分配。
  • 埠的分類標準有好幾種,我們這裡不做詳細講解,只介紹一下知名埠和動態埠

4.知名埠(Well Known Ports)

知名埠是眾所周知的埠號,範圍從0到1023

  • 80埠分配給HTTP服務
  • 21埠分配給FTP服務

可以理解為,一些常用的功能使用的號碼好比:電話號碼110、10086、10010一樣

一般情況下,如果一個程式需要使用知名埠的需要有root許可權

5.動態埠(Dynamic Ports)

  • 動態埠的範圍是從1024到65535
  • 之所以稱為動態埠,是因為它一般不固定分配某種服務,而是動態分配。
  • 動態分配是指當一個系統進程或應用程式進程需要網路通信時,它向主機申請一個埠,主機從可用的埠號中分配一個供它使用。
  • 當這個進程關閉時,同時也就釋放了所占用的埠號。
  • 用“netstat -an”查看埠狀態

6、埠總結

埠有什麼用呢 ? 我們知道,一臺擁有IP地址的主機可以提供許多服務,比如HTTP(萬維網服務)、FTP(文件傳輸)、SMTP(電子郵件)等,這些服務完全可以通過1個IP地址來實現。那麼,主機是怎樣區分不同的網路服務呢?顯然不能只靠IP地址,因為IP地址與網路服務的關係是一對多的關係。實際上是通過“IP地址+埠號”來區分不同的服務的。 需要註意的是,埠並不是一一對應的。比如你的電腦作為客戶機訪問一臺WWW伺服器時,WWW伺服器使用“80”埠與你的電腦通信,但你的電腦則可能使用“3457”這樣的埠。

 

四、IP地址簡介

IP地址就像是我們的家庭住址一樣,如果你要寫信給一個人,你就要知道他(她)的地址,這樣郵遞員才能把信送到。電腦發送信息就好比是郵遞員,它必須知道唯一的“家庭地址”才能不至於把信送錯人家。只不過我們的地址使用文字來表示的,電腦的地址用二進位數字表示。

IP地址是一個32位的二進位數,通常被分割為4個“8位二進位數”(也就是4個位元組)。IP地址通常用“點分十進位”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之間的十進位整數。例:點分十進IP地址(100.4.5.6),實際上是32位二進位數(01100100.00000100.00000101.00000110)。

ip地址的分類

A類IP地址

  • 一個A類IP地址由1位元組的網路地址和3位元組主機地址組成,網路地址的最高位必須是“0”,
  • 地址範圍1.0.0.1-126.255.255.254
  • 二進位表示為:00000001 00000000 00000000 00000001 - 01111110 11111111 11111111 11111110
  • 可用的A類網路有126個,每個網路能容納1677214個主機

B類IP地址

  • 一個B類IP地址由2個位元組的網路地址和2個位元組的主機地址組成,網路地址的最高位必須是“10”,
  • 地址範圍128.1.0.1-191.255.255.254
  • 二進位表示為:10000000 00000001 00000000 00000001 - 10111111 11111111 11111111 11111110
  • 可用的B類網路有16384個,每個網路能容納65534主機

C類IP地址

  • 一個C類IP地址由3位元組的網路地址和1位元組的主機地址組成,網路地址的最高位必須是“110”
  • 範圍192.0.1.1-223.255.255.254
  • 二進位表示為: 11000000 00000000 00000001 00000001 - 11011111 11111111 11111110 11111110
  • C類網路可達2097152個,每個網路能容納254個主機

D類地址用於多點廣播

  • D類IP地址第一個位元組以“1110”開始,它是一個專門保留的地址。
  • 它並不指向特定的網路,目前這一類地址被用在多點廣播(Multicast)中
  • 多點廣播地址用來一次定址一組電腦
  • 地址範圍224.0.0.1-239.255.255.254

E類IP地址

  • 以“1111”開始,為將來使用保留
  • E類地址保留,僅作實驗和開發用

私有ip

  • 在這麼多網路IP中,國際規定有一部分IP地址是用於我們的區域網使用,也就
  • 是屬於私網IP,不在公網中使用的,它們的範圍是:
  • 10.0.0.0~10.255.255.255
  • 172.16.0.0~172.31.255.255
  • 192.168.0.0~192.168.255.255
  • IP地址127.0.0.1~127.255.255.255用於迴路測試,
  • 如:127.0.0.1可以代表本機IP地址,用http://127.0.0.1就可以測試本機中配置的Web伺服器。

 

五、子網掩碼簡介

要想理解什麼是子網掩碼,就不能不瞭解IP地址的構成。互聯網是由許多小型網路構成的,每個網路上都有許多主機,這樣便構成了一個有層次的結構。IP地址在設計時就考慮到地址分配的層次特點,將每個IP地址都分割成網路號和主機號兩部分,以便於IP地址的定址操作。

IP地址的網路號和主機號各是多少位呢?

如果不指定,就不知道哪些位是網路號、哪些是主機號,這就需要通過子網掩碼來實現。

子網掩碼不能單獨存在,它必須結合IP地址一起使用。

子網掩碼只有一個作用,就是將某個IP地址劃分成網路地址和主機地址兩部分子網掩碼的設定必須遵循一定的規則。

與IP地址相同,子網掩碼的長度也是32位,

  • 左邊是網路位,用二進位數字“1”表示;
  • 右邊是主機位,用二進位數字“0”表示。

假設IP地址為“192.168.1.1”子網掩碼為“255.255.255.0”,子網掩碼裝換二進位位:11111111 11111111 11111111 00000000

  • 其中,“1”有24個,代表與此相對應的IP地址左邊24位是網路號;
  • “0”有8個,代表與此相對應的IP地址右邊8位是主機號。
  • 這樣,子網掩碼就確定了一個IP地址的32位二進位數字中哪些是網路號、哪些是主機號。
  • 這對於採用TCP/IP協議的網路來說非常重要,只有通過子網掩碼,才能表明一臺主機所在的子網與其他子網的關係,使網路正常工作。

最常用的子網掩碼是“255.255.255.0”的網路:

  • 最後面一個數字可以在0~255範圍內任意變化,因此可以提供256個IP地址。
  • 但是實際可用的IP地址數量是256-2,即254個,因為主機號不能全是“0”或全是“1”。
  • 主機號全為0,表示網路號
  • 主機號全為1,表示網路廣播

 

六、socket簡介

1.本地的進程間通信(IPC)有很多種方式,例如

  • 隊列
  • 同步(互斥鎖、條件變數等)

以上通信方式都是在一臺機器上不同進程之間的通信方式,那麼問題來了,網路中進程之間如何通信?

2. 網路中進程之間如何通信

  • 首要解決的問題是如何唯一標識一個進程,否則通信無從談起!
  • 在本地可以通過進程PID來唯一標識一個進程,但是在網路中這是行不通的。
  • 其實TCP/IP協議族已經幫我們解決了這個問題,網路層的“ip地址”可以唯一標識網路中的主機,而傳輸層的“協議+埠”可以唯一標識主機中的應用程式(進程)。
  • 這樣利用ip地址,協議,埠就可以標識網路的進程了,網路中的進程通信就可以利用這個標誌與其它進程進行交互

3. 什麼是socket

  • socket(簡稱 套接字) 是進程間通信的一種方式,它與其他進程間通信的一個主要不同是:
  • 它能實現不同主機間的進程間通信,我們網路上各種各樣的服務大多都是基於 Socket 來完成通信的
  • 例如我們每天瀏覽網頁、QQ 聊天、收發 email 等等

4. 創建socket

在 Python 中 使用socket 模塊的函數 socket 就可以完成:

socket.socket(AddressFamily, Type)

說明:

函數 socket.socket 創建一個 socket,返回該 socket 的描述符,該函數帶有兩個參數:

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

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

import socket

s = socket.socket(socket.AF_INET, SOCK_STREAM)

print 'Socket Created'

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

import socket

s = socket.socket(socket.AF_INET, SOCK_DGRAM)

print 'Socket Created'

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

-Advertisement-
Play Games
更多相關文章
  • Tampermonkey來改造你瀏覽的網頁,獲得更好的上網體驗 ...
  • 一. 標準盒模型和IE盒模型 1. w3c標準盒模型 width和height不包括padding和border 2. ie盒模型 width和height包括padding和border 3. css3中的box-sizing content-box w3c標準盒模型 border-box IE盒 ...
  • 里氏替換原則LSP (Liskov Subsituation Principle) 里氏替換原則定義 所有 父類出現 的地方可以使用 子類替換 並不會出現錯誤或異常,但是反之子類出現的地方不一定能用父類替換。 LSP的四層含義 子類必須完全實現父類的方法 子類可以自己的個性(屬性和方法) 覆蓋或實現 ...
  • 策略模式 定義 什麼是策略模式?定義了演算法族,分別封裝起來,讓它們之間可以互相替換,此模式讓演算法的變化獨立於使用演算法的客戶。 我的理解就是:比如我們接下來要說到的鴨子案例,有的鴨子可以飛,而飛又分為很多種,飛很高,飛得很低各種,我們就會把飛這個行為定義為介面,然後再分別去實現,而我們的鴨子只需要註入 ...
  • 單一職責原則SRP (Single reponsibility principle) BO(Business Object) :業務對象 Biz(Business Logic) :業務邏輯 SRP最簡單的例子:用戶信息維護類 單一職責原則SRP定義 應該有且僅有一個原因引起類的變更。( 一個介面只有 ...
  • [TOC] 在學習Observer觀察者模式時發現它符合敏捷開發中的OCP開放 封閉原則, 本文通過一個場景從差的設計開始, 逐步向Observer模式邁進, 最後的代碼能體現出OCP原則帶來的好處, 最後分享Observer模式在自己的項目中的實現. 場景引入 在一戶人家中, 小孩在睡覺, 小孩睡 ...
  • 1.什麼是spring IOC IOC(Inversion of Control)即控制反轉,在我們以往的編程中如果需要一個bean往往需要去手動去new一個出來。而spring幫我們解決了這個問題,在spring中我們只需要去定義bean,spring就會自動的幫我們實例化並管理Bean。而這些B ...
  • 控制台編程中,使用了滑鼠操作,遇到了控制台無法接收到滑鼠消息的問題,可嘗試一下辦法解決 【win10系統】 在控制台標題欄右鍵-預設值-選項,將一下對勾取消 然後調用如下函數: HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE); SetConsoleMode(h ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...