网络编程
1.1、概述
现在的世界,可以实现你在家里(海口)发送一个消息,很短的时间内,在印度的阿老师们就能够收到。这就是一个常见的网络使用的例子。
地球村的概念提出,更加完美的诠释了网络的效应。
在上世纪,最常用的通讯方式,还是信件。以下是信件的简式结构:
计算机网络:
计算机网络是指将**地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来**,在网络操作系统,网络管理软件及**网络通信协议**的管理和协调下,实现资源共享和信息传递的计算机系统。
网络编程的目的:
类比于无线电台,用于进行传播交流信息。进行数据交换,通信。
需要达到的效果,成果是什么:
1.如何准确定位网络上的一台主机?
- 通过端口号来进行。Eg:192.167.7.7
2.找到了主机,如何进行数据传递?
- ……
1.2、网络通信要素
随便举个例子,人工智能中的智能汽车。
目前适用于工程,码头等人少的地方,少数地方在尝试上路。由于伦理道德问题,难以大规模上路。网络通信的内容是很复杂,繁多的。
怎样实现网络通信?
通信双方的地址:
-
IP
-
端口
-
局域网地址等……
规则?网络通信协议
以TCP/IP协议为例:
我们重点学习传输层(TCP,UDP协议),以其为主题,进行讲解。
小结:
1.网络编程中有两个主要问题:
- 如何准确的定位到网络上的一台或多台主机。
打开CMD,直接输入“ping + 目标网址”进行地址跳跃查询。
- 找到主机后如何进行通信。
2.网络编程中的要素:
-
IP和端口号。
-
网络通信协议。
3.Java中万物皆对象,使用何种对象进行信息传输?
1.3、IP地址
Java中如何进行IP地址的获取?
使用“InetAddress”关键词。
-
IP的作用:唯一定位一台网络上的计算机。
-
特殊IP地址的记忆:127.0.0.1:本机地址,又称为localhost。
-
IP地址的分类:
一、IPV4/IPV6
1.IPV4:127.0.0.1,由4个字节居中,每个字节的大小为0到255,约有42亿个地址。其中约有30亿在北美,4亿在亚洲。在2011年地址已用尽。
2.IPV6:fe70::5477:2017:d5ac:7958%7,由128位,8个无符号整数组成。具有更多的地址数,可满足地球上每一粒沙子分配一个地址。
二、公网(互联网)/私网(局域网)
1.ABCD类地址:
2.192.168.XX.XX,等,专供某些组织使用。
- 域名:方便记忆的IP地址问题。
在阿里云上可以搜查你感兴趣的IP地址的价格。
代码测试:
package com.edwin.lesson1;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
* @author EdwinD
* @create 2020.08.20 下午 01:24
* @desc 测试Ip地址。
**/
public class TextInetAddress {
public static void main(String[] args) {
try {
// 查询本机地址
// 方法一:
InetAddress inetAddress1 = InetAddress.getByName("127.0.0.1");
System.out.println(inetAddress1);
// 方法二:
InetAddress inetAddress2 = InetAddress.getByName("localhost");
System.out.println(inetAddress2);
// 方法三:
InetAddress inetAddress3 = InetAddress.getLocalHost();
System.out.println(inetAddress3);
// 查询百度的地址
InetAddress inetAddress4 = InetAddress.getByName("www.baidu.com");
System.out.println(inetAddress4);
// 常用的方法
System.out.println(inetAddress4.getAddress());
System.out.println(inetAddress4.getCanonicalHostName());//规范的名字
System.out.println(inetAddress4.getHostAddress());//IP
System.out.println(inetAddress4.getHostName());//域名,或者自己电脑的名字
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
输出效果:
1.4、端口
端口表示计算机上的一个程序的进程。
IP和端口号好比一个大楼和里面一个个房间。
-
不同的进程有不同的端口号。用来区分软件。
-
范围规定:0—65535。
-
分为TCP和UDP两个,都是65535个。两个协议下,端口号不能够重复。
-
端口分类:
1.共有端口:0—1023
-
HTTP:80
-
HTTPS:443
-
FTP:21
-
Telent:23
2.程序注册端口:1024—49151,用于分配给用于或者程序。
-
Tomcat:8080
-
Mysql:3306
-
Oracle:1521
3.动态、私有:49152—65535
netstat -ano;#查看所有的端口
netstat -ano|findstr "XXXX";#查看指定的XXXX端口号
tasklist|findstr "XXXX";#查找某个端口的进程
代码:
package com.edwin.lesson1;
import java.net.InetSocketAddress;
/**
* @author EdwinD
* @create 2020.08.20 下午 03:11
* @desc 套接字
**/
public class TestInetSocketAddress {
public static void main(String[] args) {
InetSocketAddress socketAddress1 = new InetSocketAddress("127.0.0.1", 8080);
System.out.println(socketAddress1);
InetSocketAddress socketAddress2 = new InetSocketAddress("localhost", 8080);
System.out.println(socketAddress2);
System.out.println(socketAddress1.getAddress());
System.out.println(socketAddress1.getHostName());
System.out.println(socketAddress1.getPort() );
}
}
输出:
运行原理:
1.5、通信协议
所谓协议,就是一些约定,用于大家一起更好地使用一些东西。就比如中国人的官方语言是普通话。
**网络通信协议:**针对网络的一些规定。一些特殊单位:速率,传输码率,代码结构,传输控制等……
但是这些协议错综复杂,十分难顶。
因此,有了一个“大事化小”的方法:分层。
这其中,最重要的协议是:TCP/IP协议簇
其中重要的:
-
TCP:用户传输协议
-
UDP:用户数据报协议
其中出名的协议:
-
TCP:
-
IP:网络连接协议
TCP和UDP对比
1.TCP:
-
建立连接,稳定。
-
“三次握手”连接和“四次挥手”断开。
//三次握手:至少进行3次,才能保障连接。
A:你愁啥?
B:瞅你咋地?
A:干你丫的!
三次握手:
//四次挥手:至少进行4此,才能保障断开。
A:我要走了。
B:你真的要走了吗?
B:你真的真的要走了吗?
A:我真的真的要走了。
四次挥手:
- 客户端、服务端界限明朗。
2.UDP:
-
不连接,不稳定。
-
客户端、服务端的界限不明朗。
-
不论对方是否准备好,都可以给对方发消息。
-
DDOS:洪水攻击,一次性发送大量的数据,进行饱和攻击。
路漫漫其修远兮,吾将上下而求索。
参考文献
《【狂神说Java】网络编程实战讲解》
视频链接
2020.08.24