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

UDP

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

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

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

TCP

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

TCP的头部格式大概如下:


区别

  1. 连接
  • TCP是面向连接的传输层协议,传输数据前要先建立连接
  • UDP是不需要连接,即刻传输数据。
  1. 服务对象
  • TCP是一对一的两点服务,即一条连接只有两个端点
  • UDP支持一对一、一对多、多对多的交互通信
  1. 可靠性
  • TCP是可靠交付数据的,数据可以无差错、不丢失、不重复、按序到达
  • UDP是尽最大努力交付,不保证可靠交付数据。但是我们可以基于UDP传输协议实现一个可靠的传输协议,比如QUIC协议
  1. 拥塞控制、流量控制
  • TCP有控拥塞控制和流量控制机制,保证数据传输的安全性
  • UDP则没有,即使网络非常拥堵,也不会影响UDP的发送速率
  1. 首部开销
  • TCP首部长度较长,会有一定的开销,首部在没有使用[选项]字段的时候是20个字节,如果使用了会更长
  • UDP首部长度只有8个字节,并且是固定不变的,开销较小
  1. 传输方式
  • TCP是流式传输、没有边界,但保证顺序和可靠
  • UDP是一个包一个包的发送,是有边界的,但可能会丢包和乱序。
  1. 分片不同
  • 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的端口号,并不冲突。

相关推荐
Aphelios3802 小时前
Linux 下 VIM 编辑器学习记录:从基础到进阶(下)
java·linux·学习·编辑器·vim
Best_Me072 小时前
【CVPR2024-工业异常检测】PromptAD:与只有正常样本的少样本异常检测的学习提示
人工智能·学习·算法·计算机视觉
日记成书2 小时前
详细介绍STM32(32位单片机)外设应用
stm32·学习
wanjiazhongqi3 小时前
链表和STL —— list 【复习笔记】
数据结构·c++·笔记·链表
li星野3 小时前
std::thread的同步机制
开发语言·c++·学习
m0_748236583 小时前
本地部署轻量级web开发框架Flask并实现无公网ip远程访问开发界面
前端·tcp/ip·flask
技术小齐3 小时前
网络运维学习笔记 021 HCIA-Datacom新增知识点02 SDN与NFV概述
运维·网络·学习
Pandaconda3 小时前
【Golang 面试题】每日 3 题(六十五)
开发语言·经验分享·笔记·后端·面试·golang·go
im长街4 小时前
Ubuntu22.04 - brpc的安装和使用
学习
知识分享小能手4 小时前
Html5学习教程,从入门到精通,HTML5 简介语法知识点及案例代码(1)
开发语言·前端·javascript·学习·前端框架·html·html5