網(wǎng)絡梳理

最近一段時間,看了一下極客時間的《趣談網(wǎng)絡協(xié)議》,簡單整理一下。網(wǎng)絡,雖然是計算機行業(yè)的基礎知識,但是更多的像文科內(nèi)容,這么多年了,還是那些內(nèi)容,同樣也需要記憶。那本文就通過幾個經(jīng)典案例,梳理一下網(wǎng)絡的核心知識。

1 瀏覽器中輸入網(wǎng)址,敲擊回車,到底發(fā)生了什么?

1.1 分層

因為后續(xù)所有的分析都要基于網(wǎng)絡分層這個概念,所以我們先簡單講一下網(wǎng)絡分層。
網(wǎng)絡分為4層(OSI的7層只是理論指導,我們在此不分析)。

  • 傳輸鏈路層: MAC
  • 網(wǎng)絡層: IP
  • 傳輸層: TCP/UDP
  • 應用層: HTTP 等

但是沒有想過,為什么要分層呢?
就是因為網(wǎng)絡太復雜了,分層之后,各層之間相互協(xié)作,上層依賴下層,每一層有自己的使命。

1.2 本機配置IP(DHCP)

在點擊回車發(fā)送之前,我們有一個默認前提, 就是自己的電腦已經(jīng)有了IP,但是我們有沒有想過,這個IP是怎么設置的呢?
很久之前,都是手動配置。
但是有沒有想過,如果在一個幾萬人的公司,你需要抱著電腦到處開會溝通,如果每到一個區(qū)域都要配置一個網(wǎng)絡,是不是要累死了,那怎么辦呢?就是用了DHCP - 動態(tài)主機配置協(xié)議。
DHCP主要分了三個過程: 為主機配置IP , IP 回收, IP 續(xù)租。

1.2.1 為主機配置IP

配置IP.png

1.2.2 IP 回收

不用了,直接收回即可。

1.2.3 IP 續(xù)租

租期過去50%,客戶機要想DHCP server發(fā)送續(xù)租請求,進行續(xù)租即可。

1.3 查找域名對應的IP與MAC

我們已經(jīng)為主機配置了IP,此時就進入點擊回車的步驟了。
我們輸入的是域名,那么會怎樣找到對應的機器呢?不要慌,我們先找ip。

1.3.1 IP的分類

在找ip之前,我們先看下IP的分類。
ip之前分A/B/C/D/E幾類,前三類 分網(wǎng)絡號+ 主機號,主機號太短,可用的主機太少,后來就淡化分類,采用CIDR。

ip分類.png

另外,在大的局域網(wǎng)中,還區(qū)分了內(nèi)網(wǎng)跟外網(wǎng),每個分類給自己留了一堆內(nèi)網(wǎng)地址。

1.3.2 IP的結構與組成

A、B、C類的組成結構:

ABC分類劃分.png

1.3.3 DNS 域名解析

前面講了IP的分類與組成,這部分我們來看下根據(jù)一個域名,是如何找到對應的IP的。
其流程如下:


DNS.png

畫個圖說明一下根、頂級、權威三級域名服務器的關系:


image.png

另外,DNS處理域名解析之外,還有負載均衡的作用,在大型網(wǎng)絡部署中通過DNS解析,使得對應地區(qū)的用戶訪問就近機房的機器。這兒我們就不講解了。

1.3.4 ARP: 連接建立之前,先要找到對應的MAC地址

前面我們講過,網(wǎng)絡傳輸是從上層到下層的,IP的下一層是傳輸鏈路層,對應的是MAC。找到了域名對應的IP,那我們看下MAC。

1.3.4.1 MAC地址
MAC地址.png
1.3.4.2 ARP

ARP的功能很簡單,就是實現(xiàn)了IP到MAC的轉換。
如果IP是同一網(wǎng)段,發(fā)個廣播,對應IP的MAC地址就找到了。
如果目標IP跟源IP不是同一網(wǎng)段,則需要路由器轉發(fā)(轉發(fā)規(guī)則在下一小節(jié)介紹),一級一級地找。
具體流程參見 參考文獻部分。

插播一條 RARP: 由MAC找IP, 主要用在無盤工作站。

工作流程:在網(wǎng)絡中配置一臺RARP服務器,里面保存著IP地址和MAC地址的映射關系,當無盤工作站啟動后,就封裝一個RARP數(shù)據(jù)包,里面有MAC地址,然后廣播到網(wǎng)絡上去,當服務器收到請求包后,就查找對應的MAC地址的IP地址裝入響應報文中發(fā)回給請求者。因為需要廣播請求報文,因此RARP只能用于具有廣播能力的網(wǎng)絡

1.3.4.3 網(wǎng)關路由
網(wǎng)關路由.png

1.4 建立連接

1.4.1 三次握手

找到了ip ,那我們就要開始建立連接了。經(jīng)典的三次握手。


三次握手.png

1.4.2 為什么不是兩次握手?為什么不是四次握手?

二次跟四次.png

1.5 消息傳輸?shù)腡CP可靠性保證

握手建立了,都說TCP是可靠的,那它是如何保證的呢?

1.5.1 可靠性保證需要關注哪幾方面?

可靠性保證四方面.png

1.5.2 TCP的格式

TCP為了解決上述四個問題,有哪些結構上的保障呢?


TCP包頭.png

