色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

詳解計算機網絡常用知識

Linux愛好者 ? 來源:月伴飛魚 ? 作者:日常加油站 ? 2021-11-02 15:18 ? 次閱讀

OSI七層模型「物理層」

首先解決兩臺物理機之間的通信需求,具體就是機器A往機器B發送比特流,機器B能收到比特流。

物理層主要定義了物理設備的標準,如網線的類型,光纖的接口類型,各種傳輸介質的傳輸速率。

主要作用是傳輸比特流(0101二進制數據),將比特流轉化為電流強弱傳輸,到達目的后再轉化為比特流,即常說的數模轉化和模數轉換。

這層數據叫做比特。「網卡工作在這層」。

物理層是OSI七層模型的物理基礎,沒有它就談不上數據傳輸了

物理層就是由實物所承載的,所以作比喻的話,公路、汽車和飛機等承載貨物(數據)的交通工具,就是物理層的象征

「數據鏈路層」

在傳輸比特流的過程中,會產生錯傳、數據傳輸不完整的可能。

數據鏈路層定義了「如何格式化數據進行傳輸」,以及如何控制對物理介質的訪問。通常提供錯誤檢測和糾正,以確保數據傳輸的準確性。

本層將比特數據組成幀,交換機工作在這層,對幀解碼,并根據幀中包含的信息把數據發送到正確的接收方。

該層負責物理層面上互連的節點之間的通信傳輸。例如與1個以太網相連的兩個節點間的通訊。

常見的協議有 HDLC、PPP、SLIP等

數據鏈路層會將0、1序列劃分為具有意義的數據幀傳送給對端(「數據幀的生成與接收」)

網絡層」

隨著網絡節點的不斷增加,點對點通訊需要通過多個節點,如何找到目標節點,如何選擇最佳路徑成為首要需求。

網絡層主要功能是將網絡地址轉化為對應的物理地址,并決定如何將數據從發送方路由到接收方。

網絡層通過綜合考慮發送優先權、網絡擁塞程度、服務質量以及可選路由的花費來決定從一個網絡中節點A到另一個網絡中節點B的最佳路徑。

由于網絡層處理并智能指導數據傳送,路由器連接網絡隔斷,所以路由器屬于網絡層。

此層的數據稱之為數據包。本層需要關注的協議TCP/IP協議中的IP協議。

網絡層負責將數據傳輸到目標地址。目標地址可以使多個網絡通過路由器連接而成的某一個地址。因此這一層主要負責「尋址和路由選擇」。主要由 IP、ICMP 兩個協議組成

網絡層將數據從發送端的主機發送到接收端的主機,兩臺主機間可能會存在很多數據鏈路,但網絡層就是負責找出一條相對順暢的通路將數據傳遞過去。傳輸的地址使用的是IP地址。IP地址通過不斷轉發到更近的IP地址,最終可以到達目標地址

「傳輸層」

隨著網絡通信需求的進一步擴大,通信過程中需要發送大量的數據,如海量文件傳輸,可能需要很長時間,網絡在通信的過程中會中斷很多次,此時為了保證傳輸大量文件時的準確性,需要對發送出去的數據進行切分,切割為一個一個的段落(Segement)發送,其中一個段落丟失是否重傳,段落是否按順序到達,是傳輸層需要考慮的問題。

傳輸層解決了主機間的數據傳輸,數據間的傳輸可以是不同網絡,并且傳輸層解決了「傳輸質量」的問題。

傳輸層需要關注的協議有TCP/IP協議中的TCP協議和UDP協議。

「會話層」

自動收發包,自動尋址。

會話層作用是「負責建立和斷開通信連接」,何時建立,斷開連接以及保持多久的連接。常見的協議有 ADSP、RPC 等

「表示層」

Linux給WIndows發包,不同系統語法不一致,如exe不能在Linux下執行,shell不能在Windows不能直接運行。于是需要表示層。

解決「不同系統之間通信語法問題」,在表示層數據將按照網絡能理解的方案進行格式化,格式化因所使用網絡的不同而不同。

它主要負責數據格式的轉換。具體來說,就是講設備固有的數據格式轉換為網絡標準格式。常見的協議有ASCII、SSL/TLS 等

「應用層」

規定發送方和接收方必須使用一個固定長度的消息頭,消息頭必須使用某種固定的組成,消息頭中必須記錄消息體的長度等信息,方便接收方正確解析發送方發送的數據。

應用層旨在更「方便應用從網絡中接收的數據」,重點關注TCP/IP協議中的HTTP協議

四層傳輸層數據被稱作「段」(Segments);

三層網絡層數據被稱做「包」(Packages);

二層數據鏈路層時數據被稱為「幀」(Frames);

一層物理層時數據被稱為「比特流」(Bits)。

TCP和IP模型OSI模型注重通信協議必要的功能;TCP/IP更強調在計算機上實現協議應該開發哪種程序

「TCP/IP劃分了四層網絡模型」

第一層:應用層,主要有負責web瀏覽器的HTTP協議, 文件傳輸的FTP協議,負責電子郵件的SMTP協議,負責域名系統的DNS等

第二層:傳輸層,主要是有「可靠傳輸」的TCP協議,特別「高效」的UDP協議。主要負責傳輸應用層的數據包。

第三層:網絡層,主要是IP協議。主要負責尋址(找到目標設備的位置)

第四層:數據鏈路層,主要是負責轉換數字信號和物理二進制信號

「四層網絡協議的作用」

發送端是由上至下,把上層來的數據在頭部加上各層協議的數據(部首)再下發給下層。

接受端則由下而上,把從下層接受到的數據進行解密和去掉頭部的部首后再發送給上層。

層層加密和解密后,應用層最終拿到了需要的數據。

「舉個例子:」

我們需要發送一個「index.html」。

兩臺電腦在應用層都使用HTTP協議(即都使用瀏覽器)。

在傳輸層,TCP協議會將HTTP協議發送的數據看作一個數據包,并在這個數據包前面加上TCP包的一部分信息(部首)

在網絡層,IP協議會將TCP協議要發送的數據看作一個數據包,同樣的在這個數據包前端加上IP協議的部首

在數據鏈路層,對應的協議也會在IP數據包前端加上以太網的部首。

源設備和目標設備通過網線連接,就可以通過物理層的二進制傳輸數據。

數據鏈路層,會使用對應的協議找到物理層的二進制數據,解碼得到以太網的部首信息和對應的IP數據包,再將IP數據包傳給上層的網絡層。

數據鏈路層》網絡層》傳輸層》應用層,一層層的解碼,最后就可以在瀏覽器中得到目標設備傳送過來的「index.html」。

「TCP/IP協議族」

從字面意義上來講,TCP/IP是指「傳輸層」的TCP協議和「網絡層」的IP協議。

實際上,TCP/IP只是利用 IP 進行通信時所必須用到的協議群的統稱。

具體來說,在網絡層是IP/ICMP協議、在傳輸層是TCP/UDP協議、在應用層是SMTP、FTP、以及 HTTP 等。他們都屬于 TCP/IP 協議。

網絡設備交換機

交換機可以接入多臺電腦

每個電腦網卡的 「MAC 地址」都是不一樣的,電腦發送數據時,數據頭部攜帶網卡的 MAC 地址,用 MAC 地址標識來不同的電腦

交換機就可以識別數據頭部的 MAC 地址來區分不同的電腦

交換機除了能識別不同的電腦,還需要找到電腦連接的「交換機端口」,才能順利的把數據從相應端口發送出去

交換機通過「自學機制」,把學習到的設備 MAC 地址和交換機端口號添加到 「MAC 地址表」,并根據 MAC 地址表進行數據「轉發」

路由器

交換機需要記錄的 MAC 地址表也越來越多,需要的交換機也越來越多

但是交換機的「容量和性能有限」,MAC 地址表無法記錄全世界電腦的 MAC 地址和對應的端口號,MAC 地址表太大也無法快速查找到對應的 MAC 地址表項

于是就有了三層網絡設備「路由器」,路由器可以把全世界的網絡連接起來

局域網內的網絡連接可以使用「交換機」,例如一個公司內的網絡或者一個校園內的網絡通過交換機連接

不同區域的局域網互聯使用「路由器」

?

那么如何區分不同的網絡區域呢?又是如何跨網絡區域進行數據轉發的呢?

?路由器有多個端口,分別連接不同的網絡區域,不同網絡區域的 IP 地址「網絡號不同」

它通過識別目的 IP 地址的「網絡號」,再根據「路由表」進行數據轉發

HTTP「請求方法」

HTTP1.0 定義了三種請求方法:GET, POST 和 HEAD方法。

HTTP1.1 新增了六種請求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

序 號方法描述

1GET請求指定的頁面信息,并返回實體主體。

2HEAD類似于 GET 請求,只不過返回的響應中沒有具體的內容,用于獲取報頭

3POST向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST 請求可能會導致新的資源的建立和/或已有資源的修改。

4PUT從客戶端向服務器傳送的數據取代指定的文檔的內容。

5DELETE請求服務器刪除指定的頁面。

6CONNECTHTTP/1.1 協議中預留給能夠將連接改為管道方式的代理服務器。

7OPTIONS允許客戶端查看服務器的性能。

8TRACE回顯服務器收到的請求,主要用于測試或診斷。

9PATCH是對 PUT 方法的補充,用來對已知資源進行局部更新 。

「GET請求和POST請求的區別」

GET 請求的請求參數是添加到 head 中,可以在 url 中可以看到;POST 請求的請求參數是添加到body中,在url 中不可見。

請求的url有長度限制,這個限制由瀏覽器和 web 服務器決定和設置的,例如IE瀏覽器對 URL的最大限制為2083個字符,如果超過這個數字,提交按鈕沒有任何反應,因為GET請求的參數是添加到URL中,所以GET請求的URL的長度限制需要將請求參數長度也考慮進去。而POST請求不用考慮請求參數的長度。

GET請求產生一個數據包; POST請求產生2個數據包,在火狐瀏覽器中,產生一個數據包,這個區別點在于瀏覽器的請求機制,先發送請求頭,再發送請求體,因為GET沒有請求體,所以就發送一個數據包,而POST包含請求體,所以發送兩次數據包,但是由于火狐機制不同,所以發送一個數據包。

