flag push tcp 作用_TCP/IP协议到底在讲什么?
題主,你之所以不知道那套書(shū)在講什么,是因?yàn)槟氵€沒(méi)有認(rèn)識(shí)到網(wǎng)絡(luò)協(xié)議有什么用,怎么用,以什么形式在使用,網(wǎng)絡(luò)協(xié)議的概念很簡(jiǎn)單,就幾句話,你只知道網(wǎng)絡(luò)協(xié)議的概念,只知道很多大神都推薦這套書(shū),都強(qiáng)調(diào)網(wǎng)絡(luò)協(xié)議的重要性,于是你就去找了這本書(shū),然后看著書(shū)上的每個(gè)字你認(rèn)得,串在一起就不知道在講什么!那是因?yàn)榫W(wǎng)絡(luò)協(xié)議本來(lái)就很抽象,你要把抽象的網(wǎng)絡(luò)協(xié)議形象化才能更好的理解,最好是先理解具體的網(wǎng)絡(luò)協(xié)議是起什么作用,然后再學(xué)習(xí)它的工作過(guò)程。
你把網(wǎng)絡(luò)協(xié)議想象成人與人之間的禮儀行為,不同的場(chǎng)合有不同的禮儀行為,人是實(shí)施不同禮儀行為的主體。同樣,網(wǎng)絡(luò)設(shè)備是實(shí)施網(wǎng)絡(luò)協(xié)議的主體,網(wǎng)絡(luò)設(shè)備通過(guò)運(yùn)行網(wǎng)絡(luò)協(xié)議與其他的網(wǎng)絡(luò)設(shè)備進(jìn)行交流。同樣的道理,你的電腦想要與網(wǎng)絡(luò)設(shè)備交流,也要與網(wǎng)絡(luò)設(shè)備一樣運(yùn)行網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)協(xié)議也是一個(gè)軟件,是以系統(tǒng)組件的方式安裝在你的電腦的操作系統(tǒng)里的。想象一下,你想在你的電腦上通過(guò)QQ與朋友聊天的前提是不是你的電腦和朋友的電腦上都安裝有QQ這個(gè)軟件?
我一直覺(jué)得對(duì)于計(jì)算機(jī)網(wǎng)絡(luò)初學(xué)者來(lái)說(shuō),知道“為什么這么做”比“知道怎么做”更重要,雖然經(jīng)歷知道“為什么這么做?”的過(guò)程很痛苦,但一旦過(guò)了這個(gè)階段,“知道怎么做”也就水到渠成了。但是對(duì)于初學(xué)者來(lái)說(shuō),真沒(méi)必要那么深入地學(xué)習(xí)網(wǎng)絡(luò)協(xié)議的細(xì)節(jié),你只需要理解常見(jiàn)協(xié)議(例如HTTP、FTP、DHCP、DNS、ARP等常見(jiàn)協(xié)議)的工作過(guò)程,你理解了這些協(xié)議,理解其他的協(xié)議就是依葫蘆畫(huà)瓢,雖然計(jì)算機(jī)網(wǎng)絡(luò)很講究知識(shí)的積累,但如果你一開(kāi)始把太多的精力放在了解細(xì)節(jié)上就會(huì)陷進(jìn)只見(jiàn)樹(shù)木不進(jìn)森林的境地。
例如,數(shù)據(jù)包的結(jié)構(gòu),瀏覽一下各字段的作用就可以了,能記住就記住,記不住也沒(méi)關(guān)系,你只需要先重點(diǎn)理解ip頭部里的目的地址、源地址和tcp頭部里的目的端口號(hào)、源端口號(hào)。
在日常生活中,我們要傳遞信息,以前最常用的手段是郵寄信件,想象一下你寫(xiě)信寄信的過(guò)程,寫(xiě)信產(chǎn)生數(shù)據(jù),寄信傳遞數(shù)據(jù),標(biāo)準(zhǔn)的信件格式是要在信封上寫(xiě)“收信人地址”和“寄信人地址”(由此引入IP地址),“收信人地址”對(duì)應(yīng)數(shù)據(jù)包里IP頭部中的“目的ip地址”,“寄信人地址”對(duì)應(yīng)數(shù)據(jù)包里IP頭部中的“源ip地址”,寫(xiě)上寄信、收信兩個(gè)地址就可以保證信件可以郵寄到目的地了。
但信件郵寄到目的地址后由誰(shuí)來(lái)收?從上面這封信的收件人地址檢索到這個(gè)地址是“沈陽(yáng)大學(xué)”的,沈陽(yáng)大學(xué)里可能住著幾萬(wàn)人,那你這封信是郵寄給居住沈陽(yáng)大學(xué)里的那個(gè)人的?收件人不明確,郵局就算幫你把信件送到這個(gè)地址,也沒(méi)辦法幫你投遞到具體的收信人。
因此,我們郵件信件需要填寫(xiě)“收件人姓名”、“收件人地址”和“寄件人姓名”、“寄件人地址”的組合,這樣才能保證信件能準(zhǔn)確投遞到具體的收件人手中。
所以我們要在信件上添加收信人姓名和寄信人姓名(由此引入端口號(hào)),這個(gè)時(shí)候收件人姓名就對(duì)應(yīng)數(shù)據(jù)包里TCP協(xié)議頭部中的目的端口號(hào),寄信人姓名對(duì)應(yīng)數(shù)據(jù)包里TCP協(xié)議頭部中的源端口號(hào)。
我們?cè)賮?lái)對(duì)比傳遞信件與傳遞數(shù)據(jù)包的過(guò)程:
1.首先是位于南寧的李小明給沈陽(yáng)的王小花通過(guò)QQ發(fā)送了一條消息,李小明的電腦將此消息打包成TCP數(shù)據(jù)包發(fā)送到計(jì)算機(jī)網(wǎng)絡(luò)中,計(jì)算機(jī)網(wǎng)絡(luò)通過(guò)數(shù)據(jù)包中的目的IP地址把該數(shù)據(jù)包準(zhǔn)確傳遞到王小花的電腦。
2.王小花的電腦收到了李小明的電腦發(fā)送過(guò)來(lái)的數(shù)據(jù)包,但是王小花的電腦上同時(shí)運(yùn)行有多個(gè)程序(例如圖中的QQ和微信),雖然王小花的電腦知道這個(gè)數(shù)據(jù)包是傳輸給它的,但是它不知道該把這個(gè)數(shù)據(jù)包中的數(shù)據(jù)交給那個(gè)程序(就像上面講的,信件雖然郵寄到了沈陽(yáng)大學(xué),但沈陽(yáng)大學(xué)里住著那么多人,這封信上沒(méi)有標(biāo)示說(shuō)是郵寄給誰(shuí)的)。
3.針對(duì)以上的問(wèn)題。如果我們使用數(shù)據(jù)包結(jié)構(gòu)中的源端口號(hào)和目的端口號(hào),根據(jù)不同的程序使用不同的端口號(hào)來(lái)發(fā)送和接受數(shù)據(jù),這樣數(shù)據(jù)包就能像郵寄信件一樣準(zhǔn)確投遞到具體的電腦上指定的程序了。例如我們指定QQ和微信使用的端口號(hào)分別是8000和8080,那么只要你的電腦接收的數(shù)據(jù)包里目的端口號(hào)是8000,那這個(gè)數(shù)據(jù)包就是傳輸給QQ的。
由上面的例子我們還可以引申出數(shù)據(jù)包結(jié)構(gòu)中的其他字段的作用,例如我們收到信后可以簡(jiǎn)單地通過(guò)信封是否完整來(lái)檢查該信件是否被別人在傳輸途中拆開(kāi)并篡改過(guò)信件內(nèi)容,那么我們?cè)趺幢WC我們收到的數(shù)據(jù)包里的數(shù)據(jù)有沒(méi)有在中途被別人拆開(kāi)修改過(guò)呢?數(shù)據(jù)包結(jié)構(gòu)中有一個(gè)字段叫TCP校驗(yàn)和就是專門做這個(gè)工作的。由數(shù)據(jù)包的字段可以看出,很多字段都有其用處,只是我們一開(kāi)始學(xué)的時(shí)候沒(méi)必要學(xué)的那么仔細(xì)而已。
一定要形象地理解數(shù)據(jù)包,簡(jiǎn)單的想一下,計(jì)算機(jī)網(wǎng)絡(luò)不就是幫助我們傳遞信息的嗎?對(duì)于郵寄信件來(lái)說(shuō),信息的載體是信紙和信封,那計(jì)算機(jī)網(wǎng)絡(luò)中信息的載體是什么?就是各種類型的數(shù)據(jù)包啊! 數(shù)據(jù)包里有我們關(guān)心的信息,也有我們不關(guān)心的花銷,我們要學(xué)的就是如何使網(wǎng)絡(luò)按照我們的要求傳遞信息。例如,我們郵寄信件,有平信,有掛號(hào)信,根據(jù)不同的應(yīng)用場(chǎng)景選擇不同的郵寄方式。計(jì)算機(jī)網(wǎng)絡(luò)里信息傳輸也是一樣,針對(duì)不同的場(chǎng)景使用不同的協(xié)議, 有些場(chǎng)景需要多種協(xié)議同時(shí)配合使用。
上面那個(gè)QQ的例子不太嚴(yán)謹(jǐn),因?yàn)镼Q和微信的信息都是通過(guò)騰訊服務(wù)器中轉(zhuǎn)的,但你是初學(xué)者沒(méi)必要一開(kāi)始就深究這些細(xì)節(jié),總之要學(xué)會(huì)把一切抽象的東西都對(duì)照生活中的一些場(chǎng)景使之形象化。這樣你的學(xué)習(xí)過(guò)程就不會(huì)那么枯燥乏味了。
再來(lái)看一下為什么需要網(wǎng)絡(luò)協(xié)議,我們看下圖的簡(jiǎn)單類比:
從上圖可以看出,我們郵寄信件只是想要把我們寫(xiě)在信紙信息傳遞出去,對(duì)于我們來(lái)說(shuō),郵寄信件需要購(gòu)買信封和郵票,這對(duì)于我們來(lái)說(shuō)是沒(méi)有意義的,甚至我們會(huì)覺(jué)得連信紙都是多余的,因?yàn)檫€要購(gòu)買信紙,我們只是想傳遞信息而已,信封、郵票和信紙對(duì)于我們來(lái)說(shuō)是傳遞信息的額外花銷,但是沒(méi)有這些花銷,你的信息就無(wú)法通過(guò)郵局傳遞。同理,在計(jì)算機(jī)網(wǎng)絡(luò)里也是一樣的,我們的通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)傳遞信息也需要額外的花銷,這些花銷體現(xiàn)在計(jì)算機(jī)網(wǎng)絡(luò)里就是TCP/IP的各種協(xié)議數(shù)據(jù)包的頭部(除去應(yīng)用層數(shù)據(jù)之外的其他信息)。
你要知道計(jì)算機(jī)網(wǎng)絡(luò)里的數(shù)據(jù)交換都是像我們?nèi)粘`]寄信件一樣通過(guò)各種的數(shù)據(jù)包來(lái)傳遞的,理解了數(shù)據(jù)包的作用之后你就應(yīng)該開(kāi)始學(xué)習(xí)計(jì)算機(jī)網(wǎng)絡(luò)是如何把數(shù)據(jù)包傳輸?shù)侥康牡氐?#xff1f;例如我們的電腦在生成數(shù)據(jù)包時(shí)是怎么知道對(duì)方電腦的ip地址的,(由此引入DNS)?我們的信件是最開(kāi)始是通過(guò)郵局幫我們郵寄的,那么我們的電腦的數(shù)據(jù)包應(yīng)該由誰(shuí)來(lái)幫我們傳輸呢?(由此引入網(wǎng)關(guān)),網(wǎng)關(guān)又是如何幫我們把數(shù)據(jù)包傳輸?shù)侥康牡氐?#xff1f;(由此引入各種路由協(xié)議)。
所以,你想要學(xué)習(xí)網(wǎng)絡(luò)協(xié)議,就要先把一些基本的協(xié)議的作用和工作過(guò)程搞清楚,網(wǎng)絡(luò)設(shè)備還沒(méi)智能到人腦的程度,它是由人類創(chuàng)造出來(lái)的,它的工作過(guò)程肯定是符合人類的交流習(xí)慣,按照人類的交流習(xí)慣來(lái)設(shè)計(jì)的。所以要以人類的思維方式去理解這些協(xié)議。例如,你給別人打電話,不可能電話一接通你就啪啦啪啦地說(shuō)一大通,萬(wàn)一對(duì)方接通電話后因?yàn)橛惺逻€沒(méi)來(lái)得及傾聽(tīng)呢?這不太符合正常人類的交流習(xí)慣。一般是電話接通后,雙方一般會(huì)有個(gè)交互的過(guò)程,一般是你說(shuō)一聲“你好”,然后對(duì)方也回復(fù)一聲“你好”,雙方通過(guò)各自一句“你好”明確對(duì)方的注意力都放在了電話溝通上,然后你們雙方就可以開(kāi)始交流了,這才是正常的人類交流方式,這個(gè)過(guò)程體現(xiàn)在計(jì)算機(jī)網(wǎng)絡(luò)里就是網(wǎng)絡(luò)協(xié)議!我們通過(guò)TCP協(xié)議在兩臺(tái)電腦建立網(wǎng)絡(luò)連接之前要先發(fā)數(shù)據(jù)包進(jìn)行溝通,溝通后再建立連接,然后才是信息的傳輸。而UDP協(xié)議就類似于我們的校園廣播,廣播內(nèi)容已經(jīng)通過(guò)廣播站播放出去了,你能不能聽(tīng)到,那就與廣播站無(wú)關(guān)了,正常情況下,不可能你說(shuō)沒(méi)注意聽(tīng)然后再讓廣播站再播放一次廣播內(nèi)容。
同理,我們來(lái)看一下網(wǎng)絡(luò)廣播,對(duì)于某一個(gè)網(wǎng)絡(luò)的網(wǎng)絡(luò)廣播,只要發(fā)送一個(gè)網(wǎng)絡(luò)廣播包,這個(gè)子網(wǎng)里的所有電腦都能收到這些廣播包,這是一個(gè)很方便的通知機(jī)制,但是會(huì)增加對(duì)廣播數(shù)據(jù)不感興趣主機(jī)的處理負(fù)荷。類似我們的校園廣播,校園廣播一開(kāi)啟播放,校園里的所有人都能聽(tīng)到,但是不是所有人都對(duì)廣播內(nèi)容感興趣,有些人選擇傾聽(tīng),有些人選擇忽略。但不管你是傾聽(tīng)還是忽略,廣播的聲音都會(huì)傳到你的耳邊。例如,校園廣播一條失物招領(lǐng)通知,你根本沒(méi)丟東西,所以這個(gè)廣播內(nèi)容與你無(wú)關(guān),但是廣播的聲音還是會(huì)傳到你的耳邊。對(duì)比廣場(chǎng)舞音樂(lè),對(duì)于跳廣場(chǎng)舞的大媽大嬸來(lái)說(shuō),這就是音樂(lè),對(duì)于想睡覺(jué)的你來(lái)說(shuō),這就是噪音。知道什么叫網(wǎng)絡(luò)廣播風(fēng)暴嗎?如果你在晚上八九點(diǎn)去過(guò)你們當(dāng)?shù)氐膹V場(chǎng),你就會(huì)有深刻的理解,廣播上被劃分了若干個(gè)區(qū)域,每個(gè)區(qū)域都有幾個(gè)高分貝的立體聲喇叭,“我從草原來(lái)。。。”等各種廣場(chǎng)舞音樂(lè)不斷襲來(lái),整個(gè)廣場(chǎng)上空像打雷一樣,你從邊上走過(guò)都覺(jué)得頭疼,更不用說(shuō)在廣場(chǎng)里卿卿我我談情說(shuō)愛(ài)。
怎樣才能更好地理解常見(jiàn)的網(wǎng)絡(luò)協(xié)議?學(xué)習(xí)網(wǎng)絡(luò)協(xié)議就是要先學(xué)習(xí)它的工作過(guò)程,例如DHCP協(xié)議,協(xié)議大概是這樣講的:啟用了DHCP協(xié)議的電腦啟動(dòng)后便會(huì)發(fā)送廣播數(shù)據(jù)包網(wǎng)絡(luò)中尋找DHCP服務(wù)器,如果網(wǎng)絡(luò)中有DHCP服務(wù)器,這臺(tái)DHCP服務(wù)器便會(huì)發(fā)送廣播數(shù)據(jù)包與你的電腦進(jìn)行響應(yīng)。
這個(gè)過(guò)程很簡(jiǎn)單,就是我想要獲取ip地址,然后你給我提供一個(gè)。想象一下如果你是DHCP協(xié)議的設(shè)計(jì)者,你會(huì)考慮到在ip獲取和分配過(guò)程中會(huì)有哪些特殊情況呢?
第一種,如果在你啟動(dòng)電腦的過(guò)程中網(wǎng)絡(luò)中的dhcp服務(wù)器剛好宕機(jī)了,這時(shí)怎么辦?讓你的電腦一直徒勞地發(fā)送尋找DHCP服務(wù)器的廣播包嗎?還是在發(fā)現(xiàn)沒(méi)有DHCP服務(wù)器與你響應(yīng)后就再也不發(fā)了?還是每隔一段時(shí)間就再發(fā)送一次尋找DHCP服務(wù)器的廣播包?
第二種,如果DHCP服務(wù)器的可用ip地址剛好已經(jīng)分配完了,那又怎么處理?
第三種,如果網(wǎng)絡(luò)中同時(shí)有兩臺(tái)以上的DHCP服務(wù)器,那又該怎么處理?
第四種,對(duì)于已經(jīng)分配出去的ip地址就這么一直保持分配出去的狀態(tài)嗎?還是要回收?如果要回收?是我去問(wèn)你還要不要使用這個(gè)ip地址?還是我設(shè)定一個(gè)回收的時(shí)間?只要你在這個(gè)時(shí)間段內(nèi)你沒(méi)有再次聯(lián)系我重新獲取這個(gè)ip地址我就把它回收?等等。。。
通過(guò)這樣的思考你可以發(fā)現(xiàn),網(wǎng)絡(luò)協(xié)議其實(shí)也是按照人的思維方式在工作,但是網(wǎng)絡(luò)設(shè)備不會(huì)像人一樣思考,所以我們當(dāng)初給它設(shè)計(jì)各種協(xié)議的時(shí)候就要盡可能地為它想到這些協(xié)議所要應(yīng)對(duì)的場(chǎng)景。例如,你可以先學(xué)習(xí)ARP協(xié)議的工作過(guò)程,然后再百度搜索ARP攻擊是怎么回事?就是利用ARP協(xié)議設(shè)計(jì)的不嚴(yán)謹(jǐn),偽造ARP數(shù)據(jù)包篡改網(wǎng)絡(luò)里其他電腦的ARP緩存列表。ARP協(xié)議采用廣播發(fā)送協(xié)議數(shù)據(jù)包,這就導(dǎo)致里網(wǎng)絡(luò)里的每一臺(tái)電腦都會(huì)收到ARP的協(xié)議數(shù)據(jù)包,而ARP協(xié)議規(guī)定即使你的電腦沒(méi)有發(fā)出arp請(qǐng)求,只要有ARP回應(yīng)包到達(dá)你的主機(jī),你就要對(duì)這些協(xié)議包進(jìn)行處理,并將回應(yīng)包中的mac和ip對(duì)應(yīng)關(guān)系放入自己的arp緩存。如果ARP回應(yīng)包里面的網(wǎng)關(guān)IP與ARP對(duì)應(yīng)關(guān)系是正確的,這個(gè)問(wèn)題不大,但如果有人在網(wǎng)絡(luò)中偽造了錯(cuò)誤的網(wǎng)關(guān)IP與ARP對(duì)應(yīng)關(guān)系并廣播到網(wǎng)絡(luò)里,那就出問(wèn)題了,你可能也意識(shí)到你上不了網(wǎng)是因?yàn)榫W(wǎng)關(guān)IP對(duì)應(yīng)的ARP對(duì)應(yīng)關(guān)系出錯(cuò),但是沒(méi)有辦法,因?yàn)槟愕碾娔X上運(yùn)行的ARP協(xié)議規(guī)定,你的電腦必須要接受這個(gè)錯(cuò)誤的對(duì)應(yīng)關(guān)系,這就是網(wǎng)絡(luò)協(xié)議設(shè)計(jì)的不嚴(yán)謹(jǐn),設(shè)計(jì)和實(shí)現(xiàn)ARP協(xié)議的時(shí)候沒(méi)有想到居然會(huì)有人在網(wǎng)絡(luò)中偽造ARP回應(yīng)包并廣播到網(wǎng)絡(luò)中。
如果你看《TCP/IP詳解》這套書(shū)覺(jué)得很吃力,那就建議暫時(shí)不要看了,強(qiáng)烈建議你先看《計(jì)算機(jī)網(wǎng)絡(luò)自頂向下方法與Internet特色》這本書(shū),這本書(shū)對(duì)常見(jiàn)的網(wǎng)絡(luò)協(xié)議的工作過(guò)程進(jìn)行了分析,可讀性很強(qiáng),看起來(lái)比《TCP/IP詳解》輕松多了,了解了常見(jiàn)協(xié)議的工作過(guò)程你就可以動(dòng)手做實(shí)驗(yàn)來(lái)驗(yàn)證這個(gè)協(xié)議的工作過(guò)程了,建議先使用模擬器來(lái)做實(shí)驗(yàn),像cisco packet tracer 就很好用,它有個(gè)模擬功能可以像看動(dòng)畫(huà)一樣看到網(wǎng)絡(luò)數(shù)據(jù)包是如何在網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)中傳輸和交互的,對(duì)了解協(xié)議的工作過(guò)程非常有用,還有抓取數(shù)據(jù)包的功能,可以抓去指定協(xié)議的數(shù)據(jù)包進(jìn)行查看。
使用真實(shí)設(shè)備通過(guò)在電腦上安裝抓包工具進(jìn)行抓包也可以,只不過(guò)沒(méi)有模擬器上看得那么直觀,對(duì)于初學(xué)者還是建議先以模擬器做實(shí)驗(yàn)為主,因?yàn)槟憧梢院苤庇^地觀察你所設(shè)計(jì)的網(wǎng)絡(luò)的運(yùn)行情況,更容易把心放在學(xué)習(xí)網(wǎng)絡(luò)協(xié)議的工作過(guò)程上。
你提問(wèn)的是“TCP/IP協(xié)議到底在講什么?”,你可能不太了解,TCP/IP協(xié)議是一個(gè)協(xié)議族,是一大堆網(wǎng)絡(luò)協(xié)議的集合,你看的那套書(shū)有三卷,每一卷都是很厚的,就算其他大神能幫你用通俗易懂的文字表達(dá)出來(lái),我估計(jì)這個(gè)帖子打印出來(lái)也不會(huì)比那本書(shū)薄很多,還是先從簡(jiǎn)單的學(xué)起吧!
總結(jié)
以上是生活随笔為你收集整理的flag push tcp 作用_TCP/IP协议到底在讲什么?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: RTX3060还剩一周发布RTX3060
- 下一篇: 鸿蒙的跨屏协同鸿蒙系统跨屏