TCP协议与UDP协议
TCP协议在发送端和接收端之间先建立逻辑连接,再传输数据
它提供了两台计算机之间的可靠无差错的数据传输
TCP协议的三次握手
- 第一次握手,客户端向服务端发出连接请求
- 第二次握手,服务端向客户端返回响应,通知接收到了请求信号
- 第三次握手,客户端向服务端发出确认,建立连接
TCP协议的四次挥手
- 第一次挥手,客户端向服务端发送断开连接请求FIN包
- 第二次挥手,服务端向客户端发送确认,断开连接
- 第三次挥手,服务端向客户端发送断开连接请求FIN包
- 第四次挥手,客户端向服务端发送确认,TCP连接彻底断开
UDP协议不需要建立连接,直接将数据源,数据和目的地封装在数据包之中,直接发送
不管服务端是否启动,优点是传输速度快但是不安全,主要用于直播
TCP与UDP之间区别与联系:
- 首先TCP的逻辑通信信道是全双工的可靠信道,而UDP的是不可靠信道
- TCP传输的安全性更高,建立连接之前不传输数据,而UDP的安全性低
- TCP有确认、窗口、重传与拥塞控制机制,但占用系统资源高
- TCP建立连接的时间长,容易被利用,实现DOS、DDOS等攻击
- UDP不需要建立连接,传输速度非常快,但不可靠不稳定,容易丢包
- TCP首部开销20字节,UDP首部开销8字节
ServerSocket类
ServerSocket类可以用于创建服务端,等待客户端Socket类的连接
ServerSocket server = new ServerSocket(port:55665);
常用方法
accept(); 等待客户端的连接,返回的是Socket类
OutputStream getOutputStream(); 返回的是指向通信的另一端点的输出流
InputStream getInputStream(); 返回的是指向通信的另一端点的输入流
void close(); 关闭套接字
Socket类
常用方法与ServerSocket类相差无几,但构造方法中还需要传入目标服务端的ip地址
Socket socket = new Socket(192.168.102.228,55665);
InetAddress类
用于描述ip地址的类,通过getByName的类方法将ip地址转为该类的对象
InetAddress ip = InetAddress.getByName(192.168.102.228);
在UDP协议中,通过数据包DatagramPacket的getAddress方法,可以得到数据包来自哪个ip
在TCP协议中,通过套接字Socket的getInetAddress方法,可以得到套接字连接的ip地址
DatagramSocket类
使用UDP协议的类,数据发送的成功或者失败与数据报无关