计算机网络
网络体系分层:
七层模型,也称为OSI(Open System Interconnection)参考模型,是国际标准化组织(ISO)制定的一个用于计算机或通讯系统间互联的标准体系。它是一个七层的、抽象的模型体,不仅包括一系列抽象的术语或概念,也包括具体的协议。
ISO 就是 Internationalization Standard Organization(国际标准组织)。
TCP / IP 协议
在Internet中TCP/IP协议是使用最为广泛的通讯协议。TCP/IP是英文Transmission Control Protocol/Internet Protocol的缩写,意思是“传输控制协议/网际协议”
实际生活当中有时也确实就是指这两种协议(tcp和ip)。然而在很多情况下,它只是利用 IP 进行通信时所必须用到的协议群的统称。具体来说,IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都属于 TCP/IP 协议。
-
TCP协议:面向连接的,可靠的流传输协议
-
UDP协议:是不具有可靠性的且不需要建立连接数据报协议,只负责发送,不管对方是否接受,保证的是传输的效率;例如我们的视频通话
这里所说的连接不是通常意义的连接,是有一个连接,回复,确定连接的过程
TCP建立连接通过三次握手:
这里以客户端请求断开连接为例子:
- 客户端向服务端请求断开链接
- 服务端确定并应答,
- 服务端请求断开连接,
- 客户端确认并应答
-
网络层ip协议: 其实就是ip地址:端口号; ip地址识别具体的那一个主机,端口号识别主机上的具体那一个应用程序; ip地址是动态分配的,即每次主机入网获取的ip地址可能不同,而我们的MAC地址是固定的,不能实现复用;这也是引入ip地址的目的,避免地址不必要的浪费。 IP 地址(IPv4 地址)由32位正整数来表示,我们将32位的 IP 地址以每8位为一组,分成4组,每组以 “.” 隔开,再将每组数转换成十进制数,例如我们的主机地址是:127.0.0.1
ip地址又网络地址+主机地址组成
根据网络地址的位数我们把ip地址分为ABCD四类
ip类别 网络地址位数 主机地址位数 A 前8位 后24位 B 前16位 后16位 C 前24位 后8位 D 前32位 没有 D类ip主要用于广播,多播
端口号的确定
Socket 网络编程
在java中,我们用Socket类来实现对网络的操作,socket翻译过来为套接字的意思, 套接字是网络通信中最小的单位,可以理解为一个端点,两个这样的端点通过建立连接就可以通信了; Socket本质是编程接口(API),对TCP/IP的封装。
TCP协议编程
服务端:
Scanner input =new Scanner(System.in);
ServerSocket socket = new ServerSocket(6666);
//服务端等待连接,有一个连接就返回退出,没有就一直等待客户端的连接
Socket client = socket.accept();
System.out.println("已连接");
//拿到客户端的流,进行相关的读写操作
InputStream inputStream = client.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
String s = br.readLine();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(client.getoutputStream()));
if(s.equals("BYE")){
bw.write(s);
bw.newLine();
}else{
System.out.println(s);
bw.write(input.next());
bw.newLine();
}
bw.close();
br.close();
socket.close();
客户端:
Socket socket = new Socket("127.0.0.1",6666);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getoutputStream()));
Scanner input = new Scanner(System.in);
System.out.print("输入发给服务端的:");
bw.write(input.next());
bw.newLine();
bw.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(br.readLine());
br.close();
bw.close();
socket.close();
UDP协议编程
数据报式套接字,面向无连接 ,谁先收,谁先启动
UDP编程不区分客户端和服务端
private static void udp() throws IOException {
// 监听端口,
DatagramSocket socket = new DatagramSocket(6666);
//发送 send()
String str = "hello !";
byte [] b = str.getBytes();
int length = b.length;
int port = 8888;
InetAddress inetAddress = InetAddress.getLocalHost();
DatagramPacket dp = new DatagramPacket(b,length,inetAddress,port);
socket.send(dp);
//接收 receive
byte [] bytes = new byte[1024];
DatagramPacket dpReceive = new DatagramPacket(bytes,bytes.length);
socket.receive(dpReceive);
System.out.println(new String(bytes,0,dpReceive.getLength()));
socket.close();
}
et(bytes,bytes.length);
socket.receive(dpReceive);
System.out.println(new String(bytes,0,dpReceive.getLength()));
socket.close();
}
原文地址:https://www.jb51.cc/wenti/3280912.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。