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