计算机网络通讯协议
網絡通訊:
就是要把特定意義的數據通過物理介質傳送給對方。把電信號變成有意義的數據:
以字節為單位分組,標識好每一組電信號的信息特征,按照分組的順序來依次發送。 以太網規定:一組電信號為一個數據包,就是一幀。OSI七層、TCP\IP四層、五層協議
每一層的協議
數據鏈路層
數據包必須是從一塊網卡傳送到另一塊網卡,網卡地址就是MAC地址,MAC地址采用十六進制標識,共6個字節, 前三個字節是廠商編號,后三個字節是網卡流水號。
有了MAC地址以后,以太網采用廣播形式,把數據包發給該子網內所有主機,子網內每臺主機在接收到這個包以后,都會讀取首部里的目標MAC地址,然后和自己的MAC地址進行對比,如果相同就做下一步處理,如果不同,就丟棄這個包。
數據鏈路層的主要工作就是對電信號進行分組并形成具有特定意義的數據幀,然后以廣播的形式通過物理介質發送給接收方。
網絡層
-
發送者如何知道接收者的MAC地址?
-
發送者如何知道接收者和自己同屬一個子網?
-
如果接收者和自己不在同一個子網,數據包如何發給對方?
為了解決這些問題,網絡層引入了三個協議,分別是IP協議、ARP協議、路由協議。
- IP協議
區分兩臺主機是否屬于同一個網絡
IP地址分類:A(0 ~ 127)B(128 ~ 191)C(192 ~ 223)D(224 ~ 239) E - ARP協議
地址解析協議,根據IP獲取MAC地址 - 路由協議
提供了異構網互聯的機制,就是用來確定到達目標ip的路徑
網絡層的主要工作是為不同的主機提供通信
傳輸層
鏈路層定義了主機的身份,即MAC地址, 而網絡層定義了IP地址,明確了主機所在的網段,有了這兩個地址,數據包就從可以從一個主機發送到另一臺主機。
但是實際上數據包是從一個主機的某個應用程序發出,然后由對方主機的應用程序接收。
為了確定是哪個應用程序要接收這個數據包。
因此傳輸層引入了UDP協議來解決這個問題,為了給每個應用程序標識身份,UDP協議定義了端口,同一個主機上的每個應用程序都需要指定唯一的端口號,并且規定網絡中傳輸的數據包必須加上端口信息。
UDP協議比較簡單,實現容易,但它沒有確認機制, 數據包一旦發出,無法知道對方是否收到,因此可靠性較差,為了解決這個問題,提高網絡可靠性,TCP協議就誕生了。
TCP即傳輸控制協議,是一種面向連接的、可靠的、基于字節流的通信協議。
每發出一個數據包都要求確認,如果有一個數據包丟失,就收不到確認,發送方就必須重發這個數據包。
TCP的確認機制就是三次握手。
三次握手與四次揮手:
為什么需要三次握手呢?
為了防止已失效的連接請求報文段突然又傳送到了服務端,因而產生錯誤。
比如:client發出的第一個連接請求報文段在某個網絡結點長時間的滯留了,以致延誤到連接釋放以后的某個時間才到達server。本來這是一個早已失效的報文段,但是server收到此失效的連接請求報文段后,就誤認為是client再次發出的一個新的連接請求,于是就向client發出確認報文段,同意建立連接。假設不采用“三次握手”,那么只要server發出確認,新的連接就建立了,由于client并沒有發出建立連接的請求,因此不會理睬server的確認,也不會向server發送數據,但server卻以為新的運輸連接已經建立,并一直等待client發來數據。所以沒有采用“三次握手”,這種情況下server的很多資源就白白浪費掉了。
四次揮手
當主動關閉方發出FIN報文段時,表示主動關閉方已經沒有數據要發送了,被動關閉方返回ACK報文段,表示已經知道主動關閉方沒有數據發送了;當被動關閉方也發送了FIN報文段時,這時就表示被動關閉方也沒有數據要發送了,如果收到主動關閉方確認報文段,被動關閉方進入關閉狀態,主動關閉方在發出確認報文段后等待2MSL,在等待時間里如果沒有接收到被動關閉方重新發送的FIN報文段時,主動關閉方進入關閉狀態,之后彼此就會愉快的中斷這次TCP連接。如果接收到重新發送的FIN報文段,則繼續發送ACK確認報文。
說明:
1)SYN攻擊 用眾多偽造ip地址向服務器發送SYN=1(請求連接),讓服務器處于SYN-RCVD狀態,但都無法第三次握手(因為偽造ip不存在)
2)4次揮手中的FIN就相當于三次握手中的SYN。
3)序號seq,確認序號ack,確認標志位ACK作用還是一樣的,就是確認作用(把seq加上1賦給ack,并把ACK置1)
什么是TCP連接
TCP連接是一種抽象的概念,表示一條可以通信的鏈路。
每個TCP連接有且僅有兩個端點,表示通信的雙方,且雙方在任意時刻都可以作為發送者和接受者。
什么是套接字
一條TCP連接的兩端就是兩個套接字。
套接字 = IP地址 :端口號
因此,TCP連接 = (套接字1,套接字2)= (IP1:端口號1,IP2:端口號2)
TCP、UDP區別:
-
TCP就是有確認機制的UDP協議
-
UDP數據包由首部和數據兩部分組成,首部長度為8個字節,主要包括源端口和目標端口;數據最大為65527個字節,整個數據包的長度最大可達到65535個字節。
-
TCP 數據包沒有長度限制,理論上可以無限長,但是為了保證網絡的效率,通常 TCP 數據包的長度不會超過IP數據包的長度,以確保單個TCP 數據包不必再分割。
TCP 協議 補充
-
使用滑動窗口機制來進行流量控制。
建立連接時,各端分配一個緩沖區用來存儲接收的數據,并將緩沖區的尺寸發送給另一端。接收方發送的確認消息中包含了自己剩余的緩沖區尺寸。剩余緩沖區空間的數量叫做窗口。其實就是建立連接的雙方互相知道彼此剩余的緩沖區大小。 -
擁塞控制
擁塞控制:防止過多的數據注入到網路中,這樣可以使網絡中的路由器或鏈路不至于阻塞。擁塞控制是一個全局性的過程,和流量控制不同,流量控制是點對點的控制。
1、慢開始:發送方維持一個叫做擁塞窗口cwnd(congestion window)的狀態變量。擁塞窗口的大小取決于網絡的擁塞程度,并且動態的變化。發送方讓自己的發送窗口等于擁塞窗口,另外考慮到接收方的接收能力,發送窗口可能小于擁塞窗口。思路就是:不要一開始就發送大量的數據,先試探一下網絡的擁塞程度,也就是說由小到大增加擁塞窗口的大小。
傳輸層的主要工作是定義端口,標識應用程序身份,實現端口到端口的通信,TCP協議可以保證數據傳輸的可靠性。(為不同的進程提供通信)
應用層
理論上講,有了以上三層協議的支持,數據已經可以從一個主機上的應用程序傳輸到另一臺主機的應用程序了,但此時傳過來的數據是字節流,不能很好的被程序識別,操作性差。
因此,應用層定義了各種各樣的協議來規范數據格式,常見的有 HTTP、FTP、SMTP 等,HTTP 是一種比較常用的應用層協議,主要用于B/S架構之間的數據通信。
HTTP VS HTTPS
HTTP特點:
無狀態:協議對客戶端沒有狀態存儲,對事物處理沒有“記憶”能力,比如訪問一個網站需要反復進行登錄操作
無連接:HTTP/1.1之前,由于無狀態特點,每次請求需要通過TCP三次握手四次揮手,和服務器重新建立連接。比如某個客戶機在短時間多次請求同一個資源,服務器并不能區別是否已經響應過用戶的請求,所以每次需要重新響應請求,需要耗費不必要的時間和流量。
基于請求和響應:基本的特性,由客戶端發起請求,服務端響應
簡單快速、靈活
通信使用明文、請求和響應不會對通信方進行確認、無法保護數據的完整性
HTTPS特點:
基于HTTP協議,通過SSL或TLS提供加密處理數據、驗證對方身份以及數據完整性保護
內容加密:采用混合加密技術,中間者無法直接查看明文內容
驗證身份:通過證書認證客戶端訪問的是自己的服務器
保護數據完整性:防止傳輸的內容被中間人冒充或者篡改
Https協議握手階段比較費時, Https連接緩存不如Http高效
HTTPS協議的加密范圍也比較有限,在黑客攻擊、拒絕服務攻擊、服務器劫持等方面幾乎起不到什么作用,但是會增加攻擊成本
應用層的主要工作就是定義數據格式并按照對應的格式解讀數據。
總結
- 上一篇: 上千元的亮机卡!GTX 1630正式发布
- 下一篇: 室温降下来就关空调 热了再开 这是省电还