官术网_书友最值得收藏!

2.1 TCP/IP網絡

TCP/IP是Transmission Control Protocol/Internet Protocol的簡寫,翻譯成中文為傳輸控制協議/互聯網絡協議。TCP/IP是一種網絡通信協議,它規范了網絡上的所有通信設備,尤其是一個主機與另一個主機之間的數據往來格式及傳送方式。TCP/IP是Internet的基礎協議,也是一種計算機數據打包和尋址的標準方法。

2.1.1 計算機網絡綜述

計算機網絡是指將地理位置不同的、具有獨立功能的多臺計算機及其外部設備,通過通信線路連接起來,在網絡操作系統、網絡管理軟件及網絡通信協議的管理和協調下,實現資源共享和信息傳遞。

20世紀90年代后,以Internet為代表的計算機網絡得到了迅猛發展,Internet成為世界上最大的計算機網絡。Internet主要由主機、線路、交換、路由、調制解調器等設備組成。網絡應用開發者無須具體了解Internet的架構及物理細節,把Internet看作由主機和傳輸設備兩部分組成即可,如圖2.1所示。

圖2.1 Internet抽象圖

主機有不同的形式,主要分為兩種:服務器和客戶端。在Internet中提供服務的主機叫作服務器,如各大門戶網站、社交平臺等;通過訪問服務器從而獲得有用信息的主機叫作客戶端,如各種家庭計算機和智能手機。

注意:本書所講的Web編程是指基于Internet網絡的應用編程。

1. 網絡分層

將數據從一臺主機傳輸到另一臺主機是一個復雜的過程,包括信息格式轉換、分發、尋址、物理傳輸等,在這個過程中還要加入多種校驗措施以保證傳輸的正確性。為了使這個過程利于設計并且向開發者隱匿網絡細節,計算機網絡被分割為不同的層,每一層表示不同的抽象程度和設計目的。每一層的功能相互獨立,這使得它們可以僅完成自己的任務,如傳輸、編碼等。Internet是基于TCP/IP網絡而搭建的,TCP/IP將網絡分為4層結構,分別是應用層、傳輸層、網絡層、接口層,如圖2.2所示。

圖2.2 TCP/IP網絡分層

對TCP/IP網絡分層從上到下解釋如下。

? 應用層:Application Layer,為用戶的進程直接提供服務,應用層負責發送及接收什么數據、如何解釋數據、如何呈現數據、如何加密數據等問題,是網絡應用程序開發者重點打交道的對象。例如,HTTPS定義了網絡間數據加密及認證的標準方法,HTML定義了網頁的解析方式等。

? 傳輸層:Transport Layer,為兩個主機的不同端口(Port)之間的通信提供服務。端口是一種在同一主機內的不同通道之間進行尋址的方式。傳輸層的發送方與接收方在物理上無須相鄰。TCP/IP的傳輸層包括兩種協議:TCP和UDP。TCP提供可靠的有序傳輸,UDP提供非可靠的傳輸。

? 網絡層:Network Layer,為兩個主機之間提供通信服務。網絡層定義了數據如何被封裝為傳送包,并且定義了不同主機之間的尋址方式。主要由IP組成,輔以ICMP、IGMP等路由協議。本書的Internet開發者只需了解IP即可。

? 接口層:Link Layer,負責相鄰物理設備之間的信息傳輸。接口層的工作非常多且復雜,它需要完成接口層的數據組裝(形成Frame),加入必要的控制和校驗數據,并且將二進制數據流(0/1)轉換為物理鏈路上的標準電平(高電平、低電平)。針對不同的物理傳輸介質,接口層定義了多套標準,并且這些標準隨著電子技術的進步而不斷發展,如802.3、802.11等。

2. 網絡設備

網絡設備及部件是連接到網絡的物理實體。網絡設備的種類繁多且與日俱增。本節的網絡設備特指Internet除主機外,僅起網絡傳輸及數據交換作用的設備,具體包括集線器、交換機、網橋、路由器、網關、網絡接口卡(NIC)、無線接入點(WAP)、調制解調器、光纜等。開發者無須精通網絡設備的原理及配置技術,但需要了解各種設備的作用及其所在TCP/IP的層次。

? 集線器:簡稱HUB,是接口層設備。集線器是網絡互聯的最簡單設備,它接收并識別網絡信號,然后再生信號并將其發送到網絡的其他分支上。

