概述---《TCP/IP协议》卷一
第1章 概述
1.1 引言
很多不同的廠家生產各種型號的計算機,它們運行完全不同的操作系統,但TCP/IP協議族允許它們互相進行通信。這一點很讓人感到吃驚,因為它的作用已遠遠超出了起初的設想。
1.2 分層
TCP/IP的四層系統
- 鏈路層
- 包括操作系統中的設備驅動程序和計算機中對應的網絡接口卡。
- 網絡層
- 處理分組在網絡中的活動。例:分組的選路。
- 網絡層協議包括IP協議(網際協議),ICMP協議(Internet互聯網控制報文協議),以及IGMP協議(I nternet組管理協議)。
- IP協議是不可靠的(與傳輸層比較)。
- 運輸層
- 主要為兩臺主機上的應用程序提供端到端(End system)的通信。
- 有兩個互不相同的傳輸協議:TCP(傳輸控制協議)和UDP(用戶數據報協議)。
- 應用層
- 應用層負責處理特定的應用程序細節。
- Telnet遠程登錄。
- FTP文件傳輸協議。
- SMTP簡單郵件傳送協議。
- SNMP簡單網絡管理協議。
- 等等一系列協議。
- 下面將用一張圖描述:
一個例子,如圖:
問題是:我們列舉了一個FTP客戶程序和另一個FTP服務器程序。
- 圖1-2的右邊,我們注意到應用程序通常是一個用戶進程,而下三層則一般在(操作系統)內核中執行。盡管這不是必需的,但通常都是這樣處理的,例如UNIX操作系統。
- 圖1-2中列舉了四種不同層次上的協議。 FTP是一種應用層協議,TCP是一種運輸層協議,IP是一種網絡層協議,而以太網協議則應用于鏈路層上。
答案顯而易見,任何兩臺計算機之間進行通信都需要經過這幾個過程。
由上面的內容引出了一個問題:從表面上看,網絡層和運輸層之間的區別不那么明顯。為什么要把它們劃分成兩個不同的層次呢?
在回答這個問題之前,讓我們將視野從單個網絡放大到一組網絡(Internet)。漸漸地,我們有了Internet的概念,它是由多個路由器(老一輩的會把它叫做網關)相連組成的。
在圖1-3中,我們可以劃分出端系統(End system)(兩邊的兩臺主機)和中間系統(Intermediate system)(中間的路由器)。
應用層和運輸層使用端到端(End-to-end)協議。在圖中,只有端系統需要這兩層協議。但是,網絡層提供的卻是逐跳(Hop-by-hop)協議,兩個端系統和每個中間系統都要使用它。
在TCP/IP協議族中,網絡層IP提供的是一種不可靠的服務。也就是說,它只是盡可能快地把分組從源結點送到目的結點,但是并不提供任何可靠性保證。而另一方面, TCP在不可靠的IP層上提供了一個可靠的運輸層。為了提供這種可靠的服務, TCP采用了超時重傳、發送和接收端到端的確認分組等機制。
由此可見,雖然傳輸層跟網絡層看上去相同,但實際上運輸層和網絡層分別負責不同的功能。
1.3TCP/IP的分層
下圖是本書要討論的協議
- TCP和UDP是兩種最為著名的運輸層協議,二者都使用IP作為網絡層協議。
- 雖然TCP使用不可靠的IP服務,但它卻提供一種可靠的運輸層服務。(TCP上層應用有Telnet和Rlogin、SMTP等)
- UDP為應用程序發送和接收數據報。一個數據報是指從發送方傳輸到接收方的一個信息單元(例如,發送方指定的一定字節數的信息)。但是與TCP不同的是,UDP是不可靠的,它不能保證數據報能安全無誤地到達最終目的。(UDP上層應用有DNS、TFTP、BOOTP(DHCP的前身)、SNMP等)
- IP是網絡層上的主要協議,同時被TCP和UDP使用。 TCP和UDP的每組數據都通過端系統和每個中間路由器中的IP層在互聯網中進行傳輸。
- ICMP是I P協議的附屬協議。 I P層用它來與其他主機或路由器交換錯誤報文和其他重要信息。(應用層程序可以訪問它,比如ping和traceroute)
- IGMP是Internet組管理協議。它用來把一個UDP數據報多播到多個主機。
- ARP(地址解析協議)和RARP(逆地址解析協議)是某些網絡接口(如以太網和令牌環網)使用的特殊協議,用來轉換IP層和網絡接口層使用的地址。
1.4互聯網的地址
五類不同的互聯網地址格式如下:
各類IP地址范圍:
有3類IP地址
- 單播地址(目的為單個主機)
- 廣播地址(目的端為給定網絡上的所有主機)
- 多播地址(目的端為同一組內的所有主機)
PS:由于互聯網上的每個接口必須有一個唯一的IP地址,因此必須要有一個管理機構為接入互聯網的網絡分配IP地址。這個管理機構就是互聯網絡信息中心(Internet Network InformationCentre),稱作InterNIC。InterNIC只分配網絡號。主機號的分配由系統管理員來負責。(中國的NIC的網址)
1.5域名系統(DNS)
- 域名系統(DNS)是一個分布的數據庫,由它來提供IP地址和主機名之間的映射信息。
- 任何應用程序都可以調用一個標準的庫函數來查看給定名字的主機的IP地址。類似地,系統還提供一個逆函數—給定主機的IP地址,查看它所對應的主機名。
- 大多數使用主機名作為參數的應用程序也可以把IP地址作為參數。例如,在第4章中當我們用Telnet進行遠程登錄時,既可以指定一個主機名,也可以指定一個IP地址。
也就是說,域名系統使得“IP地址”等同于“主機名”。
1.6封裝
當應用程序用TCP傳送數據時,數據被送入協議棧中,然后逐個通過每一層直到被當作一串比特流送入網絡。其中每一層對收到的數據都要增加一些首部信息(有時還要增加尾部信息),該過程如圖1-7所示。
- IP和網絡接口層之間傳送的數據單元應該是分組(packet)。分組既可以是一個IP數據報,也可以是IP數據報的一個片(fragment)。
- 以太網數據幀的物理特性是其長度必須在46~1500字節之間。
各層數據名稱
- TCP報文段
- UDP數據報
- IP數據報
- 以太網數據幀
1.7分用
當目的主機收到一個以太網數據幀時,數據就開始從協議棧中由底向上升,同時去掉各層協議加上的報文首部。每層協議盒都要去檢查報文首部中的協議標識,以確定接收數據的上層協議。這個過程稱作分用(Demultiplexing),圖1 - 8顯示了該過程是如何發生的。
1.8客戶—服務器模式
服務器分為兩種類型
- 重復型
- 等待一個客戶請求的到來。
- 處理客戶請求。
- 發送響應給發送請求的客戶。
- 返回第一步。
- 并發型
- 等待一個客戶請求的到來。
- 啟動一個新的服務器來處理這個客戶的請求。在這期間可能生成一個新的進程、任務或線程,并依賴底層操作系統的支持。這個步驟如何進行取決于操作系統。生成的新服務器對客戶的全部請求進行處理。處理結束后,終止這個新服務器。
- 返回第一步。
重復型服務器在第二步的時候不能為其他客戶服務(一對一服務)。
并發型服務器的優點在于它是利用生成其他服務器的方法來處理客戶的請求(一對多服務)。
一般來說,TCP服務器是并發的,而UDP服務器是重復的。
1.9端口號
TCP和UDP采用16 bit的端口號來識別應用程序。
- 臨時端口號:1024~5000
- 其他服務預留端口號:5001~65535
注:windows的查看進程命令:netstat -an
1.10標準化過程
IETF
www.ietf.org/rfc.html
1.11RFC
RFC文獻地址
1.12標準的簡單服務
| echo | 7 | 7 | 862 | 服務器返回客戶發送的所有內容 |
| discard | 9 | 9 | 863 | 服務器丟棄客戶發送的所有內容 |
| daytime | 13 | 13 | 867 | 服務器以可讀形式返回時間和日期 |
| chargen | 19 | 19 | 864 | 當客戶發送一個數據報時,TCP服務器發送一串連續的字符流,知道客戶中斷連接。UDP服務器發送一個隨即長度的數據報 |
| time | 37 | 37 | 868 | 服務器返回一個二進制形式的32bit數,表示從UTC時間1900年1月1日午夜至今的秒數 |
如果仔細檢查這些標準的簡單服務以及其他標準的TCP/IP服務(如Telnet、FTP、SMTP等)的端口號時,我們發現它們都是奇數。這是有歷史原因的,因為這些端口號都是從NCP端口號派生出來的(NCP,即網絡控制協議,是ARPANET的運輸層協議,是TCP的前身)。NCP是單工的,不是全雙工的,因此每個應用程序需要兩個連接,需預留一對奇數和偶數端口號。當TCP和UDP成為標準的運輸層協議時,每個應用程序只需要一個端口號,因此就使用了NCP中的奇數。
1.13互聯網
internet和Internet區別
- Internet指的是世界范圍內通過TCP/IP互相通信的所有主機集合(超過100萬臺)。
- Internet是一個internet,但internet不等于Internet。
internet意思是用一個共同的協議族把多個網絡連接在一起。
1.14實現
既成事實標準的TCP/IP軟件實現來自于位于伯克利的加利福尼亞大學的計算機系統研究小組。
成長歷史:
1.15應用編程接口
TCP/IP協議的應用程序通常采用兩種應用編程接口(API)。
- socket(套接字)。
- TLI(運輸層接口)。
- 所有關于socket和TLI的編程細節請參閱文獻 [Stevens1990]。
1.16測試網絡
不廢話,上圖:
1.17小結
本章快速地瀏覽了TCP/IP協議族,介紹了在后面的章節中將要詳細討論的許多術語和協議。
總結
以上是生活随笔為你收集整理的概述---《TCP/IP协议》卷一的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 想系统化提升自己产品能力,就要读这些书籍
- 下一篇: B端产品如何做好从1到10的架构搭建?