GET 請求會被瀏覽器主動緩存下來,留下歷史記錄,而 POST 默認不會。

GET是冪等的,而POST不是(冪等表示執行相同的操作,結果也是相同的)

GET是獲取數據,POST是修改數據

狀態碼

「狀態碼由3位數字組成,第一位定義響應的類別」

1XX:指示信息,表示請求以接收,繼續處理

2XX:成功,表示請求已經被成功接收、理解、接受

200 OK 是最常見的成功狀態碼,表示一切正常。如果是非 HEAD 請求,服務器返回的響應頭都會有 body 數據。

204 No Content 也是常見的成功狀態碼,與 200 OK 基本相同,但響應頭沒有 body 數據。

206 Partial Content 是應用于 HTTP 分塊下載或斷電續傳,表示響應返回的 body 數據并不是資源的全部,而是其中的一部分,也是服務器處理成功的狀態。

3XX:狀態碼表示客戶端請求的資源發送了變動,需要客戶端用新的 URL 重新發送請求獲取資源,也就是「重定向」。

301 Moved Permanently 表示永久重定向,說明請求的資源已經不存在了,需改用新的 URL 再次訪問,搜索引擎在抓取新內容的同時也將舊的網址交換為重定向之后的網址。

302 Moved Permanently 表示臨時重定向,說明請求的資源還在,但暫時需要用另一個 URL 來訪問,搜索引擎會抓取新的內容而保存舊的網址。

301 和 302 都會在響應頭里使用字段 Location,指明后續要跳轉的 URL,瀏覽器會自動重定向新的 URL。

304 Not Modified不具有跳轉的含義,表示資源未修改,重定向已存在的緩沖文件,也稱緩存重定向,用于緩存控制。

4XX:狀態碼表示客戶端發送的「報文有誤」,服務器無法處理,也就是錯誤碼的含義。

400 Bad Request表示客戶端請求的報文有錯誤。

401 Unauthorized:缺失或錯誤的認證,這個狀態代碼必須和WWW-Authenticate報頭域一起使用。

403 Forbidden表示服務器禁止訪問資源,并不是客戶端的請求出錯。

404 Not Found表示請求的資源在服務器上不存在或未找到,所以無法提供給客戶端。

5XX:狀態碼表示客戶端請求報文正確,但是「服務器處理時內部發生了錯誤」,屬于服務器端的錯誤碼。

501 Not Implemented 表示客戶端請求的功能還不支持。

502 Bad Gateway 通常是服務器作為網關或代理時返回的錯誤碼,表示服務器自身工作正常,訪問后端服務器發生了錯誤。

503 Service Unavailable 表示服務器當前很忙,暫時無法響應服務器。

504 Gateway Timeout:網關超時,由作為代理或網關的服務器使用,表示不能及時地從遠程服務器獲得應答。

「301和302的區別」

301重定向,指頁面永久性轉移,表示為資源或頁面永久性地轉移到了另一個位置。

301是HTTP協議中的一種狀態碼,當用戶或搜索引擎向服務器發出瀏覽請求時,服務器返回的HTTP數據流中頭信息中包含狀態碼 301 ,表示該資源已經永久改變了位置。

302重定向是頁面暫時性轉移,搜索引擎會抓取新的內容而保存舊的網址并認為新的網址只是暫時的。

HTTP1.1

「長連接」

HTTP 1.1支持長連接

HTTP 1.0規定瀏覽器與服務器只保持短暫的連接,瀏覽器的每次請求都需要與服務器建立一個TCP連接,服務器完成請求處理后立即斷開TCP連接,服務器不跟蹤每個客戶也不記錄過去的請求。

HTTP 1.1則支持持久連接Persistent Connection,并且默認使用,在同一個TCP的連接中可以傳送多個HTTP請求和響應,多個請求和響應可以重疊,多個請求和響應可以同時進行,更加多的請求頭和響應頭

HTTP 1.1的持續連接,也需要增加新的請求頭來幫助實現,例如,Connection請求頭的值為Keep-Alive時,客戶端通知服務器返回本次請求結果后保持連接;Connection請求頭的值為Close時,客戶端通知服務器返回本次請求結果后關閉連接。

「管道網絡傳輸」

HTTP/1.1 采用了長連接的方式,這使得管道網絡傳輸成為了可能。

即可在同一個 TCP 連接里面,客戶端可以發起多個請求,只要第一個請求發出去了,不必等其回來,就可以發第二個請求出去,可以「減少整體的響應時間。」

舉例來說,客戶端需要請求兩個資源。以前的做法是,在同一個TCP連接里面,先發送 A 請求,然后等待服務器做出回應,收到后再發出 B 請求,管道機制則是允許瀏覽器同時發出 A 請求和 B 請求。

但是服務器還是按照「順序」,先回應 A 請求,完成后再回應 B 請求,要是 前面的回應特別慢,后面就會有許多請求排隊等著。

「Host字段」

在HTTP1.0中認為每臺服務器都綁定一個唯一的IP地址,因此,請求消息中的URL并沒有傳遞主機名,但隨著虛擬主機技術的發展,在一臺物理服務器上可以存在多個虛擬主機,并且它們共享一個IP地址。

HTTP1.1的請求消息和響應消息都應支持Host頭域,且請求消息中如果沒有Host頭域會報告一個錯誤(400 Bad Request)。

此外,服務器應該接受以絕對路徑標記的資源請求。

「100Status」

HTTP/1.1加入了一個新的狀態碼100。

客戶端事先發送一個只帶頭域的請求,如果服務器因為權限拒絕了請求,就回送響應碼401(Unauthorized);

如果服務器接收此請求就回送響應碼100,客戶端就可以繼續發送帶實體的完整請求了。

100狀態代碼的使用,允許客戶端在發request消息body之前先用request header試探一下server,看server要不要接收request body,再決定要不要發request body。

「Chunked Transfer Coding」

HTTP/1.1將發送方將消息分割成若干個任意大小的數據塊,每個數據塊在發送時都會附上塊的長度,最后用一個零長度的塊作為消息結束的標志。

這種方法允許發送方只緩沖消息的一個片段,避免緩沖整個消息帶來的過載。

「Cache」

HTTP/1.1在1.0的基礎上加入了一些Cache的新特性,當緩存對象的Age超過Expire時變為Stable對象,Cache不需要直接拋棄Stable對象,而是與源服務器進行重新激活。

HTTP2.0

「HTTP2.0和HTTP1.X相比的新特性」

新的二進制格式,HTTP1.x的解析是基于文本

多路復用,即連接共享,即每一個request都是是用作連接共享機制的,一個request對應一個id,這樣一個連接上可以有多個request,每個連接的request可以隨機的混雜在一起,接收方可以根據request的 id將request再歸屬到各自不同的服務端請求里面

header壓縮,HTTP1.x的header帶有大量信息,而且每次都要重復發送,HTTP2.0使用encoder來減少需要傳輸的header大小,通訊雙方各自cache一份header fields表,既避免了重復header的傳輸,又減小了需要傳輸的大小

服務端推送

HTTP/2 還在一定程度上改善了傳統的請求 - 應答工作模式,服務不再是被動地響應,也可以「主動」向客戶端發送消息。

舉例來說,在瀏覽器剛請求 HTML 的時候,就提前把可能會用到的 JS、CSS 文件等靜態資源主動發給客戶端,「減少延時的等待」,也就是服務器推送。

「數據流」

HTTP/2 的數據包不是按順序發送的,同一個連接里面連續的數據包,可能屬于不同的回應。

因此,必須要對數據包做標記,指出它屬于哪個回應。

每個請求或回應的所有數據包,稱為一個數據流(Stream)。

每個數據流都標記著一個獨一無二的編號,其中規定客戶端發出的數據流編號為奇數, 服務器發出的數據流編號為偶數

客戶端還可以「指定數據流的優先級」。優先級高的請求,服務器就先響應該請求。

「HTTP2.0的多路復用和HTTP1.X中的長連接復用有什么區別」

HTTP/1.1的Pipeling為若干個請求排隊串行化單線程處理,后面的請求等待前面請求的返回才能獲得執行機會,一旦有某請求超時等,后續請求只能被阻塞,毫無辦法;

HTTP2.0多個請求可同時在一個連接上并行執行,某個請求任務耗時嚴重,不會影響到其它連接的正常執行

HTTP3.0

「使用UDP協議」

HTTP/2 主要的問題在于:多個 HTTP 請求在復用一個 TCP 連接,下層的 TCP 協議是不知道有多少個 HTTP 請求的。

所以一旦發生了丟包現象,就會觸發 TCP 的重傳機制,這樣在一個 TCP 連接中的「所有的 HTTP 請求都必須等待這個丟了的包被重傳回來」。

HTTP/1.1 中的管道傳輸中如果有一個請求阻塞了,那么隊列后請求也統統被阻塞住了

HTTP/2 多請求復用一個TCP連接,一旦發生丟包,就會阻塞住所有的 HTTP 請求。

這都是基于 TCP 傳輸層的問題,所以 「HTTP/3 把 HTTP 下層的 TCP 協議改成了 UDP!」

HTTPS

「HTTP與HTTPS的區別」

HTTP 是明文傳輸協議,HTTPS 協議是由 SSL+HTTP 協議構建的可進行加密傳輸、身份認證的網絡協議,比 HTTP 協議安全

HTTPS比HTTP更加安全,對搜索引擎更友好,利于SEO,谷歌、百度優先索引HTTPS網頁

HTTPS需要用到SSL證書,而HTTP不用

HTTPS標準端口443,HTTP標準端口80

HTTPS基于傳輸層,HTTP基于應用層

HTTPS在瀏覽器顯示綠色安全鎖,HTTP沒有顯示

工作原理

HTTPS 協議會對傳輸的數據進行加密,而加密過程是使用了非對稱加密實現

HTTPS的整體過程分為證書驗證和數據傳輸階段,具體的交互過程如下:

