学习时间
2021-04-07
学习内容
网络模型概述
常见的网络模型分为三种:
- OSI七层体系结构
- TCP/IP体系结构
- 5层网络体系结构(教学用)
我们在此只介绍前两种网络模型
OSI七层模型
百度百科的解释:OSI七层模型
- 应用层
网络服务与最终用户的一个接口。
协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP - 表示层
数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)
格式有,JPEG、ASCll、EBCDIC、加密格式等 [2] - 会话层
建立、管理、终止会话。(在五层模型里面已经合并到了应用层)
对应主机进程,指本地主机与远程主机正在进行的会话 - 传输层
定义传输数据的协议端口号,以及流控和差错校验。
协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层 - 网络层
进行逻辑地址寻址,实现不同网络之间的路径选择。
协议有:ICMP IGMP IP(IPV4 IPV6) - 数据链路层
建立逻辑连接、进行硬件地址寻址、差错校验 [3] 等功能。(由底层网络定义协议)
将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。 - 物理层
建立、维护、断开物理连接。(由底层网络定义协议)
特点:
TCP/IP 层级模型结构,应用层之间的协议通过逐级调用传输层、网络层和物理数据链路层,而可以实现应用层的应用程序通信互联。
应用层需要关心应用程序的逻辑细节,而不是数据在网络中的传输活动。应用层其下三层则处理真正的通信细节。
图示:
TCP/IP体系结构
- 应用层
应用层对应于OSI参考模型的高层,为用户提供所需要的各种服务,例如:FTP、Telnet、DNS、SMTP等. - 传输层
传输层对应于OSI参考模型的传输层,为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。该层定义了两个主要的协议:传输控制协议(TCP)和用户数据报协议(UDP).
TCP协议提供的是一种可靠的、通过“三次握手”来连接的数据传输服务;而UDP协议提供的则是不保证可靠的(并不是不可靠)、无连接的数据传输服务. - 网际互联层
网际互联层对应于OSI参考模型的网络层,主要解决主机到主机的通信问题。它所包含的协议设计数据包在整个网络上的逻辑传输。注重重新赋予主机一个IP地址来完成对主机的寻址,它还负责数据包在多种网络中的路由。该层有三个主要协议:网际协议(IP)、互联网组管理协议(IGMP)和互联网控制报文协议(ICMP)。
IP协议是网际互联层最重要的协议,它提供的是一个可靠、无连接的数据报传递服务。 - 网络接入层(即主机-网络层)
网络接入层与OSI参考模型中的物理层和数据链路层相对应。它负责监视数据在主机和网络之间的交换。事实上,TCP/IP本身并未定义该层的协议,而由参与互连的各网络使用自己的物理层和数据链路层协议,然后与TCP/IP的网络接入层进行连接。地址解析协议(ARP)工作在此层,即OSI参考模型的数据链路层。
网络编程三要素
- IP地址:网络中设备的标识,不易记忆,可用主机名
- 端口号:用于标识进程的逻辑地址,不同进程的标识
- 传输协议: 通讯的规则常见协议:TCP,UDP
IP
- IP概述:所谓IP地址就是给每个连接在Internet上的主机分配的一个32bit地址。 点分十进制
- IP地址的组成
IP地址 = 网络地址+主机地址
A类IP地址:第一段号码为网络地址,剩下的三段号码为本地计算机的号码
B类IP地址:前二段号码为网络地址,剩下的二段号码为本地计算机的号码
C类IP地址:前三段号码为网络地址,剩下的一段号码为本地计算机的号码 - IP地址分类
A类 1.0.0.1—127.255.255.254
(1)10.X.X.X是私有地址(私有地址就是在互联网上不使用,而被用在局域网络中的地址)
(2)127.X.X.X是保留地址,用做循环测试用的。
B类 128.0.0.1—191.255.255.254 172.16.0.0—172.31.255.255是私有地址。
C类 192.0.0.1—223.255.255.254 192.168.x.x是私有地址
D类 224.0.0.1—239.255.255.254
E类 240.0.0.1—247.255.255.254 - 特殊地址
127.0.0.1 回环地址,可用于测试本机的网络是否有问题. ping 127.0.0.1
DOS命令 ipconfig:查看本机IP地址
xxx.xxx.xxx.255 广播地址
端口
设备与外界通讯交流的出口,可以理解为一个进出房间的门。
分类:
- 逻辑端口指的是计算机内部或交换机路由器内的端口,看不见,摸不着。
- 物理端口,就是可见的端口
逻辑端口
1、逻辑端口范围:一个IP地址的端口从0-2^16-1,也就是0-65535个。
2、逻辑端口分类:TCP端口和UDP端口。
协议
-
UDP协议:(例子:发短信)
将数据源和目的地封装成数据包,不需要建立连接;
每个数据报包的大小在限制在64k;
因无连接,是不可靠协议;
不需要建立连接,速度快,效率高
-
TCP协议:(例子:打电话)
建立连接,形成传输数据的通道;
在连接中进行大数据量传输;
需要连接所以是可靠协议;
必须建立连接,效率会稍低
用Java实现网络编程
InetAddress类
概述
表示互联网协议 (IP) 地址。
常用方法
public static InetAddress getByName(String host)//在给定主机名的情况下确定主机的 IP 地址。
public String getHostAddress()//获取IP
public String getHostName()//获取主机名
getLocalHost();//返回本地主机。
import java.net.InetAddress;
import java.net.UnknownHostException;
public class Test {
public static void main(String[] args) throws UnknownHostException {
InetAddress IPName = InetAddress.getByName("DESKTOP-JV3ICxx");
System.out.println(IPName);//DESKTOP-JV3ICxx/192.168.1.xxx
String hostAddress = IPName.getHostAddress();
System.out.println(hostAddress);//192.168.1.xxx
String hostName = IPName.getHostName();
System.out.println(hostName);//DESKTOP-JV3ICxx
InetAddress localHost = InetAddress.getLocalHost();
System.out.println(localHost);//DESKTOP-JV3ICxx/192.168.1.xxx
}
}
Socket
Socket=IP+端口号
A:Socket套接字概述:
网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。
B:Socket原理机制:
通信的两端都有Socket。
网络通信其实就是Socket间的通信。
数据在两个Socket间通过IO传输。
UDP协议收发数据
UDP协议发送数据
步骤:
- 创建UDP通讯客户端对象(DatagramSocket)
- 创建数据报包 public DatagramPacket(byte[] buf, int length, InetAddress address,int port)
- 发送 数据
- 释放资源
演示:
import java.io.IOException;
import java.net.*;
public class UDPClient {
public static void main(String[] args) throws IOException {
DatagramSocket datagramSocket = new DatagramSocket();//创建UDP通讯对象
String msg = "xixi";//要发送的数据
byte[] bytes = msg.getBytes();
InetAddress byName = InetAddress.getByName("192.168.1.xxx");
DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, byName, 1111);//创建数据报包
datagramSocket.send(datagramPacket);//发送数据包
datagramSocket.close();//释放资源
}
}
UDP协议接收数据
步骤:
- 创建UDP通讯协议服务器端对象(DatagramSocket) 注意要用有参数构造 指定端口号
- 创建数据报包,作用用来接收数据 // public DatagramPacket(byte[] buf, int length)
- 接收数据 receive(dp) ;
- 解析数据报包,拿出数据 dp.getData() ; dp.getLength() ;
- 释放资源
演示:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPServer {
public static void main(String[] args) throws IOException {
DatagramSocket datagramSocket = new DatagramSocket(1111);//创建端口号为1111的数据报套接字
byte[] bytes = new byte[8];
DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);
datagramSocket.receive(datagramPacket);//接受数据包
byte[] data = datagramPacket.getData();
int length = datagramPacket.getLength();
String s = new String(data, 0, length);//解析数据包
System.out.println("收到消息:" + s);//收到消息:xixi
datagramSocket.close();//释放资源
}
}
TCP协议收发数据
TCP协议发送数据
步骤:
- 创建TCP通讯协议客户端对象(Socket) // public Socket(String host, int port)
- 获取输出流对象
- 写数据
- 释放资源
演示:
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class TCPClient {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("192.168.1.130", 2222);//创建套接字并绑定端口
OutputStream outputStream = socket.getOutputStream();//获取输出流
String s = "haha";//要输入的内容
outputStream.write(s.getBytes());//写入数据
socket.close();//释放资源
}
}
TCP协议接收数据
步骤:
- 创建TCP通讯协议服务器端对象(ServerSocket)
- 监听客户端
- 获取输入流对象
- 读取数据
- 释放资源
演示:
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(2222);//创建服务器端的Socket,并暴露端口号
Socket accept = serverSocket.accept();//侦听连接
InputStream inputStream = accept.getInputStream();//获取输入流
byte[] bytes = new byte[1024];
int read = inputStream.read(bytes);
String s = new String(bytes, 0, read);//解析连接
System.out.println("收到信息:" + s);//收到信息:haha
serverSocket.close();//释放资源
}
}
声明:
本文参考:
- 《计算机网络:原理与实践》(陈鸣)高等教育出版社
关于转载:
允许非商业用途转载,注明出处和链接即可。