网络模型
OSI(Open System Interconnection)开放系统互连:参考模型
TCP/IP
网络通讯要素
IP地址
端口号
传输协议
网络参考模型
七层OSI模型的基本概念要了解
网际层协议:包括:IP协议、ICMP协议、ARP协议、RARP协议。 传输层协议:TCP协议、UDP协议。 应用层协议:FTP、Telnet、SMTP、HTTP、RIP、NFS、DNS。
要真正实现网络通讯,首先要找到IP地址,IP地址是网络通讯的一大要素
IP地址:InetAddress
网络中设备标识
不易记忆,可用本机名
本地回环地址:127.0.0.1,这个地址,只为访问本机
IP地址是对外暴露的标识,可以通过获取IP地址,访问
为了进行应用程序的标识区分,就提供了一些数字来标识应用程序,比如QQ 用4000来标识,我的电脑QQ发消息,发送到IP 地址是: 192.168.0.1 的编号为4000的应用程序上。而这些数字就是(逻辑)端口。
机箱上的端口:是物理端口
端口号
用于标识进程的逻辑地址,不同进程的标识
有效端口,0~65535,其中0~1024系统使用或保留端口。
也就是说尽量保证( 1024 < 端口编号 <= 65535)
而防火墙,就是利用端口实现的,比如QQ的端口号是4000,防火墙设置,端口4000的数据,禁止发送,就使得QQ无法连接到网络
IP对象
IP地址比较复杂,在Java中也就被封装成了对象,java.net包中提供了网络传输涉及的对象
类 InetAddress:此类表示互联网协议 (IP) 地址。
InetAdress类下有Inet4Address,Inet6Address两大类,使IP地址,不易冲突
存在于网际层,该层能识别IP地址,能封装IP地址
InetAdress对象,无构造函数,说明肯定有方法返回对象,而且是静态方法
简单演示
public static void Demo()throws UnknownHostException {
//获取本地主机IP地址对象,要抛出未知主机异常
InetAddress ip = InetAddress.getLocalHost();
//获取其他主机ip地址对象
//ip = InetAddress.getByName("kevy-PC");//也可以写IP地址
ip = InetAddress.getByName("www.baidu.com");//获取百度的IP地址
System.out.println(ip.getHostAddress());//获取主机IP地址
System.out.println(ip.getHostName());//获取主机名,如果没有获取到,说明解析时,局域网找不到
//还可能存在IP地址不唯一的可能,比如新浪、网易,服务器集群的情况
//得到的IP对象是数组
//InetAddress[] ipp = InetAddress.getAllByName("");
}
域名解析
正常在访问主机时,比如访问网易的主机,网易的主机,无非就是一台计算机存储一些数据,主机有一个IP地址,
假设127.0.0.1,存储着网易的网络资源
虽然在访问网站的时候,是域名,但实际上是IP地址,http://127.0.0.1,早期就是IP地址,但是IP地址有可能对应对应多个主机
所以就有了www(万维网).域名.com(属于商业化组织).cn(所属国家类别)
IP地址和域名有着对应关系,在互联网有一些主机,存储的就是这些对应关系,这就是域名解析,而这些主机就是DNS(域名解析服务器),只有DNS才记录网易的IP地址,DNS把IP地址返回你的计算机,再走网易
想提高解析速度,就可以实现本地解析,在本地创建一张域名解析列表,主机本身就自带了,只需我们去配置即可,
C:\Windows\System32\drivers\etc
域名解析时,先走的不是互联网,而是本机,本机失败再到互联网,解析
所以,由此,就可以在浏览一些网站时,可以屏蔽一些网站的垃圾广告,将广告网站的域名记录,配置在本地
127.0.0.1 XXXXX,这样就会先在本地用自己的IP解析,网站也就打不开,不走互联网。
360屏蔽网址也是这个原理
Socket(插座)
学习传输协议,就要先了解Socket
要进行网络传输就必须有两个端点,这两个端点想要通信,就必须连接,端点就可以理解为Socket
Socket是为网络服务提供的一种机制
通信的两端想要通讯必须有Socket
网络通信其实就是Socket间的通信
数据在两个Socket间通过IO传输
所以网络编程也可以叫Socket编程