Client發起一個HTTPS的請求

Server把事先配置好的公鑰證書返回給客戶端。

Client驗證公鑰證書:比如是否在有效期內,證書的用途是不是匹配Client請求的站點,是不是在CRL吊銷列表里面,它的上一級證書是否有效,這是一個遞歸的過程,直到驗證到根證書(操作系統內置的Root證書或者Client內置的Root證書),如果驗證通過則繼續,不通過則顯示警告信息。

Client使用偽隨機數生成器生成加密所使用的對稱密鑰,然后用證書的公鑰加密這個對稱密鑰,發給Server。

Server使用自己的私鑰解密這個消息,得到對稱密鑰。至此,Client和Server雙方都持有了相同的對稱密鑰。

Server使用對稱密鑰加密明文內容A,發送給Client。

Client使用對稱密鑰解密響應的密文,得到明文內容A。

Client再次發起HTTPS的請求,使用對稱密鑰加密請求的明文內容B,然后Server使用對稱密鑰解密密文,得到明文內容B。

數字證書

客戶端先向服務器端索要公鑰,然后用公鑰加密信息,服務器收到密文后,用自己的私鑰解密。

?

這就存在些問題,如何保證公鑰不被篡改和信任度?

?所以這里就需要借助第三方權威機構 CA (數字證書認證機構),將「服務器公鑰放在數字證書」(由數字證書認證機構頒發)中,只要證書是可信的,公鑰就是可信的。

通過數字證書的方式保證服務器公鑰的身份,解決冒充的風險。

請求報文

「請求頭」

HTTP 請求報文由3部分組成(請求行+請求頭+請求體)

「常見的HTTP報文頭屬性」

Accpet

告訴服務端,客戶端接收什么類型的響應

Referer

表示這是請求是從哪個URL進來的,比如想在網上購物,但是不知道選擇哪家電商平臺,你就去問度娘,說哪家電商的東西便宜啊,然后一堆東西彈出在你面前,第一給就是某寶,當你從這里進入某寶的時候,這個請求報文的Referer就是:www.baidu.com

Cache-Control

對緩存進行控制,如一個請求希望響應的內容在客戶端緩存一年,或不被緩可以通過這個報文頭設置

Accept-Encoding

例如:Accept-Encoding:gzip, deflate(這兩種都是壓縮格式)

這個屬性是用來告訴服務器能接受什么編碼格式,包括字符編碼,壓縮形式(一般都是壓縮形式)

Host

指定要請求的資源所在的主機和端口

User-Agent:告訴服務器,客戶端使用的操作系統、瀏覽器版本和名稱

Connection

決定當前事務(三次握手和四次揮手)完成后,是否關閉網絡連接。

持久連接,事務完成后不關閉網絡連接 :Connection: keep-alive非持久連接,事務完成后關閉網絡連接:Connection: close響應報文

響應報文與請求報文一樣,由三個部分組成(響應行,響應頭,響應體)

「HTTP響應報文屬性」

Cache-Control

響應輸出到客戶端后,服務端通過該屬性告訴客戶端該怎么控制響應內容的緩存

ETag

表示你請求資源的版本,如果該資源發生啦變化,那么這個屬性也會跟著變

Location

在重定向中或者創建新資源時使用

Set-Cookie

服務端可以設置客戶端的cookie

TCPTCP是一個傳輸層協議,提供可靠傳輸,支持全雙工,是一個連接導向的協議。

「雙工/單工」

在任何一個時刻,如果數據只能單向發送,就是單工。

如果在某個時刻數據可以向一個方向傳輸,也可以向另一個方向反方向傳輸,而且交替進行,叫作半雙工;半雙工需要至少 1 條線路。

如果任何時刻數據都可以雙向收發,這就是全雙工,全雙工需要大于 1 條線路。

TCP 是一個雙工協議,數據任何時候都可以雙向傳輸。

這就意味著客戶端和服務端可以平等地發送、接收信息。

「TCP協議的主要特點」

TCP是面向連接的運輸層協議;所謂面向連接就是雙方傳輸數據之前,必須先建立一條通道,例如三次握手就是建議通道的一個過程,而四次揮手則是結束銷毀通道的一個其中過程。

每一條TCP連接只能有兩個端點(即兩個套接字),只能是點對點的;

TCP提供可靠的傳輸服務。傳送的數據無差錯、不丟失、不重復、按序到達;

TCP提供全雙工通信。允許通信雙方的應用進程在任何時候都可以發送數據,因為兩端都設有發送緩存和接受緩存;

面向字節流。雖然應用程序與TCP交互是一次一個大小不等的數據塊,但TCP把這些數據看成一連串無結構的字節流,它不保證接收方收到的數據塊和發送方發送的數據塊具有對應大小關系,例如,發送方應用程序交給發送方的TCP10個數據塊,接收方的TCP可能只用收到的4個數據塊字節流交付給上層的應用程序

「TCP的可靠性原理」

可靠傳輸有如下兩個特點:

傳輸信道無差錯,保證傳輸數據正確;

不管發送方以多快的速度發送數據,接收方總是來得及處理收到的數據;

首先,采用三次握手來建立TCP連接,四次握手來釋放TCP連接,從而保證建立的傳輸信道是可靠的。

其次,TCP采用了連續ARQ協議(回退N(Go-back-N);超時自動重傳)來保證數據傳輸的正確性,使用滑動窗口協議來保證接方能夠及時處理所接收到的數據,進行流量控制。

最后,TCP使用慢開始、擁塞避免、快重傳和快恢復來進行擁塞控制,避免網絡擁塞。

報文段

TCP雖面向字節流,但傳送的數據單元為報文段

報文段 = 首部 + 數據2部分

TCP的全部功能體現在它首部中各字段的作用

?

首部前20個字符固定、后面有4n個字節是根據需而增加的選項

故 TCP首部最小長度 = 20字節

?「端口」:

源端口號和目地端口各占16位兩個字節,也就是端口的范圍是2^16=65535另外1024以下是系統保留的,從1024-65535是用戶使用的端口范圍

「seq序號」:占4字節,TCP連接中傳送的字節流中的每個字節都按順序編號。

例如:一段報文的序號字段值是107,攜帶的數據是100個字段,下一個報文段序號從107+100=207開始。

「ack確認號」:4個字節,是期望收到對方下一個報文段的第一個數據字節的序號。

例如:B收到A發送的報文,其序號字段是301,數據長度是200字節,表明B正確收到A發送的到序號500為止的數據(301+200-1=500),B期望收到A下一個數據序號是501,B發送給A的確認報文段中把ack確認號置為501。

「數據偏移」:頭部有可選字段,長度不固定,指出TCP報文段的數據起始處距離報文段的起始處有多遠。

「保留」:保留今后使用的,被標為1。

「控制位」:由8個標志位組成。每個標志位表示一個控制功能。

其中主要的6個:

「URG緊急指針標志」,為1表示緊急指針有效,為0忽略緊急指針。

「ACK確認序號標志」,為1表示確認號有效,為0表示報文不含確認信息,忽略確認號字段,上面的確認號是否有效就是通過該標識控制的。

「PSH標志」,為1表示帶有push標志的數據,指示接收方在接收到該報文段以后,應盡快將該報文段交給應用程序,而不是在緩沖區排隊。

「RST重置連接標志」,重置因為主機崩潰或其他原因而出現錯誤的連接,或用于拒絕非法的報文段或非法的連接。

「SYN同步序號」,同步序號,用于建立連接過程,在連接請求中,SYN=1和ACK=0表示該數據段沒有使用捎帶的確認域,而連接應答捎帶一個確認,即SYN=1和ACK=1。。

「FIN終止標志」,用于釋放連接,為1時表示發送方沒有發送了。

「窗口」:滑動窗口大小,用來告知發送端接收端緩存大小,以此控制發送端發送數據的速率,從而達到流量控制。

「校驗和」:奇偶校驗,此校驗和是對整個的TCP報文段(包括TCP頭部和TCP數據),以16位進行計算所得,由發送端計算和存儲,接收端進行驗證。

「緊急指針」:只有控制位中的URG為1時才有效,指出本報文段中的緊急數據的字節數。

「選項」:其長度可變,定義其他的可選參數。

粘包與拆包

TCP是面向字節流的協議,把上層應用層的數據看成字節流,所以它發送的不是固定大小的數據包,TCP協議也沒有字段說明發送數據包的大小。

而且TCP不保證接受方應用程序收到的數據塊和發送應用程序發送的數據塊具有對應的大小關系

比如發送方應用程序交給發送方TCP 10個數據塊,接受方TCP可能只用了4個數據塊就完整的把接受到的字節流交給了上層應用程序。

TCP底層并不了解上層業務數據的具體含義,它會根據TCP緩沖區的實際情況進行包的劃分,所以在業務上認為,一個完整的包可能會被TCP拆分成多個包進行發送,也有可能把多個小的包封裝成一個大的數據包發送,這就是所謂的TCP粘包和拆包問題

「TCP粘包/拆包解決策略」

由于TCP無法理解上一層的業務數據特點,所以TCP是無法保證發送的數據包不發生粘包和拆包,這個問題只能通過上層的協議棧設計來解決,解決思路有一下幾種:

消息定長:每個發送的數據包大小固定,比如100字節,不足100字節的用空格補充,接受方取數據的時候根據這個長度來讀取數據

消息末尾增加換行符來表示一條完整的消息:接收方讀取的時候根據換行符來判斷是否是一條完整的消息,如果消息的內容也包含換行符,那么這種方式就不合適了。

將消息分為消息頭和消息尾兩部分,消息頭指定數據長度,根據消息長度來讀取完整的消息,例如UDP協議是這么設計的,用兩個字節來表示消息長度,所以UDP不存在粘包和拆包問題。

三次握手

「第一次握手」:

客戶端將TCP報文標志位SYN置為1,隨機產生一個序號值seq=J,保存在TCP首部的序列號字段里,指明客戶端打算連接的服務器的端口,并將該數據包發送給服務器端,發送完畢后,客戶端進入SYN_SENT狀態,等待服務器端確認。

「第二次握手」:

