您現(xiàn)在的位置: > 自考 > 網(wǎng)絡(luò)基礎(chǔ)知識(shí)及發(fā)展背景介紹,帶你入門簡單網(wǎng)絡(luò)代碼編寫 我以前未曾撰寫過關(guān)于網(wǎng)絡(luò)的博客文章,因此這篇文章中的知識(shí)不會(huì)特別深入,僅對(duì)網(wǎng)絡(luò)相關(guān)的一些術(shù)語和概念進(jìn)行簡單介紹,并闡述它們與系統(tǒng)之間的基本聯(lián)系,至于對(duì)網(wǎng)絡(luò)的深入探討,將在后續(xù)的博客中詳細(xì)論述。掌握了這些術(shù)語和概念,就能初步學(xué)習(xí)編寫一些網(wǎng)絡(luò)相關(guān)的代碼,讓大家簡單體驗(yàn)一下編程過程,能夠?qū)崿F(xiàn)一些基礎(chǔ)的客戶端與服務(wù)器之間的通信功能即可。
正式開始
本篇重點(diǎn)講解:
一些基礎(chǔ)知識(shí) 發(fā)展背景
這段背景信息可以簡單說明一下,對(duì)于初學(xué)者來說,大致了解還是有幫助的。
計(jì)算機(jī)出現(xiàn)在前,網(wǎng)絡(luò)緊隨其后。最早的計(jì)算機(jī)是埃尼阿克,具體信息可自行查詢,這里不再贅述。
起初,計(jì)算機(jī)都是獨(dú)立使用的,多個(gè)計(jì)算機(jī)之間沒有聯(lián)系:

后來,多臺(tái)計(jì)算機(jī)可以連接在同一個(gè)服務(wù)器上:

個(gè)人完成信息整理后能夠提交給主機(jī),隨后其他成員可以從主機(jī)中獲取資料進(jìn)行后續(xù)操作,操作結(jié)束后還可以將結(jié)果再次傳輸回去。
此處已屬局域范疇,譬如昔時(shí)部分研究機(jī)構(gòu),眾多機(jī)器均接入統(tǒng)一服務(wù)器運(yùn)行,諸如貝爾研究所、伯克利大學(xué)、麻省理工學(xué)院的設(shè)施等。
但假如兩個(gè)研究機(jī)構(gòu)存在一項(xiàng)聯(lián)合任務(wù),必須對(duì)某些資料進(jìn)行加工,便能讓兩個(gè)內(nèi)部網(wǎng)絡(luò)借助一臺(tái)網(wǎng)關(guān)設(shè)備實(shí)現(xiàn)互聯(lián),達(dá)成信息交換的目的。通過這種方式,不同的內(nèi)部網(wǎng)絡(luò)便能夠建立起聯(lián)系:

關(guān)于圖中涉及的那些網(wǎng)絡(luò)設(shè)備,例如交換機(jī)、路由器等,待會(huì)兒再稍作介紹,等后面深入講解網(wǎng)絡(luò)知識(shí)時(shí)再詳細(xì)闡述,現(xiàn)階段這篇文章僅是進(jìn)行基礎(chǔ)的普及說明。
再來說廣域網(wǎng),就是將遠(yuǎn)隔千里的計(jì)算機(jī)都連在一起:

可能各位的學(xué)校教材上還會(huì)有城域網(wǎng)的說法。
這個(gè)概念需要說明一下,所謂“局域網(wǎng)”、“城域網(wǎng)”、“廣域網(wǎng)”,它們之間僅僅存在范圍大小的區(qū)別,關(guān)鍵在于連接到網(wǎng)絡(luò)中的設(shè)備數(shù)量不一樣,從不同角度觀察同一個(gè)網(wǎng)絡(luò),得出的分類結(jié)果也會(huì)有所不同。以你們村子的角度出發(fā),你們家能夠視為一個(gè)局域網(wǎng),而整個(gè)村子的網(wǎng)絡(luò)則可以看作是廣域網(wǎng);然而從整個(gè)市或者整個(gè)省的角度出發(fā),你們村子又可以視為一個(gè)局域網(wǎng)網(wǎng)絡(luò)培訓(xùn)學(xué)校,而整個(gè)城市才是一個(gè)廣域網(wǎng)。
因此,關(guān)于廣域網(wǎng)的各種概念,為了在學(xué)術(shù)上有所區(qū)別,但在技術(shù)層面,它們都是些相對(duì)性的東西,不過在此講解時(shí)還是需要提及一番。
運(yùn)營商和生產(chǎn)商
我們生活中的這些網(wǎng)絡(luò)是由誰建設(shè)和維護(hù)的呢?
答案是運(yùn)營商,像移動(dòng)、聯(lián)通、電信啥的。
另有一個(gè)與通信服務(wù)商聯(lián)系極為緊密的,稱為設(shè)備制造商,這個(gè)角色承擔(dān)著硬件層面的保障,諸如華為、諾基亞等企業(yè)專注于通信裝置的制造。
缺少這兩個(gè)角色,大家便無法訪問手機(jī)上的B站、淘寶等應(yīng)用程序,如果沒有這兩個(gè)角色作為前提,那么任何APP都不可能存在,如果其中一方未能妥善履行職責(zé),就會(huì)引發(fā)故障,例如網(wǎng)絡(luò)培訓(xùn)學(xué)校,倘若運(yùn)營商未能有效維護(hù)網(wǎng)絡(luò),導(dǎo)致網(wǎng)速遲緩,大家在瀏覽CSDN時(shí)將異常卡頓,頁面長時(shí)間無法加載出來,這種情況令人非常困擾,最終將導(dǎo)致用戶數(shù)量下降。
網(wǎng)絡(luò)中一個(gè)很重要的東西叫做協(xié)議。
啥是協(xié)議呢?
像我們買車 / 買房 / 工作的時(shí)候簽合同,這就算是協(xié)議。
在我們網(wǎng)絡(luò)體系里,協(xié)議是軟硬件必須遵循的一種規(guī)則,它規(guī)定了信息在網(wǎng)絡(luò)中如何傳遞和交流。
不清楚你是否看過姜文執(zhí)導(dǎo)的電影《讓子彈飛》,影片中有一個(gè)情節(jié)是張麻子等人去進(jìn)行所謂的“剿匪”,他們通過發(fā)出不同的哨聲來傳遞信息,這種方式其實(shí)是一種聯(lián)絡(luò)手段。要想達(dá)成這樣的聯(lián)絡(luò),必須讓張麻子手下所有人都能識(shí)別出各種哨聲所蘊(yùn)含的特定信息,同時(shí)也要掌握吹出具有不同意義哨聲的方法。
如果發(fā)出兩個(gè)短音,就代表全體進(jìn)攻的指令,這個(gè)是我編造的,要是吹響兩個(gè)長音,就表示需要撤退,這也是我虛構(gòu)的,這兩個(gè)短音和兩個(gè)長音的信號(hào),必須讓整個(gè)團(tuán)隊(duì)都牢牢記住,不同的音調(diào)對(duì)應(yīng)著不同的行動(dòng),這就是利用哨子進(jìn)行聯(lián)絡(luò)的規(guī)則。
來分析一下為什么要這么做?
減少成本。
長句如果太長,在戰(zhàn)斗時(shí)需要大聲呼喊,否則隊(duì)友可能聽不見,但長時(shí)間呼喊容易暴露位置,敵人或許會(huì)察覺,存在風(fēng)險(xiǎn),萬一在說話前沒喘好氣中途換氣,換氣時(shí)有個(gè)隊(duì)友以為你講完了,并且誤解了你的意圖,直接沖出去,這豈不是會(huì)導(dǎo)致信息不同步的問題,那個(gè)隊(duì)友豈不是性命難保。而借助簡短的號(hào)音來傳遞信息,隊(duì)友可以迅速明白需要執(zhí)行的任務(wù),同時(shí)自身也不易被察覺,因此協(xié)議的制定能夠使雙方聯(lián)絡(luò)更為順暢。
只要通信的兩臺(tái)主機(jī), 約定好協(xié)議就可以了么?
不是這樣,即便兩臺(tái)主機(jī)事先商定了通信規(guī)則,也可能無法互通信息。計(jì)算機(jī)的制造廠家數(shù)量龐大,計(jì)算機(jī)的運(yùn)作系統(tǒng)種類繁多,計(jì)算機(jī)網(wǎng)絡(luò)硬件設(shè)備同樣五花八門,怎樣確保這些不同廠家制造的計(jì)算機(jī)能夠順利交流?這就需要有人出面,制定一個(gè)通用的軟硬件規(guī)范,讓所有參與者都遵循,這就是網(wǎng)絡(luò)協(xié)議。
這就好比不同地域的人溝通,比如一個(gè)廣東人與一個(gè)西藏人對(duì)話,前者說著客家方言,后者說著藏語,盡管雙方意圖相同,但表達(dá)方式差異顯著,語言完全不同。雖然他們都是中國人,彼此卻無法聽懂對(duì)方的講話。
協(xié)議的分層
說幾點(diǎn):
協(xié)議類型多樣,操作系統(tǒng)同樣需要協(xié)議管理,內(nèi)核層面其核心表現(xiàn)為大量數(shù)據(jù)結(jié)構(gòu),因此操作系統(tǒng)必須先定義協(xié)議再進(jìn)行構(gòu)建。(理解與否無關(guān)緊要,記住即可)協(xié)議在構(gòu)建時(shí),遵循層級(jí)結(jié)構(gòu)原則。何謂層級(jí)結(jié)構(gòu)呢?例如在C++的繼承機(jī)制里,基礎(chǔ)類、派生類、以及更下一級(jí)的類等等,后續(xù)的層級(jí)不再贅述,整個(gè)繼承結(jié)構(gòu)中的各個(gè)層級(jí)都可以看作是不同的層級(jí)。
先不論協(xié)議具體劃分了多少部分,先談?wù)剬?shí)際應(yīng)用中分層的優(yōu)勢(shì)。
比如說兩個(gè)人打電話:

從一般人的角度看,打電話就是雙方直接對(duì)話,但技術(shù)人員認(rèn)為情況并非如此簡單。比如圖中展示的AC通話過程,A方先與自己的電話設(shè)備互動(dòng),接著該設(shè)備對(duì)A方的信號(hào)進(jìn)行一系列處理,之后傳遞給C方的電話設(shè)備。C方的設(shè)備接收到信號(hào)后,同樣會(huì)經(jīng)過一系列轉(zhuǎn)換,最終把信息呈現(xiàn)給C方的人。此處可見層次性,人有人的語言體系,人與人之間以中文交流,而底層是兩部電話在運(yùn)用電話可識(shí)別的信號(hào)聯(lián)絡(luò),因此人打電話至少涉及雙重溝通方式。
再來看下面這張圖:

如果兩位外國人通電話時(shí)講的是英語,那么他們之間的交流約定就是英語,但這并不會(huì)妨礙他們的通話,通信的基礎(chǔ)還是電話本身的協(xié)議。
兩個(gè)人若用無線電交流,那么其基礎(chǔ)傳輸規(guī)則就會(huì)轉(zhuǎn)變?yōu)闊o線電的規(guī)則。
上面這個(gè)例子就能說說為啥要分層了。
網(wǎng)絡(luò)協(xié)議是怎么分層的呢?
通過通信時(shí)出現(xiàn)的問題來分,不同層解決不同問題。
通信的復(fù)雜程度是和距離成正相關(guān)的。
僅就聯(lián)絡(luò)角度而言,遠(yuǎn)方相隔遙遠(yuǎn)的兩臺(tái)設(shè)備進(jìn)行信息交互時(shí),可能會(huì)遭遇的障礙包括:
接收方未能收到數(shù)據(jù),這就是數(shù)據(jù)丟失的現(xiàn)象。發(fā)送方如何知道接收方的具體位置,怎樣保證信息發(fā)送準(zhǔn)確無誤,這就是定位的難題。遠(yuǎn)距離傳輸數(shù)據(jù)時(shí),必須經(jīng)過多個(gè)路由器的中轉(zhuǎn)(不清楚的話可以參考之前的廣域網(wǎng)示意圖)。例如數(shù)據(jù)先傳給第一個(gè)路由器,第一個(gè)路由器再轉(zhuǎn)交給第二個(gè)路由器,接著不斷傳向下一個(gè)路由器,從而解決了下一站節(jié)點(diǎn)的選擇問題。
上面三個(gè)問題,那么就可以有三層:
數(shù)據(jù)傳輸中的差錯(cuò)由傳輸階段處理。網(wǎng)絡(luò)路徑的確定由網(wǎng)路階段負(fù)責(zé)。轉(zhuǎn)發(fā)過程中的目標(biāo)節(jié)點(diǎn),由鏈路階段處理。
此外,還存在另一個(gè)疑問,即數(shù)據(jù)傳輸時(shí)需采用何種頻段等硬件層面的細(xì)節(jié),這類議題屬于物理層范疇的探討,然而物理層過于側(cè)重硬件層面,鑒于我的博客主要聚焦軟件議題,因此對(duì)物理層內(nèi)容不作詳盡闡述。
從實(shí)際運(yùn)用角度講,接收方在獲取信息之后怎樣進(jìn)行信息處置,該事項(xiàng)屬于應(yīng)用層面負(fù)責(zé)。因此總共包含五個(gè)層級(jí)協(xié)議:

先前已提及,核心內(nèi)容圍繞軟件展開,因此硬件層面的議題不予探討,僅聚焦于其上四部分:

這種分層結(jié)構(gòu)是網(wǎng)絡(luò)協(xié)議中最為典型的架構(gòu),即TCP/IP模型。
我前面講進(jìn)程概念的博客中有這么一張圖:

這一處也存在層級(jí)劃分,那么網(wǎng)絡(luò)協(xié)議的層級(jí)構(gòu)造與當(dāng)前計(jì)算機(jī)的層級(jí)結(jié)構(gòu)之間是否存在關(guān)聯(lián)呢?
答案是有的:

都是對(duì)應(yīng)的。
后續(xù)文章將詳細(xì)闡述應(yīng)用層編程方法,同時(shí)介紹傳輸層與網(wǎng)絡(luò)層的操作系統(tǒng)實(shí)現(xiàn)方式。通信過程中依賴傳輸層提供的系統(tǒng)調(diào)用接口,因此網(wǎng)絡(luò)編程的根本屬性屬于系統(tǒng)編程范疇。由于核心是操作系統(tǒng),所以本質(zhì)上還是在學(xué)習(xí)操作系統(tǒng)。
TCP和IP是在系統(tǒng)內(nèi)核里構(gòu)建的,它們主要負(fù)責(zé)管理數(shù)據(jù)傳輸?shù)南嚓P(guān)事務(wù),而應(yīng)用層則由用戶程序負(fù)責(zé),主要處理數(shù)據(jù)如何被程序使用的問題。
但制定個(gè)性化網(wǎng)絡(luò)規(guī)則的機(jī)構(gòu),并非完全依照那5個(gè)層級(jí)來構(gòu)建,而是采用7個(gè)層級(jí)進(jìn)行規(guī)劃,

這個(gè)分層架構(gòu)是OSI七層模型。它比TCP/IP模型多出兩個(gè)層級(jí),其中一個(gè)是用于數(shù)據(jù)格式轉(zhuǎn)換的層級(jí),另一個(gè)是負(fù)責(zé)建立和終止通信會(huì)話的層級(jí)。
TCP/IP出現(xiàn)的時(shí)間晚于OSI,它們之間的聯(lián)系,好比是設(shè)計(jì)圖和建成后的建筑,非常相似。
OSI是由專業(yè)組織制定規(guī)范的,并非由其完成實(shí)施,當(dāng)實(shí)際開展OSI工作時(shí),人們發(fā)現(xiàn)應(yīng)用層、表現(xiàn)層和會(huì)話層難以分割,它們本質(zhì)上是一個(gè)整體,因此決定將這三層合并處理。
TCP/IP五層架構(gòu)(或四層版本),可以忽略不看,對(duì)于初學(xué)者來說過于復(fù)雜,我這里僅是讓你簡單了解,其中包含許多初學(xué)者難以理解的內(nèi)容
TCP/IP是多個(gè)協(xié)議的總稱,里面包含眾多協(xié)議,共同構(gòu)成了TCP/IP協(xié)議系列。
TCP/IP通信體系采用了五級(jí)分層架構(gòu),每一級(jí)都借助下一級(jí)提供的網(wǎng)絡(luò)功能來達(dá)成自身目標(biāo):