? 交換機:即Switcher,是接口層設備,也是網絡互聯中最常用的設備。它與集線器的差別是,集線器本身不能識別目的地址,而交換機可以。當同一局域網內的A主機向B主機傳輸數據時,數據包在經過集線器時在網絡上是以廣播方式傳輸的,由每一臺終端通過地址信息來確定數據包是否屬于自己;數據包經過交換機時,交換機會根據Frame目的地址直接發送給B主機所在的鏈路。因此,在網絡中用交換機替換集線器通常能提高網絡的整體性能。

? 網橋:Bridge,是接口層設備。網橋通常用于物理異構的網絡之間相互連接,如以太網和令牌網之間。

? 路由器:即Router,是網絡層設備。路由器是互聯網的主要節點設備,通過發送者、接收者的IP地址和路由算法決定數據的收發路徑,這一過程叫作“Routing”。

? 網關:Gateway,是一個通用概念,主要指不同網絡環境之間的協議轉換,一般為應用層設備,如一個專用于數據存儲轉發的服務器。

? 調制解調器:即Modem,俗稱“貓”,是接口層設備,用于連接計算機網絡與傳統通信網。調制解調器將計算機的數字信號轉譯成能夠在常規電話線中傳輸的模擬信號。因為模擬信道的傳輸距離更長,所以長距離的網絡傳輸一般都需要經過調制解調器轉接。常見的家用調制解調器包括56k貓、ADSL貓、光纖貓等。

? 無線接入點:即Wireless Access Point,是接口層設備。將有線網絡轉為無線網絡,最常用的無線接入點即WiFi。

? 防火墻:即Firewall,是傳輸層及應用層的設備。防火墻通常位于不同網絡的邊界處,主要用于防止惡意程序及數據進入內部網絡,或者防止機密信息泄露到廣域網中。企業級網絡通常用防火墻抵御非法入侵。

3. IP地址

網絡地址(Network Address)是一個網絡層概念,是互聯網上的主機在網絡中具有的邏輯地址。Internet上采用IP地址表示網絡地址。當前有兩種形式的IP地址,即IPv4和IPv6。

IPv4誕生于1982年,隨著TCP/IP的發展壯大,締造了當今的計算機網絡通信模式。IP地址是一個32位二進制數的地址,在表達方式上以4個十進制數字表示,如172.16.32.3、10.38.96.243等。從理論上講,有大約60億(232)種可能的地址組合,這似乎是一個很大的地址空間。實際上,一個IPv4地址被劃分為兩部分:網絡地址和主機地址。根據網絡地址和主機地址的不同位數規則,可以將IP地址分為A(8位網絡ID和24位主機ID)、B(16位網絡ID和16位主機ID)、C(24位網絡ID和8位主機ID)3類,由于歷史原因和技術發展的差異,A類地址和B類地址幾乎分配殆盡。

由于IPv4的數量限制,IPv6應運而生。IPv6由128位二進制數組成,在表達方式上用8個16進制數字表示,如d23:4334:0:0:23:ade:9853:23。單從數量級上來說,IPv6所擁有的地址容量約是IPv4的8×1028倍,達到2128個。這不但解決了網絡地址資源數量的問題,也為除計算機外的設備連入互聯網在數量限制上掃清了障礙。然而讓人遺憾的是,IPv6自1999年開始分配以來,并沒有在互聯網上得到廣泛應用。目前互聯網的主要地址表達方式及其調制仍主要以IPv4為主,但IPv6必將會替代IPv4。

4. 域名

由于IP地址由純數字組成,很難讓人記憶,且不能表達功能、地理位置等附加含義,所以在TCP/IP網絡形成不久,標準化組織就定義了域名這種主機地址表達方式。

域名(Domain Name)是一個應用層概念,是由一串用點分隔的名字組成的Internet上某臺計算機或計算機組的名稱,用于在數據傳輸時標識計算機的電子方位(有時也指地理位置、地理上的域名或有行政自主權的一個地方區域)。域名是一個IP地址的“面具”。一個域名是便于人們記憶和溝通的一組服務器的地址(網站、電子郵件、FTP等)。使用域名作為標記互聯網計算機的名稱已有30多年的歷史,世界上第1個域名是在1985年1月被注冊的。

域名中的標號都由英文字母和數字組成,每個標號不超過63個字符,字母也不區分大小寫。標號中除連字符(-)外不能使用其他標點符號。級別最低的域名寫在最左邊,而級別最高的域名寫在最右邊。由多個標號組成的完整域名總共不超過255個字符。讀者所熟知的域名如www.baidu.com、www.sina.com.cn等。