服務器端收到數據包后由標志位SYN=1知道客戶端請求建立連接,服務器端將TCP報文標志位SYN和ACK都置為1,ack=J+1,隨機產生一個序號值seq=K,并將該數據包發送給客戶端以確認連接請求,服務器端進入SYN_RCVD狀態。

「第三次握手」:

客戶端收到確認后,檢查ack是否為J+1,ACK是否為1,如果正確則將標志位ACK置為1,ack=K+1,并將該數據包發送給服務器端,服務器端檢查ack是否為K+1,ACK是否為1,如果正確則連接建立成功,客戶端和服務器端進入ESTABLISHED狀態,完成三次握手,隨后客戶端與服務器端之間可以開始傳輸數據了。

「上面寫的ack和ACK,不是同一個概念:」

小寫的ack代表的是頭部的確認號Acknowledge number, 縮寫ack,是對上一個包的序號進行確認的號,ack=seq+1。

大寫的ACK,則是我們上面說的TCP首部的標志位,用于標志的TCP包是否對上一個包進行了確認操作,如果確認了,則把ACK標志位設置成1。

「TCP為什么三次握手而不是兩次握手」

為了實現可靠數據傳輸, TCP 協議的通信雙方, 都必須維護一個序列號, 以標識發送出去的數據包中, 哪些是已經被對方收到的。三次握手的過程即是通信雙方相互告知序列號起始值, 并確認對方已經收到了序列號起始值的必經步驟

如果只是兩次握手, 至多只有連接發起方的起始序列號能被確認, 另一方選擇的序列號則得不到確認

「《計算機網絡》中是這樣說的:」

為了防止已失效的連接請求報文段突然又傳送到了服務端,因而產生錯誤。

?

在書中同時舉了一個例子,如下:

?假如client發出的第一個連接請求報文段并沒有丟失,而是在某個網絡結點長時間的滯留了,以致延誤到連接釋放以后的某個時間才到達server,本來這是一個早已失效的報文段,但server收到此失效的連接請求報文段后,就誤認為是client再次發出的一個新的連接請求。

于是就向client發出確認報文段,同意建立連接,假設不采用「三次握手」,那么只要server發出確認,新的連接就建立了,由于現在client并沒有發出建立連接的請求,因此不會理睬server的確認,也不會向server發送數據。

但server卻以為新的連接已經建立,并一直等待client發來數據,這樣,server的很多資源就白白浪費掉了。

采用「三次握手」的辦法可以防止上述現象發生,例如剛才那種情況,client不會向server的確認發出確認,server由于收不到確認,就知道client并沒有要求建立連接。

「什么是半連接隊列」

服務器第一次收到客戶端的 SYN 之后,就會處于 SYN_RCVD狀態,此時雙方還沒有完全建立其連接,服務器會把此種狀態下請求連接放在一個隊列里,我們把這種隊列稱之為「半連接隊列」。

當然還有一個「全連接隊列」,就是已經完成三次握手,建立起連接的就會放在全連接隊列中。如果隊列滿了就有可能會出現丟包現象。

補充一點關于「SYN-ACK 重傳次數」的問題:

服務器發送完SYN-ACK包,如果未收到客戶確認包,服務器進行首次重傳,等待一段時間仍未收到客戶確認包,進行第二次重傳,如果重傳次數超過系統規定的最大重傳次數,系統將該連接信息從半連接隊列中刪除。

「三次握手過程中可以攜帶數據嗎」

其實第三次握手的時候,是可以攜帶數據的,也就是說,第一次、第二次握手不可以攜帶數據,而第三次握手是可以攜帶數據的。

假如第一次握手可以攜帶數據的話,如果有人要惡意攻擊服務器,那他每次都在第一次握手中的 SYN 報文中放入大量的數據,因為攻擊者根本就不理服務器的接收、發送能力是否正常,然后瘋狂著重復發 SYN 報文的話,這會讓服務器花費很多時間、內存空間來接收這些報文。也就是說,第一次握手可以放數據的話,其中一個簡單的原因就是會讓服務器更加容易受到攻擊了。

而對于第三次的話,此時客戶端已經處于 established 狀態,也就是說,對于客戶端來說,他已經建立起連接了,并且也已經知道服務器的接收、發送能力是正常的了,所以能攜帶數據沒啥毛病。

四次揮手

揮手請求可以是Client端,也可以是Server端發起的,我們假設是Client端發起:

第一次揮手:Client端發起揮手請求,向Server端發送標志位是FIN報文段,設置序列號seq,此時,Client端進入FIN_WAIT_1狀態,這表示Client端沒有數據要發送給Server端了。

第二次揮手:Server端收到了Client端發送的FIN報文段,向Client端返回一個標志位是ACK的報文段,ack設為seq加1,Client端進入FIN_WAIT_2狀態,Server端告訴Client端,我確認并同意你的關閉請求。

第三次揮手:Server端向Client端發送標志位是FIN的報文段,請求關閉連接,同時Client端進入LAST_ACK狀態。

第四次揮手 :Client端收到Server端發送的FIN報文段,向Server端發送標志位是ACK的報文段,然后Client端進入TIME_WAIT狀態,Server端收到Client端的ACK報文段以后,就關閉連接,此時,Client端等待2MSL的時間后依然沒有收到回復,則證明Server端已正常關閉,那好,Client端也可以關閉連接了。

「為什么連接的時候是三次握手,關閉的時候卻是四次握手?」

建立連接時因為當Server端收到Client端的SYN連接請求報文后,可以直接發送SYN+ACK報文。其中ACK報文是用來應答的,SYN報文是用來同步的。所以建立連接只需要三次握手。

由于TCP協議是一種面向連接的、可靠的、基于字節流的運輸層通信協議,TCP是全雙工模式。

這就意味著,關閉連接時,當Client端發出FIN報文段時,只是表示Client端告訴Server端數據已經發送完畢了。當Server端收到FIN報文并返回ACK報文段,表示它已經知道Client端沒有數據發送了,但是Server端還是可以發送數據到Client端的,所以Server很可能并不會立即關閉SOCKET,直到Server端把數據也發送完畢。

當Server端也發送了FIN報文段時,這個時候就表示Server端也沒有數據要發送了,就會告訴Client端,我也沒有數據要發送了,之后彼此就會愉快的中斷這次TCP連接。

「為什么TIME_WAIT要等待2MSL?」

MSL:報文段最大生存時間,它是任何報文段被丟棄前在網絡內的最長時間。

有以下兩個原因:

第一點:保證TCP協議的全雙工連接能夠可靠關閉:由于IP協議的不可靠性或者是其它網絡原因,導致了Server端沒有收到Client端的ACK報文,那么Server端就會在超時之后重新發送FIN,如果此時Client端的連接已經關閉處于CLOESD狀態,那么重發的FIN就找不到對應的連接了,從而導致連接錯亂,所以,Client端發送完最后的ACK不能直接進入CLOSED狀態,而要保持TIME_WAIT,當再次收到FIN的時候,能夠保證對方收到ACK,最后正確關閉連接。

第二點:保證這次連接的重復數據段從網絡中消失如果Client端發送最后的ACK直接進入CLOSED狀態,然后又再向Server端發起一個新連接,這時不能保證新連接的與剛關閉的連接的端口號是不同的,也就是新連接和老連接的端口號可能一樣了,那么就可能出現問題:如果前一次的連接某些數據滯留在網絡中,這些延遲數據在建立新連接后到達Client端,由于新老連接的端口號和IP都一樣,TCP協議就認為延遲數據是屬于新連接的,新連接就會接收到臟數據,這樣就會導致數據包混亂,所以TCP連接需要在TIME_WAIT狀態等待2倍MSL,才能保證本次連接的所有數據在網絡中消失。

流量控制

「RTT和RTO」

RTT:發送一個數據包到收到對應的ACK,所花費的時間

RTO:重傳時間間隔(TCP在發送一個數據包后會啟動一個重傳定時器,RTO即定時器的重傳時間)

開始預先算一個定時器時間,如果回復ACK,重傳定時器就自動失效,即不需要重傳;如果沒有回復ACK,RTO定時器時間就到了,重傳。

RTO是本次發送當前數據包所預估的超時時間,RTO不是固定寫死的配置,是經過RTT計算出來的。

「滑動窗口」

TCP的滑動窗口主要有兩個作用:

保證TCP的可靠性

保證TCP的流控特性

TCP報文頭有個字段叫Window,用于接收方通知發送方自己還有多少緩存區可以接收數據,發送方根據接收方的處理能力來發送數據,不會導致接收方處理不過來,這便是流量控制。

發送方都維持了一個連續的允許發送的幀的序號,稱為發送窗口;同時,接收方也維持了一個連續的允許接收的幀的序號,稱為接收窗口。

發送窗口和接收窗口的序號的上下界不一定要一樣,甚至大小也可以不同。

不同的滑動窗口協議窗口大小一般不同。

發送方窗口內的序列號代表了那些已經被發送,但是還沒有被確認的幀,或者是那些可以被發送的幀

滑動窗口由四部分組成每個字節的數據都有唯一順序的編碼,隨著時間發展,未確認部分與可以發送數據包編碼部分向右移動,形式滑動窗口

綠色:發送成功并已經ACK確認的數據

黃色:發送成功等待ACK確認的數據(占用滑動窗口大小)

紫色:滑動窗口剩余大小可以發送的字節數量(滑動窗口可用大小)

灰色:后續數據編碼

接收窗口的大小就是滑動窗口的最大值,數據傳輸過程中滑動窗口的可用大小是動態變化的。

但是還有這么一點,滑動窗口的設計僅僅是考慮到了處理方的處理能力,但是沒有考慮到道路的通暢問題

就好像服務端可以處理100M數據,但是傳輸的數據99M都堵在路上了,這不就是導致道路阻塞了么?這就需要另外一個設計「擁塞避免」

「流量控制的目的」

如果發送者發送數據過快,接收者來不及接收,那么就會有分組丟失。

為了避免分組丟失,控制發送者的發送速度,使得接收者來得及接收,這就是流量控制。

