网络编程预备知识
1.?? ?網絡通信
?? ??? ?通信/通訊需要具備兩個基本的條件:
?? ??? ?(1)?? ?物理媒介(物理層面)
?? ??? ?(2)?? ?協議(軟件層面)
?? ??? ??? ?網絡協議。
?? ??? ?
?? ?2.?? ?網絡協議層次模型
?? ??? ?互聯網的本質是一系列的網絡協議,處于互聯網上的兩臺計算機如果要進行通信,就需要遵守這些
?? ??? ?協議,就如同我們開車上路要遵守交通規則一樣的。
?? ??? ?簡單來說,協議就是計算機之間通過網絡實現通信時事先達成的一種“約定”。
?? ??? ?這種“約定”:使那些不同廠商之間的設備,不同CPU以及不同操作系統組成的計算機之間,
?? ??? ?只要遵守相同的協議就可以實現通信啦。
?? ??? ?
?? ??? ?協議可以分為很多種,每一個協議都明確界定了它的行為規范,2臺計算機之間必須能夠
?? ??? ?支持相同的協議,并且遵守相同的協議進行處理,才能實現相互通訊。
?? ??? ?
?? ??? ?那么這些協議根據功能的不同分工不同我們劃分為不同的層次,即每一個層次都有不同的功能
?? ??? ?常見的劃分:
?? ??? ?<重點>
?? ??? ?如圖<OSI網絡七層協議.png>較為詳細的交代了不同層之間是如何組合和通信的。
?? ??? ?發送方從最高層開始,從上到下按順序傳輸數據,每一層接受到由上層處理的數據時,
?? ??? ?添加該層的首部并可能會對數據進行處理,而接收方則將順序反過來,從首層開始,
?? ??? ?將數據的內容與該層對應的首部拆開,傳輸給上一層。
?? ??? ?
?? ??? ?說白了,數據在發送是是數據從應用層到物理層的一個打包的過程,接收時是數據從物理層到
?? ??? ?應用層的一個解包的過程。
?? ??? ?
?? ??? ?各層的大體功能和作用,如下:
?? ??? ?(1)?? ?應用層
?? ??? ??? ?應用層是直接面向用戶的程序或服務。
?? ??? ??? ?比如我們要發送數據是先由用戶進程傳遞給應用層。
?? ??? ??? ?而接收數據也是由應用層直接呈現給用戶進程。
?? ??? ??? ?應用層要完成用戶希望在網絡上完成的各種工作,因為用戶可能對于發送數據有各種不同的
?? ??? ??? ?要求。
?? ??? ??? ?這一層可以想象成快遞公司的收件員。
?? ??? ??? ?工作于這一層的協議接觸的比較多的主要有:FTP/HTTP等。
?? ??? ??? ?
?? ??? ?(2)?? ?表示層
?? ??? ??? ?表示層是為異種機通信提供一種公共語言,以便能進行互操作。常見的
?? ??? ??? ?協議有ASCII/SSL/TLS等。
?? ??? ??? ?
?? ??? ??? ?如果是linux和window的兩臺異種機進行通信是不能直接進行通信的,
?? ??? ??? ?此時就需要表示層幫助我們去解決不同系統之間的通信語法問題。
?? ??? ??? ?
?? ??? ??? ?數據的加密、壓縮、打包等功能也在這一層完成。
?? ??? ??? ?
?? ??? ?(3)?? ?會話層
?? ??? ??? ?會話層的作用就是建立或斷開和管理應用程序之間的通信。
?? ??? ??? ?會話層可以把其看成是快遞公司的調度員。
?? ??? ??? ?它管理者快遞的相關信息,比如快遞啥時候發過去,送這一單規定需要多少的時間等等。
?? ??? ??? ?它也要做同步管理,就好比我把東西運過去之后,但是那邊沒有人接受,那么這種情況
?? ??? ??? ?就是沒有同步。
?? ??? ??? ?
?? ??? ?(4)?? ?傳輸層?? ??? ??? ?<重點>
?? ??? ??? ?傳輸層起著可靠傳輸的作用。
?? ??? ??? ?確保數據被可靠的傳送到目的地址。
?? ??? ??? ?此層有兩個具有代表性的協議:TCP 與 UDP
?? ??? ??? ?1.?? ?TCP:Transport Control Protocol傳輸層控制協議
?? ??? ??? ??? ?它是一種面向連接的傳輸層協議,它能夠提供高可靠性的通信。
?? ??? ??? ??? ?
?? ??? ??? ??? ?就是說TCP協議是在確定對方能通信的情況下才會傳輸數據,如果對方不能通信
?? ??? ??? ??? ?那么我們可能會一直發送請求,直至對方回應為止,一旦回應,那么通信雙方
?? ??? ??? ??? ?就建立連接,開始傳輸數據。
?? ??? ??? ??? ?
?? ??? ??? ??? ?傳輸數據的過程中,有可能有數據丟失,一旦丟失,TCP就會繼續重發。
?? ??? ??? ??? ?比如:
?? ??? ??? ??? ??? ?我現在發了10000個包出去,另外一臺接收方就要告訴我接收到了這10000個包。
?? ??? ??? ??? ??? ?如果丟了一些包,那么接受方就需要告訴發送方丟掉了哪些包。
?? ??? ??? ??? ??? ?那么發送方就會將丟掉的包重新再發一遍。
?? ??? ??? ??? ??? ?就能夠高可靠性的保證對方完整無誤的接收到我發送過去的數據啦。
?? ??? ??? ??? ??? ?
?? ??? ??? ??? ?所以,TCP協議是數據無誤、數據無丟失、數據無失序、數據無重復到達的
?? ??? ??? ??? ?通信協議,所以TCP協議一般是用于發送大量的數據。
?? ??? ??? ??? ?
?? ??? ??? ?2.?? ?UDP:User Datagram?? ?Protocol 用戶數據報協議
?? ??? ??? ??? ?它是不可靠的無連接的協議。
?? ??? ??? ??? ?在數據發送前,因為不需要進行連接,所以可以高效率的數據傳輸。
?? ??? ??? ??? ??? ?
?? ??? ??? ??? ?TCP和UDP不太一樣,UDP它不會去確認目標是否能夠通信,它就只管往外發送數據
?? ??? ??? ??? ?至于對方能不能夠接受到數據,有沒有丟包它一概不管。
?? ??? ??? ??? ?
?? ??? ??? ??? ?UDP一般用于發送少量的數據。
?? ??? ??? ??? ?
?? ??? ??? ?這兩種協議各有各有的好處,TCP更可靠與穩定,而UDP雖然沒有那么可靠但是效率高。
?? ??? ??? ?所以現在應用的更多反而是UDP。
?? ??? ??? ?
?? ??? ?(5)?? ?網絡層
?? ??? ??? ?網絡層負責將數據傳輸到目標地址。
?? ??? ??? ?這一層主要負責尋址和路由選擇。主要的協議有:IP/ICMP兩個協議組成。
?? ??? ??? ?
?? ??? ??? ?網絡層負責找出一條相對更加高效的鏈路將數據傳遞過去。
?? ??? ??? ?傳輸的地址使用的是IP地址。
?? ??? ??? ?IP地址和我們的住址實際上有點相像。
?? ??? ??? ?IP地址通過不斷的去轉發到更近的IP地址,最終可以到達目的地址。
?? ??? ??? ?如何去選擇這條路,就看網絡層。
?? ??? ??? ?
?? ??? ?(6)?? ?數據鏈路層
?? ??? ??? ?互聯設備之間傳送和識別數據幀。
?? ??? ??? ?
?? ??? ??? ?在鏈路層中,需要將比特流組合成字節的組合。
?? ??? ??? ?
?? ??? ??? ?對數據進行處理封裝成數據幀和傳遞、錯誤檢測的層就是數據鏈路層。
?? ??? ?
?? ??? ?(7)?? ?物理層
?? ??? ??? ?它的最主要的作用是通過光信號或電信號傳輸比特流。
?? ??? ??? ?物理層所承載的就是實物。
?? ??? ??? ?如:將貨物運往目的地的交通工具就是物理層。
?? ??? ??? ?物理層是七層模型中的物理基礎,沒有它就談不上數據傳輸。
?? ??? ??? ?比如:網線、網卡(每一個網卡在出廠的時候設定一個全世界唯一的一個MAC地址,
?? ??? ??? ?一個48bits的數)。
?? ??? ??? ?
?? ?3.?? ?常用的網絡設備
?? ??? ?我們知道如果兩臺電腦通過網線直連的話是能夠直接進行通信的。
?? ??? ?此時這兩臺電腦就組成一個小小的局域網,局域網內只有兩臺通信設備。
?? ??? ?但是這種使用場景非常少見,更常見的是多個設備之間互聯,也就是說一個局域網內
?? ??? ?可以有很多個通信設備。
?? ??? ?但是問題是,一臺計算機只有一個網口,怎么讓一臺計算機與另外多臺計算機互聯呢?
?? ??? ?
?? ??? ?此時我們就需要用到交換機(switch)。
?? ??? ?
?? ??? ?交換機:簡單的來說,可以提供大量的網絡端口將多臺網絡設備連接成一個局域網。
?? ??? ?交換機內部擁有一根總線,交換機所有的端口都掛接到這條總線上面,也就意味著
?? ??? ?多臺網絡設備只要通過接口連接到交換機上,那么這些網絡設備從物理層面上來說,
?? ??? ?就是互通的。
?? ??? ??? ?
?? ??? ?連接上同一個交換機上的網絡設備如果要進行通信的話,那么可以使用廣播的方式進行。
?? ??? ?
?? ??? ?路由器:
?? ??? ??? ?路由器的功能是將不同的子網(局域網)之間的數據進行傳遞,我們把這個過程稱之為尋址。
?? ??? ??? ?
?? ??? ??? ?通過最終地址,在路由表上進行匹配,通過算法確定下一個轉發地址。
?? ??? ??? ?這個地址可能是中間地址,也可能是最終到達的地址。
?? ?
?? ??? ?調制調解器(貓):
?? ??? ??? ?是調制器和解調器的縮寫。
?? ??? ??? ?是一種硬件。
?? ??? ??? ?我們網絡信號的傳遞大部分都是光信號/電信號(模擬信號),而計算機只能夠識別數字信號(1/0)。
?? ??? ??? ?所以計算機從網絡上接收到這些信息之后,需要將其翻譯成計算機能夠看懂的數字信號,
?? ??? ??? ?說白了,功能有點類似于AD DA轉換。
?? ??? ??? ?
?? ??? ?網關:連接兩個不同子網的門戶
?? ?4.?? ?網絡數據的傳輸過程
?? ??? ?分層傳輸、數據封裝、拆包的過程。
?? ??? ?
?? ??? ?注意:
?? ??? ??? ?有人說我們既然網卡都有一個唯一的MAC地址,或者說通過MAC地址就可以找到唯一的
?? ??? ??? ?一張網卡,那么通過MAC地址就應該能夠可以實現任意一臺主機和另外一臺主機進行通信了
?? ??? ??? ?那么為什么還需要IP地址?
?? ??? ??? ?
?? ??? ??? ?網絡層負責IP地址。
?? ??? ??? ?數據鏈路層(或者TCP/IP模型中的物理層)負責MAC地址
?? ??? ??? ?以太網協議就依靠MAC地址發送數據的。
?? ??? ??? ?
?? ??? ??? ?理論上,單單依靠MAC地址,上海的網卡就可以找到北京的網卡。
?? ??? ??? ?但是,這樣做有一個很大的缺點。
?? ??? ??? ?以太網協議會以廣播的形式發送數據,也就是說只要處于同一局域網的設備都會收到。
?? ??? ??? ?這樣做,效率很低,而且廣播方式只局限于發送者所在的子網絡。
?? ??? ??? ?如果通信雙方不在同一個子網絡,廣播是傳不過去的。
?? ??? ??? ?如果傳播到外網上去,互聯網上的每一臺計算機都會收到這個包,那么就會造成網絡擁堵。
?? ??? ??? ?
?? ??? ??? ?因此,必須要找到一種方式,去區分哪些MAC地址屬于同一個子網絡,哪些不是屬于同一個
?? ??? ??? ?子網絡。如果是處于同一個子網絡,就采用廣播的形式發送,否則就采用"路由"的形式發送。
?? ??? ??? ?
?? ??? ??? ?導致了“網絡層”的誕生。它的作用是引進一套新的地址,使得我們能夠區分不同的計算機
?? ??? ??? ?是否屬于同一個子網絡。這套地址就叫做“網絡地址”,簡稱“網址”。
?? ??? ??? ?
?? ??? ??? ?在網絡層出現之后,每臺計算機有了兩種地址,一種是MAC地址,另一種是IP地址。
?? ??? ??? ?MAC地址是由硬件(網卡)決定的,一般是不能改的。
?? ??? ??? ?IP地址由軟件來決定的,是可以隨意更改的。
?? ??? ??? ?
?? ??? ??? ?所以,網絡地址幫助我們確定計算機所在的子網絡,MAC地址則將數據報發送到
?? ??? ??? ?該子網絡中目標網卡。
?? ??? ??? ?
?? ?5.?? ?互聯網地址(IP地址)
?? ??? ?IP地址:(Internet Protocol Address)網絡協議地址
?? ??? ?
?? ??? ?常見的IP地址有兩類:
?? ??? ?IPv4:32bits?? ??? ?IPv6:128bits
?? ??? ?
?? ??? ?目前為止應用更多的是IPv4,IPv6開始在教育網中開始大量使用。
?? ??? ?理論上IPv4提供2^32個IP,IPv6能提供2^128個IP。
?? ??? ?IPv4地址有32bits,這32個bits中各個bit的含義:
?? ??? ??? ?
?? ??? ??? ?IPv4 32bits
?? ??? ??? ??? ?網段號:
?? ??? ??? ??? ??? ?用來標識某個網段
?? ??? ??? ??? ??? ?比如處于同一路由器下的設備處于同一網段。
?? ??? ??? ??? ??? ?他們是能夠直接通信的,
?? ??? ??? ??? ??? ?在IP地址連續的高位上。
?? ??? ??? ??? ?
?? ??? ??? ??? ?
?? ??? ??? ??? ?主機號:
?? ??? ??? ??? ??? ?用來標識特定的網段中的特定的主機的。
?? ??? ??? ??? ??? ?在IP地址的連續的低位上。
?? ??? ??? ??? ??? ?
?? ??? ??? ??? ?如:
?? ??? ??? ??? ??? ?192.168.31.30(IP地址是以點分十進制的形式表示)
?? ??? ??? ??? ??? ?每8bits一個十進制數字,中間以 . 分隔開
?? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ?網段號和主機號相加==32bits。
?? ??? ??? ??? ??? ?
?? ?IP地址的分類:
?? ?類別?? ??? ??? ?分段?? ??? ??? ??? ??? ? ? IP地址的范圍 ?? ??? ??? ? ? ? 私有地址范圍
?? ?A?? ? 0 網段號(7bits) (主機號24bits) ? 0.0.0.0 ~ 127.255.255.255 ? ?10.0.0.0 ~ 10.255.255.255
?? ?B?? ?1 0 網段號(14bits) (主機號16bits) 128.0.0.0 ~ 191.255.255.255 ?172.16.0.0 ~ 172.31.255.255
?? ?C?? ?1 1 0 網段號(21bits) (主機號8bits)192.0.0.0 ~ 223.255.255.255 ?192.168.0.0 ~ 192.168.255.255
?? ?D?? ?1 1 1 0 多播組號(28bits)?? ??? ? ?224.0.0.0 ~ 239.255.255.255 ?
?? ?E?? ?1 1 1 1 0 (留著以后用)?? ??? ??? ? ?240.0.0.0 ~ 247.255.255.255
?? ?
?? ??? ??? ?在設置IP地址時,一般需要設置另外一個稱之為子網掩碼的東西。
?? ??? ??? ?Netmask:子網掩碼
?? ??? ??? ??? ?
?? ??? ??? ?就是用來指定一個IP地址中,哪些bits是網段號,哪些bits是主機號。
?? ??? ??? ?
?? ??? ??? ?簡單的來說,Netmask中為1是網段號,為0的是主機號。
?? ??? ??? ?
?? ??? ??? ?Netmask:255.255.255.0
?? ??? ??? ??? ?192.168.31.30
?? ??? ??? ??? ?
?? ??? ??? ??? ?192.168.1.4 和 192.168.3.5 不是同一個網段
?? ??? ??? ??? ?192.168.1.5 和 192.168.1.6 是處于同一個網段
?? ??? ??? ??? ?
?? ??? ??? ??? ?并不是所有的子網掩碼都是合法的。
?? ??? ??? ??? ?
?? ??? ??? ??? ?255.255.114.0
?? ??? ??? ??? ??? ?1111 1111 ?1111 1111 1110 0010 0000 0000//不合法的
?? ??? ??? ??? ??? ?
?? ??? ??? ??? ?255.255.192.0
?? ??? ??? ??? ??? ?1111 1111 ?1111 1111 1100 0000 0000 0000//合法的
?? ??? ?
?? ??? ??? ?我們知道一臺計算機可以擁有一個獨立的IP地址,一個局域網也可以擁有一個獨立的IP
?? ??? ??? ?地址(對外就好像只有一臺計算機),對于目前廣泛使用的IPv4,它的資源是非常有限的,
?? ??? ??? ?一臺計算機一個IP地址是不現實的,往往是一個局域網才能擁有一個IP地址。
?? ??? ??? ?
?? ??? ??? ?在因特網上進行通信的時候,必須要知道對方的IP地址。實際上數據包中已經附帶了
?? ??? ??? ?對方的IP地址,把數據包發送給路由器以后,路由器會根據IP地址找到對方的位置,
?? ??? ??? ?完成一次數據的傳遞。
?? ??? ??? ?
?? ??? ??? ?那么一個局域網往往才能擁有一個獨立的IP.
?? ??? ??? ?IP地址僅僅只能夠定位到一個局域網,無法定位到處于這個局域網內的哪臺主機
?? ??? ??? ?那么我們就需要用到MAC地址。
?? ??? ??? ?
?? ??? ??? ?其實真正能夠唯一標識一臺計算機的是MAC地址,MAC地址是在全世界都是唯一的。
?? ??? ??? ?MAC是固定的,在出廠的時候就已經設定好了的(一般是不可被更改的)。
?? ??? ??? ?局域網中的路由器/交換機會記錄每臺計算機的MAC地址。
?? ??? ??? ?
?? ??? ??? ?數據包中除了會附帶對方的IP地址,也會附帶對方的MAC地址,當數據包到達局域網之后
?? ??? ??? ?路由器/交換機會根據數據包中的MAC地址找到對應的計算機,然后就把這個數據包
?? ??? ??? ?轉交給計算機,這樣就完成了數據的傳遞嗎?
?? ??? ?
?? ??? ??? ?有了IP地址和MAC地址,雖然可以找到目標計算機,但仍然不能進行通信,
?? ??? ??? ?僅有IP地址和MAC地址,計算機雖然可以正確的接收到數據,但是卻不知道
?? ??? ??? ?要將數據包交給那個網絡程序(進程)來處理,所以通信失敗。
?? ??? ??? ?
?? ??? ??? ?為了區分不同的網絡程序,計算機會為每一個網絡程序都分配一個第一無二的端口號(Port Number)
?? ??? ??? ?
?? ?6.?? ?端口號
?? ??? ?TCP和UDP采用16bits的端口號來表示網絡程序。
?? ??? ?網絡應用程序從傳輸層的角度來看可以分為:
?? ??? ??? ?TCP應用
?? ??? ??? ?UDP應用
?? ??? ?TCP的端口號和UDP的端口號是獨立的。
?? ??? ?所以一臺上的網絡應用程序由:
?? ??? ??? ?MAC地址 + IP地址 + 傳輸層協議(TCP/UDP) + 端口號 來確定。
?? ??? ??? ?
?? ??? ?端口號并不是說你想指定就指定的,由IANA來管理的。
?? ??? ??? ?比如:
?? ??? ??? ??? ?ftp服務-->21端口
?? ??? ??? ??? ?http服務-->80端口
?? ??? ??? ??? ?....
?? ??? ?端口號其實說白了就是一個0~65535的一個數字。?
?? ?
?? ?7.?? ?網絡字節序的問題
?? ??? ?UDP/TCP/IP協議規定:
?? ??? ?把接收到的第一個字節當做高位字節看待,這就要求發送端發送的第一個字節是高位字節。
?? ??? ?
?? ??? ?網絡字節序是大端字節序。
總結
- 上一篇: 怎样在EXCEL中为数据批量添加¥和%等
- 下一篇: socket套接字