Python學習日記(二十九) 網路編程

来源:https://www.cnblogs.com/Fantac/archive/2019/09/14/11518229.html
-Advertisement-
Play Games

早期的電腦通信需要有一個中間件,A要給B傳東西,A必須要把信息傳給中間件,B再把從中間件中拿到信息 由於不同機器之間需要通信就產生了網路 軟體開發的架構 1.C/S架構 伺服器-客戶機,即Client-Server架構,C/S架構通常採取兩層結構.Sever負責數據的管理,Client負責完成與用 ...


早期的電腦通信需要有一個中間件,A要給B傳東西,A必須要把信息傳給中間件,B再把從中間件中拿到信息

由於不同機器之間需要通信就產生了網路

軟體開發的架構

1.C/S架構

伺服器-客戶機,即Client-Server架構,C/S架構通常採取兩層結構.Sever負責數據的管理,Client負責完成與用戶的交互任務

這裡來說Client主要是某個應用軟體的exe文件,程式要在安裝後,才能運行在用戶電腦上。

例如:QQ、微信、網易雲音樂等

2.B/S架構

瀏覽器端-伺服器,即Browser-Sever,B/S架構是WEB興起後的一種網路架構模式,WEB瀏覽器是客戶端最主要的應用軟體.這種模式統一了客戶端,將系統功能實現的核心部分集中到伺服器上,簡化了系統的開發、維護和使用.客戶機上只要安裝一個Browser,伺服器安裝Oracle、SQL Sever等資料庫.瀏覽器通過Web Sever同資料庫進行數據交互,這樣就大大簡化了客戶端電腦載荷,減輕了系統維護與升級的成本和工作量,降低了用戶的總體成本(TCO)。

例如:百度、知乎、豆瓣、博客園等

3.B/S架構和C/S架構之間的關係

B/S架構是C/S架構的一種 

 

電腦網路的發展及基礎網路概念

早期:聯機

想要實現通信就必須要網卡和網線,每個網卡上都有一個全球唯一的MAC地址

MAC地址:英文名為Media Access Control Address,即媒體存取控制位址,也稱為區域網地址(LAN Adress),MAC位址,乙太網網址(Ethenet Address)或物理地址(Physical Address),它是用來確認網路設備位置的地址。

MAC地址的長度為48位(6個位元組),通常表示12個16進位數,如:00-16-EA-AE-3C-40就是一個MAC地址,其中前6位十六進位數00-16-EA代表網路硬體製造商的編號,後6位十六進位數AE-3C-40代表該製造商所製造的某個網路產品的系列號。每個MAC地址都如身份證號一樣具有唯一性。

IP地址:Internet Protocol,全稱互聯網協議地址,常見分為IPv4和IPv6。IP地址是IP協議提供的一種統一的地址格式,它為互聯網的每一個網路和每一臺主機分配一個邏輯地址,以此來屏蔽物理地址的差異。

IP地址的表示範圍:0.0.0.0-255.255.255.255(四個點分十進位表示)

通常我們使用的都是IPv4的地址,如果使用IPv6的表示方式:0.0.0.0.0.0-255.255.255.255.255.255

乙太網:區域網和交換機

交換機的出現解決了多臺電腦之間的通信問題,網路拓撲就是將各個機器都通過網線連到交換機

廣播:比如伺服器4想找到伺服器1,那麼它就會通過向交換機讓它告訴所有的伺服器我要找伺服器1,然後只有伺服器1會回覆我收到了信息

ARP協議:Address Resolution Protocol,即地址解析協議,它是根據IP地址去獲取物理地址的一個TCP/IP協議。主機發送消息時將包含目標IP地址的ARP請求廣播到區域網網路上的所有主機,並接收返回消息,以此確定目標的物理地址;收到返回消息後將該IP地址和物理地址存入本機ARP緩存中並保留一定時間,下次請求時直接查詢ARP緩存以節約資源

簡單來說就是:A機器要找B機器,A機器把請求發給交換機,然後再由交換機把這個請求廣播出去,告訴所有機器我現在要找這個機器,所有的機器都會收到這一條消息,但是他們會先看要找這個IP地址是不是和我相同,不是的話就會把這個數據包給丟掉,如果IP地址和我要找的這個機器的IP地址相同,那麼這台機器就會把自己的MAC地址交給交換機,然後再由交換機再把信息單播給A機器。

廣域網與路由器

路由器:Router,連接兩個或多個網路的硬體設備,在網路間起網關的作用,是讀取每一個數據包中的地址然後決定如何傳送的專用智能性網路設備。

網關:Gateway,即網間連接器、協議轉換器。網關在網路層以上實現網路互聯,是最複雜的網路互聯設備,僅用兩個高層協議不同的網路互聯。網關既可以用於廣域網互連,也可以用於區域網互連。網關是一種充當轉換重任的電腦系統或設備。使用在不同的通信協議、數據格式或語言,甚至體繫結構完全不同的兩種系統之間,網關是一個翻譯器。

