后端 | Java | 網絡編程之網絡通信
筆記來源:Java入門基礎視頻教程,java零基礎自學就選黑馬程序員Java入門教程
一、什么是網絡編程
可以讓設備中的程序與網絡上其他設備中的程序進行數據交互(實現網絡通信)。
java.net.*包下提供了網絡編程的解決方案。
二、基本的通信架構
基本的通信架構有2種形式:CS架構(Client客戶端/Server服務端)、BS架構(Browser瀏覽器/Server服務器)。
三、網絡通信三要素
IP地址:設備在網絡中的地址,是唯一的標識
IP(Internal Protocol):全稱“互聯網協議地址”,是分配給上網設備的唯一標識。
IP地址有2種形式:IPv4、IPv6。
IPv4:32位(4字節(jié)),11000000 10101000 00000001 01000010,點分十進制表示法,192.168.1.66。
IPv6:共128位,分為8段,每段每四位編碼成一個十六進制位表示,數之間用冒號(:)分開。
IP域名由DNS服務器(域名解析服務器)解析為IP地址。
公網IP:是可以連接互聯網的IP地址。
內網IP:也叫局域網IP,只能組織機構內部使用。192.168.開頭的就是常見的局域網地址,范圍為192.168.0.0--192.168.255.255,專門為組織機構內部使用。
特殊IP地址:127.0.0.1、localhost代表本機IP,只會尋找當前所在的主機。
IP常用命令:
ipconfig:查看本機IP地址。
ping IP地址:檢查網絡是否連通。
InetAddress類:代表IP地址
public static InetAddress getLocalHost():獲取本機IP,會以一個InetAddress的對象返回。
public static InetAddress getByName(String host):根據IP地址或者域名,返回InetAddress對象。
public String getHostName():獲取該ip地址對象對應的主機名。
public String getHostAddress():獲取該ip地址對象種的ip地址信息。
public boolean isReachable(int timeout):在指定毫秒內,判斷主機與該ip對應的主機是否能連通。
端口號:應用程序在設備中唯一的標識
標記正在計算機設備上運行的應用程序的,被規(guī)定為一個16位的二進制,范圍是0~65535。
分類:
周知端口:0-1023,被預先定義的知名應用占用(如HTTP占用80,FTP占用21)。
注冊端口:1024-49151,分配給用戶進程或者某些應用程序。
動態(tài)端口:49151-65535,一般不固定分配給某種進程,而是動態(tài)分配。
協議:連接和數據在網絡中傳輸的規(guī)則
網絡上通信的設備,事先規(guī)定的連接規(guī)則,以及傳輸數據的規(guī)則被稱為網絡通信協議。
TCP/IP網路模型:物理層(比特流)、數據鏈路層、網絡層(封裝源IP和目的IP)、傳輸層(TCP、UDP)、應用層(HTTP、FTP、SMTP...)。
傳輸層的2個通信協議:
UDP(User Datagram Protocol):用戶數據報協議
特點:無連接、不可靠通信、通信效率高(視頻語音通話)。
不事先建立連接,數據按照包發(fā),一包數據包含:自己的IP、程序端口、目的IP、程序端口和數據(限制在64KB內)等。
發(fā)送方不管對方是否在線,數據在中間丟失也不管,如果接收方收到數據也不返回確認,故是不可靠的。
TCP(Transmission Control Protocol):傳輸控制協議
面向連接、可靠通信、通信效率相對不高。
TCP最終目的:要保證在不可靠的信道上實現可靠的傳輸。
三個步驟實現可靠傳輸:三次握手建立連接(發(fā)出連接請求、返回一個響應、再次發(fā)出確認消息,連接建立)、傳輸數據進行確認、四次揮手斷開連接(發(fā)出斷開連接請求、返回一個響應,等待、返回一個響應,確認斷開、發(fā)出正式確認斷開連接)。
可靠連接:確定通信雙方,收發(fā)消息都是正常無問題的(全雙工)。