📌 前言:
通过本篇文章可以学习到:👇
-
?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;
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;
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;
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、域名解析 👇
|