《拉鉤課程 — 計算機網絡通關》學習筆記

一、概述

1、程序員基礎知識大致可以分爲七種基本科學:計算機組成原理、操作系統、計算機網絡、算法和數據結構、圖形學、編譯原理、編輯技巧。

2、ISP:Internet Service Provider,本地網絡服務提供商。

通常,局域網網絡從 ISP 接入,然後內部再通過路由器、交換機進行連接,構成一個子網。

3、數據發生交換的時候,會先從一條鏈路進入交換設備,然後緩存下來,再轉發(切換)到另外一條路徑,交換技術的本質,就是讓“數據切換路徑”。因爲網絡中的數據是以分組或封包(Packet)的形式傳輸,因此這個技術也被稱爲“封包交換技術(Packet Switch)”。

4、在網絡中,常見的具有交換能力的設備是路由器(Router)和鏈路層交換機(Link-Layer Switch)。通常情況下,兩個網絡可以通過路由器進行連接,多臺設備可以通過交換機進行連接。

路由器通常也具有交換機的功能。比如在家用網絡中,電腦、手機等都可以直接與路由器連接,路由器承擔了鏈路層網關的作用,作爲家用電器之間信息的交換設備。

5、在移動網絡中,無線信號構成了通信鏈路,通信的核心被稱爲蜂窩塔(Cellular Tower),有時候也被稱爲基站(BaseStation)。ISP 將網絡供給處於蜂窩網絡邊緣的路由器,路由器連接蜂窩塔,再通過蜂窩塔(基站)提供處於六邊形地區中的設備。

6、在蜂窩網絡一定範圍內的區域,離用戶較近的地方還可以部署服務器,幫助用戶完成計算。這相當於計算資源的下沉,稱爲 “邊緣計算”。相比中心化的計算,邊緣計算延遲低、鏈路短,能夠將更好的體驗帶給距離邊緣計算集羣最近的節點。從而讓用戶享受到更優質、延遲更低、算力更強的服務。

移動蜂窩網絡因爲部署複雜,往往也是由大型 ISP 直接提供。

7、通信鏈路是一個抽象概念,這裏說的抽象,就是面向對象中抽象類和繼承類的關係,比如公司網絡使用同軸電纜作爲通信鏈路、移動網絡使用無線信號的發送接收器作爲通信鏈路、家用網絡使用藍牙信道作爲通信鏈路等;

8、我們可以把網絡傳輸分爲兩類,一類是端對端(Host-to-Host)的能力,由 TCP/IP 協議羣提供;另一類是廣播的能力,是一對多、多對多的能力,可以看作端對端(Host-to-Host)能力的延伸。

9、互聯網整體結構:

10、光纖是一種透明的導光介質,多束光可以在一個介質中並行傳播,不僅信號容量大,重量輕,並行度高而且傳播距離遠,當然,光纖不能彎曲。

11、TCP/IP 協議羣

  • 應用層提供的是應用到應用(Application-To-Application)的協議,比如微信和微信服務器;
  • 傳輸層提供的是主機到主機(Host-To-Host)的協議,比如手機、平板、Linux 主機等;
  • 網絡層提供的是地址到地址(Address-To-Address)的協議,IP 協議就在這一層工作;
  • 鏈路層提供的是設備到設備(Device-To-Device)的協議;
  • 當信號在兩個設備間傳遞的時候,科學家又設計出了物理層封裝最底層的物理設備、傳輸介質等,由最下方的物理層提供最底層的傳輸能力。

二、互聯網和傳輸層協議

1、TCP(Transport Control Protocol)是一個傳輸層協議,提供 Host-To-Host 數據的可靠傳輸,支持全雙工,是一個連接導向的協議。

2、TCP 上層的應用層協議使用 TCP 能力的時候,需要告知 TCP 是哪個應用 —— 這就是端口號,端口號用於區分應用。

3、連接(Connection)是傳輸層的概念,是數據傳輸雙方的契約;會話(Session)的應用層的概念,是應用的行爲;