網(wǎng)絡(luò)底層我們關(guān)注得不多,所以很多時(shí)候也稱作 TCP/IP四層架構(gòu)。
一般而言
并非所有設(shè)備都僅限于單一功能,部分交換機(jī)同樣具備處理網(wǎng)絡(luò)數(shù)據(jù)包的能力,而某些路由器也承擔(dān)了部分?jǐn)?shù)據(jù)傳輸環(huán)節(jié)的任務(wù),例如進(jìn)行端口導(dǎo)向的連接轉(zhuǎn)換。
兩個(gè)主機(jī)間的通信 在同一個(gè)局域網(wǎng)中的主機(jī)
同處一個(gè)網(wǎng)絡(luò)環(huán)境下的兩臺(tái)設(shè)備能夠直接進(jìn)行數(shù)據(jù)交換,信息傳遞在概念上表現(xiàn)為本機(jī)軟件層面直接將資料發(fā)送給對(duì)方軟件層面,

但是實(shí)際上并不是,就像剛剛打電話的那個(gè)例子一樣。
交流時(shí),一方信息需先由上至下將報(bào)文信息從頂層逐層送至底層,接著經(jīng)局域網(wǎng)(以太網(wǎng)是普及最廣的局域網(wǎng)類型)傳至對(duì)方鏈路環(huán)節(jié),最后再由底層逐層回升至頂層。

為啥要這樣干呢,我來講一個(gè)生活中的例子。
如果你們同住一個(gè)社區(qū),但分別住在不同的樓宇,你住在A號(hào)樓,朋友住在B號(hào)樓,不過你們都在五層,當(dāng)朋友要給你送個(gè)禮物時(shí),他需要先從B號(hào)樓的五層降到一層,接著走AB號(hào)樓之間的通道到A號(hào)樓樓下,最后跑到A號(hào)樓的五層,這樣禮物就到你手了。因此,從道理上講是你朋友把禮物直接交到了你手里,但從實(shí)際操作上講,TA是先向上移動(dòng),再橫穿過來,然后又向下移動(dòng),才把禮物送到你手中。這個(gè)過程跟數(shù)據(jù)傳送很相似。一種是站在使用者的立場(chǎng)去思考,另一種是站在技術(shù)人員的角度去分析。
報(bào)頭
分層構(gòu)造里,各層都有專屬的協(xié)議設(shè)定,每層協(xié)議均需配備獨(dú)特的協(xié)議頭標(biāo)識(shí),數(shù)據(jù)自上而下流轉(zhuǎn)時(shí)須附加該頭信息,數(shù)據(jù)自下而上遞交時(shí)則要移除該頭信息,例如當(dāng)前通過QQ發(fā)送一條你好信息,整個(gè)向底層傳輸?shù)慕?jīng)過大致如下所示(圖中頭部的形態(tài)系隨意繪制而成):

數(shù)據(jù)在傳送過程中逐級(jí)處理,每經(jīng)過一層都會(huì)進(jìn)行拆解,拆解就是把接收到的信息中的首部信息和實(shí)際內(nèi)容分開,實(shí)際內(nèi)容就是每層最外層用長方形框起來的部分,然后將這部分內(nèi)容傳遞給更高一層,整個(gè)過程就是這樣。

完整流程就是:

那報(bào)頭是干啥的呢?
回憶一下大家寄送和收取快遞的情景,寄快遞時(shí)必須填寫一份表格,該表格會(huì)粘貼在包裹上,這份包裹并非供寄件人或收件人查閱,而是供快遞企業(yè)參考,此表格可視為信封,對(duì)寄送方和收取方均無實(shí)際意義,僅是附加的物件,快遞流轉(zhuǎn)過程為寄送人,經(jīng)過快遞企業(yè),再由快遞企業(yè),最終送達(dá)收件人,總共涉及兩個(gè)環(huán)節(jié)。收到快遞后開始拆開包裝,拆開后拿到數(shù)據(jù)就進(jìn)行移交,只是說明只有兩層?xùn)|西,拆包裝這個(gè)工作是我一個(gè)人完成的。
數(shù)據(jù)從上往下傳送時(shí),下層需依據(jù)自身規(guī)則為上層數(shù)據(jù)附加特定信息,而接收方的同級(jí)單位在獲取數(shù)據(jù)后,也要按照其規(guī)范解析并處理來自下層的相應(yīng)字段內(nèi)容。報(bào)文頭部就是接收信息時(shí)多出來的部分。這部分內(nèi)容可以確定交給哪一種上層協(xié)議。
自上到下封裝:添加報(bào)頭。
自下到上解包:去掉報(bào)頭 + 展開分析(后面說)。
增加報(bào)文頭部類似將元素放入棧中,移除報(bào)文頭部類似從棧中取出元素,這種情況下同一層級(jí)在邏輯上就是直接進(jìn)行信息交互。