流量控制根本目的是防止分組丟失,它是構成TCP可靠性的一方面。

「如何實現流量控制」

由滑動窗口協議(連續ARQ協議)實現。滑動窗口協議既保證了分組無差錯、有序接收,也實現了流量控制。

主要的方式就是接收方返回的 ACK 中會包含自己的接收窗口的大小,并且利用大小來控制發送方的數據發送。

「流量控制引發的死鎖」

當發送者收到了一個窗口為0的應答,發送者便停止發送,等待接收者的下一個應答。

但是如果這個窗口不為0的應答在傳輸過程丟失,發送者一直等待下去,而接收者以為發送者已經收到該應答,等待接收新數據,這樣雙方就相互等待,從而產生死鎖。

為了避免流量控制引發的死鎖,TCP使用了「持續計時器」。每當發送者收到一個零窗口的應答后就啟動該計時器。時間一到便主動發送報文詢問接收者的窗口大小。若接收者仍然返回零窗口,則重置該計時器繼續等待;若窗口不為0,則表示應答報文丟失了,此時重置發送窗口后開始發送,這樣就避免了死鎖的產生。

擁塞控制

「為什么要進行擁塞控制」

假設網絡已經出現擁塞,如果不處理擁塞,那么延時增加,出現更多丟包,觸發發送方重傳數據,加劇擁塞情況,繼續惡性循環直至網絡癱瘓。

擁塞控制與流量控制的適應場景和目的均不同。

擁塞發生前,可避免流量過快增長拖垮網絡;擁塞發生時,唯一的選擇就是降低流量。

主要使用4種算法完成擁塞控制:

慢啟動

擁塞避免

快重傳算法

快速恢復算法

算法1、2適用于擁塞發生前,算法3適用于擁塞發生時,算法4適用于擁塞解決后(相當于擁塞發生前)。

「rwnd與cwnd」

rwnd(Receiver Window,接收者窗口)與cwnd(Congestion Window,擁塞窗口):

rwnd是用于流量控制的窗口大小,主要取決于接收方的處理速度,由接收方通知發送方被動調整。

cwnd是用于擁塞處理的窗口大小,取決于網絡狀況,由發送方探查網絡主動調整。

同時考慮流量控制與擁塞處理,則發送方窗口的大小不超過min{rwnd, cwnd}。

「慢啟動算法」

慢開始算法的思路就是,不要一開始就發送大量的數據,先探測一下網絡的擁塞程度,也就是說由小到大逐漸增加擁塞窗口的大小。

這里用報文段的個數作為擁塞窗口的大小舉例說明慢開始算法,實際的擁塞窗口大小是以字節為單位的。

一個傳輸輪次所經歷的時間其實就是往返時間RTT,而且每經過一個傳輸輪次,擁塞窗口cwnd就加倍。

為了防止cwnd增長過大引起網絡擁塞,還需設置一個慢開始門限ssthresh狀態變量。

?

ssthresh的用法如下:

?cwnd《ssthresh時,使用慢開始算法。

當cwnd》ssthresh時,改用擁塞避免算法。

當cwnd=ssthresh時,慢開始與擁塞避免算法任意

注意,這里的慢并不是指cwnd的增長速率慢,而是指在TCP開始發送報文段時先設置cwnd=1,然后逐漸增大,這當然比按照大的cwnd一下子把許多報文段突然注入到網絡中要慢得多。

「擁塞避免算法」

讓擁塞窗口cwnd緩慢地增大,即每經過一個往返時間RTT就把發送方的擁塞窗口cwnd加1,而不是加倍。

這樣擁塞窗口cwnd按線性規律緩慢增長,比慢開始算法的擁塞窗口增長速率緩慢得多

無論是在慢開始階段還是在擁塞避免階段,只要發送方判斷網絡出現擁塞(其根據就是沒有按時收到確認,雖然沒有收到確認可能是其他原因的分組丟失,但是因為無法判定,所以都當做擁塞來處理),就把慢開始門限ssthresh設置為出現擁塞時的發送窗口大小的一半(但不能小于2)。

然后把擁塞窗口cwnd重新設置為1,執行慢開始算法。

這樣做的目的就是要迅速減少主機發送到網絡中的分組數,使得發生擁塞的路由器有足夠時間把隊列中積壓的分組處理完畢。

「整個擁塞控制的流程:」

假定cwnd=24時,網絡出現超時(擁塞),則更新后的ssthresh=12,cwnd重新設置為1,并執行慢開始算法。

當cwnd=12=ssthresh時,改為執行擁塞避免算法

注意:擁塞避免并非完全能夠避免了阻塞,而是使網絡比較不容易出現擁塞。

「快重傳算法」

快重傳要求接收方在收到一個失序的報文段后就立即發出重復確認(為的是使發送方及早知道有報文段沒有到達對方,可提高網絡吞吐量約20%)而不要等到自己發送數據時捎帶確認。

快重傳算法規定,發送方只要一連收到三個重復確認就應當立即重傳對方尚未收到的報文段,而不必繼續等待設置的重傳計時器時間到期

「快恢復算法」

快重傳配合使用的還有快恢復算法,有以下兩個要點:

當發送方連續收到三個重復確認時,就把ssthresh門限減半(為了預防網絡發生擁塞)。

但是接下去并不執行慢開始算法

考慮到如果網絡出現擁塞的話就不會收到好幾個重復的確認,所以發送方現在認為網絡可能沒有出現擁塞。

所以此時不執行慢開始算法,而是將cwnd設置為ssthresh減半后的值,然后執行擁塞避免算法,使cwnd緩慢增大。

Socket

即套接字,是應用層 與 TCP/IP 協議族通信的中間軟件抽象層,表現為一個封裝了 TCP / IP協議族 的編程接口(API)

Socket不是一種協議,而是一個編程調用接口(API),屬于傳輸層(主要解決數據如何在網絡中傳輸)

對用戶來說,只需調用Socket去組織數據,以符合指定的協議,即可通信

UDP「UDP協議特點」

UDP是無連接的傳輸層協議;

UDP使用盡最大努力交付,不保證可靠交付;

UDP是面向報文的,對應用層交下來的報文,不合并,不拆分,保留原報文的邊界;

UDP沒有擁塞控制,因此即使網絡出現擁塞也不會降低發送速率;

UDP支持一對一一對多多對多的交互通信;

UDP的首部開銷小,只有8字節

「TCP和UDP的區別」

TCP是可靠傳輸,UDP是不可靠傳輸;

TCP面向連接,UDP無連接;

TCP傳輸數據有序,UDP不保證數據的有序性;

TCP不保存數據邊界,UDP保留數據邊界;

TCP傳輸速度相對UDP較慢;

TCP有流量控制和擁塞控制,UDP沒有;

TCP是重量級協議,UDP是輕量級協議;

TCP首部較長20字節,UDP首部較短8字節;

「基于TCP和UDP的常用協議」

HTTP、HTTPS、FTP、TELNET、SMTP(簡單郵件傳輸協議)協議基于可靠的TCP協議。

TFTP、DNS、DHCP、TFTP、SNMP(簡單網絡管理協議)、RIP基于不可靠的UDP協議

報文段

UDP的報文段共有2個字段:數據字段 + 首部字段

「UDP報文中每個字段的含義如下:

源端口:這個字段占據 UDP 報文頭的前 16 位,通常包含發送數據報的應用程序所使用的 UDP 端口,接收端的應用程序利用這個字段的值作為發送響應的目的地址,這個字段是可選的,所以發送端的應用程序不一定會把自己的端口號寫入該字段中,如果不寫入端口號,則把這個字段設置為 0,這樣,接收端的應用程序就不能發送響應了。

目的端口:接收端計算機上 UDP 軟件使用的端口,占據 16 位。

長度:該字段占據 16 位,表示 UDP 數據報長度,包含 UDP 報文頭和 UDP 數據長度,因為 UDP 報文頭長度是 8 個字節,所以這個值最小為 8。

校驗值:該字段占據 16 位,可以檢驗數據在傳輸過程中是否被損壞。

網絡層MAC地址

MAC稱為物理地址,也叫硬件地址,用來定義網絡設備的位置,MAC地址是網卡出廠時設定的,是固定的(但可以通過在設備管理器中或注冊表等方式修改,同一網段內的MAC地址必須唯一)。

MAC地址采用十六進制數表示,長度是6個字節(48位),分為前24位和后24位。

?

MAC地址對應于OSI參考模型的第二層數據鏈路層,工作在數據鏈路層的交換機維護著計算機MAC地址和自身端口的數據庫,交換機根據收到的數據幀中的目的MAC地址字段來轉發數據幀。

?IP地址

常見的IP地址分為IPv4與IPv6兩大類,當前廣泛應用的是IPv4,目前IPv4幾乎耗盡,下一階段必然會進行版本升級到IPv6;

IP地址是以網絡號和主機號來標示網絡上的主機的,我們把網絡號相同的主機稱之為本地網絡,網絡號不相同的主機稱之為遠程網絡主機

本地網絡中的主機可以直接相互通信;遠程網絡中的主機要相互通信必須通過本地網關(Gateway)來傳遞轉發數據。

IP地址對應于OSI參考模型的第三層網絡層,工作在網絡層的路由器根據目標IP和源IP來判斷是否屬于同一網段,如果是不同網段,則轉發數據包。

「IP地址格式和表示」

IP地址(IPv4)由32位二進制數組成,分為4段(4個字節),每一段為8位二進制數(1個字節)

每一段8位二進制,中間使用英文的標點符號。隔開

由于二進制數太長,為了便于記憶和識別,把每一段8位二進制數轉成十進制,大小為0至255。

IP地址的這種表示法叫做「點分十進制表示法」。

IP地址表示為:xxx.xxx.xxx.xxx舉個栗子:210.21.196.6就是一個IP地址的表示。

計算機的IP地址由兩部分組成,一部分為網絡標識,一部分為主機標識,同一網段內的計算機網絡部分相同,主機部分不能同時重復出現。

「路由器」連接不同網段,負責不同網段之間的數據轉發,「交換機」連接的是同一網段的計算機。

