网络基础

## 1.网络访问方式和网络结构介绍

网络访问相关协议

![网络访问相关协议](http://43.155.216.63:21080/wp-content/uploads/2025/12/%E7%BD%91%E7%BB%9C%E8%AE%BF%E9%97%AE%E7%9B%B8%E5%85%B3%E5%8D%8F%E8%AE%AE.png

网络结构

![网络结构介绍](http://43.155.216.63:21080/wp-content/uploads/2025/12/%E7%BD%91%E7%BB%9C%E7%BB%93%E6%9E%84%E4%BB%8B%E7%BB%8D-1731896324725.png

## 2常见网络名词介绍

#### 2.1网络应用结构

b/s 结构 浏览器(通用) 服务器 每次用户都会下载 只需要更新服务器 (加载较慢)

c/s结构 客户端(专用) 服务器 公共部分不需要下载 只加载数据(加载较快) 如果基础公共部分变动 需要更新安装客户端

#### 2.2应用层协议

http应用层协议 规定应用程序使用的数据格式

ftp 文件传输协议

邮件传输协议

厂商自定义协议 数据库驱动 jdbc:mysql//

#### 2.3传输层协议

TCP 保证数据可以完整安全的传给对方

​ 面向连接 传输数据前 必须建立好连接

​ 可靠连接 数据错误 丢包 顺序错乱 都会重发

##### 连接三次握手

![image-20241118104812564](http://43.155.216.63:21080/wp-content/uploads/2025/12/image-20241118104812564.png

![image-20241118104824052](http://43.155.216.63:21080/wp-content/uploads/2025/12/image-20241118104824052.png

##### 断开4次挥手

![image-20241118104839511](http://43.155.216.63:21080/wp-content/uploads/2025/12/image-20241118104839511.png

![image-20241118104848534](http://43.155.216.63:21080/wp-content/uploads/2025/12/image-20241118104848534.png

UDP 直播用的多

​ 面相无连接 传输数据前 不需要预先建立好连接

​ 不可靠链接 数据丢失 错误 不会重发

##### 端口号 计算机标记应用程序传入传出数据的出入口

> 同一时间 一个端口号只能被一个应用程序占用
>
> 如果被其他应用程序占用 应用程序可能无法启动

6万多端口号

2000以下端口号不要用 系统级别的服务会占用

http 默认端口号 80

https 默认端口号 443

2000-5000 尽量不用 被知名软件占用

mysql 3306

5000以上 自定义端口号

5500 liveServer

5173 vite 会自己改端口号一次加一个

8080 tomcat

#### 2.4网络层协议

IP协议

通过IP地址标记计算机

IPV4 32位

4组8位数据标记地址

0. 0.0.0 — 255.255.255.255

特殊地址: 127.0.0.1 回送地址 表示本机 localhost 本机域名

​ 192.168.xxx.xxx 局域网专用网段 子网掩码 255.255.255.0

配置域名 dns 域名解析服务

域名是租的

暗网 深网

IPV6 128位地址

​ 标记定时更多 目前没有广泛使用

网络工程师

### 3.http协议

让浏览器 与服务器之间 通过指定的格式做报文解析

##### 3.1请求报文格式

![image-20241118112904248](http://43.155.216.63:21080/wp-content/uploads/2025/12/image-20241118112904248.png

注意:

请求体(发送给服务器的附加参数 )

与请求方式相关 get 拼在url后边 请求体是空的

​ post 存入请求体

##### 3.2响应报文格式

![image-20241118113304795](http://43.155.216.63:21080/wp-content/uploads/2025/12/image-20241118113304795.png

​

![image-20241118113315839](http://43.155.216.63:21080/wp-content/uploads/2025/12/image-20241118113315839.png

注意记忆一下常用响应码

https://baijiahao.baidu.com/s?id=1625543680393818327&wfr=spider&for=pc

响应头 注意:

Content-Type: text/html; charset=utf-8 返回的数据格式

​ application/json; charset=utf-8

响应体 text/html 网页代码(网页标签)

​ application/json json结构字符串

什么叫使用协议:

浏览器 按照http 请求报文格式发送数据

![image-20241118114805754](http://43.155.216.63:21080/wp-content/uploads/2025/12/image-20241118114805754.png

## 4.网络常用api

#### 4.1INetAddress

IP地址相关api 可以获取ip地址和计算机名

分为IPV4 和IPV6

“`java
//获得本机地址 IPV4
InetAddress localHost = InetAddress.getLocalHost();
//System.out.println(localHost);
“`

“`java
//获得全部地址 ipv4 和 ipv6
InetAddress[] allByName = InetAddress.getAllByName(localHost.getHostName());
for (InetAddress iar: allByName){
System.out.println(iar);
}
“`

地址打印结果:

“`java
PC-20240723RWZC/192.168.0.42
PC-20240723RWZC/fe80:0:0:0:c208:8998:dee3:ca48%12
“`

#### 4.2URL类

##### URL表示统一资源定位符

一个可以访问的地址 完整的地址

“`
http:// www.example.com : 1080 /docs/resource1.html ? name=jack
协议 地址/域名 端口 资源地址 请求参数
“`

##### URI表示统一资源标识符(是地址的部分引用)

“`java
/docs/resource1.html ? name=jack
“`

##### URL类的作用

1.可以按照规则 解析url字符串

2.如果是标准url地址 java发起http请求 访问指定的服务器

“`java
package com.javasm.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

/**
* @author gfs
* @version 0.1
* @className URLDemo
* @descriptioin:
* @date 2024/11/18 14:45
* @since jdk11
*/
public class URLDemo {
public static void main(String[] args) {

try {
//1.按标准格式解析url
//url编码 可以在url字串中表示非ASCII字符
URL url = new URL("http://127.0.0.1:8080/mytest?username=jack");
System.out.println(url.getProtocol());//获取协议
System.out.println(url.getPort());//获得端口
System.out.println(url.getHost());//获取主机
System.out.println(url.getPath());//获得资源地址
System.out.println(url.getQuery());//获得查询参数
System.out.println(url.getFile());///mytest?username=jack
//2.通过url做网络请求
URL url1 = new URL("http://t.weather.itboy.net/api/weather/city/101010100");
URLConnection urlConnection = url1.openConnection();
//1.网络相关API会经过高度封装
//2.网络 通过输出/输出流 互相传输数据
//3.java中http相关api做网络数据接口二次封装使用
//通过输入流读返回数据
InputStream inputStream = urlConnection.getInputStream();
//只需要读响应体
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String s = bufferedReader.readLine();
System.out.println(s);

} catch (MalformedURLException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}

}
}

“`

#### 4.3 TCPUDP 传输层的数据封装类

TCP在java中的封装

Socket 客户端套接字

ServerSocket服务器套接字

##### 示例1:

TCP连接

通过socket 和ServerSocket 两个java进程连接 互相传输数据

clientDemo 客户端

“`java
package com.javasm.netTest1;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class ClientDemo {
public static void main(String[] args) {

try {
Socket socket = new Socket("127.0.0.1",7788);
//用于读取数据
//InputStream inputStream = socket.getInputStream();
//用于写数据
OutputStream outputStream = socket.getOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
dataOutputStream.writeUTF("你好 小黑子");

} catch (IOException e) {
throw new RuntimeException(e);
}

}
}

“`

ServerDemo 服务端

“`java
package com.javasm.netTest1;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerDemo {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(7788);
System.out.println("开始监听7788端口 等待访问……..");
Socket accept = serverSocket.accept();
//用于读取数据
InputStream inputStream = accept.getInputStream();
DataInputStream dis = new DataInputStream(inputStream);
String s = dis.readUTF();
System.out.println(s);
//用于写数据
//OutputStream outputStream = accept.getOutputStream();

} catch (IOException e) {
throw new RuntimeException(e);
}

}
}

“`

##### 示例2:

UDP连接(了解)

发送方

“`java
package com.javasm.netTest2;

import java.io.IOException;
import java.net.*;

public class SendDemo {
public static void main(String[] args) {
try {
DatagramSocket datagramSocket = new DatagramSocket();
//数据报包
DatagramPacket dp = new DatagramPacket("hello".getBytes(),"hello".length(), InetAddress.getLocalHost(),8888);
//发送数据报包
datagramSocket.send(dp);

} catch (SocketException e) {
throw new RuntimeException(e);
} catch (UnknownHostException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}

}
}

“`

接收方

“`java
package com.javasm.netTest2;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class ReciveDemo {
public static void main(String[] args) {

try {
DatagramSocket datagramSocket = new DatagramSocket(8888);
//数据报包
byte[] bytes = new byte[5];
DatagramPacket datagramPacket = new DatagramPacket(bytes,5);
System.out.println("等待8888端口传入的数据/…..");
datagramSocket.receive(datagramPacket);
System.out.println("接收到的数据是:"+new String(bytes));

} catch (SocketException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}

}
}

“`

## 5.web服务器核心功能分析

![image-20241118162647518](http://43.155.216.63:21080/wp-content/uploads/2025/12/image-20241118162647518.png

参考day8_webServer代码理解 服务器运行机制

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