黑馬程式設計師——JavaSE之網路程式設計總結一
網路模型
OSI(Open System Interconnection開放系統互連)參考模型
TCP/IP參考模型
網路通訊要素
IP地址
埠號
傳輸協議
OSI七層協議的作用簡單描述成以下形式:
應用層 與使用者應用程序的介面
表示層 資料格式的轉換
會話層 會話管理與資料傳輸的同步
傳輸層 端到端經網路透明地傳送報文
網路層 分組傳送,路由選擇
資料鏈路層 在鏈路上無差錯地傳送幀
物理層 經物理媒體透明傳送位元流
網路通訊要素
IP地址:InetAddress
不易記憶,可用主機名
本地迴環地址:127.0.0.1 主機名:localhost
在日常應用中的計算機地址是用"192.168.0.1","www.it315.org"等字串格式來表示的。
埠號:用於標識程序的邏輯地址,不同程序的標識
有效埠:0~65535,其中0~1024是系統使用或者保留埠。
傳輸協議:通訊的規則
常見協議:TCP,UDP
<span style="font-family:Microsoft YaHei;">public static void main(String[] args) throws UnknownHostException{ //ip地址物件:InetAddress //獲取本地主機地址物件 // InetAddress ip = InetAddress.getLocalHost(); //獲取其他主機的地址物件 InetAddress ip = InetAddress.getByName("198.168.0.1"); System.out.println(ip.getHostAddress() + ":" + ip.getHostName()); }</span>
域名:網站的網址
域名解析:將域名轉換成伺服器的IP地址的過程。
域名解析圖:
埠:其實就是隊,作業系統為各個程序分配了不同的隊,資料報按照目的埠被推入相應的隊中,等待被程序取用,在極特殊的情況下,這個隊也是有可能溢位的,不過作業系統允許各程序指定和調整自己的隊的大小。
不光接受資料報的程序需要開啟它自己的埠,傳送資料報的程序也需要開啟埠,這樣,資料報中將會標識有源埠,以便接受方能順利的回傳資料報到這個埠
網路中常用的埠號:
服務 埠號
Mysql 資料庫服務 3306
SMTP 25
HTTP 80
SQL server 1433
Oracle 1521
DNS 53
TCP協議和UDP協議:
TCP協議:傳輸控制協議
UDP協議:使用者資料報協議
TCP將資料分成資料報,用能夠到達目的地的路徑資訊連行包裝,接收端則將這些資料進行重組。它提供可靠的、面向連線的資料報傳遞服務。
TCP協議位於IP協議的上層,為資料提供錯誤校驗,流量控制及序列資訊用以補充IP協議的不足。
UDP是無連線的服務,優點是靈活方便和比較迅速,但不能防止報文的丟失、重複或失序,特別適合於傳送少量零星的報文。比如DNS就是基於UDP。
TCP與UDP的區別:
TCP 提供面向連線的、可靠的資料流傳輸,而 UDP 提供的是非面向連線的、不可靠的資料流傳輸。
TCP 傳輸單位稱為報文段, UDP 傳輸單位稱為使用者資料報。
TCP 注重資料安全性, UDP 資料傳輸快,因為不需要連線等待,少了許多操作,但是其安全性卻一般。
TCP客戶端程式與TCP伺服器端程式的互動過程:
(1)伺服器程式建立一個ServerSocket,然後呼叫accept方法等待客戶來連線。
(2)客戶端程式建立一個Socket並請求與伺服器建立連線。
(3)伺服器接收客戶的連線請求,並建立一個新的Socket與該客戶建立專線連線。
(4)建立了連線的兩個Socket在一個單獨的執行緒(由伺服器程式建立)上對話。
(5)伺服器開始等待新的連線請求,當新的連線請求到達時,重複步驟(2)到步驟(5)發的過程。
Socket
Socket:就是為網路服務提供的一種機制。通訊的兩端都有Socket。
網路通訊其實就是Socket間的通訊。資料在兩個Socket間通過IO傳輸。
伺服器端接收到客戶端Scoket的連線請求時會通過accept()方法返回一個與客戶端Socket建立專線連線的伺服器端的Socket物件,不能使用Socket構造方法創伺服器端的Socket物件。當伺服器端的Socket物件與客戶端Socket物件建立專線連線後,它們以網路位元組流的形式進行資料交換,Socket的getInputStream與getOutputStream分別用於返回Socket的輸入流物件和輸出流物件。
下面一個圖解很容易明白:
URL
URL代表一個統一資源定位符,它是指向網際網路“資源”的指標。其中統一資源代表所有資源。能直接定位到網路的某一個資源上。
其中URL類有一個方法是getConnection()表示開啟URL資源的連線,這時就可以方便的取資源。內部封裝了Socket。getConnection抽象類代表應用程式和URL之間的通訊連線。
這個類的例項可以用在讀取和寫入此URL引用的資源。
其中這些都要基於協議才能順利的傳輸完成。比如我們平時用的最多的HTTP協議,它是
用來在Internet上傳送超文字的傳送協議。它是執行在TCP/IP協議族之上的HTTP應用協議,它可以使瀏覽器更加高效,使網路傳輸減少。任何伺服器除了包括HTML檔案以外,還有一個HTTP駐留程式,用於響應用使用者請求。您的瀏覽器是HTTP客戶,向伺服器傳送請求,當瀏覽器中輸入了一個開始檔案或點選了一個超級連結時,瀏覽器就向伺服器傳送了HTTP請求,此請求被送往由URL指定的IP地址。駐留程式接收到請求,在進行必要的操作後回送所要求的檔案。
HTTP協議分為HTTP1.1和HTTP1.0,其中的主要區別如下:
1.HTTP/1.0協議使用非持久連線,即在非持久連線下,一個tcp連線只傳輸一個Web物件,;2.HTTP/1.1預設使用持久連線(然而,HTTP/1.1協議的客戶機和伺服器可以配置成使用非持久連線)。在持久連線下,不必為每個Web物件的傳送建立一個新的連線,一個連線中可以傳輸多個物件!