目录
UDP和TCP都是传输层的重要协议,也是学习网络的必备内容了,接下来这篇我们就详细分析一下这两者的内容,以及这两者的区别。
传输层是TCP/IP协议五层模型中的第四层。它提供了应用程序
间的通信,它负责数据能够从发送端传输到接收端。
其功能包括:一、格式化信息流;二、提供可靠传输。
UDP(UserDatagramProtocol)是一个简单的面向消息的传输层协议。
UDP 是无连接的,知道对方的IP和端口号直接进行传输就行,不需要建立连接
UDP 不可靠,没有任何可靠机制,即便发送失败也不会返回任何错误信息
UDP 面向数据报,发多少就收多少,原样发送,交给UDP的报文,UDP不会拆分或合并
UDP 没有拥塞控制,网络出现的拥塞不会使源主机的发送速率降低。
UDP 支持一对一、一对多、多对一和多对多的交互通信
缓冲区:只有接收缓冲区,没有发送缓冲区,接收缓冲区满了,多的直接丢弃
首部由四个字段构成,每个字段都是 2byte
UdpServer
- package echo;
-
- import java.net.*;
- import java.util.Arrays;
- import java.io.IOException;
-
- public class UdpServer {
- private static int PORT = 2222;
- private DatagramSocket socket;
-
- public UdpServer() throws SocketException {
- socket = new DatagramSocket(PORT);
- }
-
- public void start() throws IOException {
- byte[] bytes = new byte[2048];
- DatagramPacket receivePacket = new DatagramPacket(bytes, bytes.length);
- socket.receive(receivePacket);
- System.out.printf("ClientAddress: %s\nClientPort: %d\n",
- receivePacket.getAddress(),receivePacket.getPort());
- System.out.println("ClientData:"+ new String(receivePacket.getData(),"utf-8"));
- DatagramPacket sendPacket = process(receivePacket);
- socket.send(sendPacket);
- }
- public DatagramPacket process(DatagramPacket packet){
- DatagramPacket packet1 = new DatagramPacket(packet.getData(),packet.getLength(),
- packet.getSocketAddress());
- return packet1;
- }
-
- public static void main(String[] args) throws IOException {
- UdpServer server = new UdpServer();
- server.start();
- }
- }
UdpClient
- package echo;
-
- import java.net.*;
- import java.io.IOException;
- import java.util.Scanner;
-
- public class UdpClient {
- public void start() throws IOException {
- DatagramSocket socket = new DatagramSocket();
- byte[] bytes = new byte[2048];
- System.out.println("请输入你想发送给服务器的信息:");
- Scanner scanner = new Scanner(System.in);
- String str =scanner.nextLine();
- bytes = str.getBytes();
- DatagramPacket sendPacket = new DatagramPacket(bytes,bytes.length,
- new InetSocketAddress("localhost",2222));
- socket.send(sendPacket);
- DatagramPacket receivePacket = new DatagramPacket(new byte[2048],2048);
- socket.receive(receivePacket);
- System.out.println(new String(receivePacket.getData(),"utf-8"));
- }
-
- public static void main(String[] args) throws IOException {
- UdpClient client = new UdpClient();
- client.start();
- }
- }
TCP :有连接、可靠传输、面向字节流、全双工
保证可靠性:确认应答、超时重传、连接管理(三次挥手 四次握手)
提高效率:滑动窗口、流量控制、拥塞控制