<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Jack Jiang

    我的最新工程MobileIMSDK:http://git.oschina.net/jackjiang/MobileIMSDK
    posts - 494, comments - 13, trackbacks - 0, articles - 1

    1、引言

    整個(gè)暑假去面試,面試了很多家公司(無(wú)論是小廠還是大廠)問(wèn)到的深度不同,網(wǎng)絡(luò)原理是面試最容易問(wèn)到的問(wèn)題,雖然我們?cè)陧?xiàng)目中很少去實(shí)踐它,但是了解其原理,會(huì)讓我們背后網(wǎng)絡(luò)通信是如果工作的,既能在面試官面前體現(xiàn)出你的基礎(chǔ)是否扎實(shí),也能對(duì)以后深入網(wǎng)絡(luò)這部分學(xué)習(xí)有更多的了解。

    很多同學(xué)面試在準(zhǔn)備這部分的時(shí)候,都會(huì)去背,這部分確實(shí)很難掌握,我個(gè)人總結(jié)的最好的學(xué)習(xí)網(wǎng)絡(luò)原理的方法就是不用刻意的去記憶而是完全的結(jié)合實(shí)際去講整個(gè)原理融會(huì)貫通。雖然一開(kāi)始學(xué)習(xí)起來(lái)很吃力,但是稍微用點(diǎn)心,多看幾遍,多問(wèn)自己為什么,把自己當(dāng)做是開(kāi)發(fā)網(wǎng)絡(luò)原理的開(kāi)發(fā)者,面試前的準(zhǔn)備只要理清邏輯就足夠了,而不是去背這部分內(nèi)容。

    而且這部分相同的知識(shí)點(diǎn)面試官有多種提問(wèn)方式,但是其中很多都是換湯不換藥。我記得最多的問(wèn)的是輸入U(xiǎn)RL,到頁(yè)面呈現(xiàn)出來(lái),其中經(jīng)歷了什么?這道面試題的背后,涉及到了很多網(wǎng)絡(luò)原理的知識(shí),我們這篇文章不會(huì)全部分享到,而是先把由來(lái)和網(wǎng)絡(luò)層次劃分弄清楚,就完成了這篇文章的目的。

    (本文同步發(fā)布于:http://www.52im.net/thread-2851-1-1.html

    相關(guān)文章:

    網(wǎng)絡(luò)編程懶人入門(mén)(一):快速理解網(wǎng)絡(luò)通信協(xié)議(上篇)》(* 力薦)

    網(wǎng)絡(luò)編程懶人入門(mén)(二):快速理解網(wǎng)絡(luò)通信協(xié)議(下篇)》(* 力薦)

    網(wǎng)絡(luò)編程懶人入門(mén)(六):史上最通俗的集線器、交換機(jī)、路由器功能原理入門(mén)

    網(wǎng)絡(luò)編程懶人入門(mén)(九):通俗講解,有了IP地址,為何還要用MAC地址?

    學(xué)習(xí)交流:

    - 即時(shí)通訊/推送技術(shù)開(kāi)發(fā)交流5群:215477170[推薦]

    - 移動(dòng)端IM開(kāi)發(fā)入門(mén)文章:《新手入門(mén)一篇就夠:從零開(kāi)發(fā)移動(dòng)端IM

    2、關(guān)于作者

    小鹿(前端工程師):

    微信公眾號(hào):小鹿動(dòng)畫(huà)學(xué)編程

    Github地址:https://github.com/luxiangqiang

    個(gè)人博客:http://luxiangqiang.com/

    3、系列文章

    本文是系列文章中的第7篇,本系列大綱如下:

    腦殘式網(wǎng)絡(luò)編程入門(mén)(一):跟著動(dòng)畫(huà)來(lái)學(xué)TCP三次握手和四次揮手

    腦殘式網(wǎng)絡(luò)編程入門(mén)(二):我們?cè)谧x寫(xiě)Socket時(shí),究竟在讀寫(xiě)什么?

    腦殘式網(wǎng)絡(luò)編程入門(mén)(三):HTTP協(xié)議必知必會(huì)的一些知識(shí)

    腦殘式網(wǎng)絡(luò)編程入門(mén)(四):快速理解HTTP/2的服務(wù)器推送(Server Push)

    腦殘式網(wǎng)絡(luò)編程入門(mén)(五):每天都在用的Ping命令,它到底是什么?

    腦殘式網(wǎng)絡(luò)編程入門(mén)(六):什么是公網(wǎng)IP和內(nèi)網(wǎng)IP?NAT轉(zhuǎn)換又是什么鬼?

    腦殘式網(wǎng)絡(luò)編程入門(mén)(七):面視必備,史上最通俗計(jì)算機(jī)網(wǎng)絡(luò)分層詳解》(本文)

    4、為什么要進(jìn)行網(wǎng)絡(luò)層次劃分?

    說(shuō)到網(wǎng)絡(luò)層次劃分并不陌生,我剛剛接觸到網(wǎng)絡(luò)層次的時(shí)候一臉懵逼,這么多層,一層不就行了嘛?層與層之間好多協(xié)議,還有各種數(shù)據(jù)包,第一次我放棄了。

    當(dāng)我從新拾起網(wǎng)絡(luò)層次的時(shí)候,我下定決心從根上理解它。首先弄明白它的原理,那必定要知道它的由來(lái),也就是為什么要進(jìn)行網(wǎng)絡(luò)層次劃分?這個(gè)問(wèn)題問(wèn)的好。

    假如“小鹿”是網(wǎng)絡(luò)的開(kāi)發(fā)人員,起初認(rèn)為計(jì)算機(jī)與計(jì)算機(jī)之間的通信只需要一根線就可以完成通信,對(duì)沒(méi)錯(cuò),但是世界那么大,那么多計(jì)算機(jī),距離又遠(yuǎn),不但浪費(fèi)線,還沒(méi)出現(xiàn)各種線被你偷偷剪斷的情況,毋庸置疑,那計(jì)算機(jī)之間通信就不行了。(后邊出來(lái)了無(wú)線網(wǎng),雖然其中網(wǎng)關(guān)、路由之間也需要連線,但不是讓每臺(tái)計(jì)算機(jī)兩兩連接,而是一個(gè)區(qū)域?yàn)閱挝挥?jì)算機(jī)相互連接通信)

    不行,老板說(shuō),“小鹿”你給我想法子改,改不出來(lái)今晚不能睡覺(jué),“小鹿”仔細(xì)想了想,這還是個(gè)技術(shù)活,需要進(jìn)行全面的改進(jìn),也發(fā)現(xiàn)所謂的計(jì)算機(jī)之間的連線只能傳送0、1信號(hào),另一臺(tái)計(jì)算并不知道那么多0、1代表什么,而且“小鹿”又發(fā)現(xiàn)不同廠商的生產(chǎn)的計(jì)算機(jī)既然有連線實(shí)現(xiàn)通信也是很麻煩的,干脆定義一套規(guī)則吧,無(wú)論“某碩”計(jì)算機(jī)還是“某想”計(jì)算機(jī),都必須遵守這套規(guī)則,其實(shí)所說(shuō)的這套規(guī)則就是我們經(jīng)常說(shuō)的“網(wǎng)絡(luò)協(xié)議”。

    不是說(shuō)網(wǎng)絡(luò)層次的由來(lái)嗎,怎么講到網(wǎng)絡(luò)協(xié)議了。咱們繼續(xù),通過(guò)上面的問(wèn)題,那個(gè)計(jì)算機(jī)之間通過(guò)連線傳送0、1信號(hào)的問(wèn)題雖然規(guī)定了通信規(guī)則,但是除了像0、1這種無(wú)意義的信號(hào)之外,網(wǎng)絡(luò)中還存在著其他各種各樣的問(wèn)題,兩個(gè)計(jì)算機(jī)之間怎么進(jìn)行識(shí)別?以及怎么才能知道對(duì)方的地址?以及不同計(jì)算機(jī)應(yīng)用程序怎么知道是給自己傳遞的數(shù)據(jù),還有不同的通信數(shù)據(jù)格式怎么來(lái)規(guī)定等等一系列的問(wèn)題都出來(lái)了。

    “小鹿”發(fā)現(xiàn),如果各種問(wèn)題都寫(xiě)成一套協(xié)議來(lái)規(guī)定雙方通信的規(guī)則,但是呢?萬(wàn)一其中哪些規(guī)則通信中出現(xiàn)問(wèn)題,影響到了其他規(guī)則,最常見(jiàn)的就是數(shù)據(jù)包,一個(gè)數(shù)據(jù)包中如果包含各種各樣的協(xié)議,不就亂套了。

    “小鹿”為了能夠把它設(shè)計(jì)的更好,決定采用分層劃分的結(jié)構(gòu),既能規(guī)定不同層的完成的功能,又能實(shí)現(xiàn)層與層之間的改動(dòng)而不相互影響,這就是我們經(jīng)常聽(tīng)到網(wǎng)絡(luò)劃分層次的好處。

    5、網(wǎng)絡(luò)分層是如何進(jìn)行分層的?

    既然我們決定要分層,那么分為幾層才好呢?

    起初網(wǎng)絡(luò)分層是標(biāo)準(zhǔn)的七層,也就是我們所說(shuō)的 OSI 七層模型。

     

    ▲ OSI參考模型或七層模型

    我們所知道的還有 TCP/IP 四層模型和 TCP/IP 五層模型。這又是怎么出來(lái)的,其實(shí)所謂的 TCP/IP 四層模型和 TCP/IP 五層模型是以 OSI 七層優(yōu)化而來(lái),把某些層進(jìn)行合并了,其實(shí)本質(zhì)上還是相同的,但是我個(gè)人最喜歡用五層來(lái)解釋。

     

    ▲ 五層模型

    6、每一層的作用是什么?

    這一部分涉及到每一層的很多協(xié)議和知識(shí)點(diǎn),但是我們這一節(jié)不具體分享,為什么?我們具體深入之前必須大腦里有個(gè)具體的網(wǎng)絡(luò)分層結(jié)構(gòu)圖,先要知道每層是做什么的,層與層之間的關(guān)系,然后下一節(jié)再深入每層中的每個(gè)協(xié)議怎么通信的,這樣的好處學(xué)起來(lái)?xiàng)l理清晰,而不至于當(dāng)時(shí)我學(xué)習(xí)的時(shí)候表面還不懂,就深入最后懵逼狀態(tài)。

    6.1 物理層

    物理層,顧名思義,用物理手段將電腦連接起來(lái),就像我們上邊講到的計(jì)算機(jī)之間的物理連線。主要用來(lái)傳輸0、1信號(hào),上邊也分析過(guò)了,0、1信號(hào)畢竟沒(méi)有任何的現(xiàn)實(shí)意義,所有我們用另一層用來(lái)規(guī)定不同0、1組合的意義是什么。

    6.2 數(shù)據(jù)鏈路層

    下層的物理層既然不能規(guī)定不同0、1組合的信號(hào)代表什么意義,那么我們?cè)跀?shù)據(jù)鏈路層規(guī)定一套協(xié)議,專(zhuān)門(mén)的給0、1信號(hào)進(jìn)行分組,以及規(guī)定不同的組代表什么意思,從而雙方計(jì)算機(jī)都能夠進(jìn)行識(shí)別,這個(gè)協(xié)議就是“以太網(wǎng)協(xié)議”(具體的以太網(wǎng)協(xié)議內(nèi)容下節(jié)內(nèi)容詳細(xì)講解)。

    但是問(wèn)題又來(lái)了,我們要發(fā)送給對(duì)方計(jì)算機(jī),怎么標(biāo)識(shí)對(duì)方以及怎么知道對(duì)方的地址呢?

    6.2.1)MAC 地址:

    我們所說(shuō)的MAC地址到底的作用是啥?說(shuō)白了它就是作為網(wǎng)絡(luò)中計(jì)算機(jī)設(shè)備的唯一標(biāo)識(shí),從計(jì)算機(jī)在廠商生產(chǎn)出來(lái)就被十六進(jìn)制的數(shù)標(biāo)識(shí)為MAC地址。

    既然我們知道了用MAC地址作為標(biāo)識(shí),那么怎么才能知道我們要進(jìn)行通信的計(jì)算機(jī)MAC地址呢?

    6.2.2)廣播:

    這里廣播詳細(xì)的在下一節(jié)講,這一節(jié)你只需要知道廣播可以幫助我們能夠知道對(duì)方的 MAC 地址。那么既然知道了MAC地址就可以通信了?沒(méi)有想得那么簡(jiǎn)單,廣播中還存在兩種情況,一種是,在同一子網(wǎng)絡(luò)下(同一局域網(wǎng)下)的計(jì)算機(jī)是通過(guò) ARP 協(xié)議獲取到對(duì)方 MAC地址的。不同自網(wǎng)絡(luò)中(不同局域網(wǎng))中是交給兩個(gè)局域網(wǎng)的網(wǎng)關(guān)(路由器)去處理的。這里邊涉及到很多細(xì)節(jié)的知識(shí),都會(huì)集中到下一節(jié),但是這一節(jié)你了解怎么進(jìn)行標(biāo)識(shí)計(jì)算機(jī)和怎么獲取到MAC地址就可以了。

    6.3 網(wǎng)絡(luò)層

    物理層和數(shù)據(jù)鏈路層都有自己的事情要做,也就是我們上邊所講到的這些(里邊很多細(xì)節(jié)不在這節(jié)多說(shuō))。上邊兩層在我看來(lái)可以完成正常通信了,那么網(wǎng)絡(luò)層出來(lái)干啥子?

    網(wǎng)絡(luò)層的由來(lái)是因?yàn)樵跀?shù)據(jù)鏈路層中我們說(shuō)說(shuō)兩臺(tái)計(jì)算機(jī)之間的通信是分為同一子網(wǎng)絡(luò)和不同子網(wǎng)絡(luò)之間,那么問(wèn)題就來(lái)了,怎么判斷兩臺(tái)計(jì)算機(jī)是否在同一子網(wǎng)絡(luò)(局域網(wǎng))中?這就是網(wǎng)絡(luò)層要解決的問(wèn)題。

    6.3.1)IP 協(xié)議:

    我們通常用到的 IP 地址,就是網(wǎng)絡(luò)層中的東西,所規(guī)定的的協(xié)議就是 IP 協(xié)議。很多小伙伴問(wèn),IP 地址想必也是地址吧,上邊都有唯一標(biāo)識(shí)的 MAC 地址了,IP 地址出來(lái)是混飯吃的?為了能夠讓大家更方便的理解 IP 地址和 MAC 地址,我們可以將 IP 地址抽象成一種邏輯上的地址,也就是說(shuō) MAC 地址是物理上的地址,就是定死了。IP 地址呢,是動(dòng)態(tài)分配的,不是固定死的。

    我們就是通過(guò) IP 地址來(lái)判斷兩個(gè)計(jì)算機(jī)設(shè)備是否在同一子網(wǎng)絡(luò)中的,那么你會(huì)問(wèn)它是怎么判斷的,以及 IP 地址誰(shuí)給他分配的?又是如何分配的等一些列問(wèn)題,我們不著急,這里只說(shuō)一下大體的流程,詳細(xì)會(huì)后續(xù)寫(xiě)一大篇。

    既然我們通過(guò) IP 地址來(lái)判斷兩個(gè)計(jì)算機(jī)是否處于同一局域網(wǎng)中,那么首先要知道對(duì)方的 IP 地址吧?DNS 解析想必大家都知道,可以將域名解析為 IP 地址。好了,我們知道兩臺(tái)計(jì)算機(jī)的 IP 地址了,怎么進(jìn)行判斷是否同一局域網(wǎng)中?

    6.3.2)子網(wǎng)掩碼:

    嘿嘿,又是一個(gè)只聽(tīng)說(shuō)過(guò),但是不知道這個(gè)什么作用的一個(gè)名詞,沒(méi)事,等我聊完,你就明白是做什么的了。

    子網(wǎng)掩碼就是用來(lái)標(biāo)識(shí)同一局域網(wǎng)中的 IP 地址的信息的?什么信息?IP 地址是由 32 個(gè)二進(jìn)制位組成的,也就是四個(gè)十進(jìn)制(如:255.255.255.000)。

    子網(wǎng)掩碼也是由 32 個(gè)二進(jìn)制位組成的,但是只能用 0 或 1 來(lái)表示,如:11111111.11111111.11111111.00000000。

    到底什么意思呢?有 1 的部分表示網(wǎng)絡(luò)部分,有 0 表示主機(jī)部分,這和判斷兩臺(tái)計(jì)算機(jī)是否在同一局域網(wǎng)中有什么關(guān)系?沒(méi)錯(cuò),是有關(guān)系的!兩臺(tái)計(jì)算機(jī)的 IP 地址分別和子網(wǎng)掩碼進(jìn)行一種運(yùn)算(AND 運(yùn)算),如果結(jié)果相同,兩臺(tái)計(jì)算機(jī)就在同一局域網(wǎng)中,否則就不在同一局域網(wǎng)中。

    AND 是如何進(jìn)行運(yùn)算的,IP 的數(shù)據(jù)包的組成等問(wèn)題,不在這里多陳述。

    6.4 傳輸層

    好了,如果你認(rèn)為計(jì)算機(jī)可以進(jìn)行通信了,那么“小鹿”恭喜你,你已經(jīng)基本知道了以上幾層劃分的作用,但是如果你正在一邊打 LOL,一邊和朋友在 QQ 聊天,突然,游戲中隊(duì)友聊天信息出現(xiàn)在了 QQ 窗口中,咦?出現(xiàn)了什么情況?

    其實(shí)是以上層級(jí)還是不夠,出現(xiàn)上邊的原因就是,兩臺(tái)計(jì)算機(jī)雖然可以通信了,但是每天計(jì)算機(jī)運(yùn)行著好多的程序,誰(shuí)知道你們傳輸?shù)男畔⑹菍儆谀男┏绦虻模共坏?LOL 的聊天信息跑到了 QQ 窗口中。

    想必大家猜到了傳輸層主要用來(lái)干啥滴,是的,傳輸層的主要功能就是為了能夠?qū)崿F(xiàn)“端口到端口”的通信。計(jì)算機(jī)上運(yùn)行的不同程序都會(huì)分配不同的端口,所以才能使得數(shù)據(jù)能夠正確的傳送給不同的應(yīng)用程序。

    6.4.1)UDP 協(xié)議:

    加入端口號(hào)也需要一套規(guī)則,那就是 UDP 協(xié)議,但是 UDP協(xié)議有個(gè)缺點(diǎn),一旦進(jìn)行通信,就不知道對(duì)方是否接收到數(shù)據(jù)了,我們?cè)俣x一套規(guī)則,讓其可以和對(duì)方進(jìn)行確認(rèn),那么 TCP 出現(xiàn)了。

    6.4.2)TCP 協(xié)議:

    我們通常說(shuō) TCP 三次握手和四次揮手,沒(méi)錯(cuò),這就是傳輸層中完成的,TCP 三次握手涉及到的內(nèi)容賊多,都可以單獨(dú)寫(xiě)一篇長(zhǎng)文,這里不多陳述,知道它是在傳輸層中完成的以及它的作用是什么,能夠認(rèn)識(shí)到它就好了。

    6.5 應(yīng)用層協(xié)議

    “喂,你發(fā)給我的是什么破數(shù)據(jù),亂七八糟的,我TM能解析嗎?能不能按照我的規(guī)定給我傳送?“

    “好的,下次不敢了”

    想必大家已經(jīng)猜到了應(yīng)用層的協(xié)議,應(yīng)用層的功能就是規(guī)定了應(yīng)用程序的數(shù)據(jù)格式。我們經(jīng)常用得到的電子郵件、HTTP協(xié)議、以及FTP數(shù)據(jù)的格式,就是在應(yīng)用層定義的。

    7、每一層的的功能細(xì)節(jié)是什么?

    前面章節(jié)主要分享了網(wǎng)絡(luò)分層的基本概念,為什么要進(jìn)行網(wǎng)絡(luò)分層?又是如何進(jìn)行分層?每一層的基本功能是什么?而且對(duì)于每一層的的功能細(xì)節(jié)方面,比如數(shù)據(jù)包的組成以及每層包含的一些協(xié)議的使用都沒(méi)有細(xì)說(shuō),那么本節(jié)將繼續(xù)分享網(wǎng)絡(luò)分層每層中協(xié)議等深入講解。(PS:可能里邊有的講解不正確,還請(qǐng)大佬指出改正)

    7.1 物理層

    物理層里邊涉及到最多的是硬件底層的一些內(nèi)容,沒(méi)有需要過(guò)多了解的內(nèi)容,我們直接看數(shù)據(jù)鏈路層。

    7.2 數(shù)據(jù)鏈路層

    上回講到數(shù)據(jù)鏈路層中規(guī)定的“以太網(wǎng)協(xié)議”來(lái)規(guī)定電信號(hào)的分組形式,什么是以太網(wǎng),以太網(wǎng)的數(shù)據(jù)包是什么樣子的?

    7.2.1)以太網(wǎng)協(xié)議:

    以太網(wǎng)規(guī)定,每組的電信號(hào)就是一個(gè)數(shù)據(jù)包,每個(gè)數(shù)據(jù)包我們可以成為“幀”。每幀的組成是由標(biāo)頭(Head)和數(shù)據(jù)(Data)組成。

     

    那么你會(huì)問(wèn),標(biāo)頭里有什么信息?Data 數(shù)據(jù)又會(huì)存放寫(xiě)什么?為什么分為兩部分?放在一塊不好嗎?

    a)標(biāo)頭:

    為什么傳輸數(shù)據(jù)會(huì)有標(biāo)頭,我們想呀,在傳輸數(shù)據(jù)的時(shí)候,接收端怎么判斷是不是給自己發(fā)送的,那么就只取出標(biāo)頭來(lái)進(jìn)行判斷。

    數(shù)據(jù)包的標(biāo)頭中通常會(huì)存放一些有關(guān)數(shù)據(jù)包的說(shuō)明、發(fā)送者是誰(shuí)、接受者又是誰(shuí)等相關(guān)識(shí)別信息。

    標(biāo)頭的長(zhǎng)度固定為 18 字節(jié),也就是說(shuō),一些標(biāo)頭識(shí)別信息的大小不能超過(guò) 18 字節(jié)。

    b)數(shù)據(jù):

    數(shù)據(jù),顧名思義,你要傳輸給接收端什么數(shù)據(jù)都會(huì)放到數(shù)據(jù)包中,也就是整個(gè)數(shù)據(jù)包的具體內(nèi)容,比如文件、字符串之類(lèi)的。

    數(shù)據(jù)部分的長(zhǎng)度最小至少為 46 個(gè)字節(jié),最長(zhǎng) 1500 字節(jié)。我們可能會(huì)想到,如果小于 46 字節(jié)沒(méi)啥問(wèn)題可以存放開(kāi),那么大于 1500 字節(jié)怎么處理呢?很簡(jiǎn)單,我們就分成兩個(gè)包處理(分割),兩個(gè)包存放不下就分割成三個(gè)包…

    7.2.2)廣播:

    上回說(shuō)到,廣播的作用就是用來(lái)查找接收端的 MAC 地址,從而進(jìn)行下一步的數(shù)據(jù)傳輸。注意,廣播只是一種發(fā)送數(shù)據(jù)的形式,而計(jì)算機(jī)想要知道另一臺(tái)計(jì)算機(jī)的 MAC 地址是通過(guò) ARP 協(xié)議解決的,ARP 協(xié)議會(huì)在講完 IP 協(xié)議后再說(shuō),因?yàn)樗鼤?huì)涉及到 IP 協(xié)議的一點(diǎn)內(nèi)容,現(xiàn)在講可能會(huì)有點(diǎn)亂。

    如果你覺(jué)的上邊稍微有點(diǎn)亂,那怎們稍微屢一下,我們想要發(fā)送數(shù)據(jù),首先要知道對(duì)方的唯一標(biāo)識(shí)(MAC 地址),要想知道對(duì)方的 MAC 地址,需要使用 ARP 協(xié)議,假設(shè)我們通過(guò) ARP 協(xié)議拿到了接收方的 MAC 地址。

    我們開(kāi)始發(fā)送數(shù)據(jù),將發(fā)送方的 MAC 地址和接收方的 MAC 地址封裝在數(shù)據(jù)包中,然后發(fā)送端向同一子網(wǎng)絡(luò)中(同一局域網(wǎng))中的所有計(jì)算機(jī)發(fā)送該數(shù)據(jù)包,所有的計(jì)算機(jī)接收到該包之后,就對(duì)數(shù)據(jù)包的頭部進(jìn)行提取,提取出里邊封裝好的接收端 MAC 地址和自己的 MAC 地址作比對(duì),如果相同,就說(shuō)明該數(shù)據(jù)包是給自己發(fā)送的,否則,就會(huì)丟棄該數(shù)據(jù)包,這個(gè)過(guò)程就是廣播的過(guò)程。

    上一篇文章在這個(gè)地方留下的一個(gè)問(wèn)題就以上是在同一局域網(wǎng)中,如果不在同一局域網(wǎng)中我們?cè)趺刺幚恚课覀兤匠J褂脽o(wú)線網(wǎng)都知道每個(gè)無(wú)線局域網(wǎng)都會(huì)有一個(gè)路由器,我們先通過(guò)以上的方法將數(shù)據(jù)發(fā)送到路由器,然后路由器轉(zhuǎn)發(fā)數(shù)據(jù)到其他局域網(wǎng)中的計(jì)算機(jī)。

    7.3 網(wǎng)絡(luò)層

    網(wǎng)絡(luò)層中最重要的一個(gè)協(xié)議就是 IP 協(xié)議,我們一般發(fā)送端給服務(wù)端發(fā)送數(shù)據(jù)同時(shí)要知道兩個(gè)地址才能準(zhǔn)確送達(dá)到對(duì)方,分別為 IP 地址和 MAC 地址。停!stop! 上邊講到的明明知道對(duì)方的 MAC 地址就可以傳輸數(shù)據(jù)了,為什么現(xiàn)在需要兩個(gè)地址呢?你給我說(shuō)明白,說(shuō)不明白取關(guān)!

    上邊確實(shí)是一個(gè) MAC 地址就可以通信,但是前提是通過(guò) ARP 協(xié)議獲得的 MAC 地址,而 ARP 協(xié)議正是利用的接收端的 IP 地址才獲取到接收端的 MAC 地址的,所以這兩個(gè)地址很重要,那么如果實(shí)現(xiàn)的,下邊會(huì)繼續(xù)講。

    7.3.1)IP 協(xié)議:

    IP 的數(shù)據(jù)包是直接放入到以太網(wǎng)數(shù)據(jù)包的“數(shù)據(jù)”部分的,這樣做有一個(gè)好處就是“上層的變動(dòng)完全涉及不到下層的結(jié)構(gòu)”。然后數(shù)據(jù)包就變成這個(gè)樣子了。

     

    IP 數(shù)據(jù)包也分為標(biāo)頭(Head)和數(shù)據(jù)(Data)兩部分:

    • 1)標(biāo)頭:IP 數(shù)據(jù)包的標(biāo)頭是 20 ~ 60 字節(jié),主要包括版本、IP 地址等信息;
    • 2)數(shù)據(jù):數(shù)據(jù)的最大長(zhǎng)度為 65515 字節(jié)。整個(gè) IP 數(shù)據(jù)包的最大總長(zhǎng)度為 65535 字節(jié)。主要存放 IP 數(shù)據(jù)包的具體內(nèi)容。

    問(wèn)題來(lái)了,以太網(wǎng)的數(shù)據(jù)部分最長(zhǎng)為 1500 字節(jié),你把一個(gè)長(zhǎng)度為 65535 字節(jié)的 IP 數(shù)據(jù)包放到以太網(wǎng)的數(shù)據(jù)包匯總,不會(huì)被撐破嗎?你在逗我么?確實(shí)是呀,那我們就分割數(shù)據(jù)包吧,分割成幾個(gè)以太網(wǎng)數(shù)據(jù)包分開(kāi)發(fā)送。

    7.3.2)AND 運(yùn)算:

    IP 協(xié)議上篇文章中最重要的作用就是判斷兩個(gè)設(shè)備是否屬于同一子網(wǎng)中(同一局域網(wǎng)中)。

    將兩個(gè)IP地址與子網(wǎng)掩碼分別進(jìn)行AND運(yùn)算(兩個(gè)數(shù)位都為1,運(yùn)算結(jié)果為1,否則為0),然后比較結(jié)果是否相同,如果是的話(huà),就表明它們?cè)谕粋€(gè)子網(wǎng)絡(luò)中,否則就不是。

    我們可以通過(guò) DNS 解析知道對(duì)方的 IP ,除了判斷兩個(gè)計(jì)算機(jī)是否在同一局域網(wǎng)中,還有一個(gè)作用就是然后通過(guò) ARP 協(xié)議獲取到對(duì)方的 MAC 地址。停!真想讓我取關(guān)嗎?ARP 就 TN 的說(shuō)了多少遍了,該詳細(xì)說(shuō)一下了吧?

    7.3.3)ARP 協(xié)議:

    前提:對(duì)方的 IP 地址是已知的,通過(guò) DNS 解析得到。

    ARP 協(xié)議發(fā)出一個(gè)數(shù)據(jù)包,包含在以太網(wǎng)的數(shù)據(jù)包中(其中包含對(duì)方的 IP 地址,對(duì)方的 MAC 地址欄是 FF:FF:FF:FF:FF:FF)。子網(wǎng)絡(luò)中的每臺(tái)主機(jī)都會(huì)收到這個(gè)包,然后從中取出 IP 地址與自身對(duì)比,如果兩者相同,都做出回復(fù),向?qū)Ψ綀?bào)告自己的 MAC 地址,否則就丟棄這個(gè)包。

    7.4 傳輸層

    傳輸層主要涉及到兩個(gè)重要協(xié)議,UDP 和 TCP 協(xié)議,上篇講過(guò)主要用來(lái)確定端口到端口的通信,計(jì)算機(jī)中不同運(yùn)行的程序端口號(hào)不相同。

    "端口"是 0 到 65535 之間的一個(gè)整數(shù),正好 16 個(gè)二進(jìn)制位。0 到 1023的端口被系統(tǒng)占用,我們只能選用大于1023 的端口。

    7.4.1)UDP 協(xié)議:

    UDP 協(xié)議也分為標(biāo)頭(Head)和數(shù)據(jù)(Data)兩部分:

    • 1)標(biāo)頭:標(biāo)頭的長(zhǎng)度為 8 字節(jié)。主要存放了發(fā)送和接收端口號(hào);
    • 2)數(shù)據(jù):數(shù)據(jù)部分和標(biāo)頭部分的總長(zhǎng)度不超過(guò) 65535 字節(jié),正好放進(jìn)一個(gè)IP數(shù)據(jù)包。

    前邊也講過(guò),數(shù)據(jù)包之間是包含關(guān)系的,所以 UDP 的數(shù)據(jù)包是放到 IP 數(shù)據(jù)包的“數(shù)據(jù)”部分的,IP 數(shù)據(jù)包又放在以太網(wǎng)數(shù)據(jù)包的“數(shù)據(jù)”部分的。

     

    7.4.2)TCP 協(xié)議:

    TCP 和 UDP 是相同的,上一篇講了 UDP 和 TCP 的優(yōu)缺點(diǎn),TCP 保證了網(wǎng)絡(luò)的可靠性,TCP 三次握手和四次揮手就是這部分內(nèi)容。

    TCP 的數(shù)據(jù)包和 UDP 相同嵌入在 IP 協(xié)議的“數(shù)據(jù)”部分,TCP 并沒(méi)有長(zhǎng)度限制,但是為了保證傳輸效率,肯定要進(jìn)行限制的,TCP 的數(shù)據(jù)包的長(zhǎng)度一般不會(huì)超過(guò) IP 數(shù)據(jù)包的長(zhǎng)度了,保證單個(gè)的 TCP 數(shù)據(jù)包不再進(jìn)行分割。

    7.5 應(yīng)用層

    應(yīng)用層是最高一層,直接面向用戶(hù),它的數(shù)據(jù)包會(huì)放在 TCP 的數(shù)據(jù)包的“數(shù)據(jù)”部分,那么整個(gè)五層的數(shù)據(jù)包就會(huì)變成一下這樣。

     

    以上五層中的內(nèi)容基本講完了,我是從下到上逐層寫(xiě)的,這篇文章可以讓你入門(mén)網(wǎng)絡(luò)五層協(xié)議的基本內(nèi)容了。

    8、寫(xiě)在最后

    如果本文內(nèi)容看完,還是有點(diǎn)懵,那怎么辦?

    可以繼續(xù)以下兩篇文章,它們應(yīng)該可以讓你內(nèi)力倍增:

    網(wǎng)絡(luò)編程懶人入門(mén)(一):快速理解網(wǎng)絡(luò)通信協(xié)議(上篇)

    網(wǎng)絡(luò)編程懶人入門(mén)(二):快速理解網(wǎng)絡(luò)通信協(xié)議(下篇)

    另外,關(guān)于計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議的分層和關(guān)系,可以看看下面兩圖:

     

    * 上述兩張圖的清晰原圖,請(qǐng)見(jiàn):《計(jì)算機(jī)網(wǎng)絡(luò)通訊協(xié)議關(guān)系圖(中文珍藏版)[附件下載]》。

    附錄:更多網(wǎng)絡(luò)編程基礎(chǔ)資料

    TCP/IP詳解 - 第11章·UDP:用戶(hù)數(shù)據(jù)報(bào)協(xié)議

    TCP/IP詳解 - 第17章·TCP:傳輸控制協(xié)議

    TCP/IP詳解 - 第18章·TCP連接的建立與終止

    TCP/IP詳解 - 第21章·TCP的超時(shí)與重傳

    技術(shù)往事:改變世界的TCP/IP協(xié)議(珍貴多圖、手機(jī)慎點(diǎn))

    通俗易懂-深入理解TCP協(xié)議(上):理論基礎(chǔ)

    通俗易懂-深入理解TCP協(xié)議(下):RTT、滑動(dòng)窗口、擁塞處理

    理論經(jīng)典:TCP協(xié)議的3次握手與4次揮手過(guò)程詳解

    理論聯(lián)系實(shí)際:Wireshark抓包分析TCP 3次握手、4次揮手過(guò)程

    計(jì)算機(jī)網(wǎng)絡(luò)通訊協(xié)議關(guān)系圖(中文珍藏版)

    UDP中一個(gè)包的大小最大能多大?

    P2P技術(shù)詳解(一):NAT詳解——詳細(xì)原理、P2P簡(jiǎn)介

    P2P技術(shù)詳解(二):P2P中的NAT穿越(打洞)方案詳解

    P2P技術(shù)詳解(三):P2P技術(shù)之STUN、TURN、ICE詳解

    通俗易懂:快速理解P2P技術(shù)中的NAT穿透原理

    高性能網(wǎng)絡(luò)編程(一):?jiǎn)闻_(tái)服務(wù)器并發(fā)TCP連接數(shù)到底可以有多少

    高性能網(wǎng)絡(luò)編程(二):上一個(gè)10年,著名的C10K并發(fā)連接問(wèn)題

    高性能網(wǎng)絡(luò)編程(三):下一個(gè)10年,是時(shí)候考慮C10M并發(fā)問(wèn)題了

    高性能網(wǎng)絡(luò)編程(四):從C10K到C10M高性能網(wǎng)絡(luò)應(yīng)用的理論探索

    高性能網(wǎng)絡(luò)編程(五):一文讀懂高性能網(wǎng)絡(luò)編程中的I/O模型

    高性能網(wǎng)絡(luò)編程(六):一文讀懂高性能網(wǎng)絡(luò)編程中的線程模型

    Java的BIO和NIO很難懂?用代碼實(shí)踐給你看,再不懂我轉(zhuǎn)行!

    不為人知的網(wǎng)絡(luò)編程(一):淺析TCP協(xié)議中的疑難雜癥(上篇)

    不為人知的網(wǎng)絡(luò)編程(二):淺析TCP協(xié)議中的疑難雜癥(下篇)

    不為人知的網(wǎng)絡(luò)編程(三):關(guān)閉TCP連接時(shí)為什么會(huì)TIME_WAIT、CLOSE_WAIT

    不為人知的網(wǎng)絡(luò)編程(四):深入研究分析TCP的異常關(guān)閉

    不為人知的網(wǎng)絡(luò)編程(五):UDP的連接性和負(fù)載均衡

    不為人知的網(wǎng)絡(luò)編程(六):深入地理解UDP協(xié)議并用好它

    不為人知的網(wǎng)絡(luò)編程(七):如何讓不可靠的UDP變的可靠?

    不為人知的網(wǎng)絡(luò)編程(八):從數(shù)據(jù)傳輸層深度解密HTTP

    不為人知的網(wǎng)絡(luò)編程(九):理論聯(lián)系實(shí)際,全方位深入理解DNS

    網(wǎng)絡(luò)編程懶人入門(mén)(一):快速理解網(wǎng)絡(luò)通信協(xié)議(上篇)

    網(wǎng)絡(luò)編程懶人入門(mén)(二):快速理解網(wǎng)絡(luò)通信協(xié)議(下篇)

    網(wǎng)絡(luò)編程懶人入門(mén)(三):快速理解TCP協(xié)議一篇就夠

    網(wǎng)絡(luò)編程懶人入門(mén)(四):快速理解TCP和UDP的差異

    網(wǎng)絡(luò)編程懶人入門(mén)(五):快速理解為什么說(shuō)UDP有時(shí)比TCP更有優(yōu)勢(shì)

    網(wǎng)絡(luò)編程懶人入門(mén)(六):史上最通俗的集線器、交換機(jī)、路由器功能原理入門(mén)

    網(wǎng)絡(luò)編程懶人入門(mén)(七):深入淺出,全面理解HTTP協(xié)議

    網(wǎng)絡(luò)編程懶人入門(mén)(八):手把手教你寫(xiě)基于TCP的Socket長(zhǎng)連接

    網(wǎng)絡(luò)編程懶人入門(mén)(九):通俗講解,有了IP地址,為何還要用MAC地址?

    網(wǎng)絡(luò)編程懶人入門(mén)(十):一泡尿的時(shí)間,快速讀懂QUIC協(xié)議

    技術(shù)掃盲:新一代基于UDP的低延時(shí)網(wǎng)絡(luò)傳輸層協(xié)議——QUIC詳解

    讓互聯(lián)網(wǎng)更快:新一代QUIC協(xié)議在騰訊的技術(shù)實(shí)踐分享

    現(xiàn)代移動(dòng)端網(wǎng)絡(luò)短連接的優(yōu)化手段總結(jié):請(qǐng)求速度、弱網(wǎng)適應(yīng)、安全保障

    聊聊iOS中網(wǎng)絡(luò)編程長(zhǎng)連接的那些事

    移動(dòng)端IM開(kāi)發(fā)者必讀(一):通俗易懂,理解移動(dòng)網(wǎng)絡(luò)的“弱”和“慢”

    移動(dòng)端IM開(kāi)發(fā)者必讀(二):史上最全移動(dòng)弱網(wǎng)絡(luò)優(yōu)化方法總結(jié)

    IPv6技術(shù)詳解:基本概念、應(yīng)用現(xiàn)狀、技術(shù)實(shí)踐(上篇)

    IPv6技術(shù)詳解:基本概念、應(yīng)用現(xiàn)狀、技術(shù)實(shí)踐(下篇)

    從HTTP/0.9到HTTP/2:一文讀懂HTTP協(xié)議的歷史演變和設(shè)計(jì)思路

    以網(wǎng)游服務(wù)端的網(wǎng)絡(luò)接入層設(shè)計(jì)為例,理解實(shí)時(shí)通信的技術(shù)挑戰(zhàn)

    邁向高階:優(yōu)秀Android程序員必知必會(huì)的網(wǎng)絡(luò)基礎(chǔ)

    全面了解移動(dòng)端DNS域名劫持等雜癥:技術(shù)原理、問(wèn)題根源、解決方案等

    美圖App的移動(dòng)端DNS優(yōu)化實(shí)踐:HTTPS請(qǐng)求耗時(shí)減小近半

    Android程序員必知必會(huì)的網(wǎng)絡(luò)通信傳輸層協(xié)議——UDP和TCP

    IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(mén)(一):通信交換技術(shù)的百年發(fā)展史(上)

    IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(mén)(二):通信交換技術(shù)的百年發(fā)展史(下)

    IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(mén)(三):國(guó)人通信方式的百年變遷

    IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(mén)(四):手機(jī)的演進(jìn),史上最全移動(dòng)終端發(fā)展史

    IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(mén)(五):1G到5G,30年移動(dòng)通信技術(shù)演進(jìn)史

    IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(mén)(六):移動(dòng)終端的接頭人——“基站”技術(shù)

    IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(mén)(七):移動(dòng)終端的千里馬——“電磁波”

    IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(mén)(八):零基礎(chǔ),史上最強(qiáng)“天線”原理掃盲

    IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(mén)(九):無(wú)線通信網(wǎng)絡(luò)的中樞——“核心網(wǎng)”

    IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(mén)(十):零基礎(chǔ),史上最強(qiáng)5G技術(shù)掃盲

    IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(mén)(十一):為什么WiFi信號(hào)差?一文即懂!

    IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(mén)(十二):上網(wǎng)卡頓?網(wǎng)絡(luò)掉線?一文即懂!

    IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(mén)(十三):為什么手機(jī)信號(hào)差?一文即懂!

    IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(mén)(十四):高鐵上無(wú)線上網(wǎng)有多難?一文即懂!

    IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(mén)(十五):理解定位技術(shù),一篇就夠

    百度APP移動(dòng)端網(wǎng)絡(luò)深度優(yōu)化實(shí)踐分享(一):DNS優(yōu)化篇

    百度APP移動(dòng)端網(wǎng)絡(luò)深度優(yōu)化實(shí)踐分享(二):網(wǎng)絡(luò)連接優(yōu)化篇

    百度APP移動(dòng)端網(wǎng)絡(luò)深度優(yōu)化實(shí)踐分享(三):移動(dòng)端弱網(wǎng)優(yōu)化篇

    技術(shù)大牛陳碩的分享:由淺入深,網(wǎng)絡(luò)編程學(xué)習(xí)經(jīng)驗(yàn)干貨總結(jié)

    可能會(huì)搞砸你的面試:你知道一個(gè)TCP連接上能發(fā)起多少個(gè)HTTP請(qǐng)求嗎?

    知乎技術(shù)分享:知乎千萬(wàn)級(jí)并發(fā)的高性能長(zhǎng)連接網(wǎng)關(guān)技術(shù)實(shí)踐

    >> 更多同類(lèi)文章 ……

    (本文同步發(fā)布于:http://www.52im.net/thread-2851-1-1.html



    作者:Jack Jiang (點(diǎn)擊作者姓名進(jìn)入Github)
    出處:http://www.52im.net/space-uid-1.html
    交流:歡迎加入即時(shí)通訊開(kāi)發(fā)交流群 215891622
    討論:http://www.52im.net/
    Jack Jiang同時(shí)是【原創(chuàng)Java Swing外觀工程BeautyEye】【輕量級(jí)移動(dòng)端即時(shí)通訊框架MobileIMSDK】的作者,可前往下載交流。
    本博文 歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明出處(也可前往 我的52im.net 找到我)。


    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    Jack Jiang的 Mail: jb2011@163.com, 聯(lián)系QQ: 413980957, 微信: hellojackjiang
    主站蜘蛛池模板: 婷婷久久久亚洲欧洲日产国码AV| 亚洲AV无码男人的天堂| 色播在线永久免费视频网站| 免费jlzzjlzz在线播放视频| 久久亚洲国产成人影院| 成人午夜免费福利视频| 亚洲精品无码久久久久久久| 一级毛片成人免费看免费不卡 | 亚洲精品高清国产麻豆专区| 国产免费拔擦拔擦8X高清在线人 | 免费在线观看的网站| 日本亚洲免费无线码| 成人免费无码大片A毛片抽搐色欲| 亚洲区视频在线观看| 亚洲人成免费电影| 亚洲人成激情在线播放| 成人午夜大片免费7777| 日韩欧美亚洲国产精品字幕久久久| 夜夜嘿视频免费看| 青青免费在线视频| 亚洲无线码在线一区观看| 免费人成网站在线观看不卡| 亚洲精品在线免费看| AV免费网址在线观看| 又黄又大的激情视频在线观看免费视频社区在线 | 久久亚洲AV成人无码国产最大| 又大又黄又粗又爽的免费视频| 一个人免费观看日本www视频| 亚洲欧洲日产国码无码网站| 四虎成人精品永久免费AV| 亚洲综合丁香婷婷六月香| 日本免费电影一区| 中文字幕版免费电影网站| 久久亚洲AV成人无码国产| 波多野结衣久久高清免费| 国产激情久久久久影院老熟女免费 | 国产成人3p视频免费观看| 久久大香香蕉国产免费网站| 亚洲一区二区观看播放| 亚洲愉拍99热成人精品热久久| 国产精品爱啪在线线免费观看|