* 1.如何准確地定位網絡上一台或多台主機;定位主機上的特定的應用
* 2.找到主機后如何可靠高效地進行數據傳輸
2、網絡通信的兩個要素:
* 2.對應問題二:提供網絡通信協議:TCP/IP參考模型(應用層、傳輸層、網絡層、物理+數據鏈路層)
1.IP的理解
1. IP:唯一的標識 Internet 上的計算機(通信實體)
2. 在Java中使用InetAddress類代表IP
3. IP分類:IPv4 和 IPv6 ; 萬維網 和 局域網
2.1實例化 (InetAddress類沒有提供公共的構造器,而是提供了如下幾個靜態方法來獲取 InetAddress實例)
getByName(String host) 、 getLocalHost()
getHostName() :返回 IP 地址字符串 / getHostAddress(): 獲取此 IP 地址的主機名/ isReachable(int timeout):測試是否可以達到該地址
域名解析(DNS,應用層):域名容易記憶,當在連接網絡時輸入一個主機的域名后,域名服務器(DNS)負責將域名轉化成IP地址,這樣才能和主機建立連接。
2.4. 本地回路地址:127.0.0.1 對應着:localhost
要求:不同的進程不同的端口號
范圍:被規定為一個 16 位的整數 0~65535。



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 等待一段時間就是為了處理這種情況的發生。
-
等待一段時間是為了讓本連接持續時間內所產生的所有報文都從網絡中消失,使得下一個新的連接不會出現舊的連接請求報文。