TCP/IP Cheat Sheet

  • 2019 年 12 月 4 日
  • 筆記

概述

TCP/IP不是一個協議,而是一個協議族的統稱。裡面包括了IP協議,IMCP協議,TCP協議,以及我們更加熟悉的http、ftp、pop3協議等等。電腦有了這些,就好像學會了外語一樣,就可以和其他的電腦終端做自由的交流了。

實質上,TCP/IP協議族的結構與ISO-OSI的七層協議經典架構稍有不同,通常來講,我們將之分為四層或者五層。分別是:

  • 鏈路層:處理與電纜(或)其他任何傳輸媒介的物理介面細節 設備驅動程式及介面卡
  • 網路層:處理分組在網路中的活動,例如分組選路 IP/ICMP/IGMP
  • 運輸層:為兩台主機上的應用程式提供端到端的通訊 TCP和UDP
  • 應用層:處理特定的應用程式細節 Telnet FTP 和e-mail等

補充一些基礎知識

互聯網地址(ip地址)

網路上每一個節點都必須有一個獨立的Internet地址(也叫做IP地址)。現在,通常使用的IP地址是一個32bit的數字,也就是我們常說的IPv4標準,這32bit的數字分成四組,也就是常見的255.255.255.255的樣式。IPv4標準上,地址被分為五類,我們常用的是B類地址。具體的分類請參考其他文檔。需要注意的是IP地址是網路號+主機號的組合,這非常重要。

域名系統

域名系統是一個分布的資料庫,它提供將主機名(就是網址啦)轉換成IP地址的服務。

RFC

RFC是什麼?RFC就是tcp/ip協議的標準文檔,在這裡我們可以看到RFC那長長的定義列表,現在它一共有4000多個協議的定義,當然,我們所要學習的,也就是那麼十幾個協議而已。

埠號(port)

注意,這個號碼是用在TCP,UDP上的一個邏輯號碼,並不是一個硬體埠,我們平時說把某某埠封掉了,也只是在IP層次把帶有這個號碼的IP包給過濾掉了而已。

應用編程介面

現在常用的編程介面有socket和TLI。而前面的有時候也叫做「Berkeley socket」,可見Berkeley對於網路的發展有多大的貢獻。

MAC地址

MAC地址,即 Media Access Control Address。中文直譯為,媒體存取控制地址,通常也稱為區域網地址(LAN Address),乙太網地址(Ethernet Address) 或物理地址(Physical Address),它是一個用來確認網路設備位置的位址。

Link layer – 鏈路層

通常將鏈路層稱為數據鏈路層,在TCP/IP協議族中,數據鏈路層有三個目的:

  1. 為IP模組發送和接收IP數據報。
  2. 為ARP模組發送ARP請求和接收ARP應答。
  3. 為RARP發送RARP請求和接收RARP應答。

先來說下這幾個英文簡稱:

  • IP 即 Internet Protocol ,中文為網路協議,IP地址即為網路協議地址的簡稱。
  • ARP 即 Address Resolution Protocol ,中文為地址解析協議,用來通過IP地址定位MAC地址。
  • RARP 即 Reverse Address Resolution Protocol,逆地址解析協議。RARP用於將MAC地址轉換為IP地址。其因為較限於IP地址的運用以及其他的一些缺點,因此漸為更新的BOOTP或DHCP所取代。

TCP/IP 協議族支援的鏈路層協議很多,列出常用的幾個:

乙太網鏈路層協議

在win下使用ipconfig 和在 Linux下使用 ifconfig 均可在返回的資訊中找到諸如』乙太網適配器』和』eth0』等欄位,這就是乙太網介面。

乙太網(Ether-net)的定是指數字設備公司( Digital Equipment Corp.)、英特爾公司(Intel Corp.)和Xerox公司在1982年聯合公布的一個標準,這個標準裡面使用了一種稱作CSMA/CD的接入方法。而IEEE802提供的標準集802.3(還有一部分定義到了802.2中)也提供了一個CSMA/CD的標準。