4、TCP 是一個雙工協議,數據任何時候都可以雙向傳輸,那麼什麼是雙工/單工:

  • 單工:在任何一個時刻,數據只能單向發送。單工需要至少一條線路;
  • 半雙工:在某個時刻數據可以向一個方向傳輸,也可以向另一個方向反方向傳輸,而且交替進行。半雙工需要至少一條線路;
  • 全雙工:任何時刻數據都可以雙向發送。全雙工需要大於一條線路;

5、C10K 問題指的是併發 10000 連接的問題。核心是有三個問題要解決:內核用什麼數據結構將事件通知線程(即 BIO、NIO、AIO 問題);用什麼編程模型(同步/異步);具體的數據壓縮、拷貝、編碼解碼如何處理;

6、TCP 協議中,數據被拆分成很多個部分,部分增加了協議頭,合併成一個 TCP 段進行傳輸,這個過程,我們俗稱 拆包;同時,TCP 協議中,如果發往一個目的地的多個數據太小了,爲了防止多次發送佔用資源,TCP 協議又可能將他們合併成一個 TCP 段發送,在目的地在還原成多個數據,這個過程,我們俗稱 粘包

傳輸層的協議爲什麼不選擇將文件一次發送呢?有很多原因,比如爲了穩定性,一次發送的數據越多,出錯的概念就越大;比如爲了效率,網絡中有時候存在着並行的路徑,拆分數據包就能更好的利用這些並行的路徑;再比如如果隨意發送很大的數據,可能導致網卡處理不過來,而導致其他應用實時性遭到破壞;

7、假如 TCP 協議不肯拆包,或者拆的包過大,IP 協議就需要拆出大量的包。那麼 IP 協議爲什麼需要拆包呢?這是因爲在網絡中,每次能夠傳輸的數據不可能太大,這受限於具體的網絡傳輸設備,也就是物理特性。但是 IP 協議,拆分太多的封包並沒有意義。因爲可能會導致屬於同個 TCP 段的封包被不同的網絡路線傳輸,這會加大延遲。同時,拆包還需要消耗硬件和計算資源。

8、TCP 作爲一個傳輸層協議,最核心的能力是傳輸。傳輸需要保證可靠性,還需要流速控制,這兩個核心能力均由滑動窗口提供。

9、滑動窗口和流速控制是怎麼回事?滑動窗口是 TCP 協議控制可靠性的核心。發送方將數據拆包,變成多個分組(即 Segment)。然後將數據放入一個擁有滑動窗口的數組,依次發出,仍然遵循先入先(FIFO)的順序,但是窗口中的分組會一次性發送。窗口中序號最小的分組如果收到 ACK,窗口就會發生滑動;如果最小序號的分組長時間沒有收到 ACK,就會觸發整個窗口的數據重新發送。

另一方面,在多次傳輸中,網絡的平均延遲往往是相對固定的,這樣 TCP 協議可以通過雙方協商窗口大小控制流速。

10、 TCP 協議和 UDP 協議的優勢和劣勢?TCP 最核心的價值就是提供封裝好的一套解決可靠性的優秀方案。TCP 幫助我們在確保吞吐量、延遲、丟包率的基礎上,保證可靠性;UDP 則不同,UDP 提供了最小版的實現,其最核心的價值是靈活、輕量、傳輸速度快。

其實對於我們來說,TCP 協議和 UDP 協議根本不存在什麼優勢和劣勢,只不過是場景不同,選擇不同而已。最後還有一個非常重要的考慮因素就是成本,如果沒有足夠專業的團隊解決網絡問題,TCP 無疑會是更好的選擇。

11、一臺內存在 8G 左右的服務器,可以同時維護多少個連接?連接是內存中的狀態對象,從理論上分析,連接本身不太佔用內存。不同語言連接對象大小不等,但是通常很小。下面我提供一段 Java 程序,你可以感受一下:

public class Server {
    public static void main(String[] argv) throws IOException {
        ServerSocket serverSocket = new ServerSocket();
        InetSocketAddress addr = new InetSocketAddress(3001);
        serverSocket.bind(addr);
        List<Socket> list = new LinkedList<>();
        while (true) {
            Socket client = serverSocket.accept();
            list.add(client);
            System.out.println(list.size());
        }
    }
}

public class Client {
    public static void main(String[] argv) throws IOException, InterruptedException {
        List<Socket> clients = new LinkedList<>();
        for (int i = 0; i < 1000000; i++) {
            Socket client = new Socket("127.0.0.1", 3001);
            clients.add(client);
            Thread.sleep(10000);
        }
    }
}

通過運行上面這段程序,你可以觀察到以下這幾個現象:創建 100W 連接速度不是很快,這說明 TCP 連接創建有成本(3 次握手,都是網絡 IO);用 jps 找到對應的進程的 id,在用 sudo cat /proc/{進程ID}/status | grep VmHWM (或者用 jvisualvm 工具)可以看到實際的內存佔用。按照這種增長趨勢,8G 內存空間可以輕輕鬆鬆存放 100W 個連接。

但是如果單機建立太多的連接,會報一個 Cannot assign requested address 或者 No buffer space available 的異常,這是因爲客戶端連接服務端時,操作系統要爲每個客戶端分配一個端口,上面的程序很快會把端口號用盡,或者直接沒有可用的緩衝區。

所以,我們可以得出一個結論:核心的問題是,通信需要緩衝區,通信需要 I/O。這是因爲通信佔用資源,連接本身佔用資源少。

三、網絡層協議

1、IP 協議(Internet Protocol)是一個處於壟斷地位的網絡層協議。IPv4 就是 IP 協議的第 4 個版本,是目前互聯網的主要網絡層協議。IP 協議並不負責數據的可靠性,可靠性是 IP 協議上方的 Host-To-Host 協議(即傳輸層協議)保證的。

2、IP 協議接收 IP 協議上方的 Host-To-Host 協議(即傳輸層協議)傳來的數據,然後進行拆分,這個能力叫做分片(Fragmentation);然後 IP 協議爲每個分片增加一個 IP 頭(Header),組成一個 IP 封包(Datagram);之後,IP 協議調用底層的局域網(數據鏈路層)傳送數據。最後 IP 協議通過尋址和路由能力最終把封包送達目的地。

  • 延遲(Latency):1bit 的數據從網絡的一個終端傳送到另一個終端需要的時間;
  • 吞吐量(Throughput):單位時間內可以傳輸的平均數據量;
  • 丟包率(Packet loss):丟包率指的發送出去的封包沒有達到目的地的比率;

3、路由和尋址的區別是什麼?尋址(Addressing)就是通過地址找到設備;路由(Routing)本質是路徑的選擇。就好像知道地址,但是到了每個十字路口,還需要選擇具體的路徑。因此,路由和尋址,是相輔相成的關係。

4、環回地址,是指不離開主機的數據包(也就是說,這些數據包不會通過外部網絡接口)。環回地址是主機用於向自身發送通信的一個特殊地址。環回地址爲同一臺設備上運行的 TCP/IP 應用程序和服務之間相互通信提供了一條捷徑。同一臺主機上的兩項服務若使用環回地址而非分配的主機地址,就可以繞開 TCP/IP 協議棧的下層。通過 ping 環回地址,還可以測試本地主機上的 TCP/IP 配置。

IPv4 的環回地址是保留地址之一 127.0.0.1。儘管只使用 127.0.0.1 這一個地址,但地址 127.0.0.0 到 127.255.255.254 均予以保留。此地址塊中的任何地址都將環回到本地主機中。此地址塊中的任何地址都絕不會出現在任何網絡中。

IPv6 的環回地址必須以 fe80 開頭;

7、IPv4 的地址是 4 個 8 位,總共 32 位,用 0-255 的數字標識;IPv6 的地址是 8 個 16 位,總共 128 位,通常用 16 進製表示,IPv6 地址太多,因此不再需要子網掩碼,而是直接將 IPv6 的地址分區即可;