區域網:Local Area Network,區域網的覆蓋範圍一般是方圓幾千里之內,其具備的安裝便捷、成本節約、擴展方便等特點使其在各個辦公室內運用廣泛。區域網可以實現文件管理、應用軟體共用、印表機共用等功能,在使用過程當中,通過維護區域網網路安全,能夠有效地保護資料安全,保證區域網網路能夠正常穩定的運行。

子網掩碼:Subnet mask,即網路掩碼、地址掩碼、子網路遮罩,它是一種用來指明一個IP地址的哪些位標識的是主機所在的子網,以及哪些位標識的是主機的位掩碼。子網掩碼不能單獨存在,它必須結合IP地址一起使用。子網掩碼只有一個作用,就是將某個IP地址劃分成網路地址和主機地址兩部分。

子網掩碼是一個32位地址,用於屏蔽IP地址的一部分以區別網路標識和主機標識,並說明該IP地址是在區域網上,還是在廣域網上。

那如何判斷兩台機器它們是在同一個網段呢?

IP1:192.168.43.2

IP2:192.168.43.1

IP3:192.168.45.20

子網掩碼:255.255.255.0

我們需要看子網掩碼和IP地址,再將它們按位AND

IP1:   192.168. 43.2 = 11000000.10101000.00101011.00000010

子網掩碼:255.255.255.0 = 11111111.11111111.11111111.00000000

按位AND運算結果:     11000000.10101000.00101011.00000000 ->192.168.43.0

 

IP2:   192.168. 43.1 = 11000000.10101000.00101011.00000001

子網掩碼:255.255.255.0 = 11111111.11111111.11111111.00000000

按位AND運算結果:     11000000.10101000.00101011.00000001 ->192.168.43.0

 

IP3:   192.168.45.20 = 11000000.10101000.00101101.00010100

子網掩碼:255.255.255.0 = 11111111.11111111.11111111.00000000

按位AND運算結果:     11000000.10101000.00101101.00000000 ->192.168.45.0

結果只看前三位十進位數,最後一位數不同沒關係,所以IP1和IP2在同一網段,IP3和其他不屬於同一個網段

IP協議的主要作用有兩個,一個是為每台電腦分配IP地址,另一個是確定哪些地址在同一個自網路。

TCP協議和UDP協議

:Port,可以認為是設備與外界通訊交流的出口。埠可以分為虛擬埠和物理埠,其中虛擬埠指電腦內部或交換機路由器的埠,不可見,例如電腦中的80埠、21埠等。物理埠又稱為介面,是可見埠,例如電腦背板的RJ45網口,交換機路由器集線器等RJ45埠,電話使用RJ11埠也屬於物理埠的範疇。

通過埠來找到程式

在電腦上每一個需要網路的程式都會開一個埠,在同一時間只會有一個程式占用一個埠,不可能在同一時間有兩個程式占用一個埠

埠的範圍:0-65535(2^16-1),一般使用8000以後的埠

總結:如果有IP那麼我就能確認唯一一臺機器、如果有埠那麼我就能確認唯一一個程式、如果我有IP和埠那麼我就能找到唯一一臺機器上的唯一一個程式

   內網IP地址:127.0.0.1(本地的迴環地址),它不能提供對外服務

TCP協議

Transmisssion Control Protocol,即傳輸控制協議,是一種面向連接的、可靠的、基於位元組流的傳輸層通信協議。

當應用程式希望通過TCP與另一個應用程式通信時,它會發送一個通信請求。這個請求必須被送到一個確切的地址。在雙方"握手"之後,TCP將在兩個應用程式之間建立一個全雙工(full-duplex)的通信。這個全雙工的通信將占用兩個電腦之間的通信線路,直到它被一方或雙方關閉為止。

SYN:Synchronize Sequence Numbers,是TCP/IP建立連接時使用的握手信號。在客戶機和服務機之間建立正常的TCP網路連接時,客戶機首先發出一個SYN消息,伺服器使用SYN+ACN應答表示接收到了這個消息,最後客戶機再以ACK消息回應。這樣在客戶機和服務機之間才能建立起可靠的TCP協議,數據才可以在客戶機和服務機之間傳遞。

ACK:Acknowledge character,即確認字元,在數據通信中,接收站發給發送站的一種傳輸類控制符,表示發來的數據無誤。在TCP/IP協議中,如果對方成功的接收到數據,那麼會回覆一個ACK數據。通常ACK有自己固定的格式,長度大小,由接收方回覆給發射方。

三次握手過程

第一次握手:建立連接時,客戶端發送syn包(syn = j)到伺服器,併進入SYN_SENT狀態,等待伺服器確認

第二次握手:伺服器收到syn包,必須確認客戶的syn(ack = j + 1),同時自己也發送一個syn(seq = k),即syn + ack包,此時伺服器進入SYN_RECV

第三次握手:客戶端收到伺服器的syn + ack包,向伺服器發送確認包ack(ack = k +1),此包發送完畢,客戶端和伺服器進入ESTABLISHED(TCP連接成功)狀態,完成三次握手

完成三次握手,客戶端與服務端開始傳送數據

