问题:
一.TCP、UDP区别
- TCP面向连接,通过三次握手建立连接,四次挥手接除连接;UDP是无连接的,即发送数据之前不需要建立连接,这种方式为UDP带来了高效的传输效率,但也导致无法确保数据的发送成功。
- TCP是可靠的通信方式。通过TCP连接传送的数据,TCP通过超时重传、 数据校验等方式来确保数据无差错,不丢失,不重复,且按序到达;而UDP由于无需连接的原因,将会以最大速度进行传输,但不保证可靠交付,也就是会出现丢失、重复等等问题。
- TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流,由于连接的问题,当网络出现波动时,连接可能出现响应问题;UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低。
- 每一条TCP连接只能是点到点的;而UDP不建立连接,所以可以支持一对一,一对多,多对一和多对多的交互通信,也就是可以同时接受多个人的包。
- TCP需要建立连接,首部开销20字节相比8个字节的UDP显得比较大。
TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道。
二.网络分层模型
三.三次握手、四次挥手
三次握手原理:
第1次握手:客户端发送一个带有SYN(synchronize)标志的数据包给服务端;
第2次握手:服务端接收成功后,回传一个带有SYN/ACK标志的数据包传递确认信息,表示我收到了;
第3次握手:客户端再回传一个带有ACK标志的数据包,表示我知道了,握手结束。
其中:SYN标志位数置1,表示建立TCP连接;ACK标志表示验证字段。
四次挥手原理:
第1次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态;
第2次挥手:服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态;
第3次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态;
第4次挥手:客户端收到FIN后,客户端t进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,服务端进入CLOSED状态,完成四次挥手。
其中:FIN标志位数置1,表示断开TCP连接。
四.编写流程
1.UDP
服务器端(流程):
①创建服务器 DatagramSocket类 +指定端口 (定义服务器端的监听端口)
②准备接收容器 字节数组 +封装成DatagramPacket数据报 (准备容器接收数据)
③接收数据
④分析数据
⑤释放资源
客户端(流程):
①创建客户端 DatagramSocket类 +指定端口 (定义客户端的监听端口)
②准备数据 字节数组
③封装成数据包 需要指定包发送的地址+端口 即服务器地与端口 (打包要发送的数据)
④发送数据
⑤释放资源
2. TCP
服务器端:
①创建服务器 指定端口
创建服务器ServerSocket,在创建时,定义ServerSocket的监听端口(在这个端口接收客户端发来的消息!)
②等待客户端连接
ServerSocket调用accept()方法,使之处于阻塞状态
③分析接收数据
利用Socket进行接收和发送数据
客户端:
①连接服务器: 创建客户端 +指定服务器地址 +端口
创建客户机Socket,并设置服务器的ip及端口,客户机发出连接请求,建立连接。
②发送数据
通过Socket发送数据,和接收数据