1.5.3 緩沖區(qū)

另外在發(fā)送端、接收端都有緩沖區(qū)來支持:


緩沖區(qū).png

1.5.4 靠譜的機制

靠譜的機制.png

1.6 發(fā)送請求

1.6.1 請求格式

連接建立了,保障機制也有了,那我們看一下這個請求里面到底包含了什么?

請求格式.png

1.6.2 數(shù)據(jù)傳輸

1.6.2.1 遇到大文件傳輸怎么辦?
大文件.png
1.6.2.2 怎么保證有狀態(tài)的?

http本身是無狀態(tài)的,http怎么保證狀態(tài)流轉呢?


cookie與session.png
1.6.2.3 提高安全性 https

為了提高安全性,很多網(wǎng)站引入了https 。采用非對稱加密跟對稱加密的組合。


https.png

https具體的交互流程 網(wǎng)上隨處可見,這兒就不展開了,列個連接:
https的交互流程: https://www.cnblogs.com/xiohao/p/9054355.html

1.6.2.4 提高傳輸性能 http2
http2-概述.png
http2 再啰嗦一下.png

1.6.3 首部字段梳理

首部字段.png

1.7 響應處理

1.7.1 響應格式

響應.png

1.7.2 狀態(tài)碼

狀態(tài)碼.png

1.8 斷開連接

1.8.1 四次揮手

四次揮手.png

1.8.2 TCP狀態(tài)機

狀態(tài)圖.png

2 網(wǎng)絡不通了,我們怎么確認下是哪兒出了問題?

網(wǎng)絡不通,ping一下看看。ping是ICMP 互聯(lián)網(wǎng)傳輸控制協(xié)議的一種。
另外,ICMP還包含了差錯報文控制協(xié)議。


image.png

3 傳統(tǒng)C/S要變了,我們需要去中心

3.1 對等網(wǎng)絡 P 2 P

P2P.png

3.2 算法 KAD

3.2.1 節(jié)點角色

一個節(jié)點兩個角色.png

一個節(jié)點,提供了兩個角色:
一個是通過UDP協(xié)議組建的節(jié)點網(wǎng)絡;
另外一個是啟動一個TCPserver,用于上傳和下載。

3.2.2 DHT算法的規(guī)定

DHT算法的規(guī)定.png

3.2.3 核心流程

相近或者相似 的哈希,在KAD算法中,是通過異或來計算的。

3.2.3.1 新 node 下載某文件(比如文件1)的過程
節(jié)點下載文件.png
3.2.3.2 DHT網(wǎng)絡中的多節(jié)點關系是怎么維護的?
節(jié)點維護.png
3.2.3.3 一個節(jié)點是如何查找另外一個節(jié)點的?
節(jié)點查找.png
3.2.3.4 節(jié)點間溝通?
節(jié)點溝通.png
3.2.3.5 DHT網(wǎng)絡節(jié)點更新?
節(jié)點更新.png

4 socket編程 了解一下?

4.1 概述

socket概述.png

4.2 基于TCP的socket編程

TCP-SOCKET.png

一旦connect之后,握手成功,服務端的accept就會返回另外一個socket . 就是監(jiān)聽socket跟真正用來傳數(shù)據(jù)的socket 是兩個。

socket在Linux中,就是一個文件,這個文件指向socket在內(nèi)核中的結構。這個結構里面有另兩個隊列,發(fā)送隊列和接收隊列。

4.3 基于UDP的socket編程

UDP-SOCKET.png

4.4 服務器如何處理更多的任務?

multi-task.png

5 再說一下UDP?

UDP.png

6 速度再快一點-CDN

CDN.png

7 參考文獻

同一局域網(wǎng)ARP : https://zhuanlan.zhihu.com/p/28771785
跨局域網(wǎng)ARP: https://zhidao.baidu.com/question/2009765406663037188.html?qbl=relate_question_2
《趣談網(wǎng)絡協(xié)議》
整理筆記xmind文件: https://pan.baidu.com/s/1RTD5JtwzJIIaNfSzzSlUtA

8 其他

本文是基礎知識系列-網(wǎng)絡,如果有疑問,可以直接留言,也可以關注公眾號 “鏈人成長chainerup” 提問留言,或者加入知識星球“鏈人成長” 與我深度鏈接~

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 文章首發(fā)于個人blog歡迎指正補充,可聯(lián)系lionsom_lin@qq.com原文地址:《網(wǎng)絡是怎樣連接的》閱讀整...
    Lucus_Linx閱讀 14,463評論 6 31
  • 個人認為,Goodboy1881先生的TCP /IP 協(xié)議詳解學習博客系列博客是一部非常精彩的學習筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,195評論 0 8
  • 一、什么是TCP/IP 網(wǎng)絡和協(xié)議 1. TCP/IP是一類協(xié)議系統(tǒng),它是一套支持網(wǎng)絡通信的協(xié)議集合。網(wǎng)絡是計算機...
    karlon的馬甲閱讀 6,796評論 1 24
  • 簡介 用簡單的話來定義tcpdump,就是:dump the traffic on a network,根據(jù)使用者...
    保川閱讀 6,082評論 1 13
  • 簡介 用簡單的話來定義tcpdump,就是:dump the traffic on a network,根據(jù)使用者...
    JasonShi6306421閱讀 1,351評論 0 1

友情鏈接更多精彩內(nèi)容