簡單理解計算機通訊數組
寫在前面:服務器
在計算機剛出現的時候,只能在本機進行一些運算處理,想將一臺計算機中的數據轉移到另外一臺計算機中,須要經過外部存儲介質來傳輸,例如磁帶、軟盤。而網絡技術的出現,使得計算機間能夠經過一些傳輸介質(網線、光纖等),實現快速的數據傳輸和信息交互。現在,網絡已無處不在,那麼,計算機之間到底是如何通訊的呢?下面會經過一些基礎的網絡知識來簡單理解計算機之間的通訊過程。網絡
網絡通訊模型:框架
網絡通訊模型是一種概念模型和框架,旨在使各類計算機在世界範圍內互連爲網絡。其中有OSI七層模型和TCP/IP四層模型,如今大部分網絡通訊都是以TCP/IP四層模型爲基礎的。它們的對應層次以下圖:測試
OSI七層模型和TCP/IP四層模型ui
OSI有七層:從上到下依次爲應用層、表示層、會話層、傳輸層、網絡層、數據鏈路層、物理層編碼
TCP/IP有四層:從上到下依次爲應用層、傳輸層、互連層(網絡層)、網絡接口層(鏈路層)。spa
由於目前大部分TCP/IP模型,因此就以TCP/IP爲例,咱們來理解下數據間的通訊,下圖是兩臺計算機通訊的數據的傳輸過程:設計
計算機之間的數據傳輸過程3d
數據封裝:
在詳細瞭解TCP/IP每一層各自的做用前,先要理解數據封裝的概念,數據在經過網絡接口傳送出去前,會通過層層封裝,每層都會在前面的基礎上添加本身的信息,在傳輸到對方計算機後,又會被層層進行解封裝後獲得最後的數據。其過程以下圖所示:
數據封裝和解封裝過程
TCP/IP參考模型:
TCP/IP參考模型是一個抽象的分層模型,這個模型中,全部的TCP/IP系列網絡協議都被歸類到4個抽象的"層"中。每一抽象層建立在低一層提供的服務上,而且爲高一層提供服務。 完成一些特定的任務須要衆多的協議協同工做,這些協議分佈在參考模型的不一樣層中的,所以有時稱它們爲一個協議棧。
應用層(Application Layer):該層包括全部和應用程序協同工做,利用基礎網絡交換應用程序專用的數據的協議。 應用層是大多數普通與網絡相關的程序爲了經過網絡與其餘程序通訊所使用的層。這個層的處理過程是應用特有的;數據從網絡相關的程序以這種應用內部使用的格式進行傳送,而後被編碼成標準協議的格式。
常見的應用層協議有HTTP、FTP、DNS、SNMP(基於UDP)
傳輸層(Transport Layer):主要爲兩臺主機上的應用程序提供端到端的通訊,包括TCP協議(傳輸控制協議)和UDP(用戶數據報協議)。
端口號由此層提供,且在一臺計算機中具備惟一性。
UDP爲應用層提供一種很是簡單的服務。它只是把稱做數據報的分組從一臺主機發送到另外一臺主機,但並不保證該數據報能到達另外一端。任何須需的可靠性必須由應用層來提供。
TCP爲兩臺主機提供高可靠性的數據通訊。它所作的工做包括把應用程序交給它的數據分紅合適的小塊交給下面的網絡層,確認接收到的分組,設置發送最後確認分組的超時時鐘等,因爲運輸層提供了高可靠性的端到端的通訊,所以應用層能夠忽略全部這些細節。
由於TCP是一種面向鏈接的協議,因此兩個在使用TCP的應用在彼此交換數據前必須先創建一個TCP鏈接,也就是有名的TCP三次握手,以下圖所示:
網絡層(Internet Layer):處理分組在網絡中的活動。網絡層協議包括IP協議(網際協議),ICPM協議(Internet互聯網控制報文協議),以及IGMP協議(Internet組管理協議),其中的IP協議身是TCP/IP協議簇中最爲核心的協議。IP提供的是不可靠、無鏈接的數據包傳送服務。
IP地址:
講到IP協議就應該講講IP地址,IP地址是分配給網絡上使用IP協議的設備的數字標籤,有IPv4和IPv6兩大類,咱們目前使用的大部分仍是IPv4的地址,如下簡稱IP地址,IP地址由32位二進制數組成,爲便於使用,常以XXX.XXX.XXX.XXX形式表示。IP地址由兩個字段組成:網絡號(net-id)和主機號(host-id),爲方便IP地址管理,IP地址被分爲五類,以下圖:
其中A、B、C類地址爲單播(unicast)地址;D類地址爲組播(multicast)地址;E類地址爲保留地址,以備未來的特殊用途。目前大量使用中的IP地址屬於A、B、C三類地址。
A類地址範圍:0.0.0.0~127.255.255.255
B類地址範圍:128.0.0.0~191.255.255.255
C類地址範圍:192.0.0.0~223.255.255.255
私網地址範圍:10.0.0.0~10.255.255.255 ,172.16.0.0~172.31.255.255 ,192.168.0.0~192.168.255.255,私網地址只能在本地局域網中使用,不在公網中使用。
子網和掩碼:
傳統的IP地址分配方式,對IP地址的浪費很是嚴重。爲了充分利用已有的IP地址,人們提出了掩碼(mask)和子網(subnet)的概念。
掩碼是一個與IP地址對應的32位數字,這些數字中一些爲1,另一些爲0。原則上這些1和0能夠任意組合,不過通常在設計掩碼時,網絡號碼和子網號碼的比特值爲1,主機號碼的比特值爲0。掩碼能夠把IP地址分爲兩個部分:子網地址和主機地址。IP地址與掩碼中爲1的位對應的部分爲子網地址,其餘的位對應的部分則是主機地址。當不進行子網劃分時,子網掩碼即爲默認值,此時子網掩碼中「1」的長度就是網絡號碼的長度。即A類地址對應的掩碼默認值爲255.0.0.0;B類地址的掩碼默認值爲255.255.0.0;C類地址掩碼的默認值爲255.255.255.0。
IP路由選擇:
概念:若目的主機與源主機在同一共享網絡內,IP數據報直接送達目的主機,不然,主機把數據報發往默認的路由器上,由路由器進行數據報轉發。
鏈路層(Link Layer):一般包括設備驅動程序和網絡接口卡。處理與傳輸媒介的物理接口細節。主要協議有:ARP協議和RARP協議
MAC地址 :數據鏈路層具備本身的尋址機制(48bit地址),當一臺主機把以太網數據幀發送到位於同一局域網上得另外一臺主機時,是根據48bit的以太網地址來肯定目的接口的。
而ARP和RARP協議是爲IP地址和MAC地址提供映射的:
咱們在判斷兩臺主機應用之間的網絡是否正常,一般是判斷到對方IP和端口是否能通。
經常使用網絡判斷命令:
Windows:
ping $IP:最經常使用的判斷網絡是否可達的命令。
tracert $IP:跟蹤路由,即打印出本機到到目的IP,所通過路由。
telnet $IP $port:能夠測試某個IP和應用端口是否能通。
netstat:查看本機監聽和創建鏈接的端口。
Linux:
ping $IP:最經常使用的判斷網絡是否可達的命令
traceroute $IP:跟蹤路由,即打印出本機到到目的IP,所通過路由。
或者使用mtr -ni 0.1 $IP,能夠實現以上兩個共同的效果
nc -vz $IP $PORT:測試到目的IP的應用端口是否能通。
netstat -tupln:能夠查看本機目前監聽的端口
參考:
https://en.wikipedia.org/wiki/Internet_protocol_suite
《TCP/IP詳解卷1:協議》