今天学习的内容是网络参考模型、IP地址与端口号和传输协议
一、网络参考模型
如果想要完成客户端与服务器之间的数据交互,就要用到网络通信。 为了解决不同结构的网络的互联问题,国际标准化组织ISO制定了OSI网络参考模型,将复杂的网络通信问题化为若干个容易处理的小问题。而TCP/IP网络参考模型除了层的划分更加简单,基本内容是与OSI模型相同的。实际上,OSI模型和TCP/IP模型都是在描述网络通信的过程:客户端发送的数据从顶层到底层经过层层“打包”之后传输给服务器,服务器再将数据从底层到顶层进行层层“拆包”最终获取数据。OSI模型和TCP/IP模型的图例如下:
目前通用的是TCP/IP四层模型(Internet使用的就是TCP/IP模型)。其中:
- 网络接口层作为最底层,通常不用考虑
- Java网络编程主要是结合多线程、IO流和网络层/传输层进行开发
- 框架技术主要用于应用层开发(框架已经将多线程、IO流和网络层/传输层进行了封装)
二、IP地址与端口号
想要进行客户端与服务器的交互,前提条件就是要先知道两项关于服务器的信息:它在哪里以及用哪个端口来收发数据,也就是IP地址与端口号(它们属于网络层)。
在Internet网络上存在着数以亿计的计算机,每一台计算机都使用网络为其分配的Internet地址代表自己,这个地址就是IP地址,IP地址是唯一的!由于现在网络设备太多,造成IP地址资源紧张,于是就出现了外网IP和内网IP。通常只为某个路由器分配一个外网IP,再为连接此路由器的所有设备分配一个动态的内网IP
。通过使用NAT(Network Address Translation,网络地址转换)技术可以转换内网IP和外网IP,从而可以节省IP资源。目前IP地址使用四个字节的十进制数来表示,称为IPv4。目前人们正在试验使用16个字节来表示IP地址,这就是IPv6。注:IP地址指明了节点被分配到的地址,MAC地址指的是网卡所属的固定地址,一般不会更改。
端口号则是用于标识进程的逻辑地址,一个指定的端口不能被多个进程共用!!如果没有端口号,服务器就无法分辨客户端要连接到哪个应用程序。一个IP地址有65536个端口可用(0~65535),其中0~1023已经被保留给特定的进程(比如HTTP的端口号是80)。顺便一提,防火墙的原理就是禁用某端口~
三、传输协议
传输层中常见的传输协议有TCP协议(Transmission Controll Protocol,传输控制协议)和UDP协议(User Datagram Protocol,用户数据报协议)。TCP协议和UDP协议的区别为:
- TCP协议需要建立连接,是可靠协议;UDP协议将数据、源和目的地封装成数据报,不需要建立连接,是不可靠协议
- TCP协议可以进行大量的数据传输;UDP协议的每个数据报大小必须在64k之内
- TCP协议需要建立连接,速度较慢;UDP协议不需要建立连接,速度较快
比如QQ使用的就是UDP协议,对方不在线也可以发信息。