5. URL

URL即統一資源定位符,是用來表示Internet上資源位置的標準。資源位置包括資源所在的主機及其在主機內的訪問路徑。這里所說的資源是指Internet上任何可訪問的對象,包括文本、圖像、視頻流等。URL的標準形式如下:

其中,協議可以是HTTP、FTP等應用層協議;主機是域名或IP地址;端口是傳輸層端口號;路徑是以“/”分割的主機內的路徑;參數是以“&”分割的若干鍵值對。典型的URL包括http://www.mysite.edu:80/app/search.html?page=1&name=david、ftp://10.45.213.20:21/myfile等。

2.1.2 TCP和UDP

TCP/IP傳輸層是網絡中承上啟下的關鍵一層,向上對應用層提供通信服務,向下將應用信息封裝為網絡信息。傳輸層連接主機之間的進程,同一主機中不同進程的網絡通信通過端口進行區分,所以傳輸層為主機提供的是端口到端口的服務。

TCP和UDP是Internet中傳輸層最重要的兩種協議,由于開發者不可避免地要與傳輸層打交道,因此本節將介紹網絡開發所必需的TCP和UDP知識。

1. 端口

這里所說的端口,不是計算機硬件的I/O端口,而是軟件級的概念。就像IP地址是網絡層的尋址方式一樣,端口是傳輸層的尋址方式。端口是一個16位二進制數表達的正整數,數字范圍為0~65535,即一個在網絡上通信的主機理論上最多有65535個傳輸層信道。但由于在操作系統和一些應用中端口也被用作同一主機上不同進程之間的通信,因此通常可用的網絡端口數量少于65535個。

應用程序(調入內存運行后一般被稱為進程)通過系統調用與某端口建立連接(Binding,綁定)后,傳輸層傳給該端口的數據都被相應的進程所接收,相應的進程發給傳輸層的數據都從該端口輸出。由于TCP/IP傳輸層的TCP和UDP是兩個完全獨立的軟件模塊,因此各自的端口號也相互獨立。

注意:TCP和UDP可以在同一主機上使用相同的端口而互不干擾。例如,TCP有一個53號端口,UDP也可以有一個53號端口,兩者并不沖突。

每種網絡的服務功能都不相同,因此有必要將不同的封包發送給不同的服務來處理,當主機同時開啟了FTP與WWW服務時,網絡上發來的數據包就會按照端口號來給予FTP服務或者WWW服務。Internet上的很多標準應用層協議有默認的使用端口號,如表2.1所示。

表2.1 常用默認端口號

2. TCP

TCP(傳輸控制協議)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議,由IETF的RFC793定義。當應用層向TCP層發送用于網間傳輸的用8位字節表示的數據流時,TCP則把數據流分割成適當長度的報文段,最大傳輸段大小(MSS)通常受該計算機連接的網絡的數據鏈路層最大傳送單元(MTU)限制。之后TCP把數據包傳給IP層,由它通過網絡將包傳送給接收端實體的TCP層。TCP的特性總結如下。

? 有序性:為每個數據包編排序號,使接收端能夠判斷先后到達的次序混亂的數據包的原本順序。

? 正確性:TCP用一個checksum函數來檢驗數據是否有錯誤,在發送和接收時都要計算校驗和,這使得接收端能夠判斷數據是否在傳輸過程中被破壞。

? 可靠性:發送端采用超時重傳及確認機制識別錯誤或丟失數據,進行重發。

? 可控性:接收端和發送端的網絡質量通常不同,TCP采用滑動窗口協議和擁塞控制算法使數據的發送速度達到合理值。

TCP采用面向連接的方式收發數據,在收發數據之前需要先建立連接,在數據傳輸之后釋放連接,如圖2.3所示。

圖2.3 TCP傳輸模型

建立連接的三次握手過程如下。

? 建立連接時,客戶端發送SYN包到服務器,并進入SYN_SENT狀態,等待服務器確認。

? 服務器收到SYN包,反饋給客戶端一個SYN+ACK包,此時服務器進入SYN_RECV狀態。

? 客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK,客戶端和服務器同時進入ESTABLISHED(TCP連接成功)狀態,完成三次握手。

建立連接后雙方可互相發送消息,完成后可由任意一方發起關閉連接請求。關閉連接的過程如下。

? 關閉請求方(如客戶端)向另一方發送(如服務器)一個帶有FIN附加標記的報文段。

