計算機網絡知識總結

一 OSI與TCP/IP各層的結構與功能,都有哪些協議

OSI的七層體系結構概念清楚,理論也很完整,但是它比較復雜而且不實用。在這里順帶提一下之前一直被一些大公司甚至一些國家政府支持的OSI失敗的原因:

  1. OSI的專家缺乏實際經驗,他們在完成OSI標準時缺乏商業驅動力
  2. OSI的協議實現起來過分復雜,而且運行效率很低
  3. OSI制定標準的周期太長,因而使得按OSI標準生產的設備無法及時進入市場(20世紀90年代初期,雖然整套的OSI國際標準都已經制定出來,但基于TCP/IP的互聯網已經搶先在全球相當大的范圍成功運行了)
  4. OSI的層次劃分不太合理,有些功能在多個層次中重復出現

五層協議的體系結構

學習計算機網絡時我們一般采用折中的辦法,也就是中和OSI和TCP/IP的有點,采用一種只有五層協議的體系結構,這樣既簡潔又能將概念闡述清楚。

五層協議的體系結構

結合互聯網的情況,自上而下地,非常簡要的介紹一下各層的作用。

1 應用層(application layer)

應用層的任務是通過應用進程間的交互來完成特定網絡應用。應用層協議定義的是應用進程(進程:主機中正在運行的程序)間的通信和交互的規則。對于不同的網絡應用需要不同的應用層協議。在互聯網中應用層協議很多,如域名系統DNS,支持萬維網應用的HTTP協議,支持電子郵件的SMTP協議等等。我們把應用層交互的數據單元稱為報文。

域名系統(Domain Name System縮寫DNS,Domain Name被譯為域名)

域名系統是因特網的一項核心服務,它作為可以將域名和IP地址相互映射的一個分布式數據庫,能夠使人更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP數串。(百度百科)例如:一個公司的Web網站可看作是它在網上的門戶,而域名就相當于其門牌地址,通常域名都使用該公司的名稱或簡稱。例如上面提到的微軟公司的域名,類似的還有:IBM公司的域名是www.ibm.com、Oracle公司的域名是www.oracle.com、Cisco公司的域名是www.cisco.com等。

HTTP協議

超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最為廣泛的一種網絡協議。所有的WWW文件都必須遵守這個標準。設計HTTP最初的目的是為了提供一種發布和接收HTML頁面的方法。(百度百科)

2 運輸層(transport layer)

運輸層的主要任務就是負責向兩臺主機進程之間的通信提供通用的數據傳輸服務。應用進程利用該服務傳送應用層報文。“通用的”是指并不針對某一個特定的網絡應用,而是多種應用可以使用同一個運輸層服務。由于一臺主機可同時運行多個線程,因此運輸層有復用和分用的功能。所謂復用就是指多個應用層進程可同時使用下面運輸層的服務,分用和復用相反,是運輸層把收到的信息分別交付上面應用層中的相應進程。

運輸層主要使用以下兩種協議:

  1. 傳輸控制協議TCP(Transmisson Control Protocol)--提供面向連接的,可靠的數據傳輸服務。
  2. 用戶數據協議UDP(User Datagram Protocol)--提供無連接的,盡最大努力的數據傳輸服務(不保證數據傳輸的可靠性)。

UDP的主要特點:

  1. UDP是無連接的;
  2. UDP使用盡最大努力交付,即不保證可靠交付,因此主機不需要維持復雜的鏈接狀態(這里面有許多參數);
  3. UDP是面向報文的;
  4. UDP沒有擁塞控制,因此網絡出現擁塞不會使源主機的發送速率降低(對實時應用很有用,如IP電話,實時視頻會議等);
  5. UDP支持一對一、一對多、多對一和多對多的交互通信;
  6. UDP的首部開銷小,只有8個字節,比TCP的20個字節的首部要短。

