思維路線 目的是要鏈接互聯(lián)網(wǎng)中的其他計算機 物理層 用物理介質(zhì)鏈接其他計算機 數(shù)據(jù)鏈路層 用MAC地址來通訊,但僅限于同一局域網(wǎng) 網(wǎng)絡(luò)層 用ip確定全球范圍的某個局域網(wǎng)中的某一臺計算機 傳輸層 用端口來確定 某一計算機中的某一個進程 應(yīng)用層 組織自己的數(shù)據(jù)結(jié)構(gòu),例如json, xml等用于在兩個應(yīng)用程序間交換數(shù)據(jù) 本章目錄 一.C/S構(gòu)架 二.網(wǎng)絡(luò)通訊的基本要素 三.網(wǎng)絡(luò)通訊協(xié)議 什么是網(wǎng)絡(luò)編程網(wǎng)絡(luò)通常指的是計算機中的互聯(lián)網(wǎng),是由多臺計算機通過網(wǎng)線或其他媒介相互鏈接組成的 編寫基于網(wǎng)絡(luò)的應(yīng)用程序的過程序稱之為網(wǎng)絡(luò)編程 為什么要學(xué)習(xí)網(wǎng)絡(luò)編程我們已經(jīng)知道計算機,由硬件 操作系統(tǒng),應(yīng)用程序組成,有了這三個元素,就可以在自己的電腦上運行一些應(yīng)用程序了,比如玩玩紙牌,掃掃雷什么的 如果要想與其他計算機一起玩,就必須要讓你的計算機和其他計算機能夠互相傳遞數(shù)據(jù) 小明和小芳是一對戀人,為了美好的未來,小明離開家鄉(xiāng),來到上海學(xué)習(xí)python,在這里小明看到了傳說中的東方明珠電視塔,激動萬分的他用手里的數(shù)碼相機拍攝了照片,想要與遠在老家的小芳分享,雖然小明和小芳的電腦連著一條網(wǎng)線,由于不會使用網(wǎng)絡(luò)編程,小明只好騎著馬兒,翻越千山萬水,將照片送到小芳的手中,由于路途太遠,小芳已經(jīng)嫁人了,小明痛下決心一定要掌握網(wǎng)絡(luò)編程,讓下一個小芳在任何地方都能看到自己的照片 學(xué)習(xí)網(wǎng)絡(luò)編程就是要學(xué)習(xí)利用網(wǎng)絡(luò)來與另一臺計算機相互傳輸數(shù)據(jù), 開發(fā)出支持網(wǎng)絡(luò)通訊的應(yīng)用程序,這樣即使足不出戶也能盡知天下事 一.C/S構(gòu)架學(xué)習(xí)網(wǎng)絡(luò)編程就是要通過網(wǎng)絡(luò)來訪問另一臺計算的數(shù)據(jù),這樣必然需要至少兩臺計算機,一臺計算機上放著要分享的數(shù)據(jù)和用于分享數(shù)據(jù)的程序,另一臺計算機上運行訪問數(shù)據(jù)的程序, 我們把提供數(shù)據(jù)的一方稱之為服務(wù)器(Server),把訪問數(shù)據(jù)的一方稱為客戶端(Client) 這就是C/S構(gòu)架: 電腦上要看視頻就需要裝看視頻的程序.例如騰訊視頻,它就是客戶端程序,騰訊公司的機房里運行著騰訊視頻的服務(wù)器程序,所以它也是C/S構(gòu)架的程序 另外瀏覽器也可以訪問服務(wù)器上的網(wǎng)頁數(shù)據(jù),稱之為B/S,其本質(zhì)上也是C/S只不過客戶端是瀏覽器 二.網(wǎng)絡(luò)通訊的基本要素兩臺計算機要想通訊,必須要具備兩個基本要素 1.物理連接介質(zhì),包括網(wǎng)線,無線電,光纖等 2.通訊協(xié)議 下面我們來分析為什么需要這兩個東西 1.物理連接介質(zhì) 人類說話需要有空氣來傳播震動,眼睛要看東西需要有光來傳播,沒有空氣,沒有光,則無法溝通,(不要鉆牛角尖,用手摸啥的...);光和空氣就是物理介質(zhì) 再比如電話機 要打通電話則必須先接通電話線,電流才能沿著電話線到達另一臺電話機,電話線則是物理介質(zhì) 2.通訊協(xié)議 什么是協(xié)議? 協(xié)議就是標準,大家要遵循相同的標準才能正常交流通訊 兩個人要交流,必須說雙方都能理解的語言,想象一下一個說新疆話的人打電話給說閩南語的人,基本說了等于沒說 雙方都能理解的語言就是,就是標準,就是協(xié)議 為什么要制定協(xié)議? 在計算機中,鏈接介質(zhì) 通常是網(wǎng)線,網(wǎng)線本質(zhì)就是一條電線,可以傳播電流,而電流可以按照強弱,被理解為0和1 那問題是,一臺計算機被電了一下是什么意思?被電了兩下又是什么意思? 這就必須由發(fā)送方和接收方共同商定出一套標準,從而可以知道0和1表示的含義 如何使用協(xié)議? 然而作為應(yīng)用程序開發(fā)者,物理介質(zhì)顯然不是我們需要關(guān)心的,比如如何牽網(wǎng)線 所以通訊協(xié)議是我們學(xué)習(xí)的重點 三.網(wǎng)絡(luò)通訊協(xié)議協(xié)議是由發(fā)送方和接受方共同制定的,考慮到計算機已經(jīng)發(fā)展了這么多年,所以制定的協(xié)議過程很顯然我們沒有機會參與了,要做的是了解通訊協(xié)議中的各種規(guī)定 OSI七層模型 1.什么是OSI Open System Interconnection Reference Model,,開放式系統(tǒng)互聯(lián)通信參考模型,縮寫為OSI,是由國際標準組織推出的,其實就是一大堆協(xié)議,OSI把整個通訊過程劃分為七層,簡稱OSI七層模型 上圖中最右邊就是完整的七層模型,是最完整的通訊模型,雖然很詳盡,但是整個通訊流程的復(fù)雜度較高,后期為了降低學(xué)習(xí)難度,將其進行了簡化,于是又了中間的五層,和左邊的四層 其中應(yīng)用層,表示層和會話層都是屬于應(yīng)用程序?qū)拥?是一個整體,故將其合并為應(yīng)用層,由此得到中間的五層,這是我們學(xué)習(xí)的重點! 2.為什么需要OSI 早期各個計算機廠商都有自己的一套網(wǎng)絡(luò)通訊協(xié)議,但是各不相同,導(dǎo)致了不同廠商的計算機之間無法進行網(wǎng)絡(luò)通訊,就像下圖一樣,如果四川人說四川話,上海人說上海話,將無法通信,必須統(tǒng)一說普通話! 無論是四川還是上海都是中國人,如果只在中國內(nèi)進行通訊,掌握了普通話就沒問題了,但是要不要和其他國家的人通訊呢? 與不同國家的人通訊則需要掌握不同國家的語言,但是全世界有那么多國家和語言,不可能全部掌握,這就需要大家統(tǒng)一下了,找一種語言作為全世界通用語言,就是英語! 這樣一來,只要你能聽懂英語,會說英語,全世界的人都能通訊了 總結(jié):OSI就是相當(dāng)于計算機界的通用語言,只要按照OSI規(guī)定的標準來通訊,就能夠與全世界任何一臺所有計算機通訊 那這OSI種的七層到底是干什么的呢? OSI各層工作原理解析 應(yīng)用層,表示層,會話層都屬于應(yīng)用程序?qū)用嫠灾攸c討論簡化后的五層; 為了方便理解,從下往上 一.物理層 物理層的由來,在通訊的基本要素一節(jié)已經(jīng)討論過了,兩臺原本相互獨立的計算機,想要通訊,必須建立物理連接,連接的方式多種多樣,包括電纜,光纜,無線電等; 物理層的功能:基于電子器件發(fā)送電流信號,根據(jù)電流的高低可以對應(yīng)到數(shù)字0和1,也就是二進制數(shù)據(jù) 二.數(shù)據(jù)鏈路層 數(shù)據(jù)鏈路層的由來:單純的電信號0和1沒有任何意義,必須規(guī)定電信號多少位一組,,每組什么意思 以太網(wǎng)協(xié)議: 以太網(wǎng)協(xié)議(Ethernet)工作在數(shù)據(jù)鏈路層,其規(guī)定了電信號分組方式,以及一組電信號應(yīng)該包含哪些內(nèi)容 ethernet規(guī)定如下:
head包含:(固定18個字節(jié))
data包含:(最短46字節(jié),最長1500字節(jié))
head長度+data長度=最短64字節(jié),,最長1518字節(jié),,超過最大限制就分片發(fā)送 mac地址: head中包含的源和目標地址指的是什么地址呢? ethernet規(guī)定接入internet的設(shè)備都必須具備網(wǎng)卡,發(fā)送端和接收端的地址便是指網(wǎng)卡的地址,,即mac地址 mac地址:每塊網(wǎng)卡出廠時都被燒制上一個世界唯一的mac地址,,長度為48位2進制,通常由12位16進制數(shù)表示(前六位是廠商編號,,后六位是流水線號) 廣播: 有了mac地址,,同一網(wǎng)絡(luò)內(nèi)的兩臺主機就可以通信了 ethernet采用最原始的方式,廣播的方式進行通信,,即計算機通信基本靠吼 廣播有什么問題嗎?如果這個網(wǎng)絡(luò)中有100臺電腦,大家都在同一時間都在互相通訊,那是什么情況, 相當(dāng)于村頭掛著100個大喇叭,大家都在使勁喊,結(jié)果是要聽清楚說的什么內(nèi)容非常費勁兒 回到計算機中,100臺電腦都在那兒廣播,傳輸速度一定是有限的,嚴重浪費了網(wǎng)絡(luò)資源 所以,處在局域網(wǎng)中間的設(shè)備即交換機(上圖的中間那個小東西) 交換機不僅負責(zé)讓網(wǎng)絡(luò)中的計算機能夠互相通信,還要優(yōu)化網(wǎng)絡(luò)傳輸, 如何優(yōu)化呢? 當(dāng)pc1想要與pc2通訊前 1.需要知道pc2的MAC地址,所以必須先將這個信息廣播給所有的計算機, 2.這個信息必須先交給交換機,再由交換機廣播出去, 3.pc2收到消息消息后發(fā)現(xiàn)目標MAC是自己,就回復(fù)數(shù)據(jù)給發(fā)送方, 4.而回復(fù)也必須先交給交換機,此時交換機就會記錄pc2的MAC地址與網(wǎng)口號的對應(yīng)關(guān)系存到自己的緩存中, 5.下一次在要給pc2發(fā)數(shù)據(jù)時從緩存中查找pc2的MAC地址, 6.如果找到了就直接單獨給pc2發(fā)送,不在需要廣播, 7.如果沒有則重復(fù)之前的廣播過程 這一優(yōu)化功能稱之為自動學(xué)習(xí)功能 第一次鏈接某計算機時 必須廣播獲取MAC地址 只要鏈接過一次 MAC地址就被交換機記錄下了下一次就不用廣播了 交換機的工作原理類似類似于早期的電話交換機,電話線打到總臺,總臺問你要找?guī)滋?,然后將電話線插到相應(yīng)的口上 三.網(wǎng)絡(luò)層 1.網(wǎng)絡(luò)層由來: 有了ethernet,、mac地址、廣播的發(fā)送方式,,世界上的計算機就可以彼此通信了 2.以太網(wǎng)通訊存在的問題: 世界范圍的互聯(lián)網(wǎng)是由一個個彼此隔離的小的局域網(wǎng)組成的,,如果所有的計算機都采用以太網(wǎng)的廣播方式來尋找其他計算機,那么一臺機器發(fā)送的包全世界都會收到,,這就不僅僅是效率低的問題了,,這會是一種災(zāi)難,(廣播風(fēng)暴就是這么產(chǎn)生的) 結(jié)論:必須找出一種方法來區(qū)分哪些計算機屬于同一廣播域,哪些不是,,如果是就采用廣播的方式發(fā)送,,如果不是,就采用路由的方式(向不同廣播域/子網(wǎng)分發(fā)數(shù)據(jù)包),,mac地址是無法區(qū)分的,,它只跟廠商有關(guān); 網(wǎng)絡(luò)層功能:引入一套新的地址用來區(qū)分不同的廣播域/子網(wǎng),這套地址即網(wǎng)絡(luò)地址,網(wǎng)絡(luò)地址到底長什么樣,又是如何區(qū)分子網(wǎng)的? 3.IP協(xié)議 IP協(xié)議是工作在網(wǎng)絡(luò)層的協(xié)議,全稱:Internet Protocol Address,翻譯為互聯(lián)網(wǎng)協(xié)議地址 3.1 IP地址(重點)
IP地址的分類: A類保留給政府機構(gòu) 10.0.0.1 - 10.255.255.254 B類分配給中等規(guī)模公司 172.16.0.1 - 172.31.255.254 C類分配給任何需要的人 192.168.0.1 - 192.168.255.254 D類用于組播 E類用于實驗 我們的電腦ip通常都是C類的,以192.168開頭,正因為C類任何人都可以用 3.2 子網(wǎng)掩碼(了解) 什么是子網(wǎng)掩碼 子網(wǎng)掩碼是一個32位地址,用于屏蔽IP地址的一部分以區(qū)別網(wǎng)絡(luò)標識和主機標識,,并說明該IP地址是在局域網(wǎng)上,,還是在遠程網(wǎng)上。 它的網(wǎng)絡(luò)部分全部為1,,主機部分全部為0,。比如,IP地址172.16.10.1,,如果已知網(wǎng)絡(luò)部分是前24位,,主機部分是后8位,那么子網(wǎng)絡(luò)掩碼就是11111111.11111111.11111111.00000000,,寫成十進制就是255.255.255.0,。 為什么需要子網(wǎng)掩碼 單純的ip地址段只是標識了ip地址的種類,無法辨識一個ip所處的子網(wǎng) 例:192.168.10.1與192.168.10.2并不能確定二者處于同一子網(wǎng),因為不清楚哪些位表示網(wǎng)絡(luò)號,哪些表示主機號 子網(wǎng)掩碼如何判斷兩個ip是否屬于同一個子網(wǎng) 知道”子網(wǎng)掩碼”,,我們就能判斷,,任意兩個IP地址是否處在同一個子網(wǎng)絡(luò)。方法是將兩個IP地址與子網(wǎng)掩碼分別進行AND運算(兩個數(shù)位都為1,,運算結(jié)果為1,,否則為0),然后比較結(jié)果是否相同,,如果是的話,,就表明它們在同一個子網(wǎng)絡(luò)中,否則就不是,。 案例: 已知IP地址172.16.10.1和172.16.10.2的子網(wǎng)掩碼都是255.255.255.0,,請問它們是否在同一個子網(wǎng)絡(luò)?兩者與子網(wǎng)掩碼分別進行AND運算,, 172.16.10.1:10101100.00010000.00001010.000000001255255.255.255.0:11111111.11111111.11111111.00000000AND運算得網(wǎng)絡(luò)地址結(jié)果:10101100.00010000.00001010.000000001->172.16.10.0172.16.10.2:10101100.00010000.00001010.000000010255255.255.255.0:11111111.11111111.11111111.00000000AND運算得網(wǎng)絡(luò)地址結(jié)果:10101100.00010000.00001010.000000001->172.16.10.0結(jié)果都是172.16.10.0,,因此它們在同一個子網(wǎng)絡(luò)。 總結(jié)一下,,IP協(xié)議的作用主要有兩個,,一個是為每一臺計算機分配IP地址,另一個是確定哪些地址在同一個子網(wǎng)絡(luò),。 3.3 IP數(shù)據(jù)包(了解) ip數(shù)據(jù)包也分為head和data部分,,無須為ip包定義單獨的欄位,直接放入以太網(wǎng)包的data部分 head:長度為20到60字節(jié) data:最長為65,515字節(jié),。 而以太網(wǎng)數(shù)據(jù)包的”數(shù)據(jù)”部分,,最長只有1500字節(jié)。因此,,如果IP數(shù)據(jù)包超過了1500字節(jié),,它就需要分割成幾個以太網(wǎng)數(shù)據(jù)幀,分開發(fā)送了,。 3.4 ARP協(xié)議(了解) ARP協(xié)議的由來:IP是通常是動態(tài)分配的,是一個邏輯地址,而數(shù)據(jù)傳輸則必須依賴MAC地址,那如何才能通過IP得到對方的MAC地址呢? 這就需要ARP協(xié)議了 arp協(xié)議功能:廣播的方式發(fā)送數(shù)據(jù)包,,獲取目標主機的mac地址 首先明確每臺主機ip都是已知的,并可以通過子網(wǎng)掩碼來判斷是否屬于同一子網(wǎng) 案例1:主機192.168.1.101訪問192.168.1.102 是同一子網(wǎng)內(nèi) ARP請求幀內(nèi)容: 1.FF:FF:FF:FF:FF:FF是一個特殊的MAC地址 交換機在看到這個地址時會將這個數(shù)據(jù)向網(wǎng)內(nèi)所有主機進行廣播 2.192.168.1.102 收到ARP請求后 回復(fù)自己的MAC給 源MAC主機 3.發(fā)送方(192.168.1.101)收到回復(fù)后,會將對方的ip的MAC地址映射關(guān)系存儲到緩存中,以便下次使用 ps:arp -a 可以查看ARP緩存列表 確定對方MAC地址后的數(shù)據(jù)幀內(nèi)容: 案例2:主機192.168.1.101訪問192.168.111.101 交換機發(fā)現(xiàn)目標IP不在當(dāng)前子網(wǎng)中, 1.交換機發(fā)起ARP請求,將目標IP設(shè)置為對方的網(wǎng)關(guān)IP,默認情況下,網(wǎng)關(guān)的主機號都為1; 所以接收方(192.168.111.101)的網(wǎng)關(guān)為192.168.111.1 發(fā)送方網(wǎng)關(guān)發(fā)起的ARP數(shù)據(jù)幀: 2.對方網(wǎng)關(guān)收到請求后發(fā)現(xiàn)ip是自己的ip則回復(fù)ARP請求,將其MAC地址告知發(fā)送方網(wǎng)關(guān), 3.發(fā)送方網(wǎng)關(guān)將對方的網(wǎng)關(guān)的MAC地址與IP存儲到自己的ARP緩存中, 4.告知發(fā)送方(192.168.1.101)對方網(wǎng)關(guān)的MAC地址,發(fā)送方同樣將對方網(wǎng)關(guān)MAC與目標IP映射關(guān)系存儲到,本機ARP緩存中 至此ARP請求結(jié)束可以開始傳輸數(shù)據(jù) 后續(xù)確定了MAC地址后發(fā)送的數(shù)據(jù)幀內(nèi)容: 總結(jié):ARP通過廣播的方式來獲取MAC地址, 不在同一子網(wǎng)時 ARP得到的時對方網(wǎng)關(guān)的MAC地址,數(shù)據(jù)到達對方網(wǎng)關(guān)后,由網(wǎng)關(guān)根據(jù)IP交給對應(yīng)的主機,當(dāng)然對方網(wǎng)關(guān)獲取主機MAC也是通過ARP ps:路由器 交換機都可以稱之為網(wǎng)關(guān)! 四.傳輸層(重點) 傳輸層的由來: 通過物理層建立鏈接通道 通過數(shù)據(jù)鏈路層的MAC,可以定位到某個局域網(wǎng)中的某臺主機, 通過網(wǎng)絡(luò)層的IP地址,子網(wǎng)掩碼,可以定位到全球范圍某一局域網(wǎng)下的某臺主機 那么問題來了: 一臺計算機上是不可能只運行一個應(yīng)用程序的,比如同時登陸qq和微信,那接收到的數(shù)據(jù)到底是交給微信還是qq呢? 答案就是:端口號,端口是需要聯(lián)網(wǎng)的應(yīng)用程序與網(wǎng)卡關(guān)聯(lián)的編號 傳輸層功能:建立端口到端口的通信 補充:端口范圍0-65535,0-1023為系統(tǒng)占用端口 TCP與UDP是工作在傳輸層的協(xié)議: TCP協(xié)議 可靠傳輸,,TCP數(shù)據(jù)包沒有長度限制,,理論上可以無限長,但是為了保證網(wǎng)絡(luò)的效率,,通常TCP數(shù)據(jù)包的長度不會超過IP數(shù)據(jù)包的長度,,以確保單個TCP數(shù)據(jù)包不必再分割。 TCP之所以可靠,是因為在傳輸數(shù)據(jù)前需要三次握手確認建立鏈接 三次握手: 三次握手的過程實際上實在確認我發(fā)的你能收到,你發(fā)的我也能收到,從而保證數(shù)據(jù)傳輸?shù)牡目煽啃? 鏈接是一個虛擬的概念,不實際存在,只要三次握手成功即表示連接建立成功! 問題是三次握手時的確能保障數(shù)據(jù)傳輸是可靠的,那么握手后的數(shù)據(jù)要如何保證傳輸成功呢? TCP協(xié)議要求在發(fā)送數(shù)據(jù)后,必須接收到對方的回復(fù)信息才能確認數(shù)據(jù)成功發(fā)送,如果一段時內(nèi)沒有收到回復(fù)信息,會自動重新發(fā)送,如果重試的次數(shù)過多則表示鏈接可能已經(jīng)中斷! 四次揮手: 四次揮手的目的是保證雙方的數(shù)據(jù)傳輸已經(jīng)全部完成,同樣是為了保證數(shù)據(jù)的完整性 總結(jié) 其優(yōu)點很明顯:能夠保證數(shù)據(jù)傳輸是完整的 缺點:由于每次都需要傳輸確認信息,導(dǎo)致傳輸效率降低 場景:多用于必須保證數(shù)據(jù)完整性的場景,例如文本信息,支付信息等! UDP協(xié)議 不可靠傳輸,,”報頭”部分一共只有8個字節(jié),,總長度不超過65,535字節(jié),正好放進一個IP數(shù)據(jù)包,。 UDP協(xié)議采取的方式與TCP完全不同,其根本不關(guān)心,對方是否收到數(shù)據(jù),甚至不關(guān)心,對方的地址是否有效,只要將數(shù)據(jù)報發(fā)送到網(wǎng)絡(luò),便什么都不管了! 總結(jié) 優(yōu)點:由于不需要傳輸確認信息,所以傳輸效率高于TCP協(xié)議 缺點:傳輸數(shù)據(jù)可能不完整 場景:視頻聊天,語音聊天等,不要求數(shù)據(jù)完整性,但是對傳輸速度要求較高 五.應(yīng)用層 應(yīng)用層由來:用戶使用的都是應(yīng)用程序,,均工作于應(yīng)用層,互聯(lián)網(wǎng)是開放的,,大家都可以開發(fā)自己的應(yīng)用程序,,用什么樣的數(shù)據(jù)格式來傳輸,就需要由應(yīng)用程序開發(fā)者自己來制定 應(yīng)用層功能:規(guī)定應(yīng)用程序的數(shù)據(jù)格式,。 例:TCP協(xié)議可以為各種各樣的程序傳遞數(shù)據(jù),,比如Email、WWW,、FTP等等,。那么,必須有不同協(xié)議規(guī)定電子郵件,、網(wǎng)頁,、FTP數(shù)據(jù)的格式,這些應(yīng)用程序協(xié)議就構(gòu)成了”應(yīng)用層”,。 至此一連串高低電壓就通過層層協(xié)議,變成了我們在應(yīng)用程序中看到的各種數(shù)據(jù) |
|