8、IPv6 解決的是地址耗盡問題,IPv6 的工作原理和 IPv4 相似,分成切片(Segmentation)、增加封包頭、路由(尋址)這樣幾個階段去工作。

9、Tunnel 技術是什麼?Tunnel 技術是兩個網絡間用程序定義的一種通道。具體來說,如果兩個 IPv6 網絡被 IPv4 分隔開,那麼兩個 IPv6 的出口處(和 IPv4 網絡的網關處)就可以用程序(或硬件)實現一個隧道,方便兩個網絡設備的通信。

10、交換機(或者稱爲鏈路層交換機),鏈路層設備,它的工作就是不斷接收數據,然後轉發數據。通常意義上,交換機不具有路由功能,路由器往往具有交換功能。

11、設備間通信的本質其實是設備擁有的網絡接口(網卡)間的通信。爲了區別每個網絡接口,互聯網工程任務組(IETF)要求每個設備擁有一個唯一的編號,這個就是 MAC 地址。總的來說,IP 地址更像現實生活中的地址,而 MAC 地址更像你的身份證號。

12、ARP(地址解析協議):已知 IP 地址,找到 MAC 地址的協議。發送接口會發送一個廣播查詢給到交換機,交換機將查詢轉發給所有接口。如果某個接口發現自己就是對方要查詢的接口,則會將自己的 MAC 地址回傳。接下來,會在交換機和發送接口的 ARP 表中,增加一個緩存條目。

因此,即使是局域網兩臺設備通信,也必須通過交換機,來查詢 ARP 表獲取對方的 MAC 地址。

13、NAT(網絡地址解析協議):解決的是內外網通信的問題。NAT 通常發生在內網和外網銜接的路由器中,由路由器中的 NAT 模塊提供網絡地址轉換能力。從設計上看,NAT 最核心的能力,就是能夠將內網中某個 IP 地址映射到外網 IP,然後再把數據發送給外網的服務器。當服務器返回數據的時候,NAT 又能夠準確地判斷外網服務器的數據返回給哪個內網 IP。

14、MTU 這個縮寫詞,它指的是 Maximun Transmission Unit,最大傳輸單元,意思是鏈路層網絡允許的最大傳輸數據分組的大小。因此 IP 協議要根據 MTU 拆分封包。

15、總結下,數據的發送方,將自己的 MAC 地址、目的地 MAC 地址,以及數據作爲一個分組(Packet),也稱作 Frame 或者封包,發送給交換機。交換機再根據目的地 MAC 地址,將數據轉發到目的地的網絡接口(網卡)。

四、網絡編程

1、Socket 首先是文件,存儲的是數據。

對服務端而言,分成服務端 Socket 文件和客戶端 Socket 文件。服務端 Socket 文件存儲的是客戶端 Socket 文件描述符;客戶端 Socket 文件存儲的是傳輸的數據。讀取客戶端 Socket 文件,就是讀取客戶端發送來的數據;寫入客戶端文件,就是向客戶端發送數據。

對客戶端而言, Socket 文件存儲的是發送給服務端(或接收的)數據,客戶端 Socket 是一個雙向管道,操作系統將客戶端傳來的數據寫入這個管道,也將線程寫入管道的數據發送到客戶端。

2、磁盤讀取正確的做法是每次讀取 2k、4k 這樣大小的數據,這是因爲操作系統中的內存分頁通常是這樣的大小,而磁盤的讀寫往往是會適配頁表大小。體現在內存中就是緩衝區的作用,比如設置一個 2k 大小緩衝區,這樣讀取 2048 次,纔會真的發生一次讀取。

3、磁盤讀取 2k 數據,讀取到的不一定是 2k 實際的數據,很有可能會比 2k 少,這是因爲文件內容是以日誌形式存儲,會有冗餘。

4、磁盤讀取爲什麼不一次先讀取幾兆數據或者讀取更大的數據呢?這有兩個原因。

  • 如果是高併發場景下,併發讀取數據時內存使用是根據併發數翻倍的,如果同時讀取的數據量過大,可能會導致內存不足。
  • 讀取比 2k/4k……大很多倍的數據,比如 1M/2M 這種遠遠大於內存分頁大小的數據,並不能提升性能。

