TCP/IP總結
總 結
一.TCP/IP協議概述:
1.TCP/IP模型有四層結構:
①應用層(Application Layer):應用層為用戶提供所需要的各種服務,負責傳送各種最終形態的數據,是直接與用戶打交道的層,典型協議包含HTTP、FTP等。
②傳輸層(Transport Layer):傳輸層為應用層實體提供端到端的通信功能,該層定義了兩個主要的協議:傳輸控制協議(TCP)和用戶數據報協議(UDP)。其中,TCP協議提供的是一種可靠的、面向連接的數據傳輸服務;而UDP協議提供的是不可靠的、無連接的數據傳輸服務。
③網絡層(Internet Layer):網絡層主要解決主機到主機的通信問題。該層有四個主要協議:網絡協議(
④鏈路層(Link Layer):鏈路層負責建立電路連接,是整個網絡的物理基礎,典型的協議包括以太網、ADSL等。
2.進行網絡編程主要需要解決兩個問題:
①如何在網絡中找到一臺或多臺主機:可以依靠網絡層的IP解決,即提供主機的IP地址找到主機。
②當通信雙方成功連接後,如何進行可靠的數據傳輸:針對傳輸層進行編程,傳輸層主要的兩個協議是TCP和UDP。
3.TCP、UDP
①TCP(Tranfer Control Protocol):面向連接的,可靠的傳輸協議。
②UDP(User Datagram Protocol):無連接的,不可靠的傳輸協議。
二.單客戶Socket編程:
1.IP地址
①網絡中有多臺計算機,它們必須通過某種標識來區分每一臺機器,這就是IP地址;
②IP地址由4個字節共32位二進制數組成,類似於:192.168.0.8;
③在網絡尋找某一臺計算機都是依靠它的IP地址(用域名或計算機名定位主機其實也是通過某種服務轉成IP地址後再找到該主機)。
④許多網絡地址被保留用於特殊用途;
⑤0.0.0.0和127.0.0.1就是兩個此類地址,第一個稱為缺省路由,後一個是環回地址;
⑥127.0.0.1被保留用於用戶主機的本地IP話務,它被分配給一個特殊接口,即起到閉合電路作用的環回接口。
2.端口
①在一臺物理性的計算機中,往往運行著多個網絡程序,一個IP地址並不足以完整標識一個服務器,因此,端口是機器內部獨一無二的場所;
②一臺計算機上可能同時運行多個網絡程序,IP地址只能確保把數據送到指定的計算機,但不能保證把這些數據傳遞給哪個網絡程序;
③端口使用一個16位的數字來表示,它的範圍是0~65535,1024以下的端口號保留給預定義的服務,如:http使用80端口;
④網絡間通信其實是在網絡應用程序端口之間進行的。
3.①客戶端
Socket(InetAddress address, int port);
Socket(InetAddress address, int port, boolean stream);
Socket(String host, int prot);
Socket(String host, int prot, boolean stream);
②服務器端:
ServerSocket(int port);
③獲得輸入輸出流,Socket類中的方法
getInputStream,獲得基於當前Socket的輸入流
getOutputStream,獲得基於當前Socket的輸出流
4.Socket編程步驟:
①服務器端創建ServerSocket對象,調用accept方法返回Socket對象。
②客戶端創建Socket對象,通過端口連接到服務器。
③客戶端、服務器端都使用Socket中的getInputStream方法和getOutputStream方法獲得輸入流和輸出流,進一步進行數據讀寫操作。
5.總結:①網絡上的計算機通過IP地址來區分不同的機器;端口是數據的通道,使得多個應用程序在同一主機上進行網絡通信;應用程序由一個IP地址和一個端口號唯一確定。
②InetAddress用來描述主機地址;
③Socket用來創建兩臺主機之間的連接;
④ServerSocket用來偵聽來自客戶端的請求;
⑤Socket通常稱作“套接字”,通常通過“套接字”向網絡發出請求或者應答網絡請求。
三.單一服務器對多客戶端:
1.服務器:
①創建套接字。
②將套接字綁定到一個本地地址和端口上。
③將套接字設為監聽模式,準備接收客戶請求。
④等待客戶請求到來;當請求到來後,接受連接請求,返回一個新的對應於此次連接的套接字。啟動線程為當前的連接服務。
⑤返回,等待另一客戶請求。
⑥關閉套接字。
2.客戶端:
①創建套接字。
②向服務器發出連接請求。
③和服務器端進行通信。
④關閉套接字。
3.程序:public class Server {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(10086);
System.out.println("服務器正常啟動。。。");
while(true){
Socket socket = ss.accept();
System.out.println("用戶接入成功。。。");
new ServerThread(socket).start();
}
}
}
TCP/IP總結