IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP -> 正文阅读

[网络协议]JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP

📌 前言:

通过本篇文章可以学习到:👇

  • ?1、局域网与广域网的概念

  • ?2、IP地址和端口号的概念

  • ?3、OSI七层网络协议

  • ?4、TCP/IP五层网络协议

  • ?5、利用UDP协议实现一个回显服务器程序

  • ?6、利用TCP协议实现一个回显服务器程序

  • ?7、多线程 / 线程池方法解决TCP实现回显服务器中的无法同时响应多个客户端请求的问题

  • ?8、五元组的概念

  • ?9、TCP的五层协议栈

  • ?10、应用层:了解应用层协议的模板,xml,json,probuffer

  • ?11、传输层:了解传输层的两个协议:TCP+UDP

  • ?12、了解TCP协议是如何保证可靠传输的

  • ?13、TCP协议中保证可靠传输的十个机制

    • ①、确认应答
    • ②、确认序号
    • ③、连接管理:TCP三次握手,TCP四次挥手(面试高频考点)
    • ④、滑动窗口
    • ⑤、流量控制
    • ⑥、拥塞控制
    • ⑦、延时应答
    • ⑧、捎带应答
    • ⑨、面向字节流导致的粘包问题
    • ⑩、TCP异常处理
  • ?14、了解网络层的ip协议

  • ?15、了解ip协议中的地址管理+路由选择

  • ?16、了解数据链路层中的协议:以太网

  • ?17、了解DNS域名解析


📃 文章目录:👇

1、局域网和广域网

2、IP地址和端口号

3、协议

4、网络编程套用字

5、TCP/IP五层协议栈

6、DNS域名域名解析


1、局域网和广域网 👇

1.1、局域网是什么以及如何组建 👇

在这里插入图片描述
在这里插入图片描述

1.2、交换机和路由器 👇

在这里插入图片描述
在这里插入图片描述

1.3、广域网 👇

在这里插入图片描述


2、IP地址和端口号 👇

2.1、IP地址 👇

在这里插入图片描述

2.2、端口号 👇

在这里插入图片描述


3、协议 👇

在这里插入图片描述

3.1、协议分层 👇

在这里插入图片描述
在这里插入图片描述

3.2、OSI七层网络模型 👇

在这里插入图片描述

3.3、TCP五层网络模型 👇

在这里插入图片描述

3.4、TCP/IP网络模型每一层都是怎样的 👇

在这里插入图片描述

3.5、不同层的协议如何协助工作以及封装和分用 👇

在这里插入图片描述


4、网络编程套用字 👇

4.1、UDP和TCP的简述 👇

①、首先了解什么是网络编程套用字

在这里插入图片描述

②、如何和操作系统进行交互 👇

在这里插入图片描述

③、TCP和UDP的差别:

在这里插入图片描述

4.2、传输层协议:UDP 👇

在这里插入图片描述

4.3、使用UDP模拟实现最简单的客户端服务器程序:回显服务 👇

①、回显服务器的功能: 👇

在这里插入图片描述
在这里插入图片描述

②、实现服务器的步骤: 👇

在这里插入图片描述

package network;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.nio.charset.StandardCharsets;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: Lenovo
 * Date: 2022-04-17
 * Time: 12:04
 */
public class UdpEchoServer {

    private DatagramSocket socket = null;

    public UdpEchoServer(int port) throws SocketException {
        socket = new DatagramSocket(port);
    }

    public void start() throws IOException {
        System.out.println("启动服务器!!!");

        while(true){
            DatagramPacket requestPacket = new DatagramPacket(new byte[1024],1024);

            socket.receive(requestPacket);

            String request = new String(requestPacket.getData(),0,requestPacket.getLength(), StandardCharsets.UTF_8);

            String response = process(request);

            DatagramPacket responsePacket = new DatagramPacket(response.getBytes(),0,response.getBytes().length,requestPacket.getSocketAddress());

            socket.send(responsePacket);

            System.out.printf("[%s:%d] req:%s reps:%s",requestPacket.getAddress().toString(),requestPacket.getPort(),request,response);

            System.out.println();

        }
    }

    private String process(String request) {
        return request;
    }

    public static void main(String[] args) throws IOException {
        UdpEchoServer udpEchoServer = new UdpEchoServer(9090);
        udpEchoServer.start();
    }
}

运行启动服务器: 👇

在这里插入图片描述

③、实现客户端的步骤: 👇

在这里插入图片描述

package network;

import java.io.IOException;
import java.net.*;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: Lenovo
 * Date: 2022-04-17
 * Time: 14:37
 */
public class UdpEchoClient {

    private DatagramSocket socket = null;
    private String ip;
    private int port;

    public UdpEchoClient(String ip,int prot) throws SocketException {
        socket = new DatagramSocket();
        this.ip = ip;
        this.port = prot;
    }

    public void start() throws IOException {
        System.out.println("启动客户端");
        Scanner scanner = new Scanner(System.in);

        while(true){
            System.out.print("——>");

            String request = scanner.next();

            DatagramPacket requestPacket = new DatagramPacket(request.getBytes(),0,request.getBytes().length, InetAddress.getByName(ip),port);

            socket.send(requestPacket);

            DatagramPacket responsePacket = new DatagramPacket(new byte[1024],1024);

            socket.receive(responsePacket);

            String response = new String(responsePacket.getData(),0,responsePacket.getLength(), StandardCharsets.UTF_8);

            System.out.printf("req:%s reps:%s",request,response);

            System.out.println();
        }
    }