由於TCP連接時全雙工的,因此,每個方向都必須要單獨進行關閉,這一原則是當一方完成數據發送任務後,發送一個FIN來終止這一方向的連接,收到一個FIN只是意味著這一方向上沒有數據流動了,即不會再收到數據了,但是在這個TCP連接上仍然能夠發送數據,直到這一方向也發送了FIN。首先進行關閉的一方將執行主動關閉,而另一方則執行被動關閉,上圖描述的即是如此。

第一次揮手:Client發送一個FIN,用來關閉Client到Server的數據傳送,Client進入FIN_WAIT_1狀態。

第二次揮手:Server收到FIN後,發送一個ACK給Client,確認序號為收到序號+1(與SYN相同,一個FIN占用一個序號),Server進入CLOSE_WAIT狀態。

第三次揮手:Server發送一個FIN,用來關閉Server到Client的數據傳送,Server進入LAST_ACK狀態。

第四次揮手:Client收到FIN後,Client進入TIME_WAIT狀態,接著發送一個ACK給Server,確認序號為收到序號+1,Server進入CLOSED狀態,完成四次揮手。

UDP協議

User Datagram Protocol,UDP為應用程式提供了一種無需建立連接就可以發送封裝的IP數據報的方法。當它想傳送時就簡單地去抓取來自應用程式的數據,並儘可能快地把它扔到網路上。

QQ它的消息傳輸用的就是UDP協議

對比

TCP特點:面向連接、可靠傳輸、面向位元組流、流量控制、阻塞控制

UDP特點:無連接、盡最大努力交付、面向報文

 

互聯網協議和OSI模型

每層運行常見物理設備

每層運行常見的協議

兩台機器間的傳遞模式

就是一個包快遞->拆快遞的過程


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

-Advertisement-
Play Games
更多相關文章
  • 數據交互是前端很重要的一部分,靜態頁是基礎,而交互才是網頁的精髓。交互又分為人機交互和前後端數據交互,現階段的互聯網下,大部分的網站都要進行前後端數據交互,如何交互呢?交互的流程大概就是前端發送數據給後端,後端接送數據,進行處理,將處理後的結果發送給前端,前端接受數據。前端和後端的收和發通過什麼呢? ...
  • 結構元素不具有任何樣式,只是使頁面元素的的語義更加明確。 header元素 header元素是一種具有引導和導航作用的的結構元素, 該元素可以包含所有通常放在頁面頭部的內容 。header元素通常用來放置整個頁面或頁面內的一個內容區塊的標題,也可以包含網站Logo圖片、搜索表單或者其他相關內容。 一 ...
  • js由三部分組成,分別是ECMAScript、DOM、BOM 其中ECMAScript規定了js的語法 js是一門解釋型語言、腳本語言、動態類型語言、基於對象語言 書寫js代碼和CSS一樣,有三個書寫的地方,第一個是使用<script>標簽,再<sccript>標簽中書寫js代碼,標簽一般都在bod ...
  • 如果您的瀏覽器支持 XSLT,那麼在瀏覽器中它可被用來將文檔轉換為 XHTML。 如果您的瀏覽器支持 XSLT,那麼在瀏覽器中它可被用來將文檔轉換為 XHTML。 JavaScript 解決方案 在前面的章節,我們已向您講解如何使用 XSLT 將某個 XML 文檔轉換為 XHTML。我們是通過以下途 ...
  • 一、html語言概述 超文本標記語言(英語:HyperText Markup Language,簡稱:HTML)是一種用於創建網頁的標準標記語言。 您可以使用 HTML 來建立自己的 WEB 站點,HTML 運行在瀏覽器上,由瀏覽器來解析。 二、目前瀏覽器內核(瞭解): 三、HTML 初體驗 上述實 ...
  • ​ 路由獨立守衛,顧名思義就是這個路由自己的守衛任務,就如同咱們LOL,我們守衛的就是獨立一條路,保證我們這條路不要被敵人攻剋(當然我們也得打團配合) 在官方定義是這樣說的:你可以在路由配置上直接定義 beforeEnter 守衛,這些守衛與全局前置守衛的方法參數是一樣的。 參數如下: 我們在這裡使 ...
  • 前言: 對於大多數前端同學來說閉包一直是個很讓人困惑的問題,我自己之前雖說在項目中有意無意的用到但是都沒有刻意的去深入研究它,大部分時間是為了應付面試。後來某一天我突然意識到自己要去認真研究下它,因為知其然而不知其所以然並不應該是學習一種語言的態度,所以我打算寫篇文章嘗試著用我自己的理解去解釋下閉包 ...
  • 工廠設計模式: 顧名思義,該模式是用來生產對象的。在面向對象的設計模式中,萬物皆對象,若使用new來創建對象,就會對該對象產生強耦合,加入我們需要更換該對象,那麼使用該對象的對象都需要進行修改,這顯然違背了開閉原則(OCP)。如果我們使用工廠來產生對象,我們只需要與這個工廠打交道就可以了,無需關心具 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...