概述
计算机网络:计算机网络是指将地理位置不同的多台计算机以及外部设备,通过通信线路连接起来。在网络操作系统、网络管理软件和网络协议的管理下协调,实现资源共享和信息传递的计算机系统。
网络编程的目的:传播交流信息,数据交换,通信
如何实现 :
- 如何准确的定位网络上计算机?(知道计算机IP地址和端口)
- 知道地址之后如何传递数据?
- 如何安全可靠的传输数据?
网络通信的要素
如何实现网络的通信?
- 通信双方地址(可定位到某台计算机的某个软件):
-
ip
-
端口号
- 规则:网络通信协议
- TCP/IP
计算机网络体系结构(五层结构):
应用层:应用层的任务是通过应用进程间的交互来完成特定网络应用。
运输层:运输层的任务是负责两个主机中进程之间通信提供通用的数据传输服务。
网络层:网络层的任务是负责为分组交换网上的不同主机。
数据链路层:两个相邻结点间的线路上无差错地传送以帧(frame)为单位的数据。每一帧包括数据和必要的控制信息。
物理层:在物理层上所传数据的单位是比特,物理层的任务就是透明地传送比特流。
数据传输:
IP
Ip地址:InetAdderss
Ip地址:IP 地址 ::= { <网络号>, <主机号>}
- 唯一定位一台网络上的计算机
- 127.0.0.1:本机localhost
- ip地址分类
-
IPV4、IPV6
- IPV4: 127.0.0.1 ,4个字节组成,0-255, 一共有42亿+。
- IPV6: 0000:1111:2222:3333:4444:5555:6666:7777 128位。8个无符号整数。
-
公网(互联网)-私网(局域网)
-
ABCDE类地址
-
域名:记忆IP问题!
-
-
public class TestInetAddress {
public static void main(String[] args) {
try {
InetAddress inetAddress = InetAddress.getByName("www.baidu.com");
System.out.println(inetAddress);
InetAddress inetAddress1 = InetAddress.getLocalHost();
System.out.println(inetAddress1);
InetAddress inetAddress2 = InetAddress.getByName("localhost");
System.out.println(inetAddress2);
//常用方法
System.out.println(inetAddress.getAddress());
System.out.println(inetAddress.getCanonicalHostName());
System.out.println(inetAddress.getHostAddress());
System.out.println(inetAddress.getHostName());
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
端口
端口表示计算机的一个程序的进程:
- 不同的进程有不同的端口号。用来区分软件。
- 端口号:0-65535
- TCP,UDP:65535*2 ,单个协议下,端口号不能冲突
- 端口分类
- 公有端口 0- 1023
- http:80
- https:443
- ftp:21
- 程序注册端口:2014-49151,分配用户或者程序
- Tomcat 8080
- MySQL:3306
- Oracle:1521
- 动态、私有端口:49152-65535
- 公有端口 0- 1023
public class TestSocketAddress {
public static void main(String[] args) {
InetSocketAddress inetSocketAddress = new InetSocketAddress("127.0.01",8080);
System.out.println(inetSocketAddress);
System.out.println(inetSocketAddress.getAddress());
System.out.println(inetSocketAddress.getHostName());
System.out.println(inetSocketAddress.getPort());
}
}
通信协议
协议:相当于约定或者规则。
网络通信协议:速率,传输速率,代码结构,传输控制…
最常用协议:TCP/IP协议簇
- TCP:用户传输协议
- UDP:用户数据协议
- IP:网络互联协议
TCP和UDP区别:
-
TCP:
-
连接,安全,稳定
-
三次握手,四次挥手
客户端c:发送请求报文 服务器s:接受请求,并发送已接受请求的回应报文 客户端c:发送服务器发送过来的回应的回应报文 c:发送请求关闭连接报文 s:停止数据发送,发送已收到关闭连接的回应报文 s:发送是否真的要关闭连接的报文 c:发送真的确定关闭连接的回应报文
-
传输完成,释放连接,效率低
-
-
UDP:
- 不连接,不稳定,不安全
- 客户端、服务器:没有界限
- 无需连接
- DDOS:端口堵塞。饱和攻击
TCP
聊天
客户端
/客户端
public class TcpClientDemo1 {
public static void main(String[] args) throws IOException {
//连接socket
Socket socket = null;
//信息输出流
OutputStream outputStream = null;
//用户交互
Scanner sc = new Scanner(System.in);
//循环发送消息
while (true){
try {
//1.知道服务器地址
InetAddress serverIP = InetAddress.getByName("127.0.0.1");
//2.端口号
int port = 9999;
//3.创建连接Socket
socket = new Socket(serverIP,port);
//4.发送消息
System.out.println("请输入你要发送的信息:");
String msg = sc.next();
outputStream = socket.getOutputStream();
outputStream.write(msg.getBytes());
} catch (Exception e) {
e.printStackTrace();
}finally {
//关闭信息输出流
if(outputStream != null){
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//关闭连接
if (socket != null){
socket.close();
}
}
//判断是否继续发送信息
System.out.println("是否继续发送信息