TCP的主要特點:

  1. TCP是面向連接的。(就好像打電話一樣,通話前需要先撥號建立連接,通話結束后要掛機釋放連接);
  2. 每一條TCP連接只能有兩個端點,每一條TCP連接只能是點對點的(一對一);
  3. TCP提供可靠交付的服務。通過TCP連接傳送的數據,無差錯、不丟失、不重復、并且按序到達;
  4. TCP提供全雙工通信。TCP允許通信雙方的應用進程在任何時候都能發送數據。TCP連接的兩端都設有發送緩存和接收緩存,用來臨時存放雙方通信的數據;
  5. 面向字節流。TCP中的“流”(stream)指的是流入進程或從進程流出的字節序列。“面向字節流”的含義是:雖然應用程序和TCP的交互是一次一個數據塊(大小不等),但TCP把應用程序交下來的數據僅僅看成是一連串的無結構的字節流。

3 網絡層(network layer)

網絡層負責為分組交換網上的不同主機提供通信服務。在發送數據時,網絡層把運輸層產生的報文段或用戶數據報封裝成分組和包進行傳送。在TCP/IP體系結構中,由于網絡層使用IP協議,因此分組也叫IP數據報,簡稱數據報

這里要注意:不要把運輸層的“用戶數據報UDP”和網絡層的“IP數據報”弄混。另外,無論是哪一層的數據單元,都可籠統地用“分組”來表示。

網絡層的另一個任務就是選擇合適的路由,使源主機運輸層所傳下來的分株,能通過網絡層中的路由器找到目的主機。

這里強調指出,網絡層中的“網絡”二字已經不是我們通常談到的具體網絡,而是指計算機網絡體系結構模型中第三層的名稱.

互聯網是由大量的異構(heterogeneous)網絡通過路由器(router)相互連接起來的。互聯網使用的網絡層協議是無連接的網際協議(Intert Prococol)和許多路由選擇協議,因此互聯網的網絡層也叫做網際層IP層

數據鏈路層通常簡稱為鏈路層。兩臺主機之間的數據傳輸,總是在一段一段的鏈路上傳送的,這就需要使用專門的鏈路層的協議。 在兩個相鄰節點之間傳送數據時,數據鏈路層將網絡層交下來的IP數據報組裝程幀,在兩個相鄰節點間的鏈路上傳送幀。每一幀包括數據和必要的控制信息(如同步信息,地址信息,差錯控制等)。

在接收數據時,控制信息使接收端能夠知道一個幀從哪個比特開始和到哪個比特結束。這樣,數據鏈路層在收到一個幀后,就可從中提出數據部分,上交給網絡層。
控制信息還使接收端能夠檢測到所收到的幀中有誤差錯。如果發現差錯,數據鏈路層就簡單地丟棄這個出了差錯的幀,以避免繼續在網絡中傳送下去白白浪費網絡資源。如果需要改正數據在鏈路層傳輸時出現差錯(這就是說,數據鏈路層不僅要檢錯,而且還要糾錯),那么就要采用可靠性傳輸協議來糾正出現的差錯。這種方法會使鏈路層的協議復雜些。

5 物理層(physical layer)

在物理層上所傳送的數據單位是比特。
物理層的作用是實現相鄰計算機節點之間比特流的透明傳送,盡可能屏蔽掉具體傳輸介質和物理設備的差異。使其上面的數據鏈路層不必考慮網絡的具體傳輸介質是什么。“透明傳送比特流”表示經實際電路傳送后的比特流沒有發生變化,對傳送的比特流來說,這個電路好像是看不見的。

在互聯網使用的各種協中最重要和最著名的就是TCP/IP兩個協議。現在人們經常提到的TCP/IP并不一定單指TCP和IP這兩個具體的協議,而往往表示互聯網所使用的整個TCP/IP協議族。

上面我們對計算機網絡的五層體系結構有了初步的了解,下面附送一張七層體系結構圖總結一下。圖片來源:https://blog.csdn.net/yaopeng_2005/article/details/7064869
七層體系結構圖

二 TCP三次握手和四次揮手(面試常客)

為了準確無誤地把數據送達目標處,TCP協議采用了三次握手策略。

漫畫圖解:

圖片來源:《圖解HTTP》
TCP三次握手

簡單示意圖:
TCP三次握手

  • 客戶端–發送帶有SYN標志的數據包–一次握手–服務端
  • 服務端–發送帶有SYN/ACK標志的數據包–二次握手–客戶端
  • 客戶端–發送帶有帶有ACK標志的數據包–三次握手–服務端