? 服務器收到這個FIN報文段之后,并不立即用FIN報文段回復客戶端,而是先向客戶端發送一個確認序號ACK,同時通知相應的應用程序:對方要求關閉連接,使應用程序做相應的清理工作。

? 服務器的應用程序清理工作完成后,向客戶端發送一個FIN報文段。

? 客戶端收到這個FIN報文段后,向服務器發送一個ACK,表示連接徹底釋放。

3. UDP

UDP(User Datagram Protocol)是一種無連接的傳輸層協議,提供面向事務的、簡單的、不可靠信息傳送服務,IETF RFC 768是UDP的正式規范。UDP信息包的標題很短,只有8個字節,相對于TCP的20個字節信息包的額外開銷很小,因此UDP能提供更快速、輕量級的傳輸層控制。UDP的特性總結如下。

? 數據可以隨時發送、接收,沒有建立、斷開連接的過程,因此主機不需要維護復雜的連接狀態。

? UDP不保證數據的可靠傳輸,僅盡最大可能進行發送。

? 沒有擁塞控制算法控制收發速度,程序需在應用層自行控制。

? 發送方的UDP對應用程序交付的報文,在添加首部后就向下交付給IP層,既不拆分,也不合并。因此,應用程序需要選擇合適的報文大小。

由此不難總結出UDP協議適用的應用場景:吞吐量大(因為只做輕量級控制)、可以承受信息丟失(因為傳輸不可靠)。在網絡狀況良好的情況下,UDP的丟包率在實際情況下也非常低,所以仍有很多經典協議采用UDP進行傳輸,如SNMP、NFS、DNS、BOOTP等。

2.1.3 C/S及B/S架構

C/S,即Client/Server,是當前大多數網絡編程所使用的架構模型。通過它可以充分利用兩端硬件環境的優勢,將任務合理分配到Client端和Server端,降低系統的通信開銷。Client和Server常常分別處在相距很遠的兩臺計算機上,Client程序的任務是將用戶的要求提交給Server程序,再將Server程序返回的結果以特定的形式顯示給用戶;Server程序的任務是接收客戶程序提出的服務請求,進行相應的處理,再將結果返回給客戶程序。

B/S,即Browser/Server,是Web興起后的一種架構模式。B/S使用Web瀏覽器作為客戶端的應用軟件,所以B/S可以看作C/S的一種特殊情況。B/S架構是伴隨著Internet的興起而興起的,是對C/S結構的一種改進,它的主要特點如下。

? 便于部署、維護與升級:主流企業的軟件開發流程與方法也從傳統瀑布模型轉為迭代式敏捷開發。軟件系統的改進與升級節奏的加快對系統的快速部署、升級提出了很高的要求。B/S架構的產品明顯體現著更為方便的特性,因為B/S系統的所有應用程序都部署在服務器上,一般無須更新客戶端軟件(即瀏覽器)。

? 跨平臺、開放、對客戶端要求低:客戶端計算機的軟硬件環境千差萬別,雖然大多數使用Windows系統,但近年來macOS操作系統也越來越普及,另外也有少數鐘情于Linux系統的用戶。傳統C/S架構需要針對每種操作系統開發相應的客戶端程序;而因為每種操作系統都支持Web瀏覽器,所以基于B/S架構的系統只需開發一套客戶端程序。B/S架構的客戶端程序部署在服務器端,由瀏覽器在訪問時下載到客戶端運行。

? 對安全性的要求較高:由開放性而延伸的一個負面作用就是B/S架構對系統安全性的要求比C/S架構高。B/S架構的系統一般建立在廣域網上,面向未知用戶,所以開發B/S系統時應該更加關注系統的防攻擊、數據加密、備份、防偽造等能力。

在本書要講解的Python網絡框架中,Django、Tornado和Flask均是以B/S架構為主的框架,Twisted主要面向C/S架構系統。

主站蜘蛛池模板: 峨眉山市| 佛山市| 望谟县| 德钦县| 辽阳市| 个旧市| 射阳县| 普兰县| 东莞市| 酒泉市| 乐清市| 勐海县| 城固县| 绥阳县| 吉隆县| 布尔津县| 兰考县| 丹阳市| 涞源县| 南陵县| 建平县| 冀州市| 吉木乃县| 民勤县| 盐津县| 永仁县| 娄底市| 鹤壁市| 马龙县| 南丹县| 昌平区| 通海县| 杭州市| 大厂| 上栗县| 岫岩| 公安县| 肇州县| 永善县| 阳原县| 莆田市|