网络基础

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

网络访问相关协议

![网络访问相关协议](https://www.neet0316.com/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

网络结构

![网络结构介绍](https://www.neet0316.com/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](https://www.neet0316.com/wp-content/uploads/2025/12/image-20241118104812564.png

![image-20241118104824052](https://www.neet0316.com/wp-content/uploads/2025/12/image-20241118104824052.png

断开4次挥手

![image-20241118104839511](https://www.neet0316.com/wp-content/uploads/2025/12/image-20241118104839511.png

![image-20241118104848534](https://www.neet0316.com/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位数据标记地址

  1. 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](https://www.neet0316.com/wp-content/uploads/2025/12/image-20241118112904248.png

注意:

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

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

​ post 存入请求体

3.2响应报文格式

![image-20241118113304795](https://www.neet0316.com/wp-content/uploads/2025/12/image-20241118113304795.png

![image-20241118113315839](https://www.neet0316.com/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](https://www.neet0316.com/wp-content/uploads/2025/12/image-20241118114805754.png

4.网络常用api

4.1INetAddress

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

分为IPV4 和IPV6

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

地址打印结果:

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表示统一资源标识符(是地址的部分引用)
/docs/resource1.html  ?   name=jack
URL类的作用

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

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

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 客户端

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 服务端

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连接(了解)

发送方

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);
        }

    }
}

接收方

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](https://www.neet0316.com/wp-content/uploads/2025/12/image-20241118162647518.png

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

暂无评论

发送评论 编辑评论


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