您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關python中網(wǎng)絡通信數(shù)據(jù)傳輸?shù)氖纠膬?nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
python實現(xiàn)網(wǎng)絡通信數(shù)據(jù)傳輸
前言
基礎知識學習
一、OSI 模型
二、TCP、IP協(xié)議族:
三、python中字符串的編碼方式
前言
第二彈來了!今天還是上些基礎知識吧,扎實的基礎才是深入學習的不二法門!??!
基礎知識學習
一、OSI 模型
OSI 模型把網(wǎng)絡通信的工作分為 7 層,從下到上分別是物理層、數(shù)據(jù)鏈路層、網(wǎng)絡層、傳輸層、會話層、表示層和應用層。
OSI 只是存在于概念和理論上的一種模型,它的缺點是分層太多,增加了網(wǎng)絡工作的復雜性,所以沒有大規(guī)模應用。后來人們對 OSI 進行了簡化,合并了一些層,最終只保留了 4 層,從下到上分別是接口層、網(wǎng)絡層、傳輸層和應用層,這就是大名鼎鼎的 TCP/IP 模型。
這個網(wǎng)絡模型究竟是干什么呢?簡而言之就是進行數(shù)據(jù)封裝的。
數(shù)據(jù)封裝原理: 我們平常使用的程序(軟件)一般都是通過應用層來訪問網(wǎng)絡的,程序產(chǎn)生的數(shù)據(jù)會一層一層地往下傳輸,直到最后的網(wǎng)絡接口層,就通過網(wǎng)線發(fā)送到互聯(lián)網(wǎng)上去了。數(shù)據(jù)每往下走一層,就會被這一層的協(xié)議增加一層包裝,等到發(fā)送到互聯(lián)網(wǎng)上時,已經(jīng)比原始數(shù)據(jù)多了四層包裝。整個數(shù)據(jù)封裝的過程就像俄羅斯套娃。當另一臺計算機接收到數(shù)據(jù)包時,會從網(wǎng)絡接口層再一層一層往上傳輸,每傳輸一層就拆開一層包裝,直到最后的應用層,就得到了最原始的數(shù)據(jù),這才是程序要使用的數(shù)據(jù)。給數(shù)據(jù)加包裝的過程,實際上就是在數(shù)據(jù)的頭部增加一個標志(一個數(shù)據(jù)塊),表示數(shù)據(jù)經(jīng)過了這一層,我已經(jīng)處理過了。給數(shù)據(jù)拆包裝的過程正好相反,就是去掉數(shù)據(jù)頭部的標志,讓它逐漸現(xiàn)出原形。
兩臺計算機進行通信時,必須遵守以下原則:
(1) 必須是同一層次進行通信,比如,A 計算機的應用層和 B 計算機的傳輸層就不能通信,因為它們不在一個層次,數(shù)據(jù)的拆包會遇到問題。
(2) 每一層的功能都必須相同,也就是擁有完全相同的網(wǎng)絡模型。如果網(wǎng)絡模型都不同,那不就亂套了,誰都不認識誰。
數(shù)據(jù)只能逐層傳輸,不能躍層。
(3) 每一層可以使用下層提供的服務,并向上層提供服務。
二、TCP、IP協(xié)議族:
常用到的 socket 編程是基于 TCP 和 UDP 協(xié)議的,它們的層級關系如下圖所示:
同樣一個數(shù),你可以選不同的方式來表示它,選用什么方案,就是對 Unicode 的一種編碼方法(utf-8是Unicode編碼方式的一種具體實現(xiàn))。
Python 內(nèi)部使用 Unicode 來表示字符串,所以想要print什么漢字(英文字母和數(shù)字的Unicode和utf-8的編碼是一樣的)的就要保證是Unicode的編碼方式,如果是“utf-8”的編碼方式(輸出就是一堆二進制代碼,一個漢字的utf-8編碼為三個字節(jié),也就是三段二進制表示,如下圖),可以用.decode(“utf-8”)來解碼。而在保存到硬盤或者發(fā)送到網(wǎng)上(用到socket等和通信有關的),需要轉成 UTF-8。
為什么在內(nèi)部不繼續(xù)使用 UTF-8,那樣不就不用轉換了嗎?這個就涉及到 UTF-8 的一個缺點:計算字符串長度和查找子字符串非常沒效率。在使用 UCS2 的時候,要想知道這個字符串有多長,只要看一下它占了幾個字節(jié),然后除個 2 就可以了,而 UTF-8 的話,就需要一個字符一個字符的數(shù)出來。在做子字符串搜索的時候,因為不知道下一個字符占幾個字節(jié),所以那些高效的搜索算法也都不靈了。
感謝各位的閱讀!關于“python中網(wǎng)絡通信數(shù)據(jù)傳輸?shù)氖纠边@篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。