5、用戶空間的程序不可以直接訪問內核空間的數據,這是操作系統的一種保護策略。當然也存在一種叫作內存映射的方式,就是內核通過內存映射,直接將內核空間中的一塊內存區域分享給用戶空間只讀使用,這樣的方式可以節省一次數據拷貝。這個能力在 Java 的 NIO 中稱作 DirectMemory,對應 C 語言是 MMAP。

6、緩衝區的 flip 操作是怎麼回事?flip 操作意味翻轉,是切換緩衝區的讀寫狀態,在 flip 操作中,通常將 position 指針置 0,limit 指針不變。

7、緩衝區的 rewind 操作是怎麼回事?rewind 操作意味倒帶(隱含重頭操作),使 position 指針置 0,相當於重頭讀文件。

五、Web 技術

1、爲了準確地定位資源,人們發明了統一資源定位符(URL,Uniform Resource Locator),這樣我們就可以通過字符串定位一個互聯網的資源。

2、域名系統本質是定位資源。DNS(Domain Name System,域名系統)是一個將域名和 IP 地址相互映射的分佈式服務。

3、位於最頂層的是根域名服務器(Root Name Server)。人們在全世界範圍內搭建了多臺根域名服務器,2016 年的統計數據中,全世界目前有 13 臺 IPv4 根服務器,25 臺 IPv6 根服務器。不過,因爲流量、防止單點故障、平衡地理分佈等問題,根域名服務器只是一個目錄,並不提供具體的數據。

4、域名系統是一個分級的分佈式系統,整體設計也是一個樹狀結構。頂層的根域名服務器和中間的頂級域名服務器,存儲的是目錄,最終的 DNS 記錄由權威域名服務器提供。DNS 記錄並不僅僅只有映射 IP 一種能力,DNS 記錄還可以設置網站的別名、郵件服務器、DNS 記錄位置等能力。

5、CNAME 是一種 DNS 記錄,它的作用是將一個域名映射到另一個域名。域名解析的時候,如果看到 CNAME 記錄,則會從映射目標重新開始查詢。

6、A 是一種 DNS 記錄,它的作用是將域名和 IPv4 地址映射;AAAA 是一種 DNS 記錄,它的作用是將域名和 IPv6 地址映射。

7、NS(Name Server)是一種 DNS 記錄,描述的是 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.

8、內容分發網絡(Content Dilivery Network,CDN)是一個專門用來分發內容的分佈式應用。CDN 構建在現有的互聯網之上,通過在各地部署數據中心,讓不同地域的用戶可以就近獲取內容。這裏的內容通常指的是文件、圖片、視頻、聲音、應用程序安裝包等,它們具有一個顯著的特徵——無狀態,或者說是靜態的。

9、CDN 回源有 3 種情況,一種是 CDN 節點沒有對應資源時主動到源站獲取資源;另一種是緩存失效後,CDN 節點到源站獲取資源;還有一種情況是在 CDN 管理後臺或者使用開放接口主動刷新觸發回源。

10、Dig 是一個在類 Unix 命令行模式下查詢 DNS 包括 NS 記錄,A記錄,MX 記錄等相關信息的工具。

## 安裝
apt-get install dnsutils

yum install bind-utils
## 使用
dig baidu.com ANY +noall +answer

11、在程序設計當中有一個核心的原則,叫作單一數據源(Single Souce of Truth, SSOT)。這個原則指的是,在程序設計中,應該儘可能地減少數據的來源,最好每個數據來源只有單獨一份。這樣能夠避免大量的數據不一致以及同步數據的問題。

12、萬維網(World Wide Web, WWW)是伯納斯·李對一系列發明,包括 Web 服務、HTTP 協議、HTML 語言等一個體系的綜合。

