一、网络编程
- 网络编程的主要问题:1、如何准确定位到网络上的一台或多台主机(ip+端口),2、找到主机之后如何进行通信
- 网络编程的要素:1、IP和端口号,2、网络通信协议(udp、tcp等)
二、IP地址
1、ip(InetAddress)地址基础:
- 唯一定位一台网络上的计算机
- 127.0.0.1:本机localhost
- ip地址的分类:ipv4/ipv6、公网-私网
- ipv4:127.0.0.1 ,4个字节组成,每个字节(如127)范围0~255
- ipv6: 2001:0bb2:aaaa:0015:0000:0000:1aaa:1312,由8个无符号整数组成,每个整数用16进制表示,每个16进制数是4位,因此一个整数有16位,共8个整数,共计128位
- 公网(互联网)、私网(局域网):ABCD类地址、192.168.xx.xx
- 域名:记忆IP问题
2、 java的InetAddress类:
public class TestInetAddress {
public static void main(String[] args) {
try {
InetAddress inetAddress1=InetAddress.getByName("127.0.0.1");
System.out.println(inetAddress1);
InetAddress inetAddress3=InetAddress.getByName("localhost");
System.out.println(inetAddress3);
InetAddress inetAddress4=InetAddress.getLocalHost();
System.out.println(inetAddress4);
System.out.println("===============");
InetAddress inetAddress2=InetAddress.getByName("www.baidu.com");
System.out.println(inetAddress2);
System.out.println("===============");
System.out.println(inetAddress2.getHostAddress());
System.out.println(inetAddress2.getHostName());
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
三、端口
1、端口的基础知识
- 端口表示计算机上一个程序的进程,不同的进程有不同的端口号,用来区分软件
- 规定范围0~65535
- TCP、UDP协议,不同协议之间可以使用同一个端口号,但是同一个协议下不能使用同一个端口
- 端口分类
- 共有端口0~1023
- HTTP:80
- HTTPS:443
- FTP:21
- Telent:23
- 程序注册端口1024~49151,分配用户或程序
- Tomcat:8080
- MySQL:3306
- Oracle:1521
- 动态、私有:49152~65535
2、java的InetSocketAddress类:
public class TestInetSocketAddress {
public static void main(String[] args) {
InetSocketAddress socketAddress=new InetSocketAddress("127.0.0.1",8080);
InetSocketAddress socketAddress1=new InetSocketAddress("localhost",8080);
System.out.println(socketAddress);
System.out.println(socketAddress1);
System.out.println("=================");
System.out.println(socketAddress1.getHostName());
System.out.println(socketAddress1.getAddress());
System.out.println(socketAddress1.getPort());
}
}
四、通信协议
1、基础
- 网络通信协议:速率、传输码率、代码结构、传输控制
- 协议的分层:TCP/IP的四层协议:应用层(用户应用软件:qq)、传输层(通信)、网络层(网络封包)、数据链路层(光纤等)
- TCP/IP协议(传输层):
- TCP、UDP对比
- TCP:打电话
- 连接、稳定
- 三次握手、四次挥手
- 客户端、服务端
- 传输完成,释放连接,效率低
- UDP:发短信
- 不连接、不稳定
- 客户端服务端没有明确界限
- 不管有没有准备好,都可以发送
- 三次握手(连接)
- 第一次:客户端发送SYN(同步序列编号)包到服务器,等待服务器确认
- 第二次:服务器收到SYN包,先确认SYN包,然后向客户端发送一个SYN+ACK包
- 第三次:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,发送完毕后客户端和服务器TCP连接成功,完成三次握手
- 四次挥手(断开)
- 第一次:客户端发送一个FIN(请求释放连接),关闭客户到服务器的数据传送
- 第二次:服务器收到FIN,发回一个ACK
- 第三次:服务器关闭客户端的连接,发送一个FIN给客户端(表示已经准备好释放连接)
- 第四次:客户端发回ACK确认