(学习笔记-TCP基础知识)TCP与UDP区别

UDP

UDP不提供复杂的控制机制,利用IP提供面向[无连接]的通信服务。

UDP协议非常简单,头部只有8个字节(位),UDP的头部格式如下:

  • 目标和源端口:主要是告诉UDP协议应该把报文发给哪个进程
  • 包长度:该字段保存了UDP首部的长度跟数据的长度之和
  • 校验和:提供可靠的UDP首部和数据而设计,防止收到网络传输中受损的UDP包

TCP

TCP是面向连接的、可靠的、基于字节流的传输层通信协议

TCP的头部格式大概如下:


区别

 1. 连接

  • TCP是面向连接的传输层协议,传输数据前要先建立连接
  • UDP是不需要连接,即刻传输数据。

2. 服务对象

  • TCP是一对一的两点服务,即一条连接只有两个端点
  • UDP支持一对一、一对多、多对多的交互通信

3. 可靠性

  • TCP是可靠交付数据的,数据可以无差错、不丢失、不重复、按序到达
  • UDP是尽最大努力交付,不保证可靠交付数据。但是我们可以基于UDP传输协议实现一个可靠的传输协议,比如QUIC协议

4. 拥塞控制、流量控制

  • TCP有控拥塞控制和流量控制机制,保证数据传输的安全性
  • UDP则没有,即使网络非常拥堵,也不会影响UDP的发送速率

5. 首部开销

  • TCP首部长度较长,会有一定的开销,首部在没有使用[选项]字段的时候是20个字节,如果使用了会更长
  • UDP首部长度只有8个字节,并且是固定不变的,开销较小

6. 传输方式

  • TCP是流式传输、没有边界,但保证顺序和可靠
  • UDP是一个包一个包的发送,是有边界的,但可能会丢包和乱序。

7. 分片不同

  • TCP的数据大小如果大于MSS大小,则会在传输层进行分片,目标主机收到后,也同样在传输层组装TCP数据包,如果中途丢失了一个分片,只需要传输丢失的这个分片。
  • UDP的数据大小如果大于MTU大小,则会在IP层进行分片,目标主机收到后,在IP层组装完数据。

应用场景

由于TCP是面向连接,能保证数据的可靠性交付,经常用于:

  • FTP文件传输
  • HTTP/HTTPS

由于UDP面向无连接,它可以随时发送数据,再加上UDP本身的处理简单高效,因此经常用于:

  • 包总量较少的通信,如DNS、SNMP
  • 视频、音频等多媒体通信
  • 广播通信

问题

1. 为什么UDP头部没有[首部长度]字段,而TCP头部有[首部长度]字段呢?

原因:TCP有可变长的[选项]字段,而UDP头部长度是不会变化的,无需多一个字段去记录UDP的首部长度。

2. TCP和UDP可以使用同一个端口吗?

可以

在数据链路层中,通过MAC地址来寻找局域网中的主机。在网络层中通过IP地址来寻找网络中互连的主机或路由器。在传输层中,需要通过端口号进行寻址,来识别统一计算机中同时通信的不同应用程序。

所以,传输层的端口号的作用是为了区分同一个主机上不同应用程序的数据包。

传输层有两个传输协议分别是TCPUDP,在内核中是两个完全独立的软件模块。

当主机收到数据包后,可以在IP包头的[协议号]字段知道该数据包是TCP/UDP,所以可以根据这个信息确定送给哪个模块(TCP/UDP)处理,送给TCP/UDP模块的报文根据[端口号]确定送给哪个应用程序处理。

因此,TCP/UDP各自的端口号也相互独立,如TCP有一个80的端口号,UDP也可以有一个80的端口号,并不冲突。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/28512.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

行为式验证码(成语点选)(C#版和Java版)

一、先看效果图 二、背景介绍 图形验证码网上有挺多,比如:网易易盾、腾讯防水墙、阿里云验证码等等。参考了一下,自己实现了一个简单的成语点选的模式。 三、实现思路 1.选择若干张图片(这里使用的是320x160的尺寸)…

HTPP入门教程||HTTP 状态码||HTTP content-type

HTTP 状态码 当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含 HTTP 状态码的信息头(server header)用以响应浏览器的请求。 HTTP 状态码的英文为…

Nacos服务注册和配置中心(Config,Eureka,Bus)2

Nacos数据模型 Nacos领域模型,Namespace命名空间、Group分组、集群这些都是为了进行归类管理,把服务和配置文件进行归类,归类之后就可以实现一定的效果,比如隔离。对于服务来说,不同命名空间中的服务不能够互相访问调用 N…

tql!一款Go编写的RAT主机管理工具

工具介绍 这是一款使用go编写的RAT主机群管理工具,已具备命令控制台、文件管理、屏幕截屏、开机启动服务、NPS代理等功能。 流量:支持TCP,UDP/KCP协议,通讯默认使用tls证明书进行加密 关注【Hack分享吧】公众号,回复…

Openlayers layer 基础及重点内容讲解

图层就像是含有文字或图形等元素的图片,一张张按顺序叠放在一起,组合起来形成页面的最终效果。 在 openlayers 中,图层是使用 layer 对象表示的,主要有 WebGLPoints Layer、热度图(HeatMap Layer)、图片图层(Image Layer)、切片图层(Tile Layer)和 矢量图层(Vector Layer…

Spring Boot环境配置Envirnoment

Srping Boot 中我们使用 EnvironmentAware 注入 Environment 对象后,可以在 Environment 中获得系统参数,命令行采参数,文件配置等信息。 Environment 是如何存储,管理这些值的呢?变量发生冲突怎么办呢?我…

Python生成exe文件运行出现黑框闪退如何查看运行bug?

cmd进行回车 第一:进入到可执行exe文件目录,如下图所示 第二:输入可执行文件名,然后就会出现报错提示

Java开发 - 深入理解Redis哨兵机制原理

前言 Redis的主从、哨兵模式、集群模式,在前文中都已经有了详细的搭建流程,可谓是手把手教程,也得到了很多朋友的喜欢。由于前文偏向于应用方面,就导致了理论知识的匮乏,我们可能会用了,但却不明所以&…

自定义实现list及其功能

#pragma once #include <iostream> #include <assert.h> using namespace std;namespace test {//******************************设置结点******************************template<class T>struct list_node{T _data;list_node<T>* _next;list_node&l…

ES6 Generator和Promise

目录 Generator 如何创建Generator函数 ? 模拟发起异步请求 Promise 实例化 实例方法 工厂函数 静态方法 Promise.all([p1,p2,....]) Promise.race([p1,p2,....]) Promise.any([p1,p2,....]) Promise.allSettled([p1,p2,....]) Generator Generator是ES6提供的一种…

云计算与大数据——MPI集群配置

什么是MPI集群&#xff1f; MPI&#xff08;消息传递接口&#xff09;是一种用于编写并行程序的标准&#xff0c;它允许在多个计算节点上进行通信和协作。MPI集群配置是指在一个或多个计算节点上设置MPI环境以实现并行计算。 MPI集群配置的步骤&#xff1a; 硬件选型&#x…

C++--day3(内联函数、结构体、类、封装、this、构造函数、析构函数)

#include <iostream>using namespace std;class My_stack { private:int *ptr; //指向堆区空间int top; //记录栈顶元素int size; public://有参构造My_stack(int size):ptr(new int[size]),top(-1){this->sizesize;cout<<"My_stack::有参构造&…