1. TCP/IP 協(xié)議
我們通常使用的網(wǎng)絡都是在 TCP/IP 協(xié)議的基礎上運作的。
TCP/IP 是互聯(lián)網(wǎng)相關的各類協(xié)議族的總稱。
常見的互聯(lián)網(wǎng)相關協(xié)議有 TCP、IP、HTTP、FTP、UDP 等等。
2. 網(wǎng)絡分層
TCP/IP 四層模型,將網(wǎng)絡從下至上分為數(shù)據(jù)鏈路層(Data Link)、傳輸層(Transport)、網(wǎng)絡層(Network)、應用層(Application)。
ISO 提出的 OSI(Open System Interconnection)模型將網(wǎng)絡分為七層,即物理層( Physical )、數(shù)據(jù)鏈路層(Data Link)、網(wǎng)絡層(Network)、傳輸層(Transport)、會話層(Session)、表示層(Presentation)和應用層(Application)。
關于 TCP/IP 4 層和 5 層兩種不同的說法,解釋如下
TCP/IP 是事實標準,分 4 層。OSI 模型是國際標準,分 7 層。一般把他們綜合起來講,就說是 5 層。只是把網(wǎng)絡接口層分開為數(shù)據(jù)鏈路層和物理層 2 層了。
3. 網(wǎng)絡傳輸?shù)倪^程
以 HTTP 舉例,傳輸順序為客戶端的應用層 -> 傳輸層 -> 網(wǎng)絡層 -> 鏈路層,服務器在鏈路層接收到數(shù)據(jù),再向上層發(fā)送,從鏈路層 -> 網(wǎng)絡層 -> 傳輸層 -> 應用層。

在數(shù)據(jù)傳輸?shù)倪^程中,從上層向下層傳輸?shù)倪^程中,每經(jīng)過一層就會被封裝(encapsulate)上該層所屬的首部信息。相反,從下層向上層傳輸?shù)倪^程,則沒經(jīng)過一層就把對應的首部去掉。


4. IP 協(xié)議
IP(Internet Protocol)網(wǎng)際協(xié)議位于網(wǎng)絡層。“IP” 在這里是一種協(xié)議的名稱,IP 協(xié)議中還有一個非常重要的內容,那就是給因特網(wǎng)上的每臺計算機和其它設備都規(guī)定了一個唯一的地址,叫做 “IP 地址”。
IP 協(xié)議的作用是把各種數(shù)據(jù)包傳送給另外一個接收對象。而要確定數(shù)據(jù)包傳送到哪里,需要兩樣東西,分別是 IP 地址和 MAC 地址(Media Access Control Address)。
MAC(Media Access Control,介質訪問控制)地址,也叫硬件地址,長度是48比特(6字節(jié)),由16進制的數(shù)字組成,分為前24位和后24位:
前24位叫做組織唯一標志符(Organizationally Unique Identifier,即OUI),是由IEEE的注冊管理機構給不同廠家分配的代碼,區(qū)分了不同的廠家。
后24位是由廠家自己分配的,稱為擴展標識符。同一個廠家生產(chǎn)的網(wǎng)卡中MAC地址后24位是不同的。
MAC地址對應于OSI參考模型的第二層數(shù)據(jù)鏈路層,工作在數(shù)據(jù)鏈路層的交換機維護著計算機MAC地址和自身端口的數(shù)據(jù)庫,交換機根據(jù)收到的數(shù)據(jù)幀中的“目的MAC地址”字段來轉發(fā)數(shù)據(jù)幀。
簡單來說,MAC 地址就是每一張網(wǎng)卡的身份證號,具有全球唯一性(說是這么說,不過好像還是有重復的情況,不知道廠商要怎么確保每一張網(wǎng)卡的 MAC 地址不相同),網(wǎng)卡的物理地址通常是由網(wǎng)卡生產(chǎn)廠家燒入網(wǎng)卡的 EPROM(通??梢酝ㄟ^程序擦寫來進行修改)。
5. ARP 協(xié)議
ARP(Address Resolution Protocol,地址解析協(xié)議)是將IP地址解析為以太網(wǎng)MAC地址(或稱物理地址)的協(xié)議。
在局域網(wǎng)中,當主機或其它網(wǎng)絡設備有數(shù)據(jù)要發(fā)送給另一個主機或設備時,它必須知道對方的網(wǎng)絡層地址(即IP地址)。但是僅僅有IP地址是不夠的,因為IP數(shù)據(jù)報文必須封裝成幀才能通過物理網(wǎng)絡發(fā)送,因此發(fā)送站還必須有接收站的物理地址(MAC 地址),所以需要一個從IP地址到物理地址的映射。APR就是實現(xiàn)這個功能的協(xié)議。
IP 地址轉 MAC 地址的工作的流程如下:
- 主機 A 先在本地的 ARP 緩存(一張 IP 和 MAC 的對應表)中查找是否存在對應 IP 地址的記錄,如果存在,直接取到對應 IP 的 MAC 地址。
- 如果主機 A 在 ARP 緩存中沒有找到對應記錄,就會向本地絡中的所有主機發(fā)起廣播詢問,本地網(wǎng)絡上的每臺主機都接收到 ARP 請求并且檢查是否與自己的 IP 地址匹配。如果主機發(fā)現(xiàn)請求的 IP 地址與自己的 IP 地址不匹配,它就不會有任何回應。
- 主機 B 確定 ARP 請求中的 IP 地址與自己的 IP 地址匹配,則將主機 A 的 IP 地址和 MAC 地址對應記錄添加到本地 ARP 緩存中。
- 主機 B 將包含其 MAC 地址的 ARP 回復消息直接發(fā)送回主機 A。
- 當主機 A 收到從主機 B 發(fā)來的 ARP 回復的消息時,會向本地的 ARP 緩存中添加主機 B 的 IP 地址與 MAC 地址的對應記錄。主機 B 的 MAC 地址確定后,主機 A 就能與主機 B 進行通信了。
ARP 欺騙攻擊
ARP 請求為廣播形式發(fā)送的,網(wǎng)絡上的主機都可以接收到,也可以自主發(fā)送ARP應答消息,并且當其他主機收到應答報文時不會檢測該報文的真實性就將其記錄在本地的MAC地址轉換表,這樣攻擊者就可以向目標主機發(fā)送偽 ARP 應答報文,從而篡改本地的MAC地址表。ARP 欺騙可以導致目標計算機與網(wǎng)關通信失敗,更會導致通信重定向,所有的數(shù)據(jù)都會通過攻擊者的機器,因此存在極大的安全隱患。
舉個栗子來說明 ARP 欺騙:網(wǎng)絡中有三臺設備,路由器(網(wǎng)關)、主機 A、主機 B,現(xiàn)在主機 A 要訪問一個網(wǎng)站,因為處于局域網(wǎng)(內網(wǎng))之中,訪問外網(wǎng)需要經(jīng)過路由器(網(wǎng)關)來中轉,這時候主機 A 希望向網(wǎng)關(假設 IP 地址是 192.168.1.1)發(fā)送一些數(shù)據(jù),但是主機 A 的本地的 ARP 映射表中不存在 192.168.1.1 這個 IP 地址對應的記錄,于是它向整個局域網(wǎng)發(fā)送 ARP 廣播。如果主機 B 是一個攻擊者,它在接收到廣播之后,可以主動向主機 B 發(fā)送“我的 IP 是 192.168.1.1,對應的 MAC 地址是 XX:XX:XX……”,主機 A 在沒有驗證信息是否真實的情況下,就將這條 IP 和 MAC 對應記錄保存在了本地的 ARP 緩存中,然后向主機 B 發(fā)送請求數(shù)據(jù),這時就會導致通信失敗。如果主機 B 同時還負責重定向主機 A 的請求到真實的網(wǎng)關,那么主機 A 不會出現(xiàn)通信失?。ňW(wǎng)絡請求失敗),但是所有通信都會經(jīng)過主機 B。
(ps:看到這里有一點感觸,想起以前和別人共用網(wǎng)絡,經(jīng)常遭到 ARP 欺騙攻擊,就是被人使用 p2p 終結者、聚生網(wǎng)管之類的軟件進行限速和斷網(wǎng))
6. TCP 協(xié)議
TCP 位于傳輸層,提供可靠的字節(jié)流服務。
所謂的字節(jié)流服務(Byte Stream Service)是指,為了方便傳輸,將大塊數(shù)據(jù)分割成以報文段(segment)為單位的數(shù)據(jù)包進行管理。而可靠的傳輸服務是指,能夠把數(shù)據(jù)準確可靠地傳給對方。
TCP 的三次握手
TCP 的兩種標志(flag) —— SYN(synchronize) 和 ACK(acknowledgement)。
客戶端首先發(fā)送一個帶 SYN 標志的數(shù)據(jù)包給對方。服務器收到后,回傳一個帶有 SYN/ACK 標志的數(shù)據(jù)包以示傳達確認信息。最后,客戶端再回傳一個帶 ACK 標志的數(shù)據(jù)包,代表“握手”結束。

