(学习笔记-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的端口号,并不冲突。

相关推荐
克里斯蒂亚诺更新6 小时前
ruoyi角色权限的对应关系
笔记
a1117769 小时前
2FA 验证码生成器(github登录验证 app)
笔记·学习
我的xiaodoujiao9 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
破碎的南瓜10 小时前
sqli--sql注入过关笔记(1,2,3,4,5,9)
数据库·笔记·sql
你想知道什么?11 小时前
线性回归-学习笔记
笔记·学习·线性回归
鱼毓屿御11 小时前
从「只会聊」到「边想边做」的跃迁
前端·学习·react.js
谙弆悕博士11 小时前
系统集成项目管理工程师教程(第3版)笔记——第17章:法律法规和标准规范
笔记·职场和发展·学习方法·业界资讯·软考·法律·法规
AOwhisky12 小时前
Python 学习笔记(第十五期)——运维自动化(下·后篇):堡垒机实战——paramiko高阶篇
运维·python·学习·云原生·自动化·运维开发
谙弆悕博士13 小时前
系统集成项目管理工程师教程(第3版)笔记——第4章:信息系统架构
笔记·系统架构·项目管理·创业创新·学习方法·业界资讯·物理
minglie113 小时前
zynq中linux系统的自动登录和免密登录
学习