一 互聯(lián)技術(shù)
雖然作為程序員來講不必過多的去了解網(wǎng)絡(luò)互聯(lián)的相關(guān)技術(shù)拆内,但是目前互聯(lián)網(wǎng)已經(jīng)轉(zhuǎn)向了物聯(lián)網(wǎng)時(shí)代婿脸,從剛開始的軟件+網(wǎng)絡(luò)点把,成為今天的硬件+軟件+網(wǎng)絡(luò)的模式(即物聯(lián)網(wǎng))
智能家居, 人工智能的實(shí)現(xiàn)模式也是典型的物聯(lián)網(wǎng)產(chǎn)物。因此有網(wǎng)絡(luò)基礎(chǔ)對成為一個(gè)高級軟件架構(gòu)師有著無比輕重的作用谷醉,因此接下來幾篇文章我會(huì)給大家復(fù)習(xí)下網(wǎng)絡(luò)相關(guān)的知識(shí)炊琉,
目前主流的互聯(lián)技術(shù)包括小規(guī)模的主機(jī)互聯(lián)(局域網(wǎng))和大規(guī)模的主機(jī)互聯(lián)(廣域網(wǎng))弃甥。
主機(jī)互聯(lián)一般基于的通信模式有一對一通信(雙方)和多對多通信(多方)由以下兩種通信方式颤难。
雙方通信
–雙方信息打包后放到通信線路上發(fā)送神年,就能到達(dá)對方已维。
–在通信線路上只有兩方行嗤,所收到的信息必然是對方發(fā)過來給我的。
多方通信
只將信息打包后就放到通信線路上去發(fā)送垛耳,那么就無法知道到是從哪兒發(fā)來的然后到底底是發(fā)給誰的信息栅屏。
因此,我們需要給每一個(gè)通信終端都編一個(gè)號(hào)堂鲜,也就是IP地址(IP地址)栈雳。
雖然程序員和硬件扯不上太大的關(guān)系,但是我們還是要知道早期的局域網(wǎng)是同過雙絞線和同軸電纜當(dāng)作通信介質(zhì)缔莲,但是由于介質(zhì)的損耗和帶寬問題哥纫,目前已采用光纖通信,
采用光速痴奏,不僅提高了傳輸速率蛀骇,而且減少了損耗。以下兩種介質(zhì)的對比读拆。
二 網(wǎng)絡(luò)基礎(chǔ)
在大致了解網(wǎng)絡(luò)通信前擅憔,我們必須了解幾個(gè)概念,IP地址檐晕,MAC地址暑诸,路由表,TCP/UDP協(xié)議辟灰,和網(wǎng)絡(luò)層次模型
OSI 七層模型
計(jì)算機(jī)網(wǎng)絡(luò)通信制定的一個(gè)7層框架个榕,協(xié)議的七層框架,稱為:“OSI/RM"芥喇。OSI模型分為七層西采,依次從底層到上層為,物理層乃坤,數(shù)據(jù)鏈路層苛让,傳輸層,會(huì)話層湿诊,表示層狱杰,應(yīng)用層。每個(gè)層此又為上層提供服務(wù)厅须,說
TCP/IP 四層模型
TCP/IP通訊協(xié)議采用了4層的層級結(jié)構(gòu)仿畸,分別為:
- 應(yīng)用層:應(yīng)用程序間溝通的層,如簡單電子郵件傳輸(SMTP)、文件傳輸協(xié)議(FTP)错沽、網(wǎng)絡(luò)遠(yuǎn)程訪問協(xié)議(Telnet)等簿晓。
- 傳輸層:它提供了節(jié)點(diǎn)間的數(shù)據(jù)傳送服務(wù),如傳輸控制協(xié)議(TCP)千埃、用戶數(shù)據(jù)報(bào)協(xié)議(UDP)等憔儿,TCP和UDP給數(shù)據(jù)包加入傳輸數(shù)據(jù)并把它傳輸?shù)较乱粚又校@一層負(fù)責(zé)傳送數(shù)據(jù)放可,并且確定數(shù)據(jù)已被送達(dá)并接收谒臼。
- 互連網(wǎng)絡(luò)層:負(fù)責(zé)提供基本的數(shù)據(jù)封包傳送功能,讓每一塊數(shù)據(jù)包都能夠到達(dá)目的主機(jī)(但不檢查是否被正確接收)耀里,如網(wǎng)際協(xié)議(IP)蜈缤。
- 網(wǎng)絡(luò)接口層:對實(shí)際的網(wǎng)絡(luò)媒體的管理,定義如何使用實(shí)際網(wǎng)絡(luò)(如Ethernet冯挎、Serial Line等)來傳送數(shù)據(jù)底哥。
兩種層次模型的對比圖.
其具體功能前我用現(xiàn)實(shí)中的硬件設(shè)備來對比一下.
物理層:網(wǎng)卡,網(wǎng)線房官,集線器趾徽,中繼器,調(diào)制解調(diào)器
數(shù)據(jù)鏈路層:網(wǎng)橋易阳,交換機(jī)
網(wǎng)絡(luò)層:路由器
網(wǎng)關(guān):工作在第四層傳輸層及其以上附较。
對于稍微有網(wǎng)絡(luò)基礎(chǔ)的開發(fā)人員來說這些名詞不會(huì)太陌生.到這問題又來了什么是網(wǎng)橋,什么是中繼器潦俺?中繼器
中繼器是局域網(wǎng)環(huán)境下用來延長網(wǎng)絡(luò)距離的最簡單最廉價(jià)的網(wǎng)絡(luò)互聯(lián)設(shè)備拒课,操作在OSI的物理層,中繼器對在線路上的信號(hào)具有放大再生的功能事示,用于擴(kuò)展局域網(wǎng)網(wǎng)段的長度(僅用于連接相同的局域網(wǎng)網(wǎng)段)早像。
中繼器(RP repeater)是連接網(wǎng)絡(luò)線路的一種裝置,常用于兩個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)之間物理信號(hào)的雙向轉(zhuǎn)發(fā)工作肖爵。中繼器主要完成物理層的功能卢鹦,負(fù)責(zé)在兩個(gè)節(jié)點(diǎn)的物理層上按位傳遞信息,完成信號(hào)的復(fù)制劝堪、調(diào)整和放大功能冀自,以此來延長網(wǎng)絡(luò)的長度。
也就說類似生活中變電的變壓器功能秒啦。網(wǎng)橋
網(wǎng)橋不是真實(shí)的物質(zhì)東西熬粗,而是一個(gè)作用域的代名詞,網(wǎng)橋(Bridge)像一個(gè)聰明的中繼器余境。中繼器從一個(gè)網(wǎng)絡(luò)電纜里接收信號(hào)驻呐, 放大它們灌诅,將其送入下一個(gè)電纜。相比較而言含末,網(wǎng)橋?qū)年P(guān)卡上傳下來的信息更敏銳一些猜拾。網(wǎng)橋是一種對幀進(jìn)行轉(zhuǎn)發(fā)的技術(shù),根據(jù)MAC分區(qū)塊佣盒,可隔離碰撞挎袜。網(wǎng)橋?qū)⒕W(wǎng)絡(luò)的多個(gè)網(wǎng)段在數(shù)據(jù)鏈路層連接起來。
網(wǎng)橋也叫橋接器沼撕,是連接兩個(gè)局域網(wǎng)的一種存儲(chǔ)/轉(zhuǎn)發(fā)設(shè)備宋雏,它能將一個(gè)大的LAN分割為多個(gè)網(wǎng)段,或?qū)蓚€(gè)以上的LAN互聯(lián)為一個(gè)邏輯LAN务豺,使LAN上的所有用戶都可訪問服務(wù)器交換機(jī)
交換機(jī)就是用來進(jìn)行報(bào)文交換的機(jī)器。多為鏈路層設(shè)備(二層交換機(jī))嗦明,能夠進(jìn)行地址學(xué)習(xí)笼沥,采用存儲(chǔ)轉(zhuǎn)發(fā)的形式來交換報(bào)文.。路由器
路由器用來連通不同的網(wǎng)絡(luò)娶牌,另一個(gè)作用是選擇信息和分發(fā)傳送的線路功能奔浅。選擇通暢快捷的近路,能大大提高通信速度诗良,減輕網(wǎng)絡(luò)系統(tǒng)通信負(fù)荷汹桦,節(jié)約網(wǎng)絡(luò)系統(tǒng)資源,提高網(wǎng)絡(luò)系統(tǒng)暢通率鉴裹。
具有多個(gè)接口舞骆,用于連接多個(gè)IP子網(wǎng)及多種鏈路,并實(shí)現(xiàn)其互聯(lián)互通的網(wǎng)絡(luò)設(shè)備径荔。工作在OSI第三層督禽,其主要工作任務(wù)是在網(wǎng)絡(luò)中轉(zhuǎn)發(fā)IP數(shù)據(jù)包
3 MAC地址
Mac地址即設(shè)備物理地址,他類似人類的身份證总处,每個(gè)人出生就開始編制了號(hào)碼狈惫,其互聯(lián)網(wǎng)設(shè)備出廠也會(huì)標(biāo)志唯一的mac地址,物理地址由IEEE統(tǒng)一指定和分配鹦马,比如聯(lián)想和惠普就有不同的區(qū)段范圍的mac地址胧谈,其原理和規(guī)則是: MAC統(tǒng)一編址,MAC地址長6個(gè)字節(jié)(48位)荸频,全球唯一菱肖。前24為OUI,由IEEE分配給各網(wǎng)絡(luò)廠家试溯。后24位為EUI蔑滓,由廠家自行分配。
4 路由表
又稱全局路由表,存儲(chǔ)在路由器的內(nèi)存中键袱,用于指示路由器發(fā)送IP數(shù)據(jù)包轉(zhuǎn)發(fā)至正確目的地的信息表燎窘。列如,生活中我們?nèi)コ嘶疖囂憧В覀冎魂P(guān)心目的城市褐健,從上車之前我們并不知道其最近路線,二路由器就里面就保存著我們下一站的信息澜汤,火車沒到一個(gè)站蚜迅,都要經(jīng)過鐵路公司的統(tǒng)一安排開始進(jìn)入對應(yīng)的股道,而路由器就是鐵路中的小樞紐站一樣俊抵。
5 TCP/IP
上面提到Tcp /IP是一種互聯(lián)網(wǎng)通信協(xié)議谁不,它包括四層模型,各自進(jìn)行自己的職責(zé)徽诲。TCP/IP 定義了電子設(shè)備如何連入因特網(wǎng)刹帕,以及數(shù)據(jù)如何在它們之間傳輸?shù)臉?biāo)準(zhǔn)。協(xié)議采用了4層的層級結(jié)構(gòu)谎替,每一層都呼叫它的下一層所提供的協(xié)議來完成自己的需求偷溺。通俗而言:TCP負(fù)責(zé)發(fā)現(xiàn)傳輸?shù)膯栴},一有問題就發(fā)出信號(hào)钱贯,要求重新傳輸挫掏,直到所有數(shù)據(jù)安全正確地傳輸?shù)侥康牡?/p>
IP
IP層接收由更低層(網(wǎng)絡(luò)接口層例如以太網(wǎng)設(shè)備驅(qū)動(dòng)程序)發(fā)來的數(shù)據(jù)包,并把該數(shù)據(jù)包發(fā)送到更高層---TCP或UDP層秩命;相反尉共,IP層也把從TCP或UDP層接收來的數(shù)據(jù)包傳送到更低層。IP數(shù)據(jù)包是不可靠的硫麻,因?yàn)镮P并沒有做任何事情來確認(rèn)數(shù)據(jù)包是否按順序發(fā)送的或者有沒有被破壞爸邢,IP數(shù)據(jù)包中含有發(fā)送它的主機(jī)的地址(源地址)和接收它的主機(jī)的地址(目的地址)。
高層的TCP和UDP服務(wù)在接收數(shù)據(jù)包時(shí)拿愧,通常假設(shè)包中的源地址是有效的杠河。也可以這樣說,IP地址形成了許多服務(wù)的認(rèn)證基礎(chǔ)浇辜,這些服務(wù)相信數(shù)據(jù)包是從一個(gè)有效的主機(jī)發(fā)送來的券敌。IP確認(rèn)包含一個(gè)選項(xiàng),叫作IP source routing柳洋,可以用來指定一條源地址和目的地址之間的直接路徑待诅。對于一些TCP和UDP的服務(wù)來說,使用了該選項(xiàng)的IP包好像是從路徑上的最后一個(gè)系統(tǒng)傳遞過來的熊镣,而不是來自于它的真實(shí)地點(diǎn)卑雁。這個(gè)選項(xiàng)是為了測試而存在的募书,說明了它可以被用來欺騙系統(tǒng)來進(jìn)行平常是被禁止的連接。那么测蹲,許多依靠IP源地址做確認(rèn)的服務(wù)將產(chǎn)生問題并且會(huì)被非法入侵莹捡。TCP
TCP是面向連接的通信協(xié)議,通過三次握手建立連接扣甲,通訊完成時(shí)要拆除連接篮赢,由于TCP是面向連接的所以只能用于端到端的通訊。
TCP提供的是一種可靠的數(shù)據(jù)流服務(wù)琉挖,采用“帶重傳的肯定確認(rèn)”技術(shù)來實(shí)現(xiàn)傳輸?shù)目煽啃云羝CP還采用一種稱為“滑動(dòng)窗口”的方式進(jìn)行流量控制,所謂窗口實(shí)際表示接收能力示辈,用以限制發(fā)送方的發(fā)送速度寥茫。
如果IP數(shù)據(jù)包中有已經(jīng)封好的TCP數(shù)據(jù)包,那么IP將把它們向‘上’傳送到TCP層顽耳。TCP將包排序并進(jìn)行錯(cuò)誤檢查坠敷,同時(shí)實(shí)現(xiàn)虛電路間的連接。TCP數(shù)據(jù)包中包括序號(hào)和確認(rèn)射富,所以未按照順序收到的包可以被排序,而損壞的包可以被重傳粥帚。
TCP將它的信息送到更高層的應(yīng)用程序胰耗,例如Telnet的服務(wù)程序和客戶程序。應(yīng)用程序輪流將信息送回TCP層芒涡,TCP層便將它們向下傳送到IP層柴灯,設(shè)備驅(qū)動(dòng)程序和物理介質(zhì),最后到接收方费尽。
面向連接的服務(wù)(例如Telnet赠群、FTP、rlogin旱幼、X Windows和SMTP)需要高度的可靠性查描,所以它們使用了TCP。DNS在某些情況下使用TCP(發(fā)送和接收域名數(shù)據(jù)庫)柏卤,但使用UDP傳送有關(guān)單個(gè)主機(jī)的信息冬三。
常見Tcp的端口號(hào)
- UDP
UDP是面向無連接的通訊協(xié)議膏秫,UDP數(shù)據(jù)包括目的端口號(hào)和源端口號(hào)信息硝桩,由于通訊不需要連接,所以可以實(shí)現(xiàn)廣播發(fā)送(單播候衍、廣播桥滨、組播)窝爪。
UDP通訊時(shí)不需要接收方確認(rèn)弛车,屬于不可靠的傳輸,可能會(huì)出現(xiàn)丟包現(xiàn)象蒲每,實(shí)際應(yīng)用中要求程序員編程驗(yàn)證纷跛。
UDP與TCP位于同一層,但它不管數(shù)據(jù)包的順序啃勉、錯(cuò)誤或重發(fā)忽舟。因此,UDP不被應(yīng)用于那些使用虛電路的面向連接的服務(wù)淮阐,UDP主要用于那些面向查詢---應(yīng)答的服務(wù)叮阅,例如NFS。相對于FTP或Telnet泣特,這些服務(wù)需 要 交換的信息量較小浩姥。使用UDP的服務(wù)包括NTP(網(wǎng)絡(luò)時(shí)間協(xié)議)和DNS(DNS也使用TCP)。
欺騙UDP包比欺騙TCP包更容易状您,因?yàn)閁DP沒有建立初始化連接(也可以稱為握手)(因?yàn)樵趦蓚€(gè)系統(tǒng)間沒有虛電路)勒叠,也就是說,與UDP相關(guān)的服務(wù)面臨著更大的危險(xiǎn)膏孟。
文/Tamic
http://www.reibang.com/u/3bbb1ddf4fd5
常見Tcp的端口號(hào):
- ICMP
ICMP與IP位于同一層眯分,它被用來傳送IP的控制信息。它主要是用來提供有關(guān)通向目的地址的路徑信息柒桑。ICMP的‘Redirect’信息通知主機(jī)通向其他系統(tǒng)的更準(zhǔn)確的路徑弊决,而‘Unreachable’信息則指出路徑有問題。另外魁淳,如果路徑不可用了飘诗,ICMP可以使TCP連接‘體面地’終止。PING是最常用的基于ICMP的服務(wù)界逛。
- 端口
TCP和UDP服務(wù)通常有一個(gè)客戶/服務(wù)器的關(guān)系昆稿,例如,一個(gè)Telnet服務(wù)進(jìn)程開始在系統(tǒng)上處于空閑狀態(tài)息拜,等待著連接溉潭。用戶使用Telnet客戶程序與服務(wù)進(jìn)程建立一個(gè)連接「盟荩客戶程序向服務(wù)進(jìn)程寫入信息岛抄,服務(wù)進(jìn)程讀出信息并發(fā)出響應(yīng),客戶程序讀出響應(yīng)并向用戶報(bào)告狈茉。因而夫椭,這個(gè)連接是雙工的,可以用來進(jìn)行讀寫氯庆。
兩個(gè)系統(tǒng)間的多重Telnet連接是如何相互確認(rèn)并協(xié)調(diào)一致呢蹭秋?TCP或UDP連接唯一地使用每個(gè)信息中的如下四項(xiàng)進(jìn)行確認(rèn):
*源IP地址 發(fā)送包的IP地址扰付。
*目的IP地址 接收包的IP地址。
*源端口 源系統(tǒng)上的連接的端口仁讨。
-
目的端口 目的系統(tǒng)上的連接的端口羽莺。
端口是一個(gè)軟件結(jié)構(gòu),被客戶程序或服務(wù)進(jìn)程用來發(fā)送和接收信息洞豁。一個(gè)端口對應(yīng)一個(gè)16比特的數(shù)盐固。服務(wù)進(jìn)程通常使用一個(gè)固定的端口,例如丈挟,SMTP使用25刁卜、Xwindows使用6000。Tomcat的端口:8080曙咽,這些端口號(hào)是‘廣為人知’的蛔趴,因?yàn)樵诮⑴c特定的主機(jī)或服務(wù)的連接時(shí),需要這些地址和目的地址進(jìn)行通訊例朱,列如我們?nèi)ソ⒘奶焱ㄓ嵉闹付ǖ淖远x端口(8090)孝情。
- 數(shù)據(jù)格式
數(shù)據(jù)幀:幀頭+IP數(shù)據(jù)包+幀尾 (幀頭包括源和目標(biāo)主機(jī)MAC初步地址及類型,幀尾是校驗(yàn)字)
IP數(shù)據(jù)包:IP頭部+TCP數(shù)據(jù)信息(IP頭包括源和目標(biāo)主機(jī)IP地址洒嗤、類型箫荡、生存期等)
TCP數(shù)據(jù)信息:TCP頭部+實(shí)際數(shù)據(jù) (TCP頭包括源和目標(biāo)主機(jī)端口號(hào)、順序號(hào)渔隶、確認(rèn)號(hào)菲茬、校驗(yàn)字等)
常見的以太幀結(jié)構(gòu)
- IP地址
在因特網(wǎng)上連接的所有計(jì)算機(jī),從大型機(jī)到微型計(jì)算機(jī)都是以獨(dú)立的身份出現(xiàn)派撕,我們稱它為主機(jī)。為了實(shí)現(xiàn)各主機(jī)間的通信睬魂,每臺(tái)主機(jī)都必須有一個(gè)唯一的網(wǎng)絡(luò)地址终吼。就好像每一個(gè)住宅都有唯一的門牌一樣,才不至于在傳輸資料時(shí)出現(xiàn)混亂氯哮。
Internet的網(wǎng)絡(luò)地址是指連入Internet網(wǎng)絡(luò)的計(jì)算機(jī)的地址編號(hào)际跪。所以,在Internet網(wǎng)絡(luò)中喉钢,網(wǎng)絡(luò)地址唯一地標(biāo)識(shí)一臺(tái)計(jì)算機(jī)姆打。我們都已經(jīng)知道,Internet是由幾千萬臺(tái)計(jì)算機(jī)互相連接而成的肠虽。而我們要確認(rèn)網(wǎng)絡(luò)上的每一臺(tái)計(jì)算機(jī)幔戏,靠的就是能唯一標(biāo)識(shí)該計(jì)算機(jī)的網(wǎng)絡(luò)地址,這個(gè)地址就叫做IP(Internet Protocol的簡寫)地址税课,即用Internet協(xié)議語言表示的地址闲延。
在Internet里痊剖,IP地址是一個(gè)32位的二進(jìn)制地址,為了便于記憶垒玲,將它們分為4組陆馁,每組8位,由小數(shù)點(diǎn)分開合愈,用四個(gè)字節(jié)來表示叮贩,而且,用點(diǎn)分開的每個(gè)字節(jié)的數(shù)值范圍是0~255佛析,如202.116.0.1益老,這種書寫方法叫做點(diǎn)數(shù)表示法。
IP包的頭文件結(jié)構(gòu):
對有著開發(fā)經(jīng)驗(yàn)的程序員來說说莫,概念或許你并不知道杨箭,但是你知道socket建立時(shí)我需要指定目標(biāo)地址,和主機(jī)端口號(hào)储狭。而這些是怎么IP協(xié)議發(fā)送過去的呢互婿,首先發(fā)送方進(jìn)行封包,路由器進(jìn)行不斷轉(zhuǎn)發(fā)辽狈,最后找到目標(biāo)主機(jī)進(jìn)行拆包慈参,然后讀取信息。
網(wǎng)絡(luò)建立連接有個(gè)三次握手協(xié)議刮萌,通俗講驮配,小時(shí)候你出去玩了,你很餓着茸,你就喊媽媽壮锻,問媽媽飯最好了嗎,你媽媽說好了涮阔,你說可以過去吃飯嗎猜绣,媽媽說可以了,這樣你才能回家吃飯敬特。計(jì)算機(jī)通信也是這樣掰邢。
如下圖,A向B請求伟阔,B收到后應(yīng)答給A辣之,然后A收到B的應(yīng)答信息后再繼續(xù)應(yīng)答B(yǎng), B收到后雙方建立連接。 注意:后面我們程序的非對稱加密協(xié)議和網(wǎng)網(wǎng)絡(luò)連接一樣類似皱炉,后面我會(huì)講到怀估。
當(dāng)我的連接建立時(shí)我通常開始主機(jī)A的封包和主機(jī)B的解包,當(dāng)然解包是封包的逆過程娃承,通常稱為完整的一次連接奏夫。
這里我們還需要知道兩個(gè)概念DNS和ARP
- DNS
提供域名解析服務(wù)將URL中的域名解析成IP地址 - ARP
將IP地址解析成MAC地址
通過今天的學(xué)習(xí)怕篷,我們可以大概了解下TCP/IP的架構(gòu)分布和傳輸協(xié)議,以及網(wǎng)絡(luò)通訊的術(shù)語和各自功能酗昼,包括幾種連接方式廊谓,其建立成功連接需要的必要數(shù)據(jù)結(jié)構(gòu),曾經(jīng)記得有次面試
遇到了有關(guān)網(wǎng)絡(luò)的面試題麻削,有可能面試官懂點(diǎn)網(wǎng)絡(luò)基礎(chǔ)蒸痹,想來虐虐我,最后沒想到我從頭講到尾呛哟,但遺憾的是我還是未被錄取叠荠。在下面的幾篇文章中,我大致會(huì)給大家介紹下網(wǎng)絡(luò)分布拓?fù)浜?br>
網(wǎng)絡(luò)安全知識(shí)和數(shù)據(jù)加解密的有關(guān)知識(shí)扫责,但只限于作為程序員來講方面的知識(shí)榛鼎。歡迎閱讀。