通過設置網絡地址和主機地址,在互相連接的整個網絡中保證每臺主機的IP地址不會互相重疊,即IP地址具有了唯一性。

「IP地址分類詳解」

IP地址分A、B、C、D、E五類,其中A、B、C這三類是比較常用的IP地址,D、E類為特殊地址。

子網掩碼

「子網掩碼的概念及作用」

通過子網掩碼,才能表明一臺主機所在的子網與其他子網的關系,使網絡正常工作。

子網掩碼和IP地址做與運算,分離出IP地址中的網絡地址和主機地址,用于判斷該IP地址是在本地網絡上,還是在遠程網絡網上。

子網掩碼還用于將網絡進一步劃分為若干子網,以避免主機過多而擁堵或過少而IP浪費。

「子網掩碼的組成」

同IP地址一樣,子網掩碼是由長度為32位二進制數組成的一個地址。

子網掩碼32位與IP地址32位相對應,IP地址如果某位是網絡地址,則子網掩碼為1,否則為0。

舉個栗子:如:11111111.11111111.11111111.00000000?

左邊連續的1的個數代表網絡號的長度,(使用時必須是連續的,理論上也可以不連續),右邊連續的0的個數代表主機號的長度。

?「為什么要使用子網掩碼」

兩臺主機要通信,首先要判斷是否處于同一網段,即網絡地址是否相同。

如果相同,那么可以把數據包直接發送到目標主機,否則就需要路由網關將數據包轉發送到目的地。

?

可以這么簡單的理解:A主機要與B主機通信,A和B各自的IP地址與A主機的子網掩碼進行And與運算,看得出的結果:

1、結果如果相同,則說明這兩臺主機是處于同一個網段,這樣A可以通過ARP廣播發現B的MAC地址,B也可以發現A的MAC地址來實現正常通信。

2、如果結果不同,ARP廣播會在本地網關終結,這時候A會把發給B的數據包先發給本地網關,網關再根據B主機的IP地址來查詢路由表,再將數據包繼續傳遞轉發,最終送達到目的地B。

?

?

計算機的網關(Gateway)就是到其他網段的出口,也就是路由器接口IP地址。

路由器接口使用的IP地址可以是本網段中任何一個地址,不過通常使用該網段的第一個可用的地址或最后一個可用的地址,這是為了盡可能避免和本網段中的主機地址沖突。

?在如下拓撲圖示例中,A與B,C與D,都可以直接相互通信(都是屬于各自同一網段,不用經過路由器)

但是A與C,A與D,B與C,B與D它們之間不屬于同一網段,所以它們通信是要經過本地網關,然后路由器根據對方IP地址,在路由表中查找恰好有匹配到對方IP地址的直連路由,于是從另一邊網關接口轉發出去實現互連

「子網掩碼和IP地址的關系」

子網掩碼是用來判斷任意兩臺主機的IP地址是否屬于同一網絡的依據

拿雙方主機的IP地址和自己主機的子網掩碼做與運算,如結果為同一網絡,就可以直接通信

「如何根據IP地址和子網掩碼,計算網絡地址:」

將IP地址與子網掩碼轉換成二進制數。

將二進制形式的 IP 地址與子網掩碼做與運算。

將得出的結果轉化為十進制,便得到網絡地址。

網關

網關實質上是一個網絡通向其他網絡的IP地址。

比如有網絡A和網絡B,網絡A的IP地址范圍為192.168.1.1~192. 168.1.254,子網掩碼為255.255.255.0;

網絡B的IP地址范圍為192.168.2.1~192.168.2.254,子網掩碼為255.255.255.0。

在沒有路由器的情況下,兩個網絡之間是不能進行TCP/IP通信的,即使是兩個網絡連接在同一臺交換機(或集線器)上,TCP/IP協議也會根據子網掩碼(255.255.255.0)判定兩個網絡中的主機處在不同的網絡里。

而要實現這兩個網絡之間的通信,則必須通過網關。

如果網絡A中的主機發現數據包的目的主機不在本地網絡中,就把數據包轉發給它自己的網關,再由網關轉發給網絡B的網關,網絡B的網關再轉發給網絡B的某個主機。網絡B向網絡A轉發數據包的過程。

「所以說,只有設置好網關的IP地址,TCP/IP協議才能實現不同網絡之間的相互通信。」

?

那么這個IP地址是哪臺機器的IP地址呢?

?網關的IP地址是具有路由功能的設備的IP地址,具有路由功能的設備有路由器、啟用了路由協議的服務器(實質上相當于一臺路由器)、代理服務器(也相當于一臺路由器)。

Ping

Ping是我們測試網絡連接的常用指令。

它利用ICMP報文檢測網絡連接。

「假設A ping B」

ping通知系統建立一個固定格式的ICMP請求數據包。

ICMP協議打包這個數據包和B的IP地址轉交給IP協議層

IP層協議將機器B的IP地址為目的地址,本機的IP地址為源地址,加上一些頭部必要的控制信息,構建一個IP數據包

獲取B的MAC地址,做這個操作首先機器A會判斷B是否在同一網段內,若IP層協議通過B的IP地址和自己的子網掩碼,發現它跟自己屬于同一網絡,就直接在本網絡查找這臺機器的MAC,否則則通過路由器進行類似查找。

?

接下來是ARP協議根據IP地址查找MAC地址的過程:

?若兩臺機器之前有過通信,在機器A的ARP緩存表里應該存有B的IP與其MAC地址的映射關系。

若沒有,則通過發送ARP請求廣播,得到回應的B機器MAC地址,并交給數據鏈路層

數據鏈路層構建一個數據幀,目的地址是IP層傳過來的MAC地址,源地址是本機的MAC地址,再附加一些必要的控制信息,依據以太網的介質訪問規則將他們傳送出去

機器B收到這個數據幀后,先檢查目的地址,和本機MAC地址對比:

符合,接受,接收后檢查該數據幀,將IP數據包從幀中提取出來,交給本機的的IP地址協議層協議,IP協議層檢查之后,將有用的信息提取給ICMP協議,后者處理,馬上構建一個ICMP應答包,發送給A,其過程和主機A發送ICMP請求包到B的過程類似,但不用ARP廣播收取A的信息,因為請求包中已經有足夠的信息用于B回應A。

若不符合,丟棄。

可以知道PING的過程即一段發送報文和接受確認報文的過程,在來回直接可以計算時延。

DNS

DNS通過主機名,最終得到該主機名對應的IP地址的過程叫做域名解析(或主機名解析)。

「通俗的講」,我們更習慣于記住一個網站的名字,www.baidu.com,而不是記住它的ip地址,比如:167.23.10.2

「工作原理」

將主機域名轉換為ip地址,屬于應用層協議,使用UDP傳輸。

第一步,客戶端向本地DNS服務器發送解析請求

第二步,本地DNS如有相應記錄會直接返回結果給客戶端,如沒有就向DNS根服務器發送請求

第三步,DSN根服務器接收到請求,返回給本地服務器一個所查詢域的主域名服務器的地址

第四步,本地dns服務器再向返回的主域名服務器地址發送查詢請求

第五步,主域名服務器如有記錄就返回結果,沒有的話返回相關的下級域名服務器地址

第六步,本地DNS服務器繼續向接收到的地址進行查詢請求

第七步,下級域名服務器有相應記錄,返回結果

第八步,本地dns服務器將收到的返回地址發給客戶端,同時寫入自己的緩存,以便下次查詢

DNS域名查詢實際上就是個不斷遞歸查詢的過程,直到查找到相應結果,需要注意的時,當找不到相應記錄,會返回空結果,而不是超時信息

DNS記錄

?

A記錄

?定義www.example.com的ip地址

www.example.com. IN A 139.18.28.5;

上面的就是一條 DNS 記錄,純文本即可。

www.example.com 是要解析的域名。

A 是記錄的類型,A 記錄代表著這是一條用于解析 IPv4 地址的記錄。

從這條記錄可知,www.example.com的 IP 地址是 139.18.28.5。

?

CNAME

?CNAME用于定義域名的別名,如下面這條 DNS 記錄:

定義www.example.com的別名

a.example.com. IN CNAME b.example.com.

這條 DNS 記錄定義了 a.example.com 是 b.example.com 的別名。

用戶在瀏覽器中輸入 a.example.com 時候,通過 DNS 查詢會知道 a.example.com 是 b.example.com 的別名,因此需要實際 IP 的時候,會去拿 b.example.com 的 A 記錄。

當你想把一個網站遷移到新域名,舊域名仍然保留的時候;還有當你想將自己的靜態資源放到 CDN 上的時候,CNAME 就非常有用。

?

AAAA 記錄

?A 記錄是域名和 IPv4 地址的映射關系。和 A 記錄類似,AAAA 記錄則是域名和 IPv6 地址的映射關系。

?

MX記錄

?MX 記錄是郵件記錄,用來描述郵件服務器的域名。

在工作中,我們經常會發郵件到某個同事的郵箱。

比如說,發送一封郵件到 xiaoming@xiaoflyfish.com,那么如何知道哪個 IP 地址是郵件服務器呢?

這個時候就可以用到下面這條 MX 記錄:

IN MX mail.xiaoflyfish.com

mail.xiaoflyfish.com 的 IP 地址可以通過查詢 mail.xiaoflyfishcom的 A 記錄和 AAAA 記錄獲得。

?

NS 記錄

?NS記錄是描述 DNS 服務器網址。從 DNS 的存儲結構上說,Name Server 中含有權威 DNS 服務的目錄。

也就是說,NS 記錄指定哪臺 Server 是回答 DNS 查詢的權威域名服務器。

當一個 DNS 查詢看到 NS 記錄的時候,會再去 NS 記錄配置的 DNS 服務器查詢,得到最終的記錄。如下面這個例子:

a.com. IN NS ns1.a.com.

a.com. IN NS ns2.a.com.

當解析 a.com 地址時,我們看到 a.com 有兩個 NS 記錄,所以確定最終 a.com 的記錄在 ns1.a.com 和 ns2.a.com 上。

