計算機網絡背景與發展
獨立模式:計算機之間相互獨立。
就像一個個獨立的進程,各自擁有自己的數據,想要獲取其他進程的數據,就得等待該進程將數據處理完畢,放回到系統中,這樣就造成了效率很低的問題。在利用多臺獨立的計算機完成某項業務時,也會有效率低的問題。為了解決進程間效率低的問題,我們想到了進程間通信,同樣的,如果我們可以實現多臺計算機之間的數據共享,這個問題不也就解決了么?
網絡互聯:多臺計算機連接在一起,完成數據共享。
實現進程間的通信,那是因為他們屬于同一主機,他們可以都是有一個操作系統來控制的。多臺計算機, 他們是不同的主機,不由一個操作系統控制,怎么實現他們之間的數據共享呢?我們都知道,就算在同一臺主機內,數據也是各種線路來傳輸的,那么,只要在幾臺主機之間添加一些可用于傳輸數據的線路,不就可以實現多臺主機之間的數據共享了么。
局域網:計算機數量比剛剛更多了,通過交換機和路由器連接在一起。
如果計算機很多,我們也使用一條條的線路將各臺計算機連接起來的話,那估計連的線路都成蜘蛛網了,所以,為了簡化線路,使用交換機和路由器來完成多態計算器之間的數據共享。
廣域網:將遠隔千里的計算機連接在一起。
網絡協議初識
什么是協議?為什么要有協議?
在我國,每個省都有屬于自己的方言,可能是一種,也可能是很多種。某種方言,對于當地人,聽懂是沒有問題的,但是,如果需要和外地人溝通,使用方言,就無法溝通了,為了解決這個問題,國家就出了這樣一個規定,人人都學會說普通話,不同地方的人可以通過使用普通話來進行溝通了。其實,要求說普通話,這就是一種協議。
一臺電腦擁有很多個部件,每個部件的產商可能不同,將各部件組合起來的產商也可能不同,計算機操作系統也有很多,不同產商、不同操作系統,就可能會出現“語言不通”的問題。那么,就算把所有的計算機連接到一起了,也是沒有辦法進行通信的。所以,計算機與計算機之間通過網絡實現通信時需要事先達成一種“約定”,這種“約定”使那些由不同產商的設備、不同的CPU以及不同的操作系統組成的計算機之間,只要遵循相同的協議就能夠實現通信。協議分為很多種,每一種協議都明確的地界定了它的行為規范。
協議由誰來制定呢?
ISO(國際標準化組織),ISO制定了OSI參考模型,該模型將通信協議中的必要的功能分成了7層,每個分層負責接收由它下一層所提供的服務,并且負責向它的上一層提供服務。上下層之間進行交互是所遵循的約定叫做“接口”。同一層之間的交互所遵循的叫做“協議”。
OSI七層模型
雖然給出了OSI七層模型,但是在實際應用中更多的是按照以下5層結構來使用的。
TCP/IP五層模型(或者四層)
物理層:負責光、電信號的傳遞方式。
比如現在的以太網通用的網線(雙絞線),以前以太網采用的同軸電纜,光纖,現在的WiFi無線網使用的電磁波等都是屬于物理層的概念。物理層的能力決定了最大傳輸速率、傳輸距離,抗干擾性等。集線器(Hub)工作在物理層。
數據鏈路層:負責設備之間的數據幀的傳送和識別。例如網卡設備的驅動、幀同步(即從網線上檢測到什么信號算作新幀的開始)、沖突檢測、數據差錯校驗等工作。交換機工作在數據鏈路層。
網絡層:負責地址管理和路由選擇。例如在IP協議中,通過IP地址來標識一臺主機,并通過路由表的方式規劃處兩臺主機之間的數據傳輸的線路(路由)。路由器工作在網絡層。
傳輸層:負責兩臺主機之間的數據傳輸。如傳輸控制協議(TCP),能夠確保數據可靠的從源主機發送到目標主機。
應用層:負責應用程序溝通,如簡單電子郵件傳輸(SMTP)、文件傳輸協議(FTP)、網絡遠程訪問協議(Telnet)等。
網絡傳輸基本流程
先通過一個簡單的例子來簡單理解一下網絡傳輸的流程
同一網段內的兩臺主機進行文件傳輸的過程是怎樣的?
首先來舉一個例子,我們在網上買東西,比如說買了一只電動牙刷,我們下單之后就是靜靜地(焦急地)等待牙刷的到來。其他的我們就關心了。同時,賣家在收到訂單后,就會為我們發貨,在發貨的時候,賣家不會說是他自己拿著牙刷親自送到我們跟前。而是選擇將牙刷打包,然后會寫一個單子,在上邊填上買家的地址信息之類的,保證快遞員能牙刷送到我們的手里,然后選擇一家快遞公司(中通還是韻達或者郵政?),將包裹交由他們。然后自己也就不管了,運輸的過程也不關心??爝f公司將我們的快遞接收了,然后就是一步一步地運輸到我們的手里,在運輸過程中,它的路線選擇,運輸方式的選擇,我們都是不關心的。經過一番周折,牙刷終于到達我們的手里,此時,我們要做的第一件事是什么?確認快遞發給我們的,沒有發錯,然后就是拆快遞了,看看我們買的牙刷是不是自己想要的,雖然我們只關心牙刷,但是,有可能這個電動牙刷很高級,我們還不會使用,那么,我們還需要看一下說明書之類的。最后我們將那些沒用了的,比如包裝盒啊,用于防止牙刷收到沖擊損壞的一些填充物,拿著真正想要的牙刷美美地拿去使用了。了解上邊的這個流程,那么,網絡傳輸的基本流程也就理解的差不多了。
想要通過一個主機向另一個主機發送文件,首先肯定是通過我們客戶自己發起文件的這次傳送,那么首先就是通過應用層,(相當于我們買牙刷下單)根據上邊的TCP/IP分層,應用層下邊就是傳輸層,發起了傳輸任務,具體以什么方式傳輸出去呢?(接下來就是賣家發貨了,選擇中通快遞還是韻達?)傳輸層是有很多協議的,每種協議都代表著一種傳輸方式,根據傳輸的內容選擇不同的傳輸方式,使用UDP或者TCP等來傳輸。傳輸的方式選擇好就要確定傳到哪和傳輸的具體過程了,這就是網絡層要干的事了。(網絡層就有點像是一家快遞公司)雖然此時兩臺主機位于同一個局域網,但是網絡層在傳輸數據的時候肯定不能像我們同處于一塊空間的人一樣傳輸數據可以直接靠喊,就算我們靠喊也是建立在空氣可以傳播聲音的基礎之上的。計算及之間想要實現信息交流可比這個難度要高很多了。需要依靠一大堆的硬件條件才能實現,不同的產商生產的硬件性能有差別,每臺計算機中組裝的硬件也不近相同,傳輸內容的不同,傳輸的方式也就不同,需要的硬件支持也可能不同了。所以在信息的傳輸過程中是需要各層之間相互配合,相互協調實現的。(就相當于說在傳輸過程中,需要用到的交通工具,乃至集裝箱之類的東西)。到這里,已經將信息傳送至另一個主機了,相當于是快遞送到我們身邊了。和上邊的例子稍微不同的是,快遞是一次性就將武平包裝好,快遞單填好,而,網絡傳輸在由上到下交互的時候,將需要的信息一層一層地添加進入數據的頭部的,頭部和數據一起才構成一個完整的報文。我們將這樣一層一層包裝的過程稱為封裝。所以,在對方主機在收到數據包的時候,也是要經過由下到上一層一層的解包。不僅要進行解包,還要從報頭中獲取到一些有用的信息,明確自己的下一步該做出怎樣的選擇。這個過程叫做解包與分用。
這是以TCP/IP協算作四層來劃分的。(將數據鏈路層和物理層合并了)