提升效率,無需逐層定位報(bào)頭,只需查找棧頂即可。
如何做到直接通信
先前已提及局域網(wǎng)內(nèi)兩臺(tái)設(shè)備能夠直接聯(lián)絡(luò),那么其實(shí)現(xiàn)方式是怎樣的呢?
先來講個(gè)例子:
課堂教學(xué)進(jìn)行中,教師點(diǎn)名讓張三應(yīng)答,當(dāng)時(shí)全班學(xué)生均可聽見,然而僅有張三站起身來,二者交談之際全班眾人依舊能清楚辨識(shí),不過教師僅與張三進(jìn)行交流,換言之,即便所有人都能接收訊息,他們之間卻實(shí)現(xiàn)了定向聯(lián)絡(luò),教師向張三傳遞,張三向教師回應(yīng)。
問:為什么老師點(diǎn)名張三時(shí),其他同學(xué)不站起來?(問題有點(diǎn)二)
由于老師沒有邀請(qǐng)任何其他同學(xué),這一情況的前提是每位同學(xué)都得到了這個(gè)通知。
本地網(wǎng)絡(luò)也是如此,交流時(shí)如同某臺(tái)設(shè)備在整個(gè)本地網(wǎng)絡(luò)中發(fā)言,隨后指明某個(gè)設(shè)備,就能夠向該設(shè)備傳遞信息了。參見圖示。

此刻有六臺(tái)設(shè)備ABCDEF接入同一網(wǎng)絡(luò),當(dāng)B要聯(lián)系E時(shí),會(huì)先通知目標(biāo)地址,但此通知會(huì)被ACDEF全部接收,它們會(huì)核對(duì)通知中的設(shè)備標(biāo)識(shí)是否指向自身,若非本機(jī)則立即忽略,因此最終僅D能獲取該通知,并將信息上傳至更高層級(jí)處理,同理D若需回復(fù)B,也會(huì)遵循相同機(jī)制。
課堂上,有個(gè)學(xué)生總不守規(guī)矩,老是干擾老師講課,導(dǎo)致教學(xué)無法正常進(jìn)行。教室里,大家都能說話,可當(dāng)老師授課時(shí),要是有人大聲喧嘩,就會(huì)妨礙老師講課,也會(huì)干擾老師和學(xué)生之間的交流。
B與E主機(jī)進(jìn)行聯(lián)絡(luò)時(shí),借助局域網(wǎng)進(jìn)行信息傳遞,局域網(wǎng)內(nèi)任何接入的主機(jī)都有權(quán)向其中發(fā)送光脈沖信號(hào),當(dāng)A主機(jī)在B與E正在順暢交流期間隨意發(fā)送數(shù)據(jù),便會(huì)造成B與E發(fā)出的以及A發(fā)出的光脈沖信號(hào)相互交織,進(jìn)而導(dǎo)致B與D之間的信息變得難以分辨,這種現(xiàn)象被稱為局域網(wǎng)數(shù)據(jù)傳輸過程中出現(xiàn)的沖突現(xiàn)象。
在不同局域網(wǎng)中的主機(jī)
跨不同網(wǎng)段的主機(jī)進(jìn)行信息交互時(shí)存在一些差異,但封裝和解析報(bào)文頭的過程基本相同。
局域網(wǎng)的具體形式或許存在差異。需要留意的是我特別強(qiáng)調(diào)了或許,當(dāng)前廣受歡迎的局域網(wǎng)模式包括有線網(wǎng)絡(luò)以及無線路由。
如果各位想看看局域網(wǎng)有哪些可以看看這篇博客:。
不同區(qū)域的網(wǎng)絡(luò),不論類型是否一致,若需實(shí)現(xiàn)互通,就必須借助路由設(shè)備,先前那些描繪演進(jìn)歷程的圖表也闡明過這個(gè)情況。
看圖:

需要說明具體步驟時(shí),必須先提及兩個(gè)地址:物理地址和網(wǎng)際協(xié)議地址。
MAC地址和IP地址
名師輔導(dǎo)
環(huán)球網(wǎng)校
建工網(wǎng)校
會(huì)計(jì)網(wǎng)校
新東方
醫(yī)學(xué)教育
中小學(xué)學(xué)歷