Java基础(十七)-套接字、网络模型、UDP、TCP

套接字

实际上是一套用于网络通信的API---本质上是一套基于网络传输数据的流

IP地址---IPv4---由四组数组成的IP地址,每组数的范围在0~255之间---IPv6

端口---用于和外界进行信息交互的媒介--- 0~65535---其中0~1024已经被计算机内部以及一些常用应用占用

DNS服务器---将域名解析为对应的IP地址

网络七层模型

Java基础(十七)-套接字、网络模型、UDP、TCP

详细介绍

Java基础(十七)-套接字、网络模型、UDP、TCP

模型优点

  1.  减轻问题的复杂程度,一旦网络发生故障,可迅速定位故障所处层次,便于查找和纠错;    
  2. 在各层分别定义标准接口,使具备相同对等层的不同网络设备能实现互操作,各层之间则相对独立,一种高层协议可放在多种低层协议上运行;    
  3. 能有效刺激网络技术革新,因为每次更新都可以在小范围内进行,不需对整个网络动大手术;  
  4. 便于研究和教学。

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