從設計上看,ns1 和 ns2 是網站 a.com 提供的智能 DNS 服務器,可以提供負載均衡、分布式 Sharding 等服務。

比如當一個北京的用戶想要訪問 a.com 的時候,ns1 看到這是一個北京的 IP 就返回一個離北京最近的機房 IP。

上面代碼中 a.com 配置了兩個 NS 記錄。

通常 NS 不會只有一個,這是為了保證高可用,一個掛了另一個還能繼續服務。

通常數字小的 NS 記錄優先級更高,也就是 ns1 會優先于 ns2 響應。

配置了上面的 NS 記錄后,如果還配置了 a.com 的 A 記錄,那么這個 A 記錄會被 NS 記錄覆蓋。

ARP協議

ARP即地址解析協議, 用于實現從 IP 地址到 MAC 地址的映射,即詢問目標IP對應的MAC地址。

「ARP協議的工作過程」

首先,每個主機都會有自己的ARP緩存區中建立一個ARP列表,以表示IP地址和MAC地址之間的對應關系

當源主機要發送數據時,首先檢測ARP列表中是否對應IP地址的目的主機的MAC地址,如果有,則直接發送數據,如果沒有,就向本網段的所有主機發送ARP數據包

當本網絡的所有主機收到該ARP數據包時,首先檢查數據包中的IP地址是否是自己的IP地址,如果不是,則忽略該數據包,如果是,則首先從數據包中取出源主機的IP和MAC地址寫入到ARP列表中,如果存在,則覆蓋然后將自己的MAC地址寫入ARP響應包中,告訴源主機自己是它想要找的MAC地址

源主機收到ARP響應包后,將目的主機的IP和MAC地址寫入ARP列表,并利用此信息發送數據,如果源主機一直沒有收到ARP響應數據包,表示ARP查詢失敗。

數字簽名網絡傳輸過程中需要經過很多中間節點,雖然數據無法被解密,但可能被篡改

數字簽名校驗數據的完整性

「數字簽名有兩種功效」:

能確定消息確實是由發送方簽名并發出來的,因為別人假冒不了發送方的簽名。

數字簽名能確定消息的完整性,證明數據是否未被篡改過。

將一段文本先用Hash函數生成消息摘要,然后用發送者的私鑰加密生成數字簽名,與原文文一起傳送給接收者

接收者只有用發送者的公鑰才能解密被加密的摘要信息,然后用HASH函數對收到的原文產生一個摘要信息,與上一步得到的摘要信息對比。

如果相同,則說明收到的信息是完整的,在傳輸過程中沒有被修改,否則說明信息被修改過,因此數字簽名能夠驗證信息的完整性。

SQL注入SQL注入的原理是將SQL代碼偽裝到輸入參數中,傳遞到服務器解析并執行的一種攻擊手法。

「SQL注入攻擊實例」

比如,在一個登錄界面,要求輸入用戶名和密碼,可以這樣輸入實現免帳號登錄:

用戶名: ‘or 1 = 1 --

密 碼:

用戶一旦點擊登錄,如若沒有做特殊處理,那么這個非法用戶就很得意的登陸進去了。

下面我們分析一下:從理論上說,后臺認證程序中會有如下的SQL語句:

String sql = “select * from user_table where username=’ “+userName+” ’ and password=’ “+password+” ‘”;

因此,當輸入了上面的用戶名和密碼,上面的SQL語句變成:

SELECT * FROM user_table WHERE username=’’or 1 = 1 –- and password=’’

分析上述SQL語句我們知道,username=‘ or 1=1 這個語句一定會成功;然后后面加兩個 -,這意味著注釋,它將后面的語句注釋,讓他們不起作用,這樣,上述語句永遠都能正確執行,用戶輕易騙過系統,獲取合法身份。

「應對方法」

?

預編譯

?使用預編譯手段,綁定參數是最好的防SQL注入的方法。

目前許多的ORM框架及JDBC等都實現了SQL預編譯和參數綁定功能,攻擊者的惡意SQL會被當做SQL的參數而不是SQL命令被執行。

在mybatis的mapper文件中,對于傳遞的參數我們一般是使用 # 和$來獲取參數值。

當使用#時,變量是占位符,就是一般我們使用java的jdbc的PrepareStatement時的占位符,所有可以防止sql注入;

當使用$時,變量就是直接追加在sql中,一般會有sql注入問題。

?

使用正則表達式過濾傳入的參數

??

過濾參數中含有的一些數據庫關鍵詞

?加密算法加密算法分「對稱加密」 和 「非對稱加密」,其中對稱加密算法的加密與解密密鑰相同,非對稱加密算法的加密密鑰與解密密鑰不同,此外,還有一類不需要密鑰的「散列算法」。

常見的 「對稱加密」 算法主要有 DES、3DES、AES 等,常見的 「非對稱算法」 主要有 RSA、DSA 等,「散列算法」 主要有 SHA-1、MD5 等。

對稱加密

在 「對稱加密算法」 中,使用的密鑰只有一個,發送和接收雙方都使用這個密鑰對數據進行 「加密」 和 「解密」。

數據加密過程:在對稱加密算法中,數據發送方 將 「明文」 (原始數據) 和 「加密密鑰」 一起經過特殊 「加密處理」,生成復雜的 「加密密文」 進行發送。

數據解密過程:「數據接收方」 收到密文后,若想讀取原數據,則需要使用 「加密使用的密鑰」 及相同算法的 「逆算法」 對加密的密文進行解密,才能使其恢復成 「可讀明文」。

非對稱加密

「非對稱加密算法」,它需要兩個密鑰,一個稱為 「公開密鑰」 (public key),即 「公鑰」,另一個稱為 「私有密鑰」 (private key),即 「私鑰」。

因為 「加密」 和 「解密」 使用的是兩個不同的密鑰,所以這種算法稱為 「非對稱加密算法」。

如果使用 「公鑰」 對數據 「進行加密」,只有用對應的 「私鑰」 才能 「進行解密」。

如果使用 「私鑰」 對數據 「進行加密」,只有用對應的 「公鑰」 才能 「進行解密」。

「例子」:甲方生成 「一對密鑰」 并將其中的一把作為 「公鑰」 向其它人公開,得到該公鑰的 「乙方」 使用該密鑰對機密信息 「進行加密」 后再發送給甲方,甲方再使用自己保存的另一把 「專用密鑰」 (「私鑰」),對 「加密」 后的信息 「進行解密」。

網絡攻擊CSRF和XSS

「XSS:」

跨站腳本是一種網站應用程序的安全漏洞攻擊,是代碼注入的一種。

它允許惡意用戶將代碼注入到網頁上,其他用戶在觀看網頁時就會受到影響,這類攻擊通常包含了HTML以及用戶端腳本語言。

比如通過客戶端腳本語言(最常見如:JavaScript)

在一個論壇發帖中發布一段惡意的JavaScript代碼就是腳本注入,如果這個代碼內容有請求外部服務器,那么就叫做XSS

「XSS攻擊分類」

?

反射性XSS攻擊 (非持久性XSS攻擊)

?例如,正常發送消息:

http://www.test.com/message.php?send=Hello,World!

接收者將會接收信息并顯示HelloWorld;但是,非正常發送消息:

http://www.test.com/message.php?send=《script》alert(‘foolish!’)《/script》!

接收者接收消息顯示的時候將會彈出警告窗口!

?

持久性XSS攻擊 (留言板場景)

?一般指XSS攻擊代碼存儲在網站數據庫,當一個頁面被用戶打開的時候執行。

也就是說,每當用戶使用瀏覽器打開指定頁面時,腳本便執行。

與非持久性XSS攻擊相比,持久性XSS攻擊危害性更大。

從名字就可以了解到,持久性XSS攻擊就是將攻擊代碼存入數據庫中,然后客戶端打開時就執行這些攻擊代碼。

例如,留言板表單中的表單域:

《input type=“text” name=“content” value=“這里是用戶填寫的數據”》

正常操作流程是:用戶是提交相應留言信息 — 將數據存儲到數據庫 — 其他用戶訪問留言板,應用去數據并顯示;

而非正常操作流程是攻擊者在value填寫:

《script》alert(‘foolish!’);《/script》 《!--或者html其他標簽(破壞樣式。。。)、一段攻擊型代碼--》

并將數據提交、存儲到數據庫中;當其他用戶取出數據顯示的時候,將會執行這些攻擊性代碼

「CSRF:」

跨站請求偽造,是一種挾制用戶在當前已登錄的Web應用程序上執行非本意的操作的攻擊方法。

比如冒充用戶發起請求(在用戶不知情的情況下),完成一些違背用戶意愿的請求(如惡意發帖,刪帖,改密碼,發郵件等)。

DOS攻擊

DOS:中文名稱是拒絕服務,該攻擊的效果是使得計算機或網絡無法提供正常的服務

「DOS攻擊的原理:」

首先攻擊者向被攻擊的服務器發送大量的虛假IP請求,被攻擊者在收到請求后返回確認信息,等待攻擊者進行確認,該過程需要TCP的三次握手,由于攻擊者發送的請求信息是虛假的,所以服務器接收不到返回的確認信息,在一段時間內服務器會處與等待狀態,而分配給這次請求的資源卻被有被釋放

當被攻擊者等待一定的時間后,會因連接超時而斷開,這時攻擊者在次發送新的虛假信息請求,這樣最終服務器資源被耗盡,直到癱瘓

「DDOS:中文名稱是分布式拒絕服務攻擊」

指的是攻擊者控制多臺主機同時向同一主機或網絡發起DOS攻擊

DRDoS分布反射式拒絕服務攻擊這是DDoS攻擊的變形

「DDOS究竟如何攻擊」

目前最流行也是最好用的攻擊方法就是使用SYN-Flood進行攻擊,SYN-Flood也就是SYN洪水攻擊

SYN-Flood不會完成TCP三次握手的第三步,也就是不發送確認連接的信息給服務器,這樣,服務器無法完成第三次握手,但服務器不會立即放棄,服務器會不停的重試并等待一定的時間后放棄這個未完成的連接,這段時間叫做SYN timeout,這段時間大約30秒-2分鐘左右。

