建設(shè)銀行網(wǎng)站安全性分析什么是seo搜索優(yōu)化
IP地址
域名解析:
本機(jī)訪問(wèn)域名時(shí),會(huì)從本地的DNS上解析數(shù)據(jù)(每個(gè)電腦都有),如果有,獲取其對(duì)應(yīng)的IP,通過(guò)IP訪問(wèn)服務(wù)器。如果本地沒(méi)有,會(huì)去網(wǎng)絡(luò)提供商的DNS找域名對(duì)應(yīng)的IP,找到了就返回。
公網(wǎng)IP:連接互聯(lián)網(wǎng)的IP
內(nèi)網(wǎng)IP:局域網(wǎng)IP
1、網(wǎng)絡(luò)通信的基本要素有哪些
2、IP地址是做什么的,具體有幾種
3、如何查看本機(jī)ip,如何判斷是否與對(duì)方互聯(lián)
4、本地IP是多少
InetAddress
- 萬(wàn)物皆對(duì)象:在java中IP對(duì)象就是InetAddress
InetAddress | |
---|---|
public static InetAddress getLocalHost() | 獲取本機(jī)IP,會(huì)以一個(gè)InetAddress對(duì)象返回 |
public static InetAddress getByName(String host) | 通過(guò)主機(jī)名獲取IP對(duì)象 |
public String getHostName() | 獲取主機(jī)名 |
public String getHostAddress() | 獲取主機(jī)地址 |
public boolean isReachable(int timeout) | 判斷是否能在timeout時(shí)間內(nèi)連通該IP |
1、IP地址的代表類是誰(shuí)
2、如何獲取本機(jī)IP對(duì)象
3、如何判斷與某IP對(duì)象是否互通
端口
- 標(biāo)記正在計(jì)算機(jī)設(shè)備商運(yùn)行的應(yīng)用程序,被規(guī)定為16為二進(jìn)制,范圍為0~65535
ip對(duì)應(yīng)主機(jī),端口對(duì)應(yīng)的是主機(jī)上的應(yīng)用。如:假如微信占用36端口,用微信給張三發(fā)消息,在網(wǎng)絡(luò)傳輸過(guò)程中,通過(guò)ip確定張三的電腦,端口確定張三電腦上的應(yīng)用,他才能收到。
端口分為:
周知端口(常用的:HTTP是80、FTP是21)、注冊(cè)端口(分配給用戶進(jìn)程)、動(dòng)態(tài)端口(分配不固定)
自己開(kāi)發(fā)的程序一般選擇注冊(cè)端口
1、端口的作用是什么
2、一個(gè)設(shè)備中,能否出現(xiàn)兩個(gè)端口相同的應(yīng)用程序,為什么
通信協(xié)議
- 網(wǎng)絡(luò)上通信的設(shè)配,事先規(guī)定的連接規(guī)則以及傳輸數(shù)據(jù)的規(guī)則,稱之為網(wǎng)絡(luò)協(xié)議
開(kāi)放網(wǎng)絡(luò)互聯(lián)標(biāo)準(zhǔn):OSI網(wǎng)絡(luò)參考模型
OSI、TCP/IP
傳輸層的兩個(gè)通信協(xié)議
- UDP:用戶數(shù)據(jù)報(bào)協(xié)議
- TCP:傳輸控制協(xié)議
UDP協(xié)議
- 特點(diǎn):無(wú)連接;不可靠通信;效率相對(duì)高
- 場(chǎng)景:語(yǔ)音通話、視頻直播
- 不事先建立連接,數(shù)據(jù)按照包發(fā),一包數(shù)據(jù)包含:自己的IP、程序端口、目的地IP、程序端口和數(shù)據(jù)等
- 發(fā)送方不關(guān)對(duì)方是否在線,數(shù)據(jù)發(fā)送對(duì)視也不管,如果接收方受到數(shù)據(jù)也不返回確認(rèn),是不可靠的。
TCP協(xié)議
- 特點(diǎn):面向連接;可靠通信;效率相對(duì)低
- 場(chǎng)景:網(wǎng)頁(yè)、文件下載、支付
- TCP的最終目的:要保證在不可靠的信道上實(shí)現(xiàn)可靠的傳輸
- 實(shí)現(xiàn)可靠通信的方式:三次握手、進(jìn)行數(shù)據(jù)確認(rèn)、四次揮手
三次握手:發(fā)送連接請(qǐng)求;返回響應(yīng);再次發(fā)出確認(rèn),連接建立。例如開(kāi)遠(yuǎn)程會(huì)議:能聽(tīng)到嗎?可以聽(tīng)到。 好的那我們開(kāi)始吧。
-
第一次和第二次握手是為了確認(rèn)服務(wù)器的連接
-
第二次和第三次握手是為了確認(rèn)客戶端的連接
四次揮手:發(fā)出斷開(kāi)連接;返回響應(yīng):稍等;返回響應(yīng):確認(rèn)斷開(kāi);確認(rèn)正式斷開(kāi)。如:我走了;等下;帶著橘子路上吃;行,你先去吧
第二次和第三次是服務(wù)端的響應(yīng)
第一次和第四次是客戶端的請(qǐng)求
1、通信協(xié)議是什么
2、UDP協(xié)議、TCP協(xié)議的特點(diǎn)是什么?各自適用于什么場(chǎng)景?
UDP通信
例如抖音上的一個(gè)視頻:道路兩旁的兩個(gè)人,一邊是廚師,炒完菜將菜從盤子中扔過(guò)去,另一邊是服務(wù)員,用盤子接收飛過(guò)來(lái)的菜。
- 廚師就是客戶端,扔菜的socket
- 服務(wù)員是服務(wù)端,接菜的socket
- 盤子就是就是DatagramPacket()
java提供了一個(gè)java.net.DatagramSocket實(shí)現(xiàn)UDP通信
public DatagramSocket() | 創(chuàng)建客戶端的socket對(duì)象,系統(tǒng)隨機(jī)分配一個(gè)端口 |
public DatagramSocket(int port) | 創(chuàng)建服務(wù)端的socket對(duì)象,并指定端口號(hào) |
public void send(DatagramPacket dp) | 發(fā)送數(shù)據(jù)包 |
public void receive(DatagramPacket p) | 使用數(shù)據(jù)包接收數(shù)據(jù),接收的數(shù)據(jù)在數(shù)據(jù)包的byte[]中 |
DatagramPacket 創(chuàng)建數(shù)據(jù)包 | |
public DatagramPacket(byte[] buf, int length, InteAddress, int port) | 參數(shù)1:要發(fā)或收的數(shù)據(jù) 參數(shù)2:要發(fā)或收的數(shù)據(jù)長(zhǎng)度 參數(shù)3:服務(wù)端的IP地址 參數(shù)4:服務(wù)端的端口 |
public DatagramPacket(byte[] buf, int length) | 參數(shù)1:要發(fā)或收的數(shù)據(jù) 參數(shù)2:要發(fā)或收的數(shù)據(jù)長(zhǎng)度 |
public int getLength() | 獲取數(shù)據(jù)包,實(shí)際接收 |
1、UDP通信的對(duì)象是什么
2、如何獲取和發(fā)送數(shù)據(jù)包
3、如何創(chuàng)建數(shù)據(jù)包對(duì)象
4、客戶端和服務(wù)端先啟動(dòng)哪個(gè)
服務(wù)端
5、服務(wù)端運(yùn)行時(shí)會(huì)在哪個(gè)方法中一直等待接收
receive方法
6、如何從接收的數(shù)據(jù)包中獲取ip和port
數(shù)據(jù)包.getAddress().getHostAddress();
數(shù)據(jù)包.getPort();
7、如何關(guān)閉socket
socket.close();
TCP通信
1、tcp通信,客戶端的代表類是誰(shuí)
new socket(IP,端口)
2、如何使用socket管道進(jìn)行收發(fā)數(shù)據(jù)
socket.getOutputStream();
socket.getInputStream();
3、tcp通信哪個(gè)包裝流最好用
DataOutputStream、DataInputStream
1、服務(wù)端的代表類是誰(shuí)
new ServerSocket(端口)
客戶端和服務(wù)端都需要socket(插座)相當(dāng)于兩個(gè)渡口
客戶端和服務(wù)端分別通過(guò)渡口收發(fā)數(shù)據(jù)
客戶端(需要指定服務(wù)端ip和端口)
public Socket(String host,int port) 根據(jù)指定的ip、端口請(qǐng)求與服務(wù)器建立連接,連接通過(guò)就建立了socket(客戶端的socket)
public OutputStream get OutputStream() 獲取輸出流對(duì)象
public InputStream get In putStream() 獲取輸入對(duì)象
服務(wù)端
public ServerSocket(int port) 為服務(wù)端注冊(cè)端口
public Socket accept() 獲取與客戶端連接的socket(服務(wù)端的socket),服務(wù)端運(yùn)行到這里的時(shí)候,會(huì)一直等待直到客戶端連接上
public OutputStream get OutputStream() 獲取輸出流對(duì)象
public InputStream get In putStream() 獲取輸入對(duì)象
注意:
1. 客戶端可能使用了包裝流發(fā)送數(shù)據(jù),接收端如果想用包裝流必須使用和客戶端相同的包裝流
2. 記得使用關(guān)閉方法關(guān)閉流和socket
3. 只要客戶端和服務(wù)端連接成功后,客戶端發(fā)數(shù)據(jù)服務(wù)端都會(huì)收到,如果客戶端發(fā)送的速度很快,也不會(huì)丟失數(shù)據(jù)
4. 客戶端如果掛了,服務(wù)端如果沒(méi)關(guān)閉就會(huì)產(chǎn)生一個(gè)異常? 1、TCP通信服務(wù)端用的類是誰(shuí)
? 2、TCP通信服務(wù)端的開(kāi)發(fā)步驟是什么
服務(wù)端一個(gè)線程只能對(duì)應(yīng)一個(gè)客戶端通信,main方法對(duì)應(yīng)的是一個(gè)線程,所以服務(wù)端一個(gè)main方法只能與一個(gè)客戶端通信。如果需要多方通信,就需要開(kāi)啟多線程。
倉(cāng)庫(kù)
https://gitee.com/gitee_q/network-programming.git