网络通讯中的各要素
IP地址:一组二进制数字,用于给每一台连入互联网的主机分配一个逻辑地址。IP地址分为4段,每段一个字节(8个二进制位)。
IP端口:一个数字编号,范围0~65535,用于区分同一IP地址上不同的服务,使不同端口上的通信不相互干扰。
传输协议:通讯规则。
网络模型中各层的功能及协议
java中的UDP传输:
1.UDP协议传输的数据被称为数据报,被包装到数据报包中,同时被包装到数据报包中的还有数据要被发送到的主机地址和端口号;
2.数据报包中的数据大小被限制在64k内;
3.面向无连接,是不可靠的协议:
4.传输速度快。
UDP传输的数据报是字节数组(byte[] ),要传送到的目的地主机地址是InetAddress类对象,端口号是int值,由这些参数包装后的UDP数据报包是DatagramPacket对象(DatagramPacket的构造方法: DatagramPacket(byte[] b,int length,InetAddress address,int port) )。DatagramPacket的发送和接收都是由绑定到特定端口号(int 值)的数据报套接字(DatagramSocket)对象负责的,也就是说发送方和接收方都要创建DatagramSocket对象,该对象绑定了端口号,其无参构造方法将会绑定一个任意可用的端口,传入int值的构造方法将会尝试绑定该int值对应的端口。
然后,InetAddress对象的构造方法:
1)由原始IP地址创建(byte[] ) ——static InetAddress getByAddress(byte[] addr)
2)由主机名创建(机器名或IP地址的文本表示)—— static InetAddress getByName(String host)
3)由主机名和IP地址创建—— static InetAddress getByAddress(String host,byte[] addr)
4)获取本机InetAddress—— static InetAddress getLocalHost()
InetAddress的其它方法:
byte[] getAddress()获取此InetAddress对象的原始IP地址
String getHostName()获取此IP地址的主机名
String getHostAddress()获取此IP地址的字符串
DatagramSocket发送和接收数据包的方法:
void send(DatagramPacket p)发送数据包
void receive(DatagramPacket p) 接收数据包,此方法是阻塞式方法,没有接收到数据包就等待
java中的TCP传输:
1.建立连接,形成传输数据的通道;
2.在连接中进行大数据量传输;
3.建立连接,是可靠协议;
4.必须建立连接,效率会稍低。
TCP传输建立连接的过程是一方(客户端)发起连接,另一方(服务端)等待被连接,等待被连接的一方需要先建立。具体过程是:1.服务端建立服务端套接字(ServerSocket)以将服务绑定到端口(无参创建就绑定到任意可用的端口,传入int值端口号就尝试绑定到特定端口);2.服务端套接字调用accept()方法,使服务端进入等待连接状态(该方法是阻塞式方法);3.在服务端处于等待状态的情况下,客户端建立客户端套接字,该套接字构造过程传入服务端地址和服务端套接字端口号,该套接字一建立就向服务端发起连接并等待服务端的回馈信息,服务端收到该连接请求后其accept()方法返回客户端的套接字,并向客户端反馈,服务端程序继续进行,客户端收到反馈信息后继续执行,如果客户端套接字建立并向服务端发起请求后,服务端并未处于等待状态,客户端就会抛出异常。
TCP传输信息的过程:
当服务端和客户端的连接建立完成后,都可以从自己的Socket对象中获得输入流和输出流,一方输出流的写入方法写入的数据流向的正是另一方输入流读取方法将要读取的内容。
Socket类的获取输入流和输出流对象的方法:
InputStream getInputStream()
OutputStream getOutputStream()
域名解析
主机名是如何被解析为IP地址的:
首先在本地的系统配置文件中查找与该主机名匹配的IP地址,如果本地未登记该主机名,就到网络DNS服务器上去查找与该主机名相匹配的IP地址,再找不到就会出现找不到该主机地址。