解釋:Alice要給Bob發(fā)送的內(nèi)容希望是可靠奶赔,安全的终吼;而實(shí)際物理線路是不可靠不安全的烛愧,所以搭建了網(wǎng)絡(luò)的七層架構(gòu)
解決方法:
-
數(shù)據(jù)鏈路層:提供一個(gè)最小的傳輸單位——數(shù)據(jù)包酪惭,可以通過(guò)奇偶校驗(yàn)等校驗(yàn)方法來(lái)校驗(yàn)這個(gè)包是否正確希痴,這樣就完成了一個(gè)節(jié)點(diǎn)到另外一個(gè)節(jié)點(diǎn)的數(shù)據(jù)包的傳遞。而且傳過(guò)去后春感,接收節(jié)點(diǎn)可以知道這個(gè)數(shù)據(jù)包是正確的還是錯(cuò)誤的砌创。(這樣在同一個(gè)實(shí)驗(yàn)室的Alice和Bob就能相互傳輸數(shù)據(jù)虏缸,但是對(duì)于不同實(shí)驗(yàn)室的呢?所以要通過(guò)網(wǎng)絡(luò)層)
-
網(wǎng)絡(luò)層:有路由嫩实,Alice會(huì)把自己的數(shù)據(jù)包發(fā)送給實(shí)驗(yàn)室的路由器寇钉,然后路由器再發(fā)送給其他路由器,可能會(huì)轉(zhuǎn)很多層舶赔,最后發(fā)送到了Bob。同時(shí)谦秧,為了標(biāo)識(shí)在網(wǎng)絡(luò)中的各個(gè)節(jié)點(diǎn)竟纳,使用了一個(gè)IP協(xié)議,每一個(gè)節(jié)點(diǎn)都有一個(gè)IP地址疚鲤。(但是在數(shù)據(jù)鏈路層雖然能夠知道包是正確的還是錯(cuò)誤的锥累,蛋不能保證其是可靠的,所以需要一種出錯(cuò)重傳機(jī)制集歇,能夠在出錯(cuò)的時(shí)候重傳這個(gè)包而不需要Alice不斷去檢驗(yàn)這個(gè)包是否發(fā)送成功桶略,所以有了傳輸層)
-
傳輸層:有了TCP和UDP協(xié)議,TCP協(xié)議是基于連接的诲宇,會(huì)在Alice和Bob之間际歼,建立可靠的連接,在連接上傳輸數(shù)據(jù)姑蓝。(能夠傳輸數(shù)據(jù)了鹅心,但是是為哪個(gè)應(yīng)用服務(wù)的呢?HTTP?FTP?還是其他纺荧?所以需要有應(yīng)用層)
-
應(yīng)用層
這樣就有了五層協(xié)議:物理層旭愧,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層宙暇,傳輸層输枯,應(yīng)用層
網(wǎng)絡(luò)傳輸
滑動(dòng)窗口
- TCP協(xié)議中使用
- 維持發(fā)送方/接收方緩沖區(qū)(解決不可靠問(wèn)題)
在沒(méi)有滑動(dòng)窗口的前提下,如何保證包的可靠占贫?
-
發(fā)送一個(gè)包確認(rèn)一個(gè)包桃熄。問(wèn)題在于吞吐量很低
-
改進(jìn),發(fā)送兩個(gè)包靶剑,確認(rèn)兩個(gè)包蜻拨。問(wèn)題,每次發(fā)多少個(gè)包呢桩引?多少個(gè)包最優(yōu)呢缎讼?或者同時(shí)發(fā)送了包1和包2,收到了確認(rèn)包1的消息坑匠,能否收到確認(rèn)后直接發(fā)送第三個(gè)包而不是等待包2的確認(rèn)后才發(fā)血崭?
-
滑動(dòng)窗口初始化:一共有16個(gè)包,希望按照順序發(fā)包,每個(gè)包對(duì)方都給予確認(rèn)(即ACK)夹纫。 比如1咽瓷、2、3號(hào)包已經(jīng)收到了Ack舰讹,說(shuō)明這些包已經(jīng)確認(rèn)過(guò)了茅姜。4、5月匣、6钻洒、7包是已經(jīng)發(fā)送但未Ack的,不知道對(duì)方有沒(méi)有收到锄开,8素标、9、10是未發(fā)送的萍悴,是接下來(lái)馬上要發(fā)送的头遭。
-
滑動(dòng)窗口正常情況下:收到包4的確認(rèn),滑動(dòng)窗口向右移動(dòng)一個(gè)位置癣诱,在這段時(shí)間又把8和9發(fā)送過(guò)去但未收到確認(rèn)计维。
滑動(dòng)窗口丟Ack: 可能是包丟了,也可能是Ack沒(méi)收到撕予。 比如一直等Ack, 一直沒(méi)等到享潜, 就把10和11都發(fā)送,但是這個(gè)時(shí)候窗口已經(jīng)滿了嗅蔬,就不能把12讀進(jìn)來(lái)剑按,接下來(lái)就始終等待Ack的產(chǎn)生。這樣用到了超時(shí)重傳機(jī)制澜术。對(duì)于Ack艺蝴,對(duì)方必須按照順序Ack,比如對(duì)方收到了6-11的包,但不能返回對(duì)應(yīng)的Ack,必須收到包5后Ack.
-
滑動(dòng)窗口重發(fā):比如對(duì)方一直在等包5鸟废,經(jīng)過(guò)超時(shí)重傳后猜敢,對(duì)方重新接收到包5就把5-8的Ack一起返回,之后窗口右移盒延,
TCP連接
最開(kāi)始三行中可以看到SYN缩擂、[SYN、ACK]添寺、ACK的字樣胯盯,標(biāo)識(shí)三次握手
TCP Segment Len代表TCP里的內(nèi)容,除去頭部之外是0
Sequence number是滑動(dòng)窗口中的編號(hào)
訪問(wèn)imooc.com后得到的回復(fù)
Acknoeledgment number是1计露, TCP里面的Acknoeledgment number是期待對(duì)方發(fā)第幾個(gè)包博脑,第0號(hào)包收到后就希望對(duì)方發(fā)1號(hào)包
Flag一個(gè)是SYN憎乙,一個(gè)是ACK,代表接到了請(qǐng)求并愿意建立連接
第三次握手
HTTP協(xié)議
然后按照滑動(dòng)窗口叉趣,進(jìn)行發(fā)送和接收