若是一個用戶在連接時出現問題導致服務器的一個線程等待1分鐘并不是什么大不了的問題,但是若有人用特殊的軟件大量模擬這種情況,那后果就可想而知了。一個服務器若是處理這些大量的半連接信息而消耗大量的系統資源和網絡帶寬,這樣服務器就不會再有空余去處理普通用戶的正常請求(因為客戶的正常請求比率很小),這樣這個服務器就無法工作了,這種攻擊就叫做SYN-Flood攻擊

到目前為止,進行DDoS攻擊的防御還是比較困難的

首先,這種攻擊的特點是它利用了TCP/IP協議的漏洞,除非你不用TCP/IP,才有可能完全抵御住DDoS攻擊

不過這不等于我們就沒有辦法阻擋DDoS攻擊,我們可以盡力來減少DDoS的攻擊

「下面就是一些防御方法:」

關閉不必要的服務

限制同時打開的SYN半連接數目

縮短SYN半連接的time out 時間

正確設置防火墻

禁止對主機的非開放服務的訪問

限制特定IP地址的訪問

啟用防火墻的防DDoS的屬性

Cookie和SessionSession 是「基于Cookie 實現」的另一種記錄服務端和客戶端會話狀態的機制。

Session 是存儲在服務端,而 SessionId 會被存儲在客戶端的 Cookie 中。

Session 的「認證過程」:

客戶端第一次發送請求到服務端,服務端根據信息創建對應的 Session,并在響應頭返回 SessionID

客戶端接收到服務端返回的 SessionID 后,會將此信息存儲在 Cookie 上,同時會記錄這個 SessionID 屬于哪個域名

當客戶端再次訪問服務端時,請求會自動判斷該域名下是否存在 Cookie 信息,如果有則發送給服務端,服務端會從 Cookie 中拿到 SessionID,再根據 SessionID 找到對應的 Session,如果有對應的 Session 則通過,繼續執行請求,否則就中斷

「Cookie和Session的區別」

安全性,因為 Cookie 可以通過客戶端修改,而 Session 只能在服務端設置,所以安全性比 Cookie 高,一般會用于驗證用戶登錄狀態

適用性,Cookie 只能存儲字符串數據,而 Session 可以存儲任意類型數據

有效期,Cookie 可以設置任意時間有效,而 Session 一般失效時間短

常見面試題「在瀏覽器地址欄鍵入URL」

1.DNS解析:瀏覽器會依據URL逐層查詢DNS服務器緩存,解析URL中的域名對應的IP地址,DNS緩存從近到遠依次是瀏覽器緩存、系統緩存、路由器緩存、IPS服務器緩存、域名服務器緩存、頂級域名服務器緩存。

從哪個緩存找到對應的IP直接返回,不再查詢后面的緩存。

2.TCP連接:結合三次握手

3.發送HTTP請求:瀏覽器發出讀取文件的HTTP請求,該請求發送給服務器

4.服務器處理請求并返回HTTP報文:服務器對瀏覽器請求做出響應,把對應的帶有HTML文本的HTTP響應報文發送給瀏覽器

5.瀏覽器解析渲染頁面

6.連接結束:瀏覽器釋放TCP連接,該步驟即四次揮手。

第5步和第6步可以認為是同時發生的,哪一步在前沒有特別的要求

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 計算機
    +關注

    關注

    19

    文章

    7500

    瀏覽量

    88019
  • 網絡
    +關注

    關注

    14

    文章

    7570

    瀏覽量

    88823

原文標題:計算機網絡常用知識總結!

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    云端超級計算機使用教程

    云端超級計算機是一種基于云計算的高性能計算服務,它將大量計算資源和存儲資源集中在一起,通過網絡向用戶提供按需的
    的頭像 發表于 12-17 10:19 ?129次閱讀

    應用于計算機網絡服務器晶振SG3225HBN(X1G005141000500)

    計算機網絡服務器中,穩定和高性能的時鐘源對于數據處理和網絡通信的準確性至關重要,SG3225HBN晶振(型號X1G005141000500)憑借其高頻率穩定性、低相位噪聲、高抗干擾能力以及
    發表于 09-05 10:05 ?0次下載

    計算機網絡中常見的默認端口號及其用途

    網絡工程領域,了解和掌握默認端口號是至關重要的。端口號是計算機網絡中最基本的概念之一,用于標識特定的網絡服務或應用程序。本文將詳細介紹常見的默認端口號及其用途,幫助網絡工程師更好地理
    的頭像 發表于 08-13 16:33 ?1437次閱讀

    計算機網絡中的三種通信方式

    計算機網絡中的三種通信方式,即單工通信、半雙工通信和全雙工通信,是理解和設計高效網絡架構的基礎。每種通信方式都有其獨特的特性、應用場景及優缺點。以下是對這三種通信方式的詳細分析,旨在提供深入的理解。
    的頭像 發表于 08-07 15:00 ?2755次閱讀

    工業計算機與普通計算機的區別

    在信息化和自動化日益發展的今天,計算機已經成為了我們日常生活和工作中不可或缺的工具。然而,在計算機領域中,工業計算機和普通計算機雖然都具備基本的計算
    的頭像 發表于 06-06 16:45 ?1413次閱讀

    【RTC程序設計:實時音視頻權威指南】計算機知識基礎篇

    數據通信的加密,加密方法、算法也有很多種,有對稱加密算法,也有非對稱加密算法。在這些計算機網絡中的基本概念,可以從物理層到應用層的特性進行了解,重點可以學習一下UDP和TCP這兩種最基本的網絡協議,并且該節也
    發表于 04-23 09:02

    【量子計算機重構未來 | 閱讀體驗】第二章關鍵知識

    計算機能夠減少計算和操作的繁瑣程度 作者從如何提高計算機的運算速度上,提出了提高計算速度的兩個方向: 加快計算機的運行速度,通俗易懂的說法
    發表于 03-06 23:17

    【量子計算機重構未來 | 閱讀體驗】+ 初識量子計算機

    分介紹了量子計算機的工作原理、計算能力、研發現狀等專業知識點;第二部分介紹了量子計算機的應用場景,比如工廠、物流、智慧交通、自動駕駛等等;正好適合我這樣的量子小白閱讀。 開始第一部分
    發表于 03-05 17:37

    計算機網絡中最常用的通信協議

    絞線是目前最常用的傳輸介質之一,它由兩根絞在一起的導線組成,可用于傳輸模擬或數字信號。同軸電纜也是一種常用的傳輸介質,它由內外兩層導體組成,中間填充絕緣材料。
    發表于 02-19 09:51 ?756次閱讀

    計算機網絡為什么要分層次

    因為如果兩臺計算機能夠相互通信的話,實際實現起來是非常困難操作的。我們分層的目的就是為了將困難的問題簡單化,并且如果我們分層了,我們在使用的時候就可以僅僅關注我們需要關注的層次,而不用理會其他層
    發表于 02-03 17:12 ?2322次閱讀
    <b class='flag-5'>計算機網絡</b>為什么要分層次

    量子計算機 未來希望

    自己從事語音識別產品設計開發,而量子技術和量子計算機必將在自然語言處理方面實現重大突破,想通過此書學習量子計算技術,儲備知識,謝謝!
    發表于 02-01 12:51

    什么是計算機網絡的拓撲結構?主要的拓撲結構有哪些?

    計算機網絡的拓撲結構是指計算機網絡中各個節點(包括計算機、服務器、路由器等)之間連接的方式和形式。拓撲結構可以影響到網絡的性能、可靠性和擴展性。在
    的頭像 發表于 01-31 10:40 ?2256次閱讀

    什么是網絡端口?端口有什么作用?客戶端的端口可以重復使用嗎?

    網絡端口是用于在計算機網絡中進行通信的邏輯地址,是一個16位的數字,范圍從0到65535
    的頭像 發表于 01-29 16:15 ?2316次閱讀
    什么是<b class='flag-5'>網絡</b>端口?端口有什么作用?客戶端的端口可以重復使用嗎?

    計算機網絡路由器和交換機的區別

    計算機網絡中,路由器和交換機是兩種常用網絡設備,它們在網絡中起著重要的作用。雖然它們的功能有一些重疊,但也存在一些關鍵的區別。本文將詳細介紹計算機
    的頭像 發表于 01-14 11:28 ?1089次閱讀

    電話交換機和計算機網絡交換機的區別是什么呢?

    電話交換機和計算機網絡交換機的區別是什么呢? 電話交換機和計算機網絡交換機是兩種不同的設備,它們在功能、應用和工作原理等方面存在著許多區別。 一、功能區別: 電話交換機主要用于傳輸和交換電話
    的頭像 發表于 01-09 11:29 ?1470次閱讀
    主站蜘蛛池模板: 香蕉在线播放| 国内免费视频成人精品| 国产69精品久久久久乱码| 好男人好资源视频高清| 亚洲国产精品自在自线观看| yellow免费影视大全| 好男人的视频在线观看| 影音先锋色av男人资源网| 国产成人高清精品免费5388密| 午夜想想爱午夜剧场| 激情床戏视频片段有叫声| 亚洲成人免费在线| 久色视频网| 丰满的寡妇hd高清在线观看| 亚洲大爷操| 蜜臀AV精品一区二区三区| 夜夜女人国产香蕉久久精品| 国产在线高清视频| 校园纯肉H教室第一次| 久久久久影视| 第一次处破女高清电影| 亚洲一区精品伊人久久伊人| 欧美激情视频一区二区| 国产中文字幕乱码一区| 99精品久久精品一区二区| 麻豆成人啪啪色婷婷久久| 成人a视频片在线观看免费| 日本久久中文字幕| 成人欧美尽粗二区三区AV| 亚洲精品自在在线观看| 免费视频久久只有精品| 97成人免费视频| 欧美视频精品一区二区三区| 国产一区二区三区内射高清 | 四川老师边上网课边被啪视频 | 91羞羞视频| 亚州天堂在线视频av| 国产综合无码一区二区色蜜蜜| MMM日本兽交| 十大禁止安装的黄台有风险| 久久香蕉国产免费天天|