為什么要傳回SYN(發起一個新鏈接)?

接收端傳回發送端所發送的SYN是為了告訴發送端,我接收到的信息確實就是你所發送的信號了。

傳了SYN,為啥還要傳ACK(確認序號有效)?

雙方通信無誤必須是兩者互相發送信息都無誤。傳了SYN,證明發送方到接收方的通道沒有問題,但是接收方到發送方的通道還需要ACK信號來進行驗證。

TCP四次揮手

斷開一個TCP連接則需要“四次揮手”:

  • 客戶端-發送一個FIN,用來關閉客戶端到服務器的數據傳送
  • 服務器-收到這個FIN,它發回一個ACK,確認序號為收到的序號加1 。和SYN一樣,一個FIN將占用一個序號
  • 服務器-關閉與客戶端的連接,發送一個FIN給客戶端
  • 客戶端-發回ACK報文確認,并將確認序號設置為收到序號加1

上面講的比較概括,推薦一篇講的比較細致的文章:https://blog.csdn.net/qzcsu/article/details/72861891

三 TCP、UDP協議的區別

TCP、UDP協議的區別

UDP在傳送數據之前不需要先建立連接,遠地主機在收到UDP報文后,不需要給出任何確認。雖然UDP不提供可靠交付,但在某些情況下UDP確是一種最有效的工作方式(一般用于即時通信),比如: QQ語音 QQ視頻 、直播等等

TCP提供面向連接的服務。在傳送數據之前必須先建立連接,數據傳送結束后要釋放連接。TCP不提供廣播或多播服務。由于TCP要提供可靠的,面向連接的運輸服務(TCP的可靠體現在TCP在傳遞數據之前,會有三次握手來建立連接,而且在數據傳遞時,有確認、窗口、重傳、擁塞控制機制,在數據傳完后,還會斷開連接用來節約系統資源),這一難以避免增加了許多開銷,如確認,流量控制,計時器以及連接管理等。這不僅使協議數據單元的首部增大很多,還要占用許多處理機資源。TCP一般用于文件傳輸、發送和接收郵件、遠程登錄等場景。

四 在瀏覽器中輸入url地址 ->> 顯示主頁的過程(面試常客)

百度好像最喜歡問這個問題。

打開一個網頁,整個過程會使用哪些協議

圖片來源:《圖解HTTP》

狀態碼

五 狀態碼

狀態碼

六 各種協議與HTTP協議之間的關系

一般面試官會通過這樣的問題來考察你對計算機網絡知識體系的理解。

圖片來源:《圖解HTTP》

各種協議與HTTP協議之間的關系

七 HTTP長連接、短連接

在HTTP/1.0中默認使用短連接。也就是說,客戶端和服務器每進行一次HTTP操作,就建立一次連接,任務結束就中斷連接。當客戶端瀏覽器訪問的某個HTML或其他類型的Web頁中包含有其他的Web資源(如JavaScript文件、圖像文件、CSS文件等),每遇到這樣一個Web資源,瀏覽器就會重新建立一個HTTP會話。

而從HTTP/1.1起,默認使用長連接,用以保持連接特性。使用長連接的HTTP協議,會在響應頭加入這行代碼:

Connection:keep-alive

在使用長連接的情況下,當一個網頁打開完成后,客戶端和服務器之間用于傳輸HTTP數據的TCP連接不會關閉,客戶端再次訪問這個服務器時,會繼續使用這一條已經建立的連接。Keep-Alive不會永久保持連接,它有一個保持時間,可以在不同的服務器軟件(如Apache)中設定這個時間。實現長連接需要客戶端和服務端都支持長連接。

HTTP協議的長連接和短連接,實質上是TCP協議的長連接和短連接。

—— 《HTTP長連接、短連接究竟是什么?》

寫在最后

計算機網絡常見問題回顧

計算機網絡最常見的問題我覺得應該是這5個了:

  • ①TCP三次握手和四次揮手、
  • ②在瀏覽器中輸入url地址->>顯示主頁的過程
  • ③HTTP和HTTPS的區別
  • ④TCP、UDP協議的區別
  • ⑤常見的狀態碼。

