?
7层模型,也叫osi参考模型
?
网络模型一般是指 osi 7层参考模型和 tcp/ip 五层参考模型
每一层实现各自的功能和协议,并且都为上一层提供业务功能,为了提供这种业务功能,下一层将上一层的数据并入本层的数据域中,然后通过加入报头
或者报尾来实现该层的业务功能,这个过程叫数据封装。用户的数据要经过一次一次包装,最后转为可以在网络上传输的信号(物理层上的010101),发送到网络上。当到达目标计算机后(对方接受到我发来的010101),
再执行相反的数据拆分过程
比如一个网络聊天室,发出一句 hello 的消息给对面的人,那么消息会经过表示层到物理层的层层包装,
发给对面的物理层,对面再拆分数据, 还原数据
?
而 java 企业应用开发,指的就是在和应用层打交道
?
ip地址有5类:
?
?
java 编程中使用 InetAddress 来操作 ip地址
用于标识进程的逻辑地址,不同进程的不同标识;
有效端口: 0-65535, 其中 0-1024系统使用或是保留端口
传输协议:
?
?
socket 又称套接字,用于描述 ip地址和端口。 应用程序通常通过 socket 向网络发出请求或者应答网络请求。 Socket就是
为网络编程提供一种机制
?
通信两端都有 socket, 网络通信其实就是 socket之间的通信。
然后数据再两个socket 之间通过 io传输
网络编程也称socket编程为套接字编程
socket 通信是 Client/Server模型
?
?
DatagramSocket client = new DatagramSocket();
//对数据进行打包
DatagramPacket packet = new DatagramPacket(message… , IndetAddress.getxxHost() …. , port….)
?
//发送打包的数据
client.send(packet);
client.close();
?
DatagramSocket server = new ????DatagramSocket( 8080); //监听 8080端口
DatagramPacket packet = new DatagramPacket(new byte[1024],1024); //数据接收的容器
server.receive(packet); //阻塞,接收数据包,并且将接收的存入 packet中
packet.getData() --à 获取发送来的 byte数组
server.close ();
?
//创建socket,指定 传输的ip端口
Socket client = new Socket("127.0.0.1",8080);
OutPutStream s = client.getOutputStream();
s.write("hello".getBytes());
client.close();
//接收端 ,监听请求,然后建立连接
ServerSocket s = new ServerSocket(8080);
Socket s =s.accept(); //监听连接,如果有请求就会返回一个 socket来处理这个连接
stream = s.getInputStream();//读取 inputStream 的bytes数组
byte[] container = new byte[1024]; //创建容器
stream.read(container);//将 io流读取到的 byte写入容器
?
?
JDK 1.4 使用的 是阻塞式IO
服务器的 accept 和 read的操作都是阻塞的,只能用 开多个线程来处理多个请求
?
NIO 3大核心: 通道,缓冲区,选择器
缓冲区作为容器,数据读取写入通过通道,通道是双向的,不同于 io流,可读可写
channel不直接处理 buffer 中的数据,而是通过buffer 对象来处理数据
选择器(多路复用技术):选择就绪的通道(管家一般)
?
需要重点掌握的概念:
同步IO 和 非同步 io ,即资源没有准备好,如何响应程序的问题??
?
?
(nio的话是使用线程一直轮询,直到有io资源准备好了)
?
remote procedure call protocal 远程调用协议,即用户不知道计算机细节的情况下,调用远程计算机
的某个函数,就像调用本地的应用程序一样
即通过网络从远程计算机程序上请求服务,而不需要了解底层技术的协议
rpc是协议,因此需要遵循一定的规范, 有一些现成的rpc的实现,比如 Dubbo,Thrift,Hetty,dubbo 还包括
服务管理,访问权限管理等功能
网络协议和网络io模型透明化:调用过程中使用哪种网络io模型,调用者不需要关心
信息格式透明化: 远程调用会传递一些参数,并且返回调用结果,这个信息格式是怎样构成的,调用方无需担心
跨语言: 调用方不需要知道程序是什么语言的,无论什么语言,调用都应该成功且返回调用方
程序语言能理解的形式进行描述
?
?
?
原文:https://www.cnblogs.com/lyr-2000/p/12495349.html