這兩個標準稍有不同,TCP/IP協議對這種情況的處理方式如下:

  • 乙太網的IP數據報封裝在RFC894中定義,而IEEE802網路的IP數據報封裝在RFC1042中定義。
  • 一台主機一定要能發送和接收RFC894定義的數據報。
  • 一台主機可以接收RFC894和RFC1042的封裝格式的混合數據報。
  • 一台主機也許能夠發送RFC1042數據報。如果主機能同時發送兩種類型的分組數據,那麼發送的分組必須是可以設置的,而且默認條件下必須是RFC 894分組。

乙太網協議封裝可以參考-乙太網協議封裝格式

SLIP(串列線路IP)

SLIP(Serial Line Internet Protocol,串列線路網際協議),主要在Unix遠程訪問伺服器中使用,現今仍然用於連接某些ISP。因為SLIP協議是面向低速串列線路的,可以用於專用線路,也可以用於撥號線路,Modem的傳輸速率在1200bps到19200bps。RFC1055中有詳細描述。

幀格式的規則:

  1. IP數據報以一個被稱作END(0xc0)的特殊字元結束。同時為防止數據到來前的雜訊,通常在開始處也會傳一個END,用來標識數據的起始部分。
  2. 若IP報文中某個字元為END,那麼要連續傳輸兩個位元組0xdb,0xdc來代替。(好比,程式語言中要列印特殊含義的字元的時候要加轉義字元)
  3. 若IP報文中某個字元為ESC,那麼要連續傳輸兩個位元組0xdb,0xdd來代替。

SLIP的缺陷:

  1. 每一端必須知道對方的IP地址,不能把本端的IP地址通知給另一端
  2. 數據幀中沒有類型欄位。如果一條串列線路用於SLIP,那麼它不能同時使用其他協議。
  3. SLIP中沒有類似於乙太網的CRC校驗欄位,這樣糾錯能力差。

CSLIP

傳統的串列線路速率較低,為了傳輸1個位元組的數據需要20個位元組的IP首部和20個位元組的TCP首部。因此,人們提出CSLP(壓縮SLIP),他將前面提到的40個位元組壓縮到3到5個位元組,且能夠在兩端維持多大16個TCP連接,並且知道其中每個連接的首部中的某個欄位一般不會發生變化。對於那些發生變化的欄位,大多數只是一些小的數字和的改變。被壓縮的首部大大縮短了交互響應時間。

PPP(點對點協議)

PPP協議修改了SLIP協議中的所有缺陷:

包括三個部分:

  1. 在串列鏈路上封裝了IP數據報的方法。PPP既支援數據位8為和無奇偶檢驗的非同步模式,還支援面向比特的同步鏈接。
  2. 建立、配置及測試LCP(數據鏈路的鏈路控制協議)。它允許通訊雙方進行協商,以及確定不同的選項。
  3. 針對不同網路層協議的NCP(網路控制協議)體系。當前RFC定義的網路層有IP、OSI網路層、DECnet以及AppleTalk。例如,IP NCP允許雙方商定是否對報文首部進行壓縮,類似於CSLIP

具體參看 – PPP協議詳解

迴環介面(127.0.0.1)

迴環介面,又叫環回介面都是Loopback Interface的翻譯。

關於這個127.0.0.1基本上學過網路編程的人都不會陌生。比如你用C#寫一個c/s的程式,要用自己的PC又當Server又當Client。就需要這個迴環地址。當然同樣可以用localhost代替。

A類網路號就是為了迴環介面預留的,大多數系統喜歡分配127.0.0.1,所以在你不裝網卡的時候用ping命令也是可以通的。當你把ip數據報傳給這個介面的時候,就不能再任何網路上出現了。

對於環回介面,有如下三點值得注意:

  • 傳給環回地址(一般是127.0.0.1)的任何數據均作為IP輸入。
  • 傳給廣播地址或多播地址的數據報複製一份傳給環回介面,然後送到乙太網上。這是因為- 廣播傳送和多播傳送的定義包含主機本身。
  • 任何傳給該主機IP地址的數據均送到環回介面。