目录标题
网络的相关概念
网络通信:两台设备之间通过网络实现数据传输
java.net包下提供了一系列的类和接口,供程序猿使用,完成网络通信
局域网:覆盖范围最小,仅仅覆盖一个教室或者一个机房
城域网:覆盖范围较大,可以覆盖一个城市
广域网:覆盖范围最大,可以覆盖全国或全球,万维网是广域网的代表
ip
用于标识网络中的每台计算机/主机
常用命令(windows):ipconfig 查看ip地址;ping ip地址 确认是否连接成功
-> ipv4:使用4个字节(32位表示),一个字节的范围是0-255
ipv4地址的标识形式:点分十进制 xxx.xxx.xxx.xxx
ipv4地址的组成 = 网络地址+主机地址,比如:192.168.0.1
-> ipv6:使用16个字节(128位表示),是ipv的4倍
ipv4地址分类图
域名
方便记忆,解决记ip的困难
可以通过http协议,将ip地址映射成域名
端口
用于标识计算机上某个特定的网络程序
范围:0-65535,0-1024已经被占用,比如ssh 22,ftp 21,smtp 25,http 80
常见的端口号:tomcat 8080、oracle 1521、mysql 3306、sqlserver 1433
协议
tcp/ip协议(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议):
>
TCP/IP协议模型,将原始的OSI七层模型简化为四层
TCP如何保证数据传输安全
1、三次握手:在不可靠的信道保证可靠的连接
三次握手是建立连接的过程,当客户端向服务端发起连接时,会先发一包连接请求数据(SYN),询问能否建立连接;
如果服务端同意连接返回一包数据(SYN+ACK);
客户端收到数据,在回复一包数据(ACK),三次握手结束;
2、传输确认
3、四次挥手:处于连接状态的客户端和服务端,都可以发起关闭连接的请求,需要四次挥手进行关闭连接
⑴、客户端发起关闭连接请求(FIN包),进入终止等待-1状态(FIN-WAIT-1);
⑵、服务端收到FIN包后,发送ACK包,表示自己进入关闭等待状态(CLOSE-WAIT),客户端进入终止等待-2状态(FIN-WAIT-2),服务端此时可以发送未发送完的数据,客户端还可以接收数据
⑶、等待服务端发送完数据以后,发送FIN包,进入最后确认状态(LAST-ACK);
⑷、客户端收到后发送ACK包,进入超时等待状态,经过超时连接后关闭连接,服务端收到ACK包后立即关闭连接
传输层TCP和UDP的区别:
UDP协议:用户数据协议
将数据、源、目的封装成数据包,不需要建立连接
每个数据报的大小限制在64k内,不适合传输大量数据
因无需连接,所以是不可靠的
发送数据结束时无需释放资源(因为不是面向连接的),速度快
TCP协议:传输控制协议
使用TCP协议前,须先建立TCP连接,形成传输数据通道
传输前,采用“三次握手”方式,是可靠的
TCP协议进行通信的两个应用进程:客户端、服务端
在连接中可进行大数据量的传输
传输完毕后,须释放已建立的连接,效率低
InetAddress类的使用
/**
* 演示InetAddress类的使用
*/
public class API_ {
public static void main(String[] args) throws UnknownHostException {
//1、获取本机的InetAddress对象
InetAddress localhost = InetAddress.getLocalHost();
System.out.println(localhost);// 本机名/ip地址:Wa-study-java/192.168.31.178
//2、根据指定主机名,获取 InetAddress 对象
InetAddress host1 = InetAddress.getByName("Wa-study-java");
System.out.println(host1);// Wa-study-java/192.168.31.178
//3、根据域名返回 InetAddress对象
InetAddress host2 = InetAddress.getByName("www.baidu.com");
System.out.println(host2);//www.baidu.com/110.242.68.3
//4、通过 Inetaddress 对象,获取对应的ip地址
String hostAddress = host2.getHostAddress();
System.out.println(hostAddress);//110.242.68.3
//5、通过 Inetaddress 对象