计算机网络基本概念<三>UDP和TCP协议详解_udp需要知道对方ip地址吗-程序员宅基地

技术标签: udp  网络  # 网络  网络协议  tcp/ip  计算机网络  

目录

谈谈传输层:

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区别

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_52328493/article/details/127423324

智能推荐

FastDFS分布式文件系统(1),成功入职网易月薪35K-程序员宅基地

文章浏览阅读925次,点赞27次,收藏9次。在这个部分总结了2019年到目前为止Java常见面试问题,取其面试核心编写成这份文档笔记,从中分析面试官的心理,摸清面试官的“套路”,可以说搞定90%以上的Java中高级面试没一点难度。本节总结的内容涵盖了:消息队列、Redis缓存、分库分表、读写分离、设计高并发系统、分布式系统、高可用系统、SpringCloud微服务架构等一系列互联网主流高级技术的知识点。(上述只是一个整体目录大纲,每个点里面都有如下所示的详细内容,从面试问题——分析面试官心理——剖析面试题——完美解答的一个过程)

AI决策的解构与实践:初探可解释性技术(XAI)-程序员宅基地

文章浏览阅读8.7k次,点赞71次,收藏47次。可解释人工智能(Explainable Artificial Intelligence, XAI)是指智能体以一种可解释、可理解、人机互动的方式,与人工智能系统的使用者、受影响者、决策者、开发者等,达成清晰有效的沟通,以取得人类信任,同时满足监管要求。可解释性AI旨在提高人工智能系统的透明度和可理解性,使人们更好地理解AI的决策过程和原理。换言之,它追求AI决策背后的逻辑可被人理解,而非像黑盒子一样难以穿透。我们应当认识到可解释性AI的重要性。

【深度学习】常见的神经网络层(上)-程序员宅基地

文章浏览阅读1.1w次,点赞137次,收藏241次。在深度学习中常见的神经网络层的讲解_神经网络层

阿里云服务器---排查挖矿病毒-程序员宅基地

文章浏览阅读4k次,点赞4次,收藏13次。1.背景记录一次排查挖矿病毒的过程,其实都是按照阿里云官方教程操作,其中有些操作命令需要重点记录下,为后面生产环境做铺垫学习。2.现象近期测试服务器有黑客通过redis的6379端口入侵,然后阿里云发送报警信息,然后登录控制台发现以下报警信息:3.恶意文件删除原先还担心 /etc/sysguard 是不是系统自带的,后来,检查看了下其他机器/etc目录下,都无此文件。遂放心...

Springboot集成Mybatis的两种映射方式_springboot mybatis 映射列-程序员宅基地

文章浏览阅读1.4k次。1、开启映射扫描1)在dao/mapper映射接⼝上添加@Mapper注解开启扫描 注:这种方式需要在每个接口上都添加此注解,有些麻烦2)在⼊⼝程序(包含main⽅法的java类)上添加@MapperScan("映射接口所在 包")注解扫描 注:此方法⼀劳永逸,只需要配置⼀次,后⾯面的接口上都不需要添加@Mapper注 解到此配置完成。可以直接在接口上写sql2.2..._springboot mybatis 映射列

随便推点

DecimalFormat的用法 Java小数(float、dobule)格式化_decimalformat 转flot-程序员宅基地

文章浏览阅读849次。DecimalFormat的用法 Java 浮点数 Float Double 小数 格式化 保留小数位后几位等 1 DecimalFormat df = new DecimalFormat(); 2 double data = 1234.56789; 3 System.out.println("格式化之前的数字: " _decimalformat 转flot

pmp-关键路径法之顺推和逆推-程序员宅基地

文章浏览阅读9.2k次。下图是系统集成项目管理工程师2019年上半年下午的案例题,这里用来解析关键路径法的顺推和逆推备注:因为软考的项目管理考纲是采用PMP的教材,所以这里的解析是通用的专业术语解释:1,顺推,从A推到ID前面的有B,CB的最早结束时间为11,C的最早结束时间为13所以D的最早开始时间为13(取最大的),D的最早结束时间为13+7=20H前面的有D,E,FD的最早结...

wordpress 显示文章日期-程序员宅基地

文章浏览阅读168次。【代码】wordpress 显示文章日期。

【C语言-4】C语言程序开发步骤,从编码到运行_c语言程序编码运行,或其它语言开发工具、开发环境的应用与开发-程序员宅基地

文章浏览阅读4.1k次,点赞2次,收藏7次。系列文章目录文章目录前言1、C语言程序开发的步骤2、代码编辑(俗称写代码)3、编译及链接4、修改代码5. 调试及测试前言一步步,教你编写一个最简单的C语言程序,让你了解C语言是怎么样真正运行的。(演示在windows 10环境下的操作步骤。)1、C语言程序开发的步骤现在你肯定迫不及待地想要开始写程序了。这一节,我们来聊聊怎样把程序写出来,如何让它能够被计算机所理解,又怎样让它按照我们想要的效果运行。要让C语言代码成功运行,并达到预想的效果,一般需要经过以下步骤:代码编辑。编译及链接。_c语言程序编码运行,或其它语言开发工具、开发环境的应用与开发

Sicily 1345 能量项链_134sicily-程序员宅基地

文章浏览阅读778次。ConstraintsTime Limit: 1 secs, Memory Limit: 32 MB Description在Mars星球上,每个Mars人都随身佩带着一串能量项链。在项链上有N颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是Mars人吸收能_134sicily