TCP 的四次揮手
- 客戶端向服務器端發(fā)送 FIN,表示數(shù)據(jù)傳輸完畢,不會再傳輸數(shù)據(jù),但是服務器端有數(shù)據(jù)沒有傳輸完,可以繼續(xù)傳輸。
- 服務器返回 ACK 表示知道了,傳輸完數(shù)據(jù)會再發(fā)消息給客戶端。
- 服務器繼續(xù)傳輸未傳完的數(shù)據(jù)。
- 服務器向客戶端發(fā)送 FIN,表示數(shù)據(jù)已經(jīng)傳輸完成,準備關閉連接了。
- 客戶端向服務器發(fā)送 ACK,表示知道了,然后進入 TIME_WAIT 狀態(tài),以保證服務器成功接收到 ACK,等待時間過去則關閉連接。
- 服務器在收到客戶端發(fā)來的 ACK 之后,關閉連接;如果沒有收到,則告知客戶端沒有接收到確認信息,要求重發(fā)。

7. DNS 服務
我們在瀏覽網(wǎng)頁的時候,通常需要輸入網(wǎng)址,例如訪問百度,我們就要輸入 www.baidu.com 這個網(wǎng)址。上網(wǎng)其實就是我們的計算機和服務器進行數(shù)據(jù)交換的一個過程,我們需要知道服務器在網(wǎng)絡上的位置——也就是 IP 地址,才可以與它連接,進行數(shù)據(jù)傳輸。那么計算機是怎么通過網(wǎng)址來獲取到服務器的 IP 地址的呢?
我們可以通過 DNS 服務器來查詢 IP 地址,在我們輸入網(wǎng)址,敲下回車之后,操作系統(tǒng)會將網(wǎng)站域名發(fā)送到本地 DNS 服務器進行查詢。(這里省略了查詢本地 DNS 緩存的過程以及本地 DNS 服務器查詢不到向根域名服務器發(fā)送解析過程的情況)
8. URI 和 URL
URI 是統(tǒng)一資源標識符 Uniform Resource Identifier 的縮寫,URL 是統(tǒng)一資源定位符 Uniform Resource Locator 的縮寫,它是一種具體的 URI,不僅標識了一種資源,同時還指明了如何去定位這個資源。