计算机网络原理简介
物理層
電腦要聯(lián)網(wǎng),需要做什么,電腦需要電, 然后電腦與電腦之間相連,需要網(wǎng),可以用光纖,雙絞線,同軸電纜,無線波等
把電腦連接起來的物理手段,主要規(guī)定了網(wǎng)絡(luò)的一些電氣特性,作用是負(fù)責(zé)傳送0和1的電信號.而機(jī)械特性,及時(shí)如何去與硬件相連了,比如說插座的尺寸
數(shù)據(jù)鏈路層
物理層傳過來了0和1,但是單純的0和1沒有啥意義,所以就要規(guī)定解讀方式,就像情報(bào)一樣,怎么來解讀. 這里我們了解到一組電信號構(gòu)成一個(gè)數(shù)據(jù)塊,這個(gè)數(shù)據(jù)塊有了一個(gè)稱呼:幀.每個(gè)幀兩個(gè)部分,頭和數(shù)據(jù)(head and data)
幀是有底線(長度)的,所以如果數(shù)據(jù)量特別大,就需要分割成多個(gè)幀來發(fā)送.如果在傳輸過程中,有出錯(cuò)的數(shù)據(jù),那么就需要重新發(fā)送了,所以幀必須得這么做.能夠識(shí)別出物理層發(fā)過來的比特流,還得能識(shí)別出起始和終止.
我們都知道,網(wǎng)絡(luò)有時(shí)候很不穩(wěn)定的,那你得怎么來區(qū)分,那個(gè)算是一幀呢.這里就有了這么幾種方法來能夠提高正確識(shí)別率.
?1.使用字符填充的是首尾定界符 2.使用比特填充的首尾標(biāo)志法 3.違法編碼法 4.字節(jié)計(jì)數(shù)法.
生活中, 常見的這么一種情況 : 我在今目標(biāo)給你傳送一份文件,怎么確保我給你的文件中,有沒有遭到損壞. 我是發(fā)出了,? 具體是你來收,那么你就得有這么一個(gè)能力,能夠發(fā)現(xiàn)給你的文件中,有沒有差錯(cuò).如果有,你給我說一下啊,收到的不對啊,你再給我重新發(fā)一份.也可能因?yàn)榫W(wǎng)絡(luò)的問題,你的網(wǎng)掉線了,這樣你就不能給我回復(fù)收到情況了. 那么我這里就啟用一個(gè)定時(shí)器,到點(diǎn)了,你還沒回復(fù),那我就認(rèn)為你收到的有問題, 再次重新發(fā)送.那么這個(gè)就是差錯(cuò)控制功能了.也是數(shù)據(jù)鏈路層主要功能之一.
差錯(cuò)控制其實(shí)是有兩種的,一種就是上面說的那種,我發(fā)現(xiàn)接收的文件異常,那么就讓你重新給我發(fā)一份完整的. 這種方式叫:自動(dòng)請求重復(fù). 還有一種,它就是,我接收了一部分的文件,再次讓你給我發(fā)的時(shí)候,是繼續(xù)上一部分之后的內(nèi)容發(fā)過來.這種方式對于我的要求就高了,不光能判斷文件有差錯(cuò),還得能判斷發(fā)生錯(cuò)誤的位置,方便你再次給我續(xù)傳.叫:前向糾錯(cuò)FEC.
??
網(wǎng)絡(luò)層
上面我們講了,數(shù)據(jù)鏈路層,是兩個(gè)相鄰端點(diǎn)之間的數(shù)據(jù)幀的傳送,現(xiàn)在需要從A傳到Z,中間經(jīng)過了BCD等等.那么這就需要網(wǎng)絡(luò)層的支持了.
再來個(gè)例子: 把我工位上的零食拿到你的工位,可以有n種走法,但是為了方便處理零食的傳輸,咱倆之間可以先建立這么一個(gè)邏輯通路(邏輯上了,那就是虛的嘍),然后經(jīng)過若干人傳遞給你.不過最終是只有一個(gè)人把所有零食都給你.
還有一種方式就是: 把零食分成好幾袋,若干袋零食構(gòu)成了是我要送給你的.每個(gè)零食都帶包裝,我可以分開傳送.然后你就會(huì)收到不定是誰給你的某一種.當(dāng)然這也有種可能,中間零食被人吃了.你的零食就丟了部分.
上面兩種就是通信子網(wǎng)對端系統(tǒng)提供的兩種網(wǎng)絡(luò)服務(wù): 虛電路和數(shù)據(jù)報(bào).
咱們繼續(xù)講上面的零食. 虛電路方式,從最開始我就確定了,先轉(zhuǎn)給B,再轉(zhuǎn)C,以此類推,直到轉(zhuǎn)給你.
而數(shù)據(jù)報(bào)呢,就是每次某個(gè)人收到這包零食,再去做出選擇. 咱們這個(gè)來回轉(zhuǎn),拿這么一個(gè)詞來表達(dá): 路由選擇.
如果在傳送的過程中, B 不光需要轉(zhuǎn)我給你的零食,還要轉(zhuǎn)其他人給好有的零食,那么B就可能因?yàn)樾枰D(zhuǎn)的東西太多.就給擁塞了.這個(gè)想想雙十一,就完全就理解了.要么就是倉庫太小,有些包就給丟了.有些就是因?yàn)榉謷T少.來不及處理那么多的量.所以堵了很正常嘛.
當(dāng)然這個(gè)擁塞不光光是網(wǎng)絡(luò)層可能出現(xiàn),其它層也可能會(huì)出現(xiàn)的.
為了解決這個(gè)堵塞,可以分組排隊(duì),按順序來,也可以把一些包直接給丟了.減少壓力.
?這里 有一個(gè)我們常說的ip
那么現(xiàn)在就來講講這個(gè)ip,互聯(lián)網(wǎng)上的每一臺(tái)計(jì)算機(jī),都會(huì)分配到一個(gè)ip地址.地址分為兩個(gè)部分,前一部分代表的是網(wǎng)絡(luò),后一部分代表的是主機(jī).前一部分代表的是網(wǎng)絡(luò),后一部分代表主機(jī),處于同一個(gè)子網(wǎng)絡(luò)的電腦,其ip地址網(wǎng)絡(luò)部分必定是相同的.但是不一定是同一個(gè)子網(wǎng)絡(luò). 因?yàn)椴磺宄渚W(wǎng)絡(luò)部分是前24位,還是16位. 怎么才能從ip地址,判斷兩臺(tái)計(jì)算機(jī)是屬于同一個(gè)子網(wǎng)絡(luò)的.需要一個(gè)參數(shù)了: 子網(wǎng)掩碼.
兩個(gè)ip地址與子網(wǎng)掩碼分別進(jìn)行and運(yùn)算(兩個(gè)數(shù)位都為1,運(yùn)算結(jié)果為1,否則為0),比較結(jié)果是否相同,是的話,就是在同一個(gè)子網(wǎng)絡(luò)中了.否則就不是.
ip協(xié)議的作用是啥: 就是先給每個(gè)計(jì)算機(jī)分配一個(gè)ip地址,方便尋址.然后確定哪些地址是同一個(gè)子網(wǎng)絡(luò)中.這樣ip從源傳輸實(shí)體取得數(shù)據(jù),如果源址和目標(biāo)地址在一個(gè)網(wǎng)絡(luò)中,ip就直接通過網(wǎng)絡(luò)將數(shù)據(jù)傳輸給目的主機(jī)了,而若目的主機(jī)不在一個(gè)網(wǎng)絡(luò)中,ip數(shù)據(jù)報(bào)就會(huì)一個(gè)模塊傳到另一個(gè)模塊.直到目的地址為止.
?
傳輸層
經(jīng)過上面物理層, 電腦有了電,首先是活了經(jīng)脈開始復(fù)蘇.,經(jīng)過數(shù)據(jù)鏈路層,成功把物理層的內(nèi)容進(jìn)行了解析開始傳輸,經(jīng)過網(wǎng)絡(luò)層,利用其路由的選擇,成功的從一臺(tái)主機(jī)聯(lián)系上了目標(biāo)主機(jī).聯(lián)系上了目標(biāo)主機(jī),但是主機(jī)上有很多的應(yīng)用程序,他們都用到了網(wǎng)絡(luò).當(dāng)你用今目標(biāo)接收一個(gè)文件, 但同時(shí)你還開著wechat和qq,那么電腦怎么就確定了, 是今目標(biāo)傳過來的這個(gè)文件, 這里就有一個(gè)新的名詞出現(xiàn)了,就是我們常說的端口. 文件可以理解成一個(gè)數(shù)據(jù)包,這個(gè)包發(fā)送到今目標(biāo)的文件傳輸端口,今目標(biāo)就能取到這個(gè)包了.
我們都知道,基本沒有什么東西,都是無限長的, 上面講了幀有長度, 之前也有提過redis有固定槽數(shù),端口也不例外. 介于0-63353,不過我們的系統(tǒng)啟動(dòng), 會(huì)占用一定的端口,也就是0-1023,用戶想用,只能用1024之后的.
這么區(qū)分網(wǎng)絡(luò)層和傳輸層,也就相對好區(qū)分一點(diǎn)了. 網(wǎng)絡(luò)主要是確定主機(jī)到主機(jī),但是傳輸層就變成了端到端了.有了主機(jī)ip和端口,就可以唯一確定一值了. 程序之間的通信到目前就接通了.
上面我們說了,找到了組織了,就比如說: 找到了中國共產(chǎn)黨的接頭人. 但是情報(bào)不能亂給吧.這里就需要建立連接了. 數(shù)據(jù)包要傳輸,要傳輸?shù)侥睦?就需要在數(shù)據(jù)包中添加 一個(gè)端口,方便一一對應(yīng). 數(shù)據(jù)包加入端口信息,就得需要一個(gè)新的協(xié)議了.最簡單的方式就是UDP協(xié)議了.格式很簡單.就是標(biāo)頭和數(shù)據(jù).標(biāo)頭中有源端口和目標(biāo)端口,長度和校驗(yàn)和. 數(shù)據(jù)就是具體的內(nèi)容了. 整個(gè)UDP數(shù)據(jù)包中是放在ip數(shù)據(jù)包中的數(shù)據(jù)部分了. 它是怎么來發(fā)送的呢,就是只要我手里有內(nèi)容,管你能不能收,反正我是脫手了.也不對這個(gè)數(shù)據(jù)包進(jìn)行檢查和修改. 所以它快, 但是不可靠啊.所以就得完善它,那么就有了tcp協(xié)議.?
tcp與udp最大的區(qū)別就是, 它有確認(rèn)機(jī)制.udp不管你能不能收,所以很有可能這個(gè)包就丟了. tcp就會(huì)確保數(shù)據(jù)不會(huì)遺失, 那它怎么做到的:?
三次握手: 我發(fā)送請求,你回應(yīng)請求,我再次發(fā)送收到你回應(yīng)請求的請求.
當(dāng)然也可能你沒有回應(yīng)請求,我就來個(gè)計(jì)時(shí)器,到點(diǎn)了,還沒給我應(yīng)答, 我就重發(fā),也會(huì)記錄這個(gè)時(shí)間.存放當(dāng)前的目的端的時(shí)間,以后就不亂估時(shí)間了, 多智能化.
請求連接有了,釋放鏈接也不難理解:?
有時(shí)候,它想懶點(diǎn),等你發(fā)過來幾個(gè)之后,我再一次性回復(fù)你, 發(fā)送方呢,也想等到一定量之后,一次性發(fā)給你, 這就引申出來一個(gè): 滑動(dòng)窗口控制
?
應(yīng)用層
?我們平時(shí)用到了各種的應(yīng)用程序, 有網(wǎng)頁,還有郵箱等等.
所以來的數(shù)據(jù),就是五花八門的,必須得事先規(guī)定好格式,否則根本無法解讀 . 簡單理解應(yīng)用層的作用,就是規(guī)定應(yīng)用程序的數(shù)據(jù)格式
最高層,直接面對用戶
應(yīng)用層就包括了我們需要的應(yīng)用程序.同時(shí)還有應(yīng)用層協(xié)議, 有了這些協(xié)議,我們就可以通過不同的協(xié)議來使用網(wǎng)絡(luò). 比如上面說的發(fā)郵件,就用專門的協(xié)議:SMTP 和POP3.
這里簡單講幾個(gè)常用的應(yīng)用層協(xié)議
我們每次訪問什么網(wǎng)站首頁的時(shí)候,都是在瀏覽器中直接輸入域名,比如baidu.com. 而不是輸入網(wǎng)站的ip. 這個(gè)有了一個(gè)熟悉的DNS解析.
域名系統(tǒng)DNS
頂級域名有3類: 國家頂級域名(cn us hk tw),國際頂級域名(int),通用頂級域名(com).
可能你想知道,ip是怎么和域名連起來的.聽我下面慢慢給你講: 咱們天賦吉運(yùn),就是一個(gè)域名, 它有一個(gè)ip.域名到ip地址的映射
說完常常訪問的網(wǎng)址之后, 我們也是離不開各種郵件,現(xiàn)在來大概講講郵件
郵件服務(wù)器協(xié)議有我們常見的smtp,最簡單的郵件傳輸協(xié)議啦, 另外就是郵局協(xié)議pop 還有一個(gè)不熟悉的因特網(wǎng)郵件存取協(xié)議IMAP
pop得有一個(gè)郵件服務(wù)器.咱們現(xiàn)在也有這么一個(gè)郵件服務(wù)器了
先來簡單的講: smtp 25端口? 郵件服務(wù)器之間的傳輸協(xié)議
pop3 用戶計(jì)算機(jī)與郵件服務(wù)器之間的傳輸協(xié)議.端口110
imap有3種工作方式, 離線: 用戶的計(jì)算機(jī)得和郵件服務(wù)器保持連接,然后把郵件都從服務(wù)器下載到本地
在線的: 郵件是一直存在郵件服務(wù)器中的,然后用戶各種操作.刪除啊回復(fù)啊等等. 但是得一直跟服務(wù)器連接著,不能斷嘍
斷連接方式: 收郵件的時(shí)候,其實(shí)是先在本地來個(gè)緩存,當(dāng)用戶編輯的差不多了,要發(fā)送時(shí),再去連接郵件服務(wù)器,同時(shí)把兩方的郵件狀態(tài)保持一致.我覺得是介于上面兩個(gè)中間的.
后面還有我們平時(shí)輸入域名, 最前面默認(rèn)給加上的http 和 www .http是應(yīng)用層的協(xié)議之一.資源標(biāo)示是它的核心.url 這個(gè)咱們太常見了, 跳轉(zhuǎn)頁面啥的.?
還有之前我.net項(xiàng)目常用的ftp,可以臨時(shí)性充當(dāng)文件服務(wù)器.它可以直接匿名登錄, anonymous 所以從某種程度上講,不太安全.
?
小結(jié)
兩個(gè)電腦如何通信呢, 就是A 給B 發(fā)一個(gè)數(shù)據(jù)包, B收到了,給A回一個(gè)數(shù)據(jù)包,就建立起來了.
A 想找B ,首先A 給通上點(diǎn),插上網(wǎng)線, 然后能知道B的ip和mac A和B 可能不在一個(gè)子網(wǎng)絡(luò)里,比如A在中國, B在美國.這樣A 就不知道B的mac地址了, 就有這么一個(gè)網(wǎng)關(guān),網(wǎng)關(guān)能知道B的mac地址的.? 那B 的ip呢. 一般我們直接連網(wǎng)之后, 大家直接看ip屬性,能看出來,給自動(dòng)分配了. 所以B要連網(wǎng),得有這么幾個(gè)參數(shù): 本機(jī)ip 子網(wǎng)掩碼,網(wǎng)關(guān)ip dns的ip地址
現(xiàn)在B能連網(wǎng)了,想打開百度時(shí),先輸入的www.baidu.com 然后dns協(xié)議,把這個(gè)網(wǎng)址給轉(zhuǎn)成了ip地址. dns服務(wù)告訴B 要訪問的ip地址是多少. 所以B就知道了百度的ip了.? 下面想判斷,這個(gè)ip是不是在同一個(gè)子網(wǎng)絡(luò), 就得用到子網(wǎng)掩碼了.
瀏覽器頁面用的http協(xié)議.
http部分內(nèi)容,是嵌入tcp數(shù)據(jù)包中的. tcp數(shù)據(jù)包再嵌入ip數(shù)據(jù)包, ip數(shù)據(jù)包需要設(shè)置雙方的ip,上面雙方的ip我們已經(jīng)知道了. ip數(shù)據(jù)包是嵌入以太網(wǎng)數(shù)據(jù)包中的.以太網(wǎng)數(shù)據(jù)包需要知道雙方的mac地址,上面咱們也知道啦.所以通信達(dá)成啦
總結(jié)
- 上一篇: 高等代数葵花宝典—白皮书
- 下一篇: FTP搜索引擎开发文档前言部分