建議

非常推薦大家看一下 《圖解HTTP》 這本書,這本書頁數不多,但是內容很是充實,不管是用來系統的掌握網絡方面的一些知識還是說純粹為了應付面試都有很大幫助。下面的一些文章只是參考。大二學習這門課程的時候,我們使用的教材是 《計算機網絡第七版》(謝希仁編著),不推薦大家看這本教材,書非常厚而且知識偏理論,不確定大家能不能心平氣和的讀完。

轉載于:https://www.cnblogs.com/LexMoon/p/jsjwl.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/250088.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/250088.shtml
英文地址,請注明出處:http://en.pswp.cn/news/250088.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用redis做為MySQL的緩存

介紹 在實際項目中,MySQL數據庫服務器有時會位于另外一臺主機,需要通過網絡來訪問數據庫;即使應用程序與MySQL數據庫在同一個主機中,訪問MySQL也涉及到磁盤IO操作(MySQL也有一些數據預讀技術,能夠減少磁盤I…

[Head First Java] - 給線程命名

參考 - P503 public class RunThreads implements Runnable {public static void main (String[] args) {RunThreads runner new RunThreads();Thread alpha new Thread(runner);Thread beta new Thread(runner);alpha.setName("Alpha thread");beta.setName(&qu…

Cortex-M3 的SVC、PendSV異常,與操作系統(ucos實時系統)(轉)

Cortex-M3 的SVC、PendSV異常,與操作系統(ucos實時系統)轉載于:https://www.cnblogs.com/LittleTiger/p/10070824.html

快速排序的C++版

int Partition(int a[], int low, int high) {int x a[high];//將輸入數組的最后一個數作為主元&#xff0c;用它來對數組進行劃分int i low - 1;//i是最后一個小于主元的數的下標for (int j low; j < high; j)//遍歷下標由low到high-1的數{if (a[j] < x)//如果數小于…

springboot---整合shiro

Shiro是一個非常不錯的權限框架&#xff0c;它提供了登錄和權限驗證功能 1.創建數據庫腳本 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0; -- ---------------------------- -- Table structure for module -- ---------------------------- DROP TABLE IF EXISTS module; C…

[Head First Java] - 線程共享數據問題

參考 - P507 1. 說明 兩個線程共享同一份數據,每次使用數據時,需要先判斷其是否在合理范圍每次使用數據完畢使用Thread.sleep函數讓線程阻塞 2.代碼 class BankAccount {private int balance 100;public int getBalance() {return balance;}public void withdraw(int amou…

asp.net中提交表單數據時提示從客戶端(。。。)中檢測到有潛在危險的 Request.Form 值...

看到這個圖是不是很親切熟悉哈&#xff0c;做過。net的肯定都見過哈 已經 將近4年沒碰。net了&#xff0c;今天正好朋友的程序有幾個bug,讓我幫忙修復下&#xff0c;于是我就抱著試試看的心情改了改&#xff0c;改到最后一個問題的時候也就是上面的這個問題&#xff0c;我一看&…

Openresty編寫Lua代碼一例

1.前段時間糾結了很久&#xff0c;一直弄不清lua和tomcat的聯系。一直認為是lua調用tomcat的接口才可使用&#xff0c;后面才明白過來&#xff0c;進入了一個誤區&#xff0c;lua本身就是一門獨立的腳本語言。在openresty里面配置好&#xff0c;即可編寫映射和響應。 下面是自己…

Shiro表結構設計

表設計 開發用戶-角色-權限管理系統&#xff0c;首先我們需要知道用戶-角色-權限管理系統的表結構設計。 在用戶-角色-權限管理系統找那個一般會涉及5張表&#xff0c;分別為&#xff1a; 1.sys_users用戶表 2.sys_roles角色表 3.sys_permissions權限表&#xff08;或資源表&…

[Java核心技術(卷I)] - 簡易的日歷

參考 - P102~P103 1. 目標 生成一個日歷,格式如下圖所示。 ps: 當前的天數需要標記為* 2. 核心 對日歷的變量 import java.time.*; public class CalendarTest{public static void main(String[] args) {LocalDate date LocalDate.now(); // 獲取當前日期int month date…

個人作業——福大微信公眾號使用評測

案例分析&#xff1a;在福州大學公眾號上&#xff0c;我們可以即時使用手機關注福大新聞&#xff0c;查看自身課表、成績等。公眾號可能存在一些小bug影響同學們的用戶體驗。本次作業中&#xff0c;作為一個用戶——福大的學生&#xff0c;將切身體驗該公眾號的功能&#xff0c…

在winform中使用wpf窗體

在winform項目&#xff0c;通過引用dll可以添加WPF窗體&#xff0c;如下 但是如果直接在winform的項目中添加wpf窗體還是有部分問題&#xff0c;圖片的顯示。 直接在XAML界面中用Source屬性設置圖片會出現錯誤。必須通過后臺代碼的方式來實現。 image1.Source GetImageIcon(gl…

shiro---注解

RequiresAuthentication 驗證用戶是否登錄&#xff0c;等同于方法subject.isAuthenticated() 結果為true時。 RequiresUser 驗證用戶是否被記憶&#xff0c;user有兩種含義&#xff1a; 一種是成功登錄的&#xff08;subject.isAuthenticated() 結果為true&#xff09;&…

[Java核心技術(卷I)] - Java中的參數能做什么和不能做什么

1. 參考 - P123 ~ P126 2. 你將學到 Java中對方法參數能做什么和不能做什么 方法不能修改基本數據類型的參數(數值型或布爾型)方法可以改變對象參數的狀態方法不能讓一個對象參數引用一個新的對象 3. 代碼證明 public class ParamTest {public static void main(String[] ar…

軟件構造 第五章第一節 可復用性的度量、形態和外部觀察

第五章第一節 可復用性的度量、形態和外部觀察 面向復用編程(programming for reuse)&#xff1a;開發出可復用的軟件 基于復用編程(programming with reuse)&#xff1a;利用已有的可復用軟件搭建應用系統 代碼復用的類型&#xff1a; 白盒復用&#xff1a;源代碼可見&#x…

洛谷團隊月賽題:題解

10pts10pts10pts 暴力算不解釋&#xff0c;時間復雜度O(knk2)O(knk^2)O(knk2)。 30pts30pts30pts 我們觀察到nnn很大&#xff0c;楊輝三角會T&#xff0c;直接算會上溢&#xff0c;所以需要預處理出111~kkk逆元再算&#xff0c;時間復雜度O(knnlogkn2)O(knnlogkn^2)O(knnlogkn2…

Angular Forms - 自定義 ngModel 綁定值的方式

在 Angular 應用中&#xff0c;我們有兩種方式來實現表單綁定——“模板驅動表單”與“響應式表單”。這兩種方式通常能夠很好的處理大部分的情況&#xff0c;但是對于一些特殊的表單控件&#xff0c;例如input[typedatetime]、input[typefile]&#xff0c;我們需要重寫默認的表…

[web性能優化] - 使用在線工具對html、js、css進行壓縮

參考 1. 學習點 使用 在線工具對html、css、js進行壓縮學會分析壓縮前后的效率提高點 2. 解決方案: 2.1 HTML壓縮 在線壓縮nodejs提供了 html-minifier工具(在構建層對代碼進行壓縮)后端模板引擎渲染壓縮 2.2 CSS壓縮 使用html-minifier對html中的css進行壓縮使用clean-cs…

【LOJ】 #2540. 「PKUWC2018」隨機算法

題解 感覺極其神奇的狀壓dp \(dp[i][S]\)表示答案為i&#xff0c;然后不可選的點集為S 我們每次往答案里加一個點&#xff0c;然后方案數是&#xff0c;設原來可以選的點數是y&#xff0c;新加入一個點后導致了除了新加的點之外x個點不能選&#xff0c;那么方案就是把x個數在y …

Shiro的authc過濾器的執行流程

1.先執行isAccessAllowed()&#xff0c;通過subject.isAuthenticated()判斷當前session中的subject是否已經登陸過。如果在當前session即會話中已經登陸過&#xff0c;返回true&#xff0c;authc過濾器放行請求到loginUrl。 問題? 這里會有一個問題&#xff0c;如果我登陸成功…