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、局域网和广域网

  • 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的简述
  • 4.2、传输层协议:UDP
  • 4.3、使用UDP模拟实现最简单的客户端服务器程序:回显服务
  • 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五层协议栈

  • 5.1、应用层
  • 5.2、传输层(重点)
  • 5.3、网络层
  • 5.4、数据联络层

6、DNS域名域名解析


1、局域网和广域网

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

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第1张图片
JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第2张图片

1.2、交换机和路由器

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第3张图片
JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第4张图片

1.3、广域网

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第5张图片


2、IP地址和端口号

2.1、IP地址

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第6张图片

2.2、端口号

在这里插入图片描述


3、协议

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第7张图片

3.1、协议分层

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第8张图片
JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第9张图片

3.2、OSI七层网络模型

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第10张图片

3.3、TCP五层网络模型

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第11张图片

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

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第12张图片

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


4、网络编程套用字

4.1、UDP和TCP的简述

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

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第13张图片

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

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第14张图片

③、TCP和UDP的差别:

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第15张图片

4.2、传输层协议:UDP

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第16张图片

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

①、回显服务器的功能:

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第17张图片
JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第18张图片

②、实现服务器的步骤:

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第19张图片

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

运行启动服务器:

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第20张图片

③、实现客户端的步骤:

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第21张图片

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

④、启动客户端和服务器

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第22张图片

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第23张图片

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

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第24张图片

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

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第25张图片

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

①、实现服务器:

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第26张图片

②、运行服务器

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第27张图片

③、实现客户端

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第28张图片

④、运行客户端

在这里插入图片描述

⑤、资源关闭

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第29张图片

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

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第30张图片

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

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第31张图片

问题原因:

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第32张图片

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

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第33张图片

①、多线程版本:

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第34张图片

②、线程池版本:

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第35张图片

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

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第36张图片

4.7、五元组

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第37张图片

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

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第38张图片


5、TCP/IP五层协议栈

在这里插入图片描述
JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第39张图片
JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第40张图片

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

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第41张图片

5.1、应用层

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第42张图片

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

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第43张图片

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

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

③、应用层协议中的模板

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第44张图片

④、xml模板

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第45张图片

⑤、json模板

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第46张图片

⑥、Probuffer模板

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第47张图片

⑦、Probuffer和json应用范围

在这里插入图片描述

⑧、总结

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第48张图片

5.2、传输层

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第49张图片

①、端口

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第50张图片

②、传输层协议:UDP

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第51张图片

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

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

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第52张图片

b、TCP的一些核心机制

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第53张图片

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

①、 确认应答:

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第54张图片

②、确认序号:

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

④、滑动窗口:

⑤、流量控制:

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第55张图片

⑥、拥塞控制

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第56张图片

⑦、延时应答

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第57张图片

⑧、捎带应答

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第58张图片

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

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第59张图片

⑩、TCP异常处理

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第60张图片

5.3、网络层

①、IP协议报头:

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第61张图片

②、地址管理:

③、路由选择

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第62张图片

5.4、数据链路层

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第63张图片
JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第64张图片


6、域名解析

JavaEE初阶---网络原理初识+网络编程套接字+网络原理之TCP_IP_第65张图片


你可能感兴趣的:(JavaEE,javaEE,网络编程,网络原理,TCP_IP五层协议栈,TCP三次握手四次挥手)