本文轉載自實驗樓:TCP/IP簡介
TCP/IP 背景和介紹
上世紀 70 年代,隨著計算機技術的發展,計算機使用者意識到:要想發揮計算機更大的作用,就要將世界各地的計算機連接起來。但是簡單的連接是遠遠不夠的,因為計算機之間無法溝通。因此設計一種通用的“語言”來交流是必要可少的,這時 TCP/IP 協議就應運而生了。
TCP/IP(Transmission Control Protocol/Internet Protocol)是傳輸控制協議和網絡協議的簡稱,它定義了電子設備如何連入因特網,以及數據如何在它們之間傳輸的標準。
TCP/IP 不是一個協議,而是一個協議族的統稱,里面包括了 IP 協議、ICMP 協議、TCP 協議、以及 http、ftp、pop3 協議等。網絡中的計算機都采用這套協議族進行互聯。
網絡協議棧架構
提到網絡協議棧結構,最著名的當屬 OSI 七層模型,但是 TCP/IP 協議族的結構則稍有不同,它們之間的層次結構有如圖對應關系:

可見 TCP/IP 被分為 4 層,每層承擔的任務不一樣,各層的協議的工作方式也不一樣,每層封裝上層數據的方式也不一樣:
(1)應用層:應用程序通過這一層訪問網絡,常見 FTP、HTTP、DNS 和 TELNET 協議;
(2)傳輸層:TCP 協議和 UDP 協議;
(3)網絡層:IP 協議,ARP、RARP 協議,ICMP 協議等;
(4)網絡接口層:是 TCP/IP 協議的基層,負責數據幀的發送和接收。

本門課程,就是從底向上分層次對 TCP/IP 的各協議做介紹。
預備知識
1.IP 地址
網絡上每一個節點都必須有一個獨立的 IP 地址,通常使用的 IP 地址是一個 32bit 的數字,被 . 分成 4 組,例如,255.255.255.255 就是一個 IP 地址。有了 IP 地址,用戶的計算機就可以發現并連接互聯網中的另外一臺計算機。
在 Linux 系統中,可以用這樣一條命令查看自己的 IP 地址:
ifconfig -a

2.域名
用 12 位數字組成的 IP 地址很難記憶,在實際應用時,用戶一般不需要記住 IP 地址,互聯網給每個 IP 地址起了一個別名,習慣上稱作域名。
域名與計算機的 IP 地址相對應,并把這種對應關系存儲在域名服務系統 DNS(Domain Name System)中,這樣用戶只需記住域名就可以與指定的計算機進行通信了。
常見的域名包括 com、net 和 org 三種頂級域名后綴,除此之外每個國家還有自己國家專屬的域名后綴(比如我國的域名后綴為 cn)。目前經常使用的域名諸如百度(www.baidu.com)、Linux 組織(www.lwn.net)等等。
我們可以使用命令”nslookup”或者“ping”來查看與域名相對應的 IP 地址,由于實驗樓網絡限制,我們可以使用ping git.shiyanlou.com
查看。
例如:

關于域名與 IP 地址的映射關系,以及 IP 地址的路由和發現機制,將在后續章節進行詳細的說明。
3.MAC 地址
MAC(Media Access Control)地址,或稱為物理地址、硬件地址,用來定義互聯網中設備的位置。
在 TCP/IP 層次模型中,網絡層管理 IP 地址,鏈路層則負責 MAC 地址。因此每個網絡位置會有一個專屬于它的 IP 地址,而每個主機會有一個專屬于它 MAC 地址。
4.端口號
IP 地址是用來發現和查找網絡中的地址的,但是不同程序如何互相通信呢,這就需要端口號來識別了。如果把 IP 地址比作一間房子 ,端口就是出入這間房子的門。真正的房子只有幾個門,但是端口采用 16 比特的端口號標識,一個 IP 地址的端口可以有 65536(即:2^16)個之多!
服務器的默認程序一般都是通過人們所熟知的端口號來識別的。例如,對于每個 TCP/IP 實現來說,SMTP(簡單郵件傳輸協議)服務器的 TCP 端口號都是 25,FTP(文件傳輸協議)服務器的 TCP 端口號都是 21,TFTP(簡單文件傳輸協議)服務器的 UDP 端口號都是 69。任何 TCP/IP 實現所提供的服務都用眾所周知的 1-1023 之間的端口號。這些人們所熟知的端口號由 Internet 端口號分配機構(Internet Assigned Numbers Authority, IANA)來管理。
5、封裝和分用
封裝:當應用程序發送數據的時候,數據在協議層次當中從頂向下通過每一層,每一層都會對數據增加一些首部或尾部信息,這樣的信息稱之為協議數據單元(Protocol Data Unit,縮寫為PDU),在分層協議系統里,在指定的協議層上傳送的數據單元,包含了該層的協議控制信息和用戶信息。如下圖所示:
物理層(一層)PDU指數據位(Bit)
數據鏈路層(二層)PDU指數據幀(Frame)
網絡層(三層)PDU指數據包(Packet)
傳輸層(四層)PDU指數據段(Segment)
第五層以上為數據(data)

分用:當主機收到一個數據幀時,數據就從協議層底向上升,通過每一層時,檢查并去掉對應層次的報文首部或尾部,與封裝過程正好相反。
6.RFC
RFC(Request for Comment)文檔是所有以太網協議的正式標準,并在其官網上面公布,由 IETF 標準協會制定。大量的 RFC 并不是正式的標準,出版的目的只是為了提供信息。RFC 的篇幅不一,從幾頁到幾百頁不等。每一種協議都用一個數字來標識,如 RFC 3720 是 iSCSI 協議的標準,數字越大說是 RFC 的內容越新或者是對應的協議(標準)出現的比較晚。
所有的 RFC 文檔都可以從網絡上找到,其官網為IETF。在網站上面可以通過分類以及搜索快速找到目標協議的 RFC 文檔。目前在 IETF 網站上面的 RFC 文檔有數千個,但是我們不需要全部掌握,在工作或學習中如果遇到可以找到對應的解釋,理論與實際結合會有更好地效果,單純閱讀 RFC 的效果一般。