网络编程 -> IP、端口、通信协议
1. 概述
-
计算机网络
计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
-
网络编程的目的
传播交流信息
数据交换
通信
-
网络编程中的两个主要问题:
- 如何准确定位网络上的一台或多台主机,以及定位到这个计算机上的某个资源?
-
找到了这个主机,如何传输数据?
-
JavaWeb 是网页编程,B/S架构;网络编程是针对TCP/IP的C/S架构;
2. 网络通信的要素
-
通信双方的地址:
- IP
- 端口号
-
规则:即网络通信协议
-
TCP/IP参考模型
OSI七层网络模型 TCP/IP四层概念模型 对应网络协议 应用层 应用层 HTTP、TFTP、FTP、NFS、WAIS、SMTP 表示层 Telent、Rlogin、SNMP、Gopher 会话层 SMTP、DNS 传输层 传输层 TCP、UDP 网络层 网络层 IP、ICMP、ARP、RARP、AKP、UUCP 数据链路层 数据链路层 FDDI、Ethernet、Arpanet、PDN、SLIP、PPP 物理层 IEEE 802.1A、IEEE 802.2 ~ IEEE 802.11
-
3. IP
-
IP地址的类:java.net.InetAddress
-
唯一定位一台网络上的计算机
-
127.0.0.1:本机 LocalHost
-
分类:
-
IP地址分类
-
IPV4: 4个字节组成,0~255, 42亿~ (127.0.0.1)亚洲4亿,2011年就用尽了
-
IPV6:128位,8个无符号整数 (fe80::b075:f4c1:c098:ad31%12),
2001:0bb2:aaaa:0015:0000:0000:1aaa:1312
-
-
公网和私网分类
- 公网:互联网; 私网:局域网
- 192.168.XX.XX 专门给组织机构用的
- A类:1.0.0.0 ~ 127.255.255.255(二进制表示为:00000001 00000000 00000000 00000000 - 01111111 11111111 11111111 11111111),最后一个是广播地址。
- B类:128.0.0.0 ~ 191.255.255.255(二进制表示为:10000000 00000000 00000000 00000000----10111111 11111111 11111111 11111111), 最后一个是广播地址。
- C类:192.0.0.0 ~ 223.255.255.255(二进制表示为: 11000000 00000000 00000000 00000000 - 11011111 11111111 11111111 11111111)。
- D类:D类IP地址被叫做多播地址(multicast address),即组播地址。在以太网中,多播地址命名了一组应该在这个网络中应用接收到一个分组的站点。多播地址的最高位必须是“1110”,范围从224.0.0.0 ~ 239.255.255.255。
-
-
域名:记忆IP问题!
- www.baidu.com 61.135.185.32
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");
//InetAddress inetAddress1 = InetAddress.getByName("localhost");
InetAddress inetAddress1 = InetAddress.getLocalHost();
System.out.println(inetAddress1);
//查询网站IP地址
InetAddress inetAddress2 = InetAddress.getByName("www.baidu.com");
System.out.println(inetAddress2); //www.baidu.com/61.135.185.32
//常用方法
System.out.println(inetAddress2.getAddress());
System.out.println(inetAddress2.getCanonicalHostName()); //获得规范的名字
System.out.println(inetAddress2.getHostAddress()); //IP
System.out.println(inetAddress2.getHostName()); //域名
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
4. 端口
-
端口表示计算机上的一个程序的进程
-
不同的进程有不同的端口号,用来区分软件
-
端口被规定0~65535
-
TCP端口、UDP端口;单个协议下,端口号不能冲突
-
分类:
-
公有端口:0~1023
- HTTP:80
- HTTPS: 443
- FTP : 21
- Telent:23
-
程序注册端口:1024 ~ 49151,分配给用户或程序
- Tomcat:8080
- MySQL:3306
- Oracle:1521
-
动态、私有端口:49152~65535
netstat -ano #查看所有端口 netstat -ano|findstr "5900" #查看指定的端口 tasklist|findstr "11092" #查看指定端口的进程
Ctrl + Shift + Esc 打开任务管理器
import java.net.InetSocketAddress; public class TestInetSocketAddress { public static void main(String[] args) { InetSocketAddress socketAddress = new InetSocketAddress("127.0.0.1",8080); InetSocketAddress socketAddress2 = new InetSocketAddress("localhost",8080); System.out.println(socketAddress); //127.0.0.1:8080 System.out.println(socketAddress2); //localhost/127.0.0.1:8080 System.out.println(socketAddress.getAddress()); System.out.println(socketAddress.getHostName()); //127.0.0.1 System.out.println(socketAddress.getPort()); //8080 } }
-
5. 通信协议
-
网络通信协议:速率、传输码率、代码结构、传输控制…
-
由于太复制,分层! TCP/IP协议簇
-
重要的协议:
- TCP:用户传输协议
- UDP:用户数据报协议
-
出名的协议:
- TCP
- IP:网络互联协议
-
TCP & UDP 对比
-
TCP :打电话
-
连接,稳定;
-
三次握手,四次挥手
A: 你瞅啥? B: 瞅你咋地? A: 干一场! A: 我要走了 B: 你真的要走了吗 B: 你真的真的要走了吗 A: 我真的要走了
-
客户端、服务端
-
传输完成,释放连接,效率低
-
-
UDP:发短信
- 不连接、不稳定
- 客户端、服务端没有明确的界限
- 不管有没有准备好,都可以发送
-