【计算机网络】——协议分层
作者:互联网
1.协议:即一种“约定”。
2.协议分层:
(1)OSI ( Open System Interconnection,开放系统互连)七层模型
(2)TCP/IP 五层模型
(3)TCP/IP 四层模型
分层名称 | 功能 | 相关协议 |
应用层 | 负责应用程序间沟通 | HTTP SSH DNS |
展示层 | 将网络数据报转换成程序需要的包 | |
会话层 | 负责管理连接和断开连接 | |
传输层 | 负责两台主机之间的数据传输的路由 | TCP UDP |
网络层 | 负责地址管理和路由选择 | IP |
数据链路层 | 负责设备之间的数据帧的传送和识别 | |
物理层 | 负责光/电信号的传递方式 |
3.TCP 和 UDP 的区别:
UDP :无连接、不可靠、面向数据报(一个整体Datargam)——性能比较快。
UDP没有发送缓冲区(由于UDP的无连接特点),只有接收缓冲区。
TCP:面向连接的、稳定的、面向数据流。
TCP 既有发送缓冲区,又有接收缓冲区。
4.网络中的地址管理
(1)IP协议有两个版本IPv4 和IPv6 ;
IPv4和IPv6的区别?
1、地址数量
IPv4 的 IP 地址是一个 32 位的二进制数,可提供 2^32 个地址。
IPv6 采用 128 位地址长度,可提供 2^128 个地址,IPv4 的 2^96 倍。
2、传输速度
IPv6 使用的是固定报头;
IPv6 的路由表更小,聚合能力更强,保证了数据转发的路径更短,提高了转发效率;
IPv6 消除了 IPv4 中常见的大部分地址冲突问题,并为设备提供了更多简化的连接和通信。
3、传输方式的安全性
IPv4 不安全;
IPv6 较为安全,在网络层认证与加密数据并对 IP 报文进行校验,为用户提供客户端到服务端的数据安全,保证数据不被劫持。
4.其它
相对比 IPv4, IPv6 协议对移动端更加友好,它可以增强移动终端的移动特性、安全特性、路由特性,同时降低网络部署的难度和投资。
IPv6 增加了自动配置以及重配置技术,即插即用,对于 IP 地址等信息实现自动增删更新配置,提升 IPv6 的易管理性。
(2)Mac 地址:用来识别数据链路层中相连的节点——大小6字节;
4.UDP网络编程
(1)对象 DatagramSocket ->客户端(主动发送请求的一端)、服务器端(被动接收请求的一端)(业务层的分层)
服务器端设置一个固定的端口号;以便于客户端的连接。
(2)DatagramPacket (接收和发送请求的容器):常用方法:send() ; receive()。
(3)具体应用:实现客户端、服务器端的通信
UDP服务器端:
//UDP 服务器端
public class UDPServer {
// 端口号
private static final int port = 9001;
// 数据的最大值
private static final int bleng = 1024;
public static void main(String[] args) throws IOException {
// 1.启动一个 UDP 服务器端(IP、端口号)
DatagramSocket socket = new DatagramSocket(port);
System.out.println("服务器已启动!");
while (true){
// 2.初始化数据包
DatagramPacket clientPacket = new DatagramPacket(
new byte[bleng],
bleng
);
// 3.等待客户端的链接
socket.receive(clientPacket);
// 执行到此步骤,表示已经有客户端连接
// 4.接收到客户端的信息
String msg = new String(clientPacket.getData());
System.out.println("接收到客户端的信息:"+msg);
// 给客户端一个响应
String serMsg = "我收到了";
// 发送消息
DatagramPacket serPacket = new DatagramPacket(
serMsg.getBytes(),
serMsg.getBytes().length, //字节长度
clientPacket.getAddress(),
clientPacket.getPort()
);
socket.send(serPacket);
}
}
}
UDP客户端:
public class UDPClient {
// 服务器的IP
private static final String ip = "127.0.0.1";
// 服务器的端口号
private static final int port = 9001;
// 数据最大长度
private static final int bleng = 1024;
public static void main(String[] args) throws IOException {
// 1.启动客户端
DatagramSocket client = new DatagramSocket();
Scanner scanner = new Scanner(System.in);
while (true){
System.out.print("->");
String msg = scanner.nextLine();
// 2.给服务器端发送消息
DatagramPacket datagramPacket = new DatagramPacket(
msg.getBytes(),
msg.getBytes().length,
InetAddress.getByName(ip),
port
);
client.send(datagramPacket);
// 3.接收服务器的返回信息
DatagramPacket serPacket = new DatagramPacket(
new byte[bleng],
bleng
);
client.receive(serPacket);
// 接收到服务器端返回信息
String serMsg = new String(serPacket.getData());
System.out.println("服务器返回:"+serMsg);
}
}
}
标签:协议,UDP,DatagramPacket,String,计算机网络,分层,IPv6,new,客户端 来源: https://blog.csdn.net/qq_45991995/article/details/115734712