计算机网络基本概念<三>UDP和TCP协议详解

目录

谈谈传输层:

UDP协议

首部说明

回显服务器代码案例 echoServer

TCP协议

TCP和UDP区别


UDP和TCP都是传输层的重要协议,也是学习网络的必备内容了,接下来这篇我们就详细分析一下这两者的内容,以及这两者的区别。

谈谈传输层:

传输层是TCP/IP协议五层模型中的第四层。它提供了应用程序间的通信,它负责数据能够从发送端传输到接收端。

其功能包括:一、格式化信息流;二、提供可靠传输

UDP协议

UDP(UserDatagramProtocol)是一个简单的面向消息的传输层协议

  • UDP 是无连接的,知道对方的IP和端口号直接进行传输就行,不需要建立连接

  • UDP 不可靠,没有任何可靠机制,即便发送失败也不会返回任何错误信息

  • UDP 面向数据报,发多少就收多少,原样发送,交给UDP的报文,UDP不会拆分或合并

  • UDP 没有拥塞控制,网络出现的拥塞不会使源主机的发送速率降低。

  • UDP 支持一对一、一对多、多对一和多对多的交互通信

  • 缓冲区:只有接收缓冲区,没有发送缓冲区,接收缓冲区满了,多的直接丢弃

首部说明

首部由四个字段构成,每个字段都是 2byte

  • 源端口: 源端口号,需要对方回信时选用,不需要时全部置0.
  • 目的端口:目的端口号,在终点交付报文的时候需要用到。
  • 长度:UDP的数据报的长度(包括首部和数据)其最小值为8(只有首部),由于长度只有16位,所有UDP一次能发送的数据最大就是 64K
  • 校验和:检测UDP数据报在传输中是否有错,有错则丢弃。

回显服务器代码案例 echoServer

    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协议

TCP :有连接、可靠传输、面向字节流、全双工

保证可靠性:确认应答、超时重传、连接管理(三次挥手 四次握手)

提高效率:滑动窗口、流量控制、拥塞控制

TCP和UDP区别

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shn!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值