计算机网络基本概念<三>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

智能推荐

NumberFormat(数字格式化类)-程序员宅基地

文章浏览阅读3.7k次。前言在工作当中,可能经常会遇到比如数据保留两位小数显示,去除后面多余0,按指定格式输出数据这种需求,有时隔得时间久了也难免会忘记,所以就稍作总结方便今后查看,同时最后提供一个工具类方便今后使用。NumberFormatNumberFormat 是所有数值格式的抽象基类。此类提供格式化和解析数值的接口。NumberFormat 还提供了一些方法来确定哪些语言环境具有数值格式,以及它们的名..._numberformat

APP专项测试-程序员宅基地

文章浏览阅读1.4k次。安装、卸载、更新/升级、兼容性、稳定性、性能测试、弱网测试、交互性测试、安全性测试等。 1.1 、安装\卸载\更新\升级? 1.1.1安装、卸载、更新、升级的测试点? 安装:需要考虑的测试点有:各个手机市场安装、覆盖安装、卸载安装、版本回退、内存不足等其他异常场景等。 1、正常安装测试,预期:安装成功,安装完成后,可以正常启动。 2、第三方工具安装,例:豌豆荚、91助手等,预期:例如豌豆荚、91助手等是否可以正常安装卸载,安装完成后是否可以正常启动..._app专项测试

使用PyQt5实现自动化测试,太便利了-程序员宅基地

文章浏览阅读4.7k次。关注、星标公众号,直达精彩内容公众号:技术让梦想更伟大作者:Boudewijn Rempt 和 David Mertz最近在使用pyqt写个自动化测试软件,对python和Qt都需要有一..._python qyqt5执行测试gui显示并记录日志

python偶数个数_Eviews、Stata、Python、Matlab、R描述性分析教程汇总-程序员宅基地

文章浏览阅读224次。1描述统计分析简介基本统计分析,又叫描述性统计分析,描述性统计主要包括数据的集中趋勢分析、数据的离散程度分析、频数分布分析等。通常对收集来的数据进行直接的频率、频数等描述,描述性统计分析一般对样本的最小值、最大值、平均值、标准偏差等进行分析,这些数据有助于了解样本数据特征,能够清晰的看到各个统计量的分布情况。中位数如果有一组数据,把它按从小到大的顺序排列,将这一数列等分成两份,这个分位数..._eviewa中偶数怎么表示

【重要】Nand Flash基础知识与坏块管理机制的介绍_nandflash坏块管理-程序员宅基地

文章浏览阅读2.1k次。Flash名称的由来,Flash的擦除操作是以block块为单位的,与此相对应的是其他很多存储设备,是以bit位为最小读取/写入的单位,Flash是一次性地擦除整个块:在发送一个擦除命令后,一次性地将一个block,常见的块的大小是128KB/256KB,全部擦除为1,也就是里面的内容全部都是0xFF了,由于是一下子就擦除了,相对来说,擦除用的时间很短,可以用一闪而过来形容,所以,叫做Flash Mem。出现坏块,则将数据顺序写入下一个好块。相对应的是,所有正常的块,好的块,里面所有数据都是0xFF的。_nandflash坏块管理

Java零基础可以直接入门spring boot吗?_不会java学springboot-程序员宅基地

文章浏览阅读3.7k次。不推荐。一般学习的路线是java基础,然后数据库,接着是spring,了解spring的核心思想,再学springmvc,之后才学springboot。什么是Spring BootSpring Boot 是 Spring 开源组织下的一个子项目,也是 Spring 组件一站式解决方案,主要是为了简化使用 Spring 框架的难度和简化 Spring 框架复杂的XML配置。使用 Spring Boot 可以很容易创建一个独立运行的、基于 Spring 的生产级应用程序,而且Spring Boot 对 S_不会java学springboot

随便推点

cs224n课后作业_cs224n 2018-19: homework 4-程序员宅基地

文章浏览阅读1w次,点赞28次,收藏101次。推荐:cs224n_exercise1. 作业1[NLP] cs224n-2019 Assignment 1 Exploring Word Vectors2019-CS224n-Assignment1_cs224n 2018-19: homework 4

csdn-爬虫 ip代理_爬虫 阿里云 ip代理-程序员宅基地

文章浏览阅读450次。1 .微信小程序开发官方文档 2 .CSDN博文精选 微信小程序全方位解析 3 .一名Android开发者的微信小程序填坑之路(1) 4 .微信直播在小程序上使用 5 .Android 实现微信,QQ的程序前后台切换:back键切换后台;点击通知栏恢复前台。 6 .「微信小程序」有哪些冲击与机会? 7 .微信小程序简单教程 8 .微信小程序入门教程+案例demo 9 .目前为止最全_爬虫 阿里云 ip代理

java/php/node.js/python基于微信小程序的网络安全普法小程序【2024年毕设】_网安普法微信小程序设计-程序员宅基地

文章浏览阅读57次。springboot基于微信小程序的大学篮球协会管理系统。springboot校园餐厅点餐微信小程序——“易小食”开发软件:eclipse/myeclipse/idea。springboot具有智能推荐功能的外卖点餐系统。springboot基于微信小程序的反诈科普平台。springboot校园互助性小程序的设计与开发。springboot公交线路查询系统的设计与实现。springboot微信小程序的校园淘交易平台。springboot中文学习系统的设计与实现。springboot宠物商城的设计与实现。_网安普法微信小程序设计

LNK1101: MSPDB140.DLL 的版本不正确_link : fatal error lnk1101: mspdb140.dll-程序员宅基地

文章浏览阅读4k次。在 Windows 10 上使用 VS2015 的 nmake 编译 OpenSSL_1_1_1 的时候,老是出现这个问题: 正在创建库 libcrypto.lib 和对象 libcrypto.expLINK : fatal error LNK1101: MSPDB140.DLL 的版本不正确;请重新检查此产品的安装NMAKE : fatal error U1077: “link”: ..._link : fatal error lnk1101: mspdb140.dll

我的创作纪念日---365天的创作之旅:一个IT作者的成长与收获-程序员宅基地

文章浏览阅读78次。今天,我有幸分享一段特殊的经历,一个与创作相关的故事。还记得那个平凡的日子,2022年12月08日,是我初次踏入创作之旅的起点。那一天,我撰写了第一篇技术博客:“输入当天日期,求第二天的日期”。当时,我的动机只是希望记录一些技术经验,或者怀揣成为一名专业IT作者的渴望。然而,无论初衷是什么,那个瞬间,我已经启程,踏上了这趟创作之旅。

从一个Java对象看JVM内存模型及对象生命周期_一个对象在jvm种的内存生命周期-程序员宅基地

文章浏览阅读251次。【JVM系列4】new Object()到底占用几个字节,看完这篇就彻底明白了package com.zwx.jvm;public class HeapMemory { private Object obj1 = new Object(); public static void main(String[] args) { Object obj2 = new Object(); }}上面的代码中,obj1 和obj2在内存中有什么区别?答: 这个obj_一个对象在jvm种的内存生命周期

推荐文章

热门文章

相关标签