Java基础(十七)-套接字、网络模型、UDP、TCP
套接字
实际上是一套用于网络通信的API---本质上是一套基于网络传输数据的流
IP地址---IPv4---由四组数组成的IP地址,每组数的范围在0~255之间---IPv6
端口---用于和外界进行信息交互的媒介--- 0~65535---其中0~1024已经被计算机内部以及一些常用应用占用
DNS服务器---将域名解析为对应的IP地址
网络七层模型
模型优点
- 减轻问题的复杂程度,一旦网络发生故障,可迅速定位故障所处层次,便于查找和纠错;
- 在各层分别定义标准接口,使具备相同对等层的不同网络设备能实现互操作,各层之间则相对独立,一种高层协议可放在多种低层协议上运行;
- 能有效刺激网络技术革新,因为每次更新都可以在小范围内进行,不需对整个网络动大手术;
- 便于研究和教学。
UDP
基于流的。不需要建立连接,不可靠。传输速度比较快,会对数据进行封包,每个包不超过64k。适用与一些要求速度而不要求可靠性的场景。
发送端:
1. 创建套接字对象
2. 准备数据包,绑定要发送的地址
3. 发送数据
4. 关流
接收端:
1. 创建套接字对象,绑定端口号
2. 准备数据包
3. 接收数据
4. 关流
5. 将数据从数据包解析出来
TCP
基于流的。建立连接,经过三次握手,可靠。传输速度相对较慢,理论上不限制数据大小。适用于要求可靠性而不要求速度的场景。
客户端:
1. 创建客户端套接字对象
2. 发起连接,绑定连接地址
3. 获取输出流,写出数据
4. 通知服务器端数据写出完毕
5. 关流
服务器端:
1. 创建服务器端套接字对象,绑定端口号
2. 接受连接,获取一个Socket对象
3. 获取输入流,读取数据
4. 通知客户端数据已经读取完毕
5. 关流
注意:receive/connect/accept/read/write都会产生阻塞
面试题:TCP建立连接三次握手和释放连接四次握手
资料链接:https://blog.****.net/guyuealian/article/details/52535294