經過計算機網絡可使多臺計算機實現鏈接,位於同一個網絡中的計算機在進行鏈接和通訊時須要遵照必定的規則,這就比如在道路中行駛的汽車必定要遵照交通規則同樣。在計算機網絡中,這些鏈接和通訊的規則被稱爲網絡通訊協議,它對數據的傳輸格式、傳輸速率、傳輸步驟等作了統一規定,通訊雙方必須同時遵照才能完成數據交換。安全
網絡通訊協議有不少種,目前應用最普遍的是TCP/IP協議(Transmission Control Protocal/Internet Protoal傳輸控制協議/英特網互聯協議),它是一個包括TCP協議和IP協議,UDP(User Datagram Protocol)協議和其它一些協議的協議組,在學習具體協議以前首先了解一下TCP/IP協議組的層次結構。服務器
在進行數據傳輸時,要求發送的數據與收到的數據徹底同樣,這時,就須要在原有的數據上添加不少信息 ,以保證數據在傳輸過程當中數據格式徹底一致。TCP/IP協議的層次結構比較簡單,共分爲四層,如圖所示。
網絡
圖1-1 TCP/IP網絡模型oracle
上圖中,TCP/IP協議中的四層分別是應用層、傳輸層、網絡層和鏈路層,每層分別負責不一樣的通訊功能,接下來針對這四層進行詳細地講解。學習
鏈路層:鏈路層是用於定義物理傳輸通道,一般是對某些網絡鏈接設備的驅動協議,例如針對光纖、網線提供的驅動。spa
網絡層:網絡層是整個TCP/IP協議的核心,它主要用於將傳輸的數據進行分組,將分組數據發送到目標計算機或者網絡。計算機網絡
傳輸層:主要使網絡程序進行通訊,在進行網絡通訊時,能夠採用TCP協議,也能夠採用UDP協議。3d
應用層:主要負責應用程序的協議,例如HTTP協議、FTP協議等。視頻
要想使網絡中的計算機可以進行通訊,必須爲每臺計算機指定一個標識號,經過這個標識號來指定接受數據的計算機或者發送數據的計算機。對象
在TCP/IP協議中,這個標識號就是IP地址,它能夠惟一標識一臺計算機,目前,IP地址普遍使用的版本是IPv4,它是由4個字節大小的二進制數來表示,如:00001010000000000000000000000001。因爲二進制形式表示的IP地址很是不便記憶和處理,所以一般會將IP地址寫成十進制的形式,每一個字節用一個十進制數字(0-255)表示,數字間用符號「.」分開,如 「192.168.1.100」。
隨着計算機網絡規模的不斷擴大,對IP地址的需求也愈來愈多,IPV4這種用4個字節表示的IP地址面臨枯竭,所以IPv6 便應運而生了,IPv6使用16個字節表示IP地址,它所擁有的地址容量約是IPv4的8×1028倍,達到2128個(算上全零的),這樣就解決了網絡地址資源數量不夠的問題。
經過IP地址能夠鏈接到指定計算機,但若是想訪問目標計算機中的某個應用程序,還須要指定端口號。在計算機中,不一樣的應用程序是經過端口號區分的。端口號是用兩個字節(16位的二進制數)表示的,它的取值範圍是0~65535,其中,0~1023之間的端口號用於一些知名的網絡服務和應用,用戶的普通應用程序須要使用1024以上的端口號,從而避免端口號被另一個應用或服務所佔用。
接下來經過一個圖例來描述IP地址和端口號的做用,以下圖所示。
從上圖中能夠清楚地看到,位於網絡中一臺計算機能夠經過IP地址去訪問另外一臺計算機,並經過端口號訪問目標計算機中的某個應用程序。
瞭解了IP地址的做用,咱們看學習下JDK中提供了一個InetAdderss類,該類用於封裝一個IP地址,並提供了一系列與IP地址相關的方法,下表中列出了InetAddress類的一些經常使用方法。
上圖中,列舉了InetAddress的四個經常使用方法。其中,前兩個方法用於得到該類的實例對象,第一個方法用於得到表示指定主機的InetAddress對象,第二個方法用於得到表示本地的InetAddress對象。經過InetAddress對象即可獲取指定主機名,IP地址等,接下來經過一個案例來演示InetAddress的經常使用方法,以下所示。
public class Example01 {
public static void main(String[] args) throws Exception {
InetAddress local = InetAddress.getLocalHost();
InetAddress remote = InetAddress.getByName("www.oracle.cn");
System.out.println("本機的IP地址:" + local.getHostAddress());
System.out.println("oracle的IP地址:" + remote.getHostAddress());
System.out.println("oracle的主機名爲:" + remote.getHostName());
}
}
在介紹TCP/IP結構時,提到傳輸層的兩個重要的高級協議,分別是UDP和TCP,其中UDP是User Datagram Protocol的簡稱,稱爲用戶數據報協議,TCP是Transmission Control Protocol的簡稱,稱爲傳輸控制協議。
UDP是無鏈接通訊協議,即在數據傳輸時,數據的發送端和接收端不創建邏輯鏈接。簡單來講,當一臺計算機向另一臺計算機發送數據時,發送端不會確認接收端是否存在,就會發出數據,一樣接收端在收到數據時,也不會向發送端反饋是否收到數據(只規定發送端與接收端)。
因爲使用UDP協議消耗資源小,通訊效率高,因此一般都會用於音頻、視頻和普通數據的傳輸例如視頻會議都使用UDP協議,由於這種狀況即便偶爾丟失一兩個數據包,也不會對接收結果產生太大影響。
可是在使用UDP協議傳送數據時,因爲UDP的面向無鏈接性,不能保證數據的完整性,所以在傳輸重要數據時不建議使用UDP協議。UDP的交換過程以下圖所示。
UDP傳輸數據被限制在64K之內。
TCP協議是面向鏈接的通訊協議,即在傳輸數據前先在發送端和接收端創建邏輯鏈接,而後再傳輸數據,它提供了兩臺計算機之間可靠無差錯的數據傳輸。在TCP鏈接中必需要明確客戶端與服務器端,由客戶端向服務端發出鏈接請求,每次鏈接的建立都須要通過「三次握手」。第一次握手,客戶端向服務器端發出鏈接請求,等待服務器確認,第二次握手,服務器端向客戶端回送一個響應,通知客戶端收到了鏈接請求,第三次握手,客戶端再次向服務器端發送確認信息,確認鏈接。整個交互過程以下圖所示。
因爲TCP協議的面向鏈接特性,它能夠保證傳輸數據的安全性,因此是一個被普遍採用的協議,例如在下載文件時,若是數據接收不完整,將會致使文件數據丟失而不能被打開,所以,下載文件時必須採用TCP協議。