    public static void main(String[] args) throws IOException {
        UdpEchoClient udpEchoClient = new UdpEchoClient("127.0.0.1",9090);
        udpEchoClient.start();
    }
}

④、启动客户端和服务器 👇

在这里插入图片描述

在这里插入图片描述

⑤、基于上述知识实现一个英译汉服务器 👇

在这里插入图片描述

package network;

import java.io.IOException;
import java.net.*;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: Lenovo
 * Date: 2022-04-17
 * Time: 14:37
 */
public class UdpEchoClient {

    private DatagramSocket socket = null;
    private String ip;
    private int port;

    public UdpEchoClient(String ip,int prot) throws SocketException {
        socket = new DatagramSocket();
        this.ip = ip;
        this.port = prot;
    }

    public void start() throws IOException {
        System.out.println("启动客户端");
        Scanner scanner = new Scanner(System.in);

        while(true){
            System.out.print("——>");

            String request = scanner.next();

            DatagramPacket requestPacket = new DatagramPacket(request.getBytes(),0,request.getBytes().length, InetAddress.getByName(ip),port);

            socket.send(requestPacket);

            DatagramPacket responsePacket = new DatagramPacket(new byte[1024],1024);

            socket.receive(responsePacket);

            String response = new String(responsePacket.getData(),0,responsePacket.getLength(), StandardCharsets.UTF_8);

            System.out.printf("req:%s reps:%s",request,response);

            System.out.println();
        }
    }

    public static void main(String[] args) throws IOException {
        UdpEchoClient udpEchoClient = new UdpEchoClient("127.0.0.1",9090);
        udpEchoClient.start();
    }
}

4.4、关于127.0.0.1此本地环回ip 👇

建议参考此博客

4.5、传输层协议:TCP 👇

在这里插入图片描述

4.6、使用TCP模拟实现最简单的客户端服务器程序:回显服务 👇

①、实现服务器: 👇

在这里插入图片描述

②、运行服务器 👇

在这里插入图片描述

③、实现客户端 👇

在这里插入图片描述

④、运行客户端 👇

在这里插入图片描述

⑤、资源关闭 👇

在这里插入图片描述

⑥、构造方法中绑定端口的总结: 👇

在这里插入图片描述

4.6.1、TCP实现的回显服务器中存在的问题

在这里插入图片描述

问题原因: 👇

在这里插入图片描述

4.6.2、使用多线程or线程池解决此问题 👇

在这里插入图片描述

①、多线程版本: 👇

在这里插入图片描述

②、线程池版本: 👇

在这里插入图片描述

③、二者最终的处理结果: 👇

在这里插入图片描述

4.7、五元组 👇

在这里插入图片描述

4.8、协议类型不匹配时可以服务器和客户端进行交互吗? 👇

在这里插入图片描述


5、TCP/IP五层协议栈 👇

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

TCP/IP五层协议栈都介绍什么: 👇

在这里插入图片描述

5.1、应用层 👇

在这里插入图片描述

①、一个应用层设计的例子: 👇

在这里插入图片描述

②、设计一个应用层协议主要的两个工作: 👇

1、明确传输的信息
2、明确数据的组织格式

③、应用层协议中的模板 👇

在这里插入图片描述

④、xml模板 👇

在这里插入图片描述

⑤、json模板 👇

在这里插入图片描述

⑥、Probuffer模板 👇

在这里插入图片描述

⑦、Probuffer和json应用范围 👇

在这里插入图片描述

⑧、总结 👇

在这里插入图片描述

5.2、传输层 👇

在这里插入图片描述

①、端口 👇

在这里插入图片描述

②、传输层协议:UDP 👇

在这里插入图片描述

③、传输层协议:TCP(面试中的重点) 👇

a、TCP的报头:(先简单了解) 👇

在这里插入图片描述

b、TCP的一些核心机制 👇

在这里插入图片描述

c、保障可靠传输的一些机制: 👇

①、 确认应答: 👇

在这里插入图片描述

②、确认序号: 👇

在这里插入图片描述

③、连接管理(TCP三次握手+四次挥手) 👇

在这里插入图片描述

④、滑动窗口:👇

在这里插入图片描述

⑤、流量控制: 👇

在这里插入图片描述

⑥、拥塞控制 👇

在这里插入图片描述

⑦、延时应答 👇

在这里插入图片描述

⑧、捎带应答 👇

在这里插入图片描述

⑨、面向字节流–粘包问题 👇

在这里插入图片描述

⑩、TCP异常处理 👇

在这里插入图片描述

5.3、网络层 👇

①、IP协议报头: 👇

在这里插入图片描述

②、地址管理: 👇

在这里插入图片描述

③、路由选择 👇

在这里插入图片描述

5.4、数据链路层 👇

在这里插入图片描述
在这里插入图片描述


6、域名解析 👇

在这里插入图片描述


  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章           查看所有文章
加:2022-04-23 11:08:52  更:2022-04-23 11:09:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 4:01:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码