网络编程(之二:IP地址、端口、通信协议)
一、IP地址
Java里面的IP类为:java.net. InetAddress;
此类表示Internet协议(IP)地址。
IP地址是由IP使用的32位或128位无符号数字,构建UDP和TCP协议的低级协议。 IP地址结构由定义RFC 790: Assigned Numbers , RFC 1918: Address Allocation for Private Internets, RFC 2365: Administratively Scoped IP Multicast和RFC 2373: IP Version 6 Addressing Architecture 。 InetAddress的一个实例由一个IP地址和可能的相应主机名组成(取决于它是用主机名构造还是已经完成了反向主机名解析)。
IP是用来干什么的?
唯一定位一台网络上的计算机
特殊的IP地址:127.0.0.1;本机 localhost
IP地址分类
-
IPV4/IPV6
- IPV4:192.0.2.235 IPv4使用32位2进制位的地址,因此大约只有43亿个地址。最初每一个连接入互联网的用户都要分配使用一个IPv4 地址,因此未分配的IPv4地址越来越少,由此产生了IPv4地址耗尽的问题。为了根本解决IPv4地址耗尽的问题,IPv6应运而生
- IPV6:2001:0DB8:0000:0023:0008:0800:200C:417A IPv6的地址长度为128位,是IPv4地址长度的4倍。于是IPv4点分十进制格式不再适用,采用十六进制表示。
-
公网(互联网)/私网(局域网)
-
域名:由于IP地址具有不方便记忆并且不能显示地址组织的名称和性质等缺点,人们设计出了域名,使人更方便地访问互联网,而不用去记住能够被机器直接读取的IP地址数串。
代码实现
package cn.chao.Network.Lesson;
import java.net.InetAddress;
import java.net.UnknownHostException;
//测试ip
public class TestInetAddress {
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);
//查询网络ip地址
InetAddress inetAddress4 = InetAddress.getByName("www.csdn.net");
System.out.println(inetAddress4);
}catch (UnknownHostException e){
e.printStackTrace();
}
}
}
二、端口
端口表示计算机上的一个程序的进程;
-
不同的进程有不同的端口号!用来区分软件!
-
端口是通过端口号]来标记的,端口号只有整数,范围是从0 到65535(2^16-1)。
-
TCP端口和UDP)端口。由于TCP和UDP 两个协议是独立的,因此各自的端口号也相互独立,比如TCP有235端口,UDP也 可以有235端口,两者并不冲突。
端口分类
-
公有端口 0-1023
- HTTP :80
- HTTPS : 443
- FTP : 21
- Telent : 23
-
程序注册端口 1024-49151 分配给用户或者程序
- Tomcat : 8080
- MySQL : 3306
- Oracle :1521
-
动态、私有:49152-65535
代码实现
package cn.chao.Network.Lesson;
import java.net.InetSocketAddress;
public class TextInetSocketAddress {
public static void main(String[] args) {
InetSocketAddress socketAddress1 = new InetSocketAddress("127.0.0.1",8080);
InetSocketAddress socketAddress2 = new InetSocketAddress("localhost",8080);
System.out.println(socketAddress1);
System.out.println(socketAddress2);
System.out.println(socketAddress1.getAddress());
System.out.println(socketAddress1.getHostName());//地址
System.out.println(socketAddress1.getPort());//端口
}
}
三、通信协议
网络通信协议是一种网络通用语言,为连接不同操作系统和不同硬件体系结构的互联网络提供通信支持,是一种网络通用语言。
TCP/IP协议簇:
- TCP : 用户传输协议
- UDP :用户数据包协议
- IP :网络互连协议
TCP UDP 对比
TCP:打电话
-
连接稳定
-
三次握手,四次挥手
最少需要三次,保证稳定连接! A:你愁啥? B:瞅你咋地? A:干一架吧! 需要四次,断开连接 A:我们分手吧! B:我们真的分手了吗? B:我们真的不能谈一谈吗? A:我要走了!
-
客户端,服务端
UDP:发短信
- 不连接,不稳定
- 客户端,服务端没有明显界限
- DDOS攻击