InetAddress類的使用


1、實現網絡通信需要解決的兩個問題
  * 1.如何准確地定位網絡上一台或多台主機;定位主機上的特定的應用
  * 2.找到主機后如何可靠高效地進行數據傳輸

2、網絡通信的兩個要素:
  * 1.對應問題一:IP和端口號
  * 2.對應問題二:提供網絡通信協議:TCP/IP參考模型(應用層、傳輸層、網絡層、物理+數據鏈路層)
 
3、通信要素一:IP和端口號
  1.IP的理解
    1. IP:唯一的標識 Internet 上的計算機(通信實體)
    2. 在Java中使用InetAddress類代表IP
    3. IP分類:IPv4 和 IPv6 ; 萬維網 和 局域網
      IPV4:4個字節組成,4個0-255。大概42億,30億都在北美,亞洲4億。2011年初已 經用盡。以點分十進制表示,如192.168.0.1 
      IPV6:128位(16個字節),寫成8個無符號整數,每個整數用四個十六進制位表示, 數之間用冒號(:)分開,如:3ffe: 3201: 1401: 1280: c8ff: fe4d:db39:1984
      192.168. 開頭的就是私有址址,范圍即為192.168.0.0--192.168.255.255,專門為組織機 構內部使用

  2.InetAddress類:此類的一個對象就代表着一個具體的IP地址
    2.1實例化 (InetAddress類沒有提供公共的構造器,而是提供了如下幾個靜態方法來獲取 InetAddress實例)
      getByName(String host) 、 getLocalHost()
    2.2常用方法
      getHostName() :返回 IP 地址字符串 / getHostAddress(): 獲取此 IP 地址的主機名/ isReachable(int timeout):測試是否可以達到該地址
    Internet上的主機有兩種方式表示地址:域名(hostName):www.xxxx.com; IP 地址(hostAddress):202.108.35.210
    InetAddress 類對象含有一個 Internet 主機地址的域名和IP地址: www.xxxx.com 和 202.108.35.210。
    2.3. 域名:   www.baidu.com   www.mi.com  www.sina.com  www.jd.com 
        域名解析(DNS,應用層):域名容易記憶,當在連接網絡時輸入一個主機的域名后,域名服務器(DNS)負責將域名轉化成IP地址,這樣才能和主機建立連接。
       2.4. 本地回路地址:127.0.0.1 對應着:localhost

  3.端口號:正在計算機上運行的進程。
     要求:不同的進程不同的端口號
     范圍:被規定為一個 16 位的整數 0~65535。
      公認端口:0~1023。被預先定義的服務通信占用(如:HTTP占用端口 80,FTP占用端口21,Telnet占用端口23) 
      注冊端口:1024~49151。分配給用戶進程或應用程序。(如:Tomcat占 用端口8080,MySQL占用端口3306,Oracle占用端口1521等)。 
      動態/私有端口:49152~65535。

端口號與IP地址的組合得出一個網絡套接字:Socket
 
4、通信要素二:網絡通信協議
 
TCP三次握手

 ACK,SYN,FIN大寫字母表示標志位

  • 確認 ACK :當 ACK=1 時確認號字段有效,否則無效。TCP 規定,在連接建立后所有傳送的報文段都必須把 ACK 置 1

  • 同步 SYN :在連接建立時用來同步序號。當 SYN=1,ACK=0 時表示這是一個連接請求報文段。若對方同意建立連接,則響應報文中 SYN=1,ACK=1。

  • 終止 FIN :用來釋放一個連接,當 FIN=1 時,表示此報文段的發送方的數據已發送完畢,並要求釋放連接。

 ack,seq小寫單詞表示序號:

  • ack :期待收到對方下一個報文段的序號

  • seq序號 :用來標示數據段的順序。

三次握手的過程:

  1)首先服務器B處於監聽狀態,等待客戶端A的連接請求;

  2)A向B發送請求連接請求報文,SYN=1,ACK=0, 並選擇一個初始的序號seq=x;

  3)B收到連接請求報文,若同意連接,則向A發送連接確認報文,SYN=1,ACK=1,ack=x+1,seq=y;

  4)A收到B的連接確認報文后,還要向B發出確認,ACK=1,ack=y+1,seq=x+1;

  5)B收到A的確認后,建立連接;

為什么要三次握手:

  1)確認雙方都有發送接受的能力;

  2)防止失效的連接請求到達服務器,讓服務器錯誤的打開連接;可能因為堵塞,導致客戶端發送的連接請求如果在網絡中滯留,那么就會隔很長一段時間才能收到服務器端發回的連接確認。客戶端等待一個超時重傳時間之后,就會重新請求連接。但是這個滯留的連接請求最后還是會到達服務器,那么服務器就會打開兩個連接。

TCP四次揮手

四次揮手過程

1)客戶端A發送連接釋放報文,FIN=1;

2)B收到之后發出確認,此時TCP屬於半關閉狀態,B能向A發送數據,但A不能向B發送數據;

3)當B服務器不再需要連接時,發送連接釋放報文,FIN=1;

4)A收到后發出確認,進入TIME-WAIT狀態,等待2MSL(最大報文存活時間)后釋放連接;

5)B收到A的確認后釋放連接。

四次揮手的原因

客戶端發送了 FIN 連接釋放報文之后,服務器收到了這個報文,就進入了 CLOSE-WAIT 狀態。這個狀態是為了讓服務器端發送還未傳送完畢的數據,傳送完畢之后,服務器會發送 FIN 連接釋放報文。

TIME_WAIT

客戶端接收到服務器端的 FIN 報文后進入此狀態,此時並不是直接進入 CLOSED 狀態,還需要等待一個時間計時器設置的時間 2MSL。這么做有兩個理由:

  • 確保最后一個確認報文能夠到達。如果 B 沒收到 A 發送來的確認報文,那么就會重新發送連接釋放請求報文,A 等待一段時間就是為了處理這種情況的發生。

  • 等待一段時間是為了讓本連接持續時間內所產生的所有報文都從網絡中消失,使得下一個新的連接不會出現舊的連接請求報文。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM