傳輸層
傳輸層為運(yùn)行在不同主機(jī)上的進(jìn)程之間提供給了邏輯通信,而網(wǎng)絡(luò)層提供了主機(jī)之間的邏輯通信。當(dāng)網(wǎng)絡(luò)層協(xié)議不可靠時(shí),傳輸層同樣可以為應(yīng)用程序提供可靠的服務(wù)。
傳輸層向高層用戶屏蔽了底層網(wǎng)絡(luò)核心的細(xì)節(jié),它使應(yīng)用進(jìn)程看見(jiàn)的就好像在兩個(gè)傳輸實(shí)體之間有一條端到端的邏輯通信信道。當(dāng)傳輸層采用面向連接的TCP時(shí),盡管下面的網(wǎng)絡(luò)是不可靠的,但這種邏輯通信信道就相當(dāng)于一條全雙工的可靠信道。
- 端口號(hào)
數(shù)據(jù)鏈路層的SAP是MAC地址,網(wǎng)絡(luò)層的SAP是IP地址,傳輸層的SAP是端口。
端口號(hào)只具有本地意義,即端口號(hào)只是為了標(biāo)志本計(jì)算機(jī)應(yīng)用層中的各進(jìn)程,在因特網(wǎng)中不同計(jì)算機(jī)的相同端口號(hào)是沒(méi)有聯(lián)系的。端口號(hào)的長(zhǎng)度為16bit,能夠表示65536個(gè)不同的端口。
端口是傳輸層和應(yīng)用層的服務(wù)接口,傳輸層的復(fù)用和分用功能都是通過(guò)端口實(shí)現(xiàn)。 - 套接字 =(主機(jī)IP地址,端口號(hào)),它唯一地標(biāo)識(shí)了網(wǎng)絡(luò)中的一個(gè)主機(jī)和其上的一個(gè)應(yīng)用進(jìn)程。
套接字尋址系使得TCP和UDP能夠執(zhí)行多路復(fù)用和多路分解。多路復(fù)用是指把多個(gè)來(lái)源的數(shù)據(jù)導(dǎo)向一個(gè)輸出,而多路分解是把從一個(gè)來(lái)源接收的數(shù)據(jù)發(fā)送到多個(gè)輸出 - UDP
只做了傳輸協(xié)議能夠做的最少工作,在IP數(shù)據(jù)報(bào)服務(wù)上增加了兩個(gè)最基本的服務(wù):復(fù)用和分用以及差錯(cuò)檢測(cè)。
UDP數(shù)據(jù)報(bào)包含兩個(gè)部分:UDP首部和用戶數(shù)據(jù)。UDP首部有8個(gè)字節(jié),由4個(gè)字段組成(源端口,目的端口,UDP長(zhǎng)度,UDP校驗(yàn)和),每個(gè)字段占兩個(gè)字節(jié)。 - TCP
TCP是在不可靠的IP層上實(shí)現(xiàn)的可靠的數(shù)據(jù)傳輸協(xié)議。每一條TCP連接只能是點(diǎn)對(duì)點(diǎn)的,TCP提供全雙工通信,允許通信雙方的應(yīng)用進(jìn)程在任何時(shí)候都能發(fā)送數(shù)據(jù),為此TCP連接的兩端都設(shè)有發(fā)送緩存和接收緩存,用來(lái)臨時(shí)存放雙向通信的數(shù)據(jù)。
TCP傳送的數(shù)據(jù)單元稱為報(bào)文段,TCP報(bào)文段可以用來(lái)運(yùn)載數(shù)據(jù)、建立連接、釋放連接和應(yīng)答。
TCP是面向字節(jié)流的(TCP傳送時(shí)按照一個(gè)一個(gè)字節(jié)來(lái)傳送),UDP是面向報(bào)文的。
TCP連接有兩個(gè)端點(diǎn),這兩個(gè)端點(diǎn)不是主機(jī)、不是應(yīng)用進(jìn)程、也不是傳輸層的協(xié)議端口,而是套接字。
TCP連接的建立采用客戶/服務(wù)器模式。主動(dòng)發(fā)起連接建立的應(yīng)用進(jìn)程叫做客戶機(jī),而被動(dòng)等待連接建立的應(yīng)用進(jìn)程叫做服務(wù)器。 -
三次握手
image.png
序號(hào)字段seq是指本報(bào)文段所發(fā)送數(shù)據(jù)的第一個(gè)字節(jié)的序號(hào)
確認(rèn)號(hào)ack=N,表明到序號(hào)N-1為止的所有數(shù)據(jù)都已正確收到 -
四次揮手
image.png - TCP可靠傳輸
可靠傳輸服務(wù)就是要保證接收方進(jìn)程從緩存區(qū)讀出的字節(jié)流與發(fā)送方發(fā)出的字節(jié)流是完全一樣的。
TCP默認(rèn)采用累計(jì)確認(rèn),即TCP只確認(rèn)數(shù)據(jù)流中至第一個(gè)丟失字節(jié)為止的字節(jié)。
有兩種事件會(huì)導(dǎo)致TCP對(duì)報(bào)文進(jìn)行重傳:超時(shí)和冗余ACK。
TCP每發(fā)送一個(gè)報(bào)文段,就對(duì)這個(gè)報(bào)文段設(shè)置一次計(jì)時(shí)器,只要計(jì)時(shí)器設(shè)置的重傳時(shí)間到期但還沒(méi)收到確認(rèn),就要重傳這一報(bào)文段。
冗余ACK是發(fā)送方再次確認(rèn)某個(gè)報(bào)文段的ACK,而之前已經(jīng)收到過(guò)該報(bào)文段的確認(rèn)。 - 流量控制
TCP提供一種基于滑動(dòng)窗口協(xié)議的流量控制機(jī)制,以消除發(fā)送方使接收方緩存區(qū)溢出的可能。接收方根據(jù)自己接收緩存的大小,動(dòng)態(tài)地調(diào)整發(fā)送方窗口的大小,這就是接收窗口rwnd,即調(diào)整TCP報(bào)文段首部中的'窗口'字段值,來(lái)限制發(fā)送方向網(wǎng)絡(luò)注入報(bào)文的速率。同時(shí),發(fā)送方根據(jù)其對(duì)當(dāng)前網(wǎng)絡(luò)擁塞程序的估計(jì)而確定的窗口值,稱為擁塞窗口cwnd。
發(fā)送窗口=min(rwnd, cwnd); - 擁塞控制
擁塞控制是防止過(guò)多的數(shù)據(jù)注入網(wǎng)絡(luò)中,這樣可以使網(wǎng)絡(luò)中的路由器或鏈路不致過(guò)載
當(dāng)發(fā)送方檢測(cè)到超時(shí)時(shí)就采用慢開(kāi)始和擁塞避免,當(dāng)發(fā)送方接收到冗余ACK時(shí)就采用快重傳和快恢復(fù)。- 慢開(kāi)始
開(kāi)始發(fā)送TCP報(bào)文時(shí),先令擁塞窗口cwnd=1,即一個(gè)最大報(bào)文段長(zhǎng)度MSS。在每收到一個(gè)新的報(bào)文段的確認(rèn)后,將cwnd加1,這樣每經(jīng)過(guò)一個(gè)傳輸輪次RTT,擁塞窗口cwnd就會(huì)加倍,呈指數(shù)增長(zhǎng),最后達(dá)到閾值,改用擁塞避免算法。 - 擁塞避免
發(fā)送端的擁塞窗口cwnd每經(jīng)過(guò)一個(gè)RTT就增加一個(gè)MSS,而不是加倍,使cwnd線性增長(zhǎng)(加法增大);當(dāng)出現(xiàn)一個(gè)超時(shí)時(shí),則令慢開(kāi)始閾值等于當(dāng)前cwnd的一半(乘法減?。?,然后將擁塞窗口cwnd重置為1,執(zhí)行慢開(kāi)始算法。 - 快重傳
當(dāng)發(fā)送方連續(xù)收到三個(gè)重復(fù)的ACK報(bào)文時(shí),直接重傳對(duì)方尚未收到的報(bào)文段,而不等待那個(gè)報(bào)文段設(shè)置的重傳計(jì)時(shí)器超時(shí)。 - 快恢復(fù)
當(dāng)發(fā)送端收到連續(xù)三個(gè)冗余ACK時(shí),就執(zhí)行“乘法減小”,把慢開(kāi)始閾值設(shè)為出現(xiàn)擁塞時(shí)cwnd的一半,然后把cwnd設(shè)置為閾值,然后執(zhí)行擁塞避免算法(加法增大)。由于跳過(guò)了cwnd從1起始的慢開(kāi)始過(guò)程,所以被稱為快恢復(fù)。
- 慢開(kāi)始
應(yīng)用層
- 在C/S模型中,服務(wù)器性能的好壞決定了整個(gè)系統(tǒng)的性能,當(dāng)大量用戶請(qǐng)求服務(wù)時(shí),服務(wù)器就必然成為系統(tǒng)的瓶頸。P2P思想是整個(gè)網(wǎng)絡(luò)中的傳輸內(nèi)容不再保存在中心服務(wù)器上,每個(gè)結(jié)點(diǎn)都同時(shí)具有上傳、下載功能,各計(jì)算機(jī)之間大體對(duì)等。
- DNS域名系統(tǒng)是因特網(wǎng)使用的命名系統(tǒng),用來(lái)把便于人們記憶的主機(jī)名(如www.baidu.com)轉(zhuǎn)換成便于機(jī)器處理的IP地址。DNS系統(tǒng)采用C/S模型,協(xié)議運(yùn)行在UDP上,使用53端口。
每個(gè)域名服務(wù)器不但能夠進(jìn)行一些域名到IP地址的解析,而且具有連向其他域名服務(wù)器的信息。 - FTP
FTP提供交互式的訪問(wèn),允許客戶指明文件的類型與格式,并允許文件具有存取權(quán)限。它屏蔽了各計(jì)算機(jī)系統(tǒng)的細(xì)節(jié),因而適合于在異構(gòu)網(wǎng)絡(luò)中任意計(jì)算機(jī)之間傳送文件
FTP采用C/S模式,使用TCP可靠傳輸,F(xiàn)TP服務(wù)器進(jìn)程由兩大部分組成:一個(gè)主進(jìn)程,負(fù)責(zé)接收新的客戶請(qǐng)求;另有若干個(gè)從屬進(jìn)程,負(fù)責(zé)處理單個(gè)請(qǐng)求。FTP在工作時(shí)使用兩個(gè)并行的TCP連接,一個(gè)是控制連接(端口號(hào)21),一個(gè)是數(shù)據(jù)連接(端口號(hào)20) - 電子郵件
一個(gè)電子郵件系統(tǒng)由三個(gè)主要組件:用戶代理、郵件服務(wù)器、電子郵件使用的協(xié)議(SMTP、POP3)
郵件發(fā)送協(xié)議用于用戶代理向郵件服務(wù)器發(fā)送郵件或郵件服務(wù)器之間發(fā)送郵件,使用SMTP(推);郵件讀取協(xié)議用于用戶代理從郵件服務(wù)器讀取郵件,如POP3(拉) - HTTP
HTTP協(xié)議是無(wú)狀態(tài)的,使用Cookie加數(shù)據(jù)庫(kù)的方式來(lái)跟蹤用戶的活動(dòng),進(jìn)而執(zhí)行一些個(gè)性化的工作。HTTP采用TCP協(xié)議,保證了數(shù)據(jù)的可靠傳輸。
HTTP可以使用非持續(xù)連接和持續(xù)連接:
非持續(xù)連接:每個(gè)網(wǎng)頁(yè)元素對(duì)象(如jpeg圖,flash等)的傳輸都需要單獨(dú)建立一個(gè)TCP連接。
持續(xù)連接:萬(wàn)維網(wǎng)服務(wù)器在發(fā)送響應(yīng)后仍然保持這條連接,使同一個(gè)客戶和服務(wù)器可以繼續(xù)在這條連接上傳送后續(xù)的HTTP請(qǐng)求和響應(yīng)報(bào)文。