13、HTTP 是不是每次發送一個請求,都建立一個 TCP 連接呢? 當然不能這樣,爲了節省握手、揮手的時間。當瀏覽器發送一個請求到 Web 服務器的時候,Web 服務器內部就設置一個定時器。在一定範圍的時間內,如果客戶端繼續發送請求,那麼服務器就會重置定時器。如果在一定範圍的時間內,服務器沒有收到請求,就會將連接斷開。這樣既防止浪費握手、揮手的資源,同時又避免一個連接佔用時間過長無法回收導致內存使用效率下降。這個能力可以利用 HTTP 協議頭進行配置,比如下面這條請求頭,會告訴 Web 服務器連接的持續時間是 5s,如果 5s 內沒有請求,那麼連接就會斷開。

Keep-Alive: timeout=5s

14、強制緩存:請求過一次不需要再次發送請求的緩存模式。當一個文件被強制緩存後,下一次請求會直接使用本地版本,而不會真的發出去。使用強制緩存時要注意,千萬別把需要動態更新的數據強制緩存。

15、協商緩存:第一次獲取接口數據,會將數據緩存到本地,並存儲下數據的摘要(digst)。第二次請求時,瀏覽器檢查到本地有緩存,將摘要發送給服務端。服務端會檢查服務端數據的摘要和瀏覽器發送來的是否一致。如果不一致,說明服務端數據發生了更新,服務端會回傳全部數據。如果一致,說明數據沒有更新,服務端不需要回傳數據。https://www.cnblogs.com/cckui/p/11506514.html

16、HTTP 2.0 的多路複用,會將請求返回都切分成小片,這樣利用同一個連接,請求相當於並行的發出,互相之間不會有干擾。同樣,當一個網站需要加載的資源較多時,瀏覽器會嘗試併發發送請求(利用多線程技術)。瀏覽器會限制同時發送併發請求的數量,通常是 6 個,這樣做一方面是對用戶本地體驗的一種保護,防止瀏覽器搶佔太多網絡資源;另一方面也是對站點服務的保護,防止瞬時流量過大。

17、H264 就是國際標準化組織在推廣的一種編碼格式。在 H264 的視頻編碼技術中,有一個叫作宏塊的概念。宏塊,就是將畫面分成大小不等的區域。比如說 8x8、16x16 等。當播放兩個連續的畫面的時候,你可以理解成兩張圖片。如果基於圖片分析,那麼播放的就是很多個宏塊。在這連續的兩幀畫面中,並不是所有的宏塊都發生了變化。

18、點對點連接需要解決 NAT 穿透(NAT 穿牆)的問題。所謂 NAT 穿透問題指的是:內網發起連接,對方的 NAT 路由會因爲自己內網的機器沒有發起過請求而拒絕;反之,如果對方發起請求,會被己方的 NAT 拒絕。這種情況類似於多線程中的“死鎖”問題,無法解決。這個時候,就需要一臺第三方服務器作爲 NAT 模塊的輔助功能,幫助雙方的 NAT 模塊設置本地數據,讓雙方的 NAT 模塊都認爲對方已經和自己發起過通信。

19、流媒體,就是把多媒體數據抽象成爲流進行傳輸。視頻本質上是一張張圖片在播放,因此非常適合流傳輸。要知道,流是隨着時間產生的數據。通常在一個網絡中,等價成本下吞吐量、丟包率和延遲 3 者不能兼得。

20、直播網站是如何實現的?一個直播網站通常會有下面 5 個部分組成。

  • 錄製端:負責錄製直播視頻,用流的形式上傳。
  • 計算集羣:專門負責編碼上傳的流數據,然後進行壓縮、轉碼、切片等工作。
  • 對象存儲:存儲原始視頻和轉碼後的視頻(相當於 CDN 的源,回源用)。
  • CDN:將轉碼後的內容分發到離用戶較近的節點,方便用戶獲取。
  • 直播 App:給用戶看直播時使用。

21、反爬蟲的手段主要有:robots.txt、用戶識別、字符加密算法、數據加密算法。

22、如果你的應用需要智能 DNS 服務,你將如何實現?https://bind9.readthedocs.io/en/latest/configuration.html

  • 首先你可以在你的域名解析系統中增加兩條(或以上)ns 記錄。比如說你的域名是 example.com,那麼你可以增加 ns1.exmaple.com, ns2.example.com。當然,指定這兩個域名的 IP 還需要配置兩個 A 記錄。然後你需要兩臺機器(也可以是容器或者虛擬機),對應 ns1 和 ns2。最好用不在同一個物理機上的兩個容器,這樣可以避免一臺物理機故障導致服務癱瘓。
  • 然後在每個容器(虛擬機)上安裝一個 Named 服務。Named 是一個專門用來提供 DNS 服務的工具,在虛擬機上安裝完成 Named 後,這個虛擬機就變成了一個權威服務器節點。
  • 配置好 Named 後,你需要寫幾個腳本文件,給要提供 DNS 的域名配置信息。Named 配套使用的有個叫作 GeoDNS 的插件,可以提供基於地理位置的智能 DNS 服務。

五、網絡安全

1、對稱加密:數據加密標準(DES)算法在 1976 年被美國國家標準局定爲使用標準,DES 採用的 56 位密鑰,每次計算加密 64 位的數據,目前已經被證明可以被暴力破解,所謂暴力破解,就是遍歷所有可能的密鑰解析數據的方法;爲了應對暴力破解等問題,很多團隊選擇對稱加密算法時開始使用高級加密標準(AES),這個加密法用 128 位密鑰,並設計了更難破解的算法。

2、非對稱加密:目前最常見且廣泛使用的非對稱加密算法是 RSA 算法。RSA 依賴的是大整數的分解,以及一些和素數相關的算法。目前沒有理論可以破譯 RSA 算法。總體來說,RSA 密鑰越長破解成本就越高,因此仍然被廣泛使用。

3、爲什麼可以相信一個 HTTPS 網站?當用戶用瀏覽器打開一個 HTTPS 網站時,會到目標網站下載目標網站的證書。接下來,瀏覽器會去驗證證書上的簽名,一直驗證到根證書。如果根證書被預裝,那麼就會信任這個網站。也就是說,網站的信用是由操作系統的提供商、根證書機構、中間證書機構一起在擔保。

4、如何抵禦 SYN 拒絕攻擊?SYN 攻擊是 DDoS 攻擊的一種形式。這種形式攻擊者僞裝成終端不停地向服務器發起 SYN 請求。通常攻擊者的“肉雞”,發送了 SYN 之後,不等給服務端 ACK,就下線了。 這樣攻擊者不斷髮送 SYN ,然後下線,而服務端會等待一段時間(通常會在 3s 以上),等待 ACK。這樣就導致了大量的連接對象在服務端被積累。

針對這個特點可以實現一個 TCP 代理(防火牆),發現有發送 SYN 但是不給 ACK 的行爲就對目標 IP 地址禁用一段時間。這個策略平時可以配置成開關,等到被攻擊的時候打開。另一方面,可以適當提升連接數支持。

5、最後,網絡安全是高壓線,工作中不容忽視,需要你加倍小心,謹慎處理。這裏我囑咐你兩件事情:第一,技術崗位其實很容易違法,違法行爲堅決不要做;第二,上線前要進行安全掃描,養成習慣。

六、寄語

1、學習能力很大程度是和你已經擁有的知識成正比的。通常情況下,在一個領域學習過的知識越多,那麼在這個領域的學習能力就越強。很多同學以爲學習是爲了獲得知識,其實學習很多時候是爲了提高學習能力。

2、做一個技術 Leader,主要有兩方面事情,一方面是提效,無論是技術重構、研發流程優化,還是招聘員工、代碼 Review,提效都是一個重要目標。另一方面就是賺錢,幫公司賺錢。

3、希望你在工作中不要忘記生活,學習中也不要失去韌性。要知道,功夫在詩外。如果感覺自己處於瓶頸期,靜下心來去旅旅遊,回家鄉小住一段時間都是不錯的選擇。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章