傳輸層
傳輸層為運行在不同主機上的進程之間提供給了邏輯通信覆享,而網(wǎng)絡層提供了主機之間的邏輯通信佳遂。當網(wǎng)絡層協(xié)議不可靠時,傳輸層同樣可以為應用程序提供可靠的服務撒顿。
傳輸層向高層用戶屏蔽了底層網(wǎng)絡核心的細節(jié)丑罪,它使應用進程看見的就好像在兩個傳輸實體之間有一條端到端的邏輯通信信道。當傳輸層采用面向連接的TCP時凤壁,盡管下面的網(wǎng)絡是不可靠的吩屹,但這種邏輯通信信道就相當于一條全雙工的可靠信道。
- 端口號
數(shù)據(jù)鏈路層的SAP是MAC地址拧抖,網(wǎng)絡層的SAP是IP地址煤搜,傳輸層的SAP是端口。
端口號只具有本地意義唧席,即端口號只是為了標志本計算機應用層中的各進程擦盾,在因特網(wǎng)中不同計算機的相同端口號是沒有聯(lián)系的嘲驾。端口號的長度為16bit,能夠表示65536個不同的端口厌衙。
端口是傳輸層和應用層的服務接口距淫,傳輸層的復用和分用功能都是通過端口實現(xiàn)。 - 套接字 =(主機IP地址婶希,端口號)榕暇,它唯一地標識了網(wǎng)絡中的一個主機和其上的一個應用進程。
套接字尋址系使得TCP和UDP能夠執(zhí)行多路復用和多路分解喻杈。多路復用是指把多個來源的數(shù)據(jù)導向一個輸出彤枢,而多路分解是把從一個來源接收的數(shù)據(jù)發(fā)送到多個輸出 - UDP
只做了傳輸協(xié)議能夠做的最少工作,在IP數(shù)據(jù)報服務上增加了兩個最基本的服務:復用和分用以及差錯檢測筒饰。
UDP數(shù)據(jù)報包含兩個部分:UDP首部和用戶數(shù)據(jù)缴啡。UDP首部有8個字節(jié),由4個字段組成(源端口瓷们,目的端口业栅,UDP長度,UDP校驗和)谬晕,每個字段占兩個字節(jié)碘裕。 - TCP
TCP是在不可靠的IP層上實現(xiàn)的可靠的數(shù)據(jù)傳輸協(xié)議。每一條TCP連接只能是點對點的攒钳,TCP提供全雙工通信帮孔,允許通信雙方的應用進程在任何時候都能發(fā)送數(shù)據(jù),為此TCP連接的兩端都設有發(fā)送緩存和接收緩存不撑,用來臨時存放雙向通信的數(shù)據(jù)文兢。
TCP傳送的數(shù)據(jù)單元稱為報文段,TCP報文段可以用來運載數(shù)據(jù)焕檬、建立連接姆坚、釋放連接和應答。
TCP是面向字節(jié)流的(TCP傳送時按照一個一個字節(jié)來傳送)实愚,UDP是面向報文的旷偿。
TCP連接有兩個端點,這兩個端點不是主機爆侣、不是應用進程萍程、也不是傳輸層的協(xié)議端口,而是套接字兔仰。
TCP連接的建立采用客戶/服務器模式茫负。主動發(fā)起連接建立的應用進程叫做客戶機,而被動等待連接建立的應用進程叫做服務器乎赴。 -
三次握手
image.png
序號字段seq是指本報文段所發(fā)送數(shù)據(jù)的第一個字節(jié)的序號
確認號ack=N忍法,表明到序號N-1為止的所有數(shù)據(jù)都已正確收到 -
四次揮手
image.png - TCP可靠傳輸
可靠傳輸服務就是要保證接收方進程從緩存區(qū)讀出的字節(jié)流與發(fā)送方發(fā)出的字節(jié)流是完全一樣的潮尝。
TCP默認采用累計確認,即TCP只確認數(shù)據(jù)流中至第一個丟失字節(jié)為止的字節(jié)饿序。
有兩種事件會導致TCP對報文進行重傳:超時和冗余ACK勉失。
TCP每發(fā)送一個報文段,就對這個報文段設置一次計時器原探,只要計時器設置的重傳時間到期但還沒收到確認乱凿,就要重傳這一報文段。
冗余ACK是發(fā)送方再次確認某個報文段的ACK咽弦,而之前已經(jīng)收到過該報文段的確認徒蟆。 - 流量控制
TCP提供一種基于滑動窗口協(xié)議的流量控制機制,以消除發(fā)送方使接收方緩存區(qū)溢出的可能型型。接收方根據(jù)自己接收緩存的大小段审,動態(tài)地調(diào)整發(fā)送方窗口的大小,這就是接收窗口rwnd闹蒜,即調(diào)整TCP報文段首部中的'窗口'字段值寺枉,來限制發(fā)送方向網(wǎng)絡注入報文的速率。同時绷落,發(fā)送方根據(jù)其對當前網(wǎng)絡擁塞程序的估計而確定的窗口值姥闪,稱為擁塞窗口cwnd。
發(fā)送窗口=min(rwnd, cwnd); - 擁塞控制
擁塞控制是防止過多的數(shù)據(jù)注入網(wǎng)絡中嘱函,這樣可以使網(wǎng)絡中的路由器或鏈路不致過載
當發(fā)送方檢測到超時時就采用慢開始和擁塞避免甘畅,當發(fā)送方接收到冗余ACK時就采用快重傳和快恢復埂蕊。- 慢開始
開始發(fā)送TCP報文時往弓,先令擁塞窗口cwnd=1,即一個最大報文段長度MSS蓄氧。在每收到一個新的報文段的確認后函似,將cwnd加1,這樣每經(jīng)過一個傳輸輪次RTT喉童,擁塞窗口cwnd就會加倍撇寞,呈指數(shù)增長,最后達到閾值堂氯,改用擁塞避免算法蔑担。 - 擁塞避免
發(fā)送端的擁塞窗口cwnd每經(jīng)過一個RTT就增加一個MSS,而不是加倍咽白,使cwnd線性增長(加法增大)啤握;當出現(xiàn)一個超時時,則令慢開始閾值等于當前cwnd的一半(乘法減芯Э颉)排抬,然后將擁塞窗口cwnd重置為1懂从,執(zhí)行慢開始算法。 - 快重傳
當發(fā)送方連續(xù)收到三個重復的ACK報文時蹲蒲,直接重傳對方尚未收到的報文段番甩,而不等待那個報文段設置的重傳計時器超時。 - 快恢復
當發(fā)送端收到連續(xù)三個冗余ACK時届搁,就執(zhí)行“乘法減小”缘薛,把慢開始閾值設為出現(xiàn)擁塞時cwnd的一半,然后把cwnd設置為閾值咖祭,然后執(zhí)行擁塞避免算法(加法增大)掩宜。由于跳過了cwnd從1起始的慢開始過程,所以被稱為快恢復么翰。
- 慢開始
應用層
- 在C/S模型中牺汤,服務器性能的好壞決定了整個系統(tǒng)的性能,當大量用戶請求服務時浩嫌,服務器就必然成為系統(tǒng)的瓶頸檐迟。P2P思想是整個網(wǎng)絡中的傳輸內(nèi)容不再保存在中心服務器上,每個結(jié)點都同時具有上傳码耐、下載功能追迟,各計算機之間大體對等。
- DNS域名系統(tǒng)是因特網(wǎng)使用的命名系統(tǒng)骚腥,用來把便于人們記憶的主機名(如www.baidu.com)轉(zhuǎn)換成便于機器處理的IP地址敦间。DNS系統(tǒng)采用C/S模型,協(xié)議運行在UDP上束铭,使用53端口廓块。
每個域名服務器不但能夠進行一些域名到IP地址的解析,而且具有連向其他域名服務器的信息契沫。 - FTP
FTP提供交互式的訪問带猴,允許客戶指明文件的類型與格式,并允許文件具有存取權(quán)限懈万。它屏蔽了各計算機系統(tǒng)的細節(jié)拴清,因而適合于在異構(gòu)網(wǎng)絡中任意計算機之間傳送文件
FTP采用C/S模式,使用TCP可靠傳輸会通,F(xiàn)TP服務器進程由兩大部分組成:一個主進程口予,負責接收新的客戶請求;另有若干個從屬進程涕侈,負責處理單個請求沪停。FTP在工作時使用兩個并行的TCP連接,一個是控制連接(端口號21)驾凶,一個是數(shù)據(jù)連接(端口號20) - 電子郵件
一個電子郵件系統(tǒng)由三個主要組件:用戶代理牙甫、郵件服務器掷酗、電子郵件使用的協(xié)議(SMTP、POP3)
郵件發(fā)送協(xié)議用于用戶代理向郵件服務器發(fā)送郵件或郵件服務器之間發(fā)送郵件窟哺,使用SMTP(推)泻轰;郵件讀取協(xié)議用于用戶代理從郵件服務器讀取郵件,如POP3(拉) - HTTP
HTTP協(xié)議是無狀態(tài)的且轨,使用Cookie加數(shù)據(jù)庫的方式來跟蹤用戶的活動浮声,進而執(zhí)行一些個性化的工作。HTTP采用TCP協(xié)議旋奢,保證了數(shù)據(jù)的可靠傳輸泳挥。
HTTP可以使用非持續(xù)連接和持續(xù)連接:
非持續(xù)連接:每個網(wǎng)頁元素對象(如jpeg圖,flash等)的傳輸都需要單獨建立一個TCP連接至朗。
持續(xù)連接:萬維網(wǎng)服務器在發(fā)送響應后仍然保持這條連接屉符,使同一個客戶和服務器可以繼續(xù)在這條連接上傳送后續(xù)的HTTP請求和響應報文。