本文是複習原來的課本《計算機網絡(第6版)》而總結出來的梳理思惟的小筆記,由於內容也比較多,一次是整理不完了,因此又是慢慢補坑。如有錯誤歡迎提出(ง •_•)ง。緩存
咱們知道網絡層的IP協議能夠經過IP地址來幫助咱們定位到某一臺電腦,可是真的在進行通訊的是電腦上的進程,因此咱們須要一個東西來區分不一樣電腦的不一樣進程,這也是爲何會出現一個傳輸層。
可是這裏就會出現一些問題:服務器
解決的方法:使用協議端口號(簡稱端口)
雖然通訊的終點是應用進程,但咱們只要把傳送的東西交給端口,剩下的工做就由傳輸層的協議來完成。網絡
分別是無鏈接的UDP和麪向鏈接的TCP。併發
發送數據以前UDP不須要像TCP同樣創建鏈接,因此減小了開銷和時延。spa
UDP是不保證可靠交付的,也就是傳輸很快,可是不保證質量。操作系統
因此即便出現網絡擁塞,主機的發送速率也不會下降。對於視頻在線直播,網絡電話之類的應用來講是頗有效的,它們須要實時的傳輸速率,又能夠適當的有數據的損失。計算機網絡
這句話的意思是UDP支持下面四種通訊:code
UDP首部只有8個字節,而TCP首部有20個字節。
UDP首部的結構:視頻
這裏每一個都是佔了2個字節。blog
UDP的僞首部:
在UDP的8個字節首部的基礎上,其實還有一個12字節的僞首部。
之因此是僞首部,是由於它址在UDP計算檢驗和的時候臨時添加在數據報前的:
應用程序在使用TCP協議前,必需要經過三次握手進行創建,要通過四次揮手來結束鏈接。
來插一個本身畫的有機物小劇場,幫助記憶:
Q:爲何是三次握手,不是兩次握手?
A: 在某種狀況下,假如只有兩次握手,第一個分組在路上延遲發送了,等到傳輸結束後,服務器又收到了SYN請求,此時創建鏈接的話就遲遲得不到客戶端的迴應。
TCP鏈接的端口叫作套接字(插口),注意不少地方都有這個套接字的概念,可是在這裏它的定義是:
端口號+IP地址
每一條TCP鏈接惟一地被通訊兩端的兩個端點所肯定。
現實狀況下:
因此咱們必需要想辦法來應付這兩種狀況,才能實現可靠的服務:
咱們假設只有年糕君在發送數據,有機物在接收數據,併發送確認(可是現實是雙方均可以做爲發送方和接收方)。
情景一:發送分組丟失
若是一開始年糕君發送的數據塊M丟失了,有機物遲遲沒有迴應,年糕君會經過等待迴應的時間來判斷塊M是否是丟失了,而後就選擇重發,這就是超時重傳。
注意點:
情景二:確認丟失
若是有機物給年糕君的對數據塊M的確認丟失了。年糕君在設定時間內沒有收到確認,就會又發送一個M的副本,有機物收到後此時應該:
這樣咱們就能夠實如今不可靠的傳輸網絡上實現可靠通訊,這種協議一般稱爲:自動重傳請求ARQ。
中止等待協議的缺陷
信道利用率過低。
由於年糕君必需要等到收到有機物的確認才能發送下一個,這其中包括了不少時間,除了包括分組和確認的發送時間,還要加上往返時間(RTT)。但這個過程的核心只是分組發送的時間。
解決方法
採用流水線傳輸,也就是年糕君能夠一次性發送多個分組,沒必要收到確認才發送下一個。
所謂全雙工通訊的定義是:
通訊的雙方能夠同時發送和接收信息的信息交互方式
TCP容許通訊雙方在任什麼時候候都能發送數據。
So,爲何?
由於發送方和接收方都擁有發送緩存和接受緩存,存放雙向通訊的數據。
因此,應用程序把數據塊放進緩存裏後,就能夠去作本身的事情了。好比在發送的時候,只用丟給緩存,就能夠拜拜啦,在接收的時候,有須要再從緩存裏去拿行了。
Q:什麼是「流」?
A: 流入到進程或從進程流出的字節序列。
雖然程序和TCP的交互是一個個數據塊(大小不等),但TCP認爲這些都只是一串無結構的字節流。【雖然個人漫畫畫的是一個個小塊(包裹),但這個小塊是能夠被拆開,而後把裏面的東西(字節)取出來一些或者填進去一些( •̀ ω •́ )】它不保證發送方的數據塊和接收方的數據塊是同樣的大小,好比你給了它10個塊,可是它只用了4個塊就把你傳來的東西送給它的上級了。TCP是根據當前的窗口值和擁塞狀況來決定一個報文段包含多少字節的。若是TCP緩存數據塊太長,就劃分短一點再發,若是進行一次只發來一個,就等到足夠字數再發送出去。