当前位置: 首页 > news >正文

计算机网络学习笔记:运输层概述UDP、TCP对比

文章目录

  • 一、运输层
    • 1.1、端口号
    • 1.2、发送方的复用
    • 1.3、接收方的分用
  • 二、一次HTTP请求的交互流程
  • 三、TCP、IP协议的对比
    • 3.1、单播,多播,广播的支持
    • 3.2、应用层报文的处理
    • 3.3、可靠传输的支持
    • 3.4、报文首部的区别


一、运输层

  运输层位于网际层之上,应用层之下。(基于四层网络模型)相比于网际层主机到主机之间的数据传输,运输层的主要作用是为运行在不同主机上的应用进程之间提供可靠或不可靠的数据传输服务。(逻辑通信)
  它的核心功能包括:

  1. 进程之间的通信
  2. 复用与分用
  3. 差错检测与纠正,通过校验和机制检测数据在传输过程中是否被损坏。
  4. 流量控制、拥塞控制、可靠传输(只限于TCP)

  TCP和UDP是运输层的两个重要协议。

1.1、端口号

  运行在计算机上的进程,是使用PID进行标识的,在windows下可以通过tasklist命令去查询进程对应的PID。
在这里插入图片描述
  而不同的操作系统,对于PID的格式是不同的:

比较项WindowsLinux
数据类型DWORD(32位无符号整型)pid_t(通常是32位有符号整型)
显示格式十进制整数十进制整数
起始值通常从 4 起(系统保留 0~3)通常从 1 起(PID 1 是 initsystemd
最大值理论上最大值为 2^32 - 1 = 4294967295,但通常远小于此/proc/sys/kernel/pid_max 控制,默认 32768,最大支持到约 4,194,304
查看方式tasklist、任务管理器、Get-Processps, top, htop, cat /proc/<pid>, pidof
PID 是否连续不连续,Windows 的 PID 分配较分散通常近似递增,但在高负载或多线程下也可能跳跃
特殊 PID无 PID=1 等传统意义的“init进程”PID 1 是 init 或 systemd,所有其他进程的祖先进程
支持 PID 回收

  端口号则是屏蔽了不同操作系统之间的PID的区别,以此作为TCP/IP体系的应用进程的标识。端口号的长度为16bit,取值范围为0~65535,端口是运输层的概念,起到连接应用层传输层的作用。相比较于IP,IP标识的是主机,而端口标识的是主机中的应用进程。
  运输层的端口号,又可以进行细分:
在这里插入图片描述
本文图片来源:深入浅出计算机网络 微课视频

1.2、发送方的复用

  复用和分用,也是运输层的两个重要概念,指的是不同的应用层的进程,都可以使用同一个传输层协议传送数据,以及接收方的传输层,在去除报文首部后,可以交付到正确的应用层进程。复用和分用,都可以分为UDP,TCP,IP三种类型,应用层首先根据端口号,将应用报文发送至应用层

  • 应用层进程的应用报文,在运输层被UDP协议封装,称为UDP复用。
  • 应用层进程的应用报文,在运输层被TCP协议封装,称为TCP复用。

  UDP协议封装成的是用户数据报,而TCP协议封装成的是报文段:
在这里插入图片描述

  在网际层使用IP协议统一封装成IP数据报,称为IP复用,IP数据报首部协议的值,用于表示封装的是何种协议数据单元:

  • 6:TCP报文段
  • 17:UDP数据报

在这里插入图片描述

1.3、接收方的分用

  接收方会对于IP数据报进行分用:

  • 如果6 - TCP报文段 交给运输层,由TCP协议进行处理。
  • 如果17 - TCP报文段 交给运输层,由UDP协议进行处理。

在这里插入图片描述
  在运输层,对于TCP和UDP进行各自的分用。根据端口号向上交付给应用层的相应进程。
在这里插入图片描述

二、一次HTTP请求的交互流程

  假设我当前用户PC的IP地址是192.168.0.1,web服务器的域名是www.porttest.com,DNS服务器存储了域名和服务器IP的对应关系。


   DNS服务器是互联网中的一个分布式数据库系统,用于将“人类可读的域名”(如 www.baidu.com)转换为“计算机能识别的 IP 地址”(如 39.156.66.18),DNS服务器的分类:

类型作用举例
本地 DNS 服务器(递归服务器)通常由你的网络提供商或操作系统配置;处理所有域名解析请求114.114.114.114(阿里)、8.8.8.8(Google)
根 DNS 服务器全球仅有13组,指向顶级域服务器无需你手动配置,系统默认递归中用
顶级域 DNS 服务器(TLD)负责 .com.cn.net 等域名后缀的解析指引也由系统递归调用
权威 DNS 服务器真正存储某个域名的 IP 映射关系ns1.baidu.combaidu.com 的权威 DNS

   你在浏览器输入:https://www.baidu.com
   操作系统的步骤如下:

  1. 查询本地缓存有没有 www.baidu.com 的 IP;
  2. 如果没有,问本地 DNS 服务器(如 114.114.114.114);
  3. 本地 DNS 会向根服务器询问 .com ;
  4. 再找 .com 的权威服务器要 baidu.com;
  5. 最终找到 www.baidu.com 的权威服务器,返回它的 IP;
  6. 系统拿到 IP,开始真正访问网页服务器。

  用户输入的是域名,不知道域名对应的真实ip地址是多少,所以需要经过下面的一系列处理:
在这里插入图片描述

  1. 用户在浏览器上输入域名,用户pc中的DNS客户进程,发送一个DNS查询请求报文。查询域名对应的IP地址,具体是使用UDP协议,将请求封装成UDP用户数据报,包含源端口和目标端口:
    • 源端口的值,由系统在短暂端口号中随机选取未被占用的。
    • 目标端口的值,设置成53(DNS服务器进程的熟知端口号)
      在这里插入图片描述
  2. 用户进程将UDP数据报封装成IP数据报,发送给DNS服务器,DNS服务器收到后,进行解析。查询地址,并且发给用户PC响应报文。
    在这里插入图片描述
  3. 用户PC解析响应报文,得到域名对应的IP,然后系统将短暂端口号进行回收。
    在这里插入图片描述
  4. 用户PC向web服务器发出请求报文,HTTP请求报文需要使用TCP协议
  5. web服务器的HTTP服务进程,解析HTTP请求报文的内容,按其要求查找首页内容,返回给用户PC,发送HTTP响应报文,需要用到运输层的TCP协议。
    在这里插入图片描述
  6. 由用户PC中的HTTP客户进程解析http响应报文的内容,并在浏览器上展示。最后回收短暂端口号。

为何查询DNS服务器使用的是UDP协议?
DNS 是一个查询-响应的过程,通常涉及的是短小的数据交换,并且查询本身是非常频繁且大量的。由于 UDP 协议不进行连接建立、状态维护等,响应速度很快,这对于 DNS 查询这样的高频、低延迟应用非常重要。即使某次查询丢失,客户端可以在短时间内重新发送查询请求,而不需要像 TCP 那样进行复杂的重传机制。

三、TCP、IP协议的对比

  首先,从整体上看,UDP是用户数据报协议,TCP是传输控制协议,UDP是无连接的,在传送数据之前,无需创建连接,所以可以随时收发数据。TCP需要通过三报文握手建立连接,四报文挥手释放连接。
在这里插入图片描述

3.1、单播,多播,广播的支持

  • UDP协议支持单播,多播和广播,因为它是无连接的,UDP可以向局域网中的任何其他机器发送单播,广播,多播。
  • TCP仅支持一对一的单播,因为一条 TCP 连接必须绑定在一个源 IP:端口 和 一个目标 IP:端口 上,严格的一对一结构,如果是一对多,则会存在发出一个 TCP 包 → 有多个机器同时返回 ACK的情况,这样会面临很多问题:
    • 如果某个主机挂掉,是中断连接?还是继续维持?
    • 如果一个收到、一个没收到,是重传还是终止?
    • 序列号怎么维护?N 台机器的接收窗口都一样吗?

在这里插入图片描述

3.2、应用层报文的处理

  • UDP:应用层直接将报文发送给运输层的UDP,而UDP要增加一个报文首部,接收方在接收到后,会去掉报文首部,交付给应用层。(保留报文的边界,UDP是面向报文的协议),不会存在半包,粘包的问题。
  • TCP:将应用层交付的报文,看作是字节流进行处理,TCP仅仅将它们编号并且存入当前的发送缓存中,并且构建TCP报文段进行发送。接收方会从接收到的TCP报文段中,取出数据载荷并且存储在接收缓存中,并且将字节交付给应用层,会存在半包,粘包问题。

在这里插入图片描述

3.3、可靠传输的支持

  首先作为TCP,UDP下层的网际层IP协议,提供的是无连接,不可靠的传输。

  • UDP:UDP同样提供给应用层无连接,不可靠的传输,这里的不可靠,体现在UDP检测出错误数据后,就直接丢弃。同时如果发送方的消息,没有路由到接收方,UDP也不会进行处理。
  • TCP:向上层提供了可靠,面向连接的传输,解决误码,丢失,乱序和重复的问题。

在这里插入图片描述

3.4、报文首部的区别

  • UDP的首部信息,主要是标记端口,仅仅占用8个字节。
  • TCP的首部,需要保证可靠传输,流量控制,拥塞控制,比UDP复杂的多,最少20个字节,最大60个字节。
    在这里插入图片描述
http://www.xdnf.cn/news/1033309.html

相关文章:

  • Arduino入门教程​​​​​​​:4、打印字符到电脑
  • 疫菌QBD案例
  • Gartner《Build Scalable Data Products With This Step-by-Step Framework》学习报告
  • Linux系统安装MongoDB 8.0流程
  • 树莓派智能小车红外避障实验指导书
  • 当遇到“提交失败:404”的问题时,通常表明前端请求的URL无法正确匹配到后端的Servlet或资源。
  • 区间合并:区间合并问题
  • 前端与协议
  • 掌握应用分层:高内聚低耦合的艺术
  • 闲鱼与淘宝跨平台运营的自动化趋势
  • java 设计模式_行为型_17观察者模式
  • 【游资悟道】陈小群成长历史与股市悟道心法
  • Java面向对象this关键字和static关键字
  • Python 爬虫入门 Day 3 - 实现爬虫多页抓取与翻页逻辑
  • android关于native中Thread类的使用
  • Linux 系统目录结构概述-linux024
  • Tauri(2.5.1)+Leptos(0.8.2)开发自用桌面小程序
  • 系统设计基本功:理解语义
  • 【Linux】Linux多路复用-epoll
  • MapReduce技术详解
  • 软件工程的相关名词解释
  • 【力扣 简单 C】141. 环形链表
  • Spring Data JPA全面指南
  • Docker 在尝试连接 Docker Hub 时遇到网络问题(超时)
  • 在Docker上部署datalust/Seq日志服务系统
  • 【DSP笔记 · 第5章】数字滤波器的蓝图:从数学公式到硬件实现的艺术
  • React--》使用vite构建器打造高效的React组件库
  • Docker 基础使用
  • TryHackMe (THM) - SOC基础知识
  • Android音视频流媒体基础总结