網絡編程
本章目標
- 了解計算機網絡基礎知識
- 掌握 OSI 七層參考模型
- 掌握 TCP/IP 協議
- 了解常見網絡協議
- 重點掌握 socket 套接字編程
計算機網絡
什么是計算機網絡
計算機網絡是通過傳輸介質、通信設施和網絡通信協議,把分散在不同地點的計算機設備互連起來,實現資源共享和數據傳輸的系統。
什么是網絡編程
網絡編程就是編寫程序使聯網的兩個(或多個)設備(例如計算機)之間進行數據傳輸。Java 語言對網絡編程提供了良好的支持,通過其提供的接口我們可以很方便地進行網絡編程。
什么是網絡協議
如同人與人之間相互交流是需要彼此能夠理解的語言,計算機之間能夠進行相互通信是因為它們都共同遵守一定的規則,即網絡協議。
什么是網絡體系結構
計算機網絡體系結構是計算機網絡層次和協議的集合,網絡體系結構對計算機網絡實現的功能,以及網絡協議、層次、接口和服務進行了描述,但並不涉及具體的實現。
OSI 七層參考模型
- 應用層:應用層為OSI的最高層,是直接為應用進程提供服務的。
- 表示層:表示層功能是把應用層提供的信息變換為能夠共同理解的形式
- 會話層:會話層的主要功能是負責應用程序之間建立、維持和中斷會話
- 傳輸層:傳輸層起着承上啟下的作用,涉及源端節點到目的端節點之間可靠的信息傳輸
- 網絡層:網絡層涉及源主機節點到目的主機節點之間可靠的網絡傳輸
- 數據鏈路層:數據鏈路層的功能是實現計算機網絡中相鄰節點之間的可靠傳輸
- 物理層:數據鏈路層的功能是實現計算機網絡中相鄰節點之間的可靠傳輸
TCP/IP 四層協議
TCP/IP參考模型采用 4 層的層級結構,每一層都調用它的下一層所提供的協議來完成自己的需求
- 應用層:應用層為 Internet 中的各種網絡應用提供服務
- 傳輸層:傳輸層負責在應用進程之間建立端到端的連接和可靠通信,它只存在與端節點中
- 網絡層:網絡層是整個TCP/IP協議棧的核心。它的功能是把分組發往目標網絡或主機
- 網絡接口層:TCP/IP協議對網絡接口層沒有給出具體的描述,網絡接口層對應着OSI參考模型的物理層和數據鏈路層
TCP/IP 協議族
TCP/IP 協議關系
- 上層協議依賴下層協議提供的支持與服務
- 不同協議提供不同的服務以滿足不同的網絡需求
常見網絡協議
IP 協議
IP 協議的作用在於把計算機網絡中各種設備終端的數據包准備無誤的傳遞給對方
- IP 地址:IP 地址也叫邏輯地址或動態,由網絡層路由器為計算機網絡上的每一台主機分配的 32 位數字組成的地址,該地址可以動態修改,如 192.168.229.11
- MAC 地址:MAC 地址也叫物理地址或硬件地址,由 48 比特長的 16 進制數字組成,由設備廠家分配全球唯一且不能修改,如 44-45-53-54-00-00
TCP 協議
TCP(傳輸控制協議)是面向連接的協議,它的作用是為不同主機的應用層之間建立可靠的、像管道一樣的連接,以確保不同主機之間能夠相互通信
TCP 的三次握手與四次揮手
握手過程中傳送的包里不包含數據,三次握手完畢后,客戶端與服務器才正式開始傳送數據
- 第一次握手(客戶端發送請求):客戶機發送連接請求報文段到服務器,並進入SYN_SENT狀態,等待服務器確認。
- 第二次握手(服務端回傳確認):服務器收到客戶端連接請求報文,如果同意建立連接,向客戶機發回確認報文段(ACK)應答,並為該TCP連接分配TCP緩存和變量。
- 第三次握手(客戶端回傳確認):客戶機收到服務器的確認報文段后,向服務器給出確認報文段(ACK),並且也要給該連接分配緩存和變量。此包發送完畢,客戶端和服務器進入ESTABLISHED(TCP連接成功)狀態,完成三次握手。
UDP 協議
UDP(用戶數據報協議),它是 TCP/IP 協議簇中無連接的傳輸層協議,提供快速但不一定可靠的傳輸服務
UDP協議由兩部分組成:首部和數據。首部僅有8個字節,包括源端口和目的端口、長度(UDP用於數據報的長度)、校驗和
TCP 與 UDP 區別
HTTP 協議
HTTP(超文本傳輸協議),是一種為分布式、合作式、多媒體信息系統服務,面向應用層的協議,是 Internet 上目前使用最廣泛的應用層協議,它基於傳輸層的 TCP 協議進行通信,HTTP 協議是通用的、無狀態的協議。
Socket 編程
Socket 套接字
Socket 套接字,實際上是對 TCP/IP 協議的封裝,Socket 本身並不是協議,而是一個調用接口(API),通過 Socket,我們才能使用 TCP/IP 協議。
- Socket 是通信的基石,是支持 TCP/IP 協議的網絡通信的基本操作單元
- TCP/IP 只是一個協議棧,就像操作系統的運行機制一樣,必須要具體實現,同時還要提供對外的操作接口。TCP/IP 也要提供可供程序員做網絡開發所用的接口,這就是 Socket 編程接口(支持 TCP 或者 UDP 編程接口)
- Java 網絡編程主要涉及到的內容是 Socket 套接字編程
網絡通信五要素
Socket 通信模型
Socket 編程 = Socket 客戶端編程(Client) + Socket 服務器端編程(Server)
Socket 客戶端編程
-
步驟一:創建 Socket 套接字實例(綁定服務器端 IP 地址和端口號)
Socket socket = new Socket(“127.0.0.1”, 9999 );
-
步驟二:創建網絡輸入/輸出流
InputStream inputStream = socket.getInputStream(); OutputSteam outputStream = socket.getOutputStream()
-
步驟三:關閉 Socket 連接
socket.close();
Socket 服務器端編程
-
步驟一:創建 ServerSocket 套接字實例(綁定監聽端口號)
ServerSocket serverSocket = new ServerSocket( 9999 );
-
步驟二:監聽來自客戶端的網絡連接
Socket socket = serverSocket.accept();
-
步驟三:創建網絡輸入/輸出流
InputStream inputStream = serverSocket.getInputStream(); OutputSteam outputStream = serverSocket.getOutputStream()
-
步驟四:關閉 Socket 連接 和 ServerSocket 連接
socket.close(); serverSocket.close();