计算机网络:运输层 - 概述

news2024/10/5 16:23:09

计算机网络:运输层 - 概述

    • 运输层的任务
    • 端口号
    • 复用与分用
    • UDP协议
      • 首部格式
    • TCP协议
      • 面向字节流


运输层的任务

物理层数据链路层以及网络层,他们共同解决了将主机通过网络互联起来所面临的问题,实现了主机到主机的通信

网络层的作用范围是主机到主机,但实际上在计算机网络中进行通信的真正实体是位于通信两端主机中的进程

在这里插入图片描述

AP1AP2 是局域网LAN1上主机A中与网络通信相关的两个应用进程。

AP3AP4 是局域网LAN2上主机B中的与网络通信相关的两个应用进程。

如何为运行在不同主机上的应用进程提供直接的通信服务?是运输层的任务。运输层协议又称为端到端协议运输层的作用范围是应用进程到应用进程,也称为端到端

运输层最重要的两个协议是TCPUDP

  • 用户数据报协议UDP

传输的协议数据单元是UDP报文或者UDP用户数据报UDP在传输数据之前不需要先建立连接,对方的运输层在收到UDP报文后,不需要给出任何确认。

常见的使用UDP的应用层协议:DNSDHCPTFTP

  • 传输控制协议TCP

传输的协议数据单元是TCP报文段TCP提供面向连接的服务,在传输数据前必须先建立连接,数据传输结束后要释放连接,接收方收到TCP报文后也要给出去确认。因此TCP也只能提供一对一的服务

常见的使用TCP的应用层协议:HTTPSMTPFTPTELNET


端口号

在这里插入图片描述

如图,假设AP1要和AP4通信,那么当主机B接收到了主机A发来的报文后,主机B怎么知道这个数据报要交给AP3还是AP4?也就是说运输层面临的第一个问题就是如何标识一个进程。

计算机上的进程是使用进程标识符 PID 来标志的。然而因特网上的计算机并不是使用统一的操作系统,不同操作系统使用不同格式的进程标识符。为了使运行不同操作系统的计算机的应用进程之间能够进行网络通信,就必须使用统一的方法对 TCP/IP 体系的应用进程进行标识。

运输层使用端口号来区分应用层的不同应用进程

端口号长度为16bit,取值范围是 0-65535,分为:熟知端口号登记端口号短暂端口号

熟知端口号

取值范围是 0-1023。因特网数字分配机构 IANA 把这些端口号指派给了 TCP/IP 体系中最重要的一些应用协议。常见的端口号如下:

协议端口号
DHCP67 和 68
DNS53
TFTP69
SNMP161
SNMP(trap)162
SMTP25
FTP21 和 20
TELNET23
HTTP80
HTTPS443

登记端口号

取值范围是 1024-49151,为没有熟知端口号的服务器所使用。这类端口号必须在 IANA 按照规定的手续登记,以防止重复。

例如,微软远程桌面应用程序使用的端口号是3389。

短暂端口号

取值范围是 49152-65535,留给客户进程选择,暂时使用当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。


复用与分用

接下来我们介绍发送方的复用和接收方的分用,如图所示:
在这里插入图片描述

这是收发双方的应用进程,发送方的某些应用进程所发送的不同应用报文在运输层使用 UDP 协议进行封装,这称为 UDP 复用。而另一些应用进程所发送的不同应用报文在运输层使用 TCP 协议进行封装,这称为 TCP 复用

运输层使用端口号来区分不同的应用进程,不管是使用运输层的 UDP 协议封装成的 UDP 用户数据报,还是使用 TCP 协议封装成的 TCP 报文段。在网络层都需要使用 IP 协议封装成 IP 数据报,这称为 IP 复用

IP 数据报首部中协议字段的值,用来表明 IP 数据报的数据载荷部分封装的是何种协议数据单元:取值为6,表示封装的是TCP报文段;取值为17,表示封装的是UDP用户数据报

接收方的网络层收到 IP 数据报后进行 IP 分用

IP 数据报首部中协议字段的值为17,则把 IP 数据报的数据载荷部分所封装的 UDP 用户数据报上交运输层的 UDP。若协议字段的值为6,则把 IP 数据报的数据载荷部分所封装的 TCP 报文段上交运输层的 TCP

运输层对 UDP 用户数据报进行 UDP 分用,对 TCP 报文段进行 TCP 分用,也就是根据端口号将它们交付给上层相应的应用进程。


接下来我对TCPUDP两个协议做一个简单讲解,只是了解它们的基本特点,不深入讲解,后续会有其它博客讲解具体细节。

UDP协议

UDP协议具有一下特点:

  • UDP 是无连接的,即发送数据之前不需要建立连接
  • UDP 使用尽最大努力交付,即不保证可靠交付
  • UDP 是面向报文的,即一次发送和交付一个完整的报文
  • UDP 没有拥塞控制,很适合实时通信,因为实时通信要求源主机以恒定的速率发送数据,并允许丢失部分数据
  • UDP 支持一对一、一对多、多对一和多对多的交互通信
  • UDP 的首部开销小,只有 8 个字节

首部格式

UDP数据报的首部只要8 byte,由四个字段组成,每个字段都是2 byte,如图:

在这里插入图片描述

  • 源端口目的端口用与标识两个不同主机上的进程。
  • 长度为整个UDP数据报的长度
  • 校验和用于检验数据报是否出错

在计算校验和时,还会引入一个伪首部的概念:

在这里插入图片描述

伪首部不是一个真实存在的首部,只有计算校验和是,会把这个伪首部也计算进来。


TCP协议

TCP协议有以下特点:

  • TCP 是面向连接的运输层协议。TCP 在传送数据之前,必须先建立连接;在传送数据完毕后,必须释放已经建立的连接。
  • 每一条 TCP 连接只能有两个端点(endpoint),每一条 TCP 连接只能是点对点的(一对一)。
  • TCP 提供可靠交付的服务。通过 TCP 连接传送的数据,无差错、不丢失、不重复,并且按序到达
  • TCP 提供全双工通信。TCP 连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。

面向字节流

  • 面向字节流,指的是一连串的字节序列。

发送方的 TCP 把应用进程交付下来的数据块,仅仅看作是一连串的无结构的字节流,TCP 并不知道这些带传送的字节流的含义,仅将他们编号并存储在自己的发送缓存。

在这里插入图片描述

TCP 不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块,具有对应大小的关系。

接收方要具有还原字节流的能力,接收方应用程序收到的字节流必须和发送方应用程序发出的字节流完全一样。


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CVE-2011-1473: OpenSSL权限许可和访问控制问题漏洞及解决方案

CVE-2011-1473: OpenSSL权限许可和访问控制问题漏洞 漏洞详情: OpensSL.是OpensSL团队的一个于源的能够实现安全套接层(SSL2/3) 和安全传输层(TLSw1)协议的通用加密库。该产品支持多种加密算法,包括对称密…

.NET周刊【6月第3期 2024-06-18】

国内文章 记一次 .NET某游戏币自助机后端 内存暴涨分析 https://www.cnblogs.com/huangxincheng/p/18243233 文章讨论了程序中非托管内存暴涨的问题。作者描述了友人发现内存问题并请他帮助分析的背景,利用WinDbg工具分析Linux平台上的内存泄漏情况。文章介绍了如…

Gotchi 战士们准备好吧!稀有度挖矿第八季锦标赛即将开始!

我们很高兴地宣布稀有度挖矿第 8 赛季的比赛即将开始,比赛将设立 15 万 GHST 的巨额奖金池,同时还将进行新的更新,让您有更多的方式来制定战略并与您的小鬼好友们一较高下。 本赛季引入了双败淘汰赛,每支队伍可以有两名替补队员&a…

AI办公自动化:批量根据Excel表格内容制作Word文档

工作任务:Excel表格中有大量文本,根据这些文本自动生成word文档 在chatgpt中输入提示词: 你是一个Python编程专家,写一个Python脚本,具体步骤如下: 读取Excel文件:"F:\AI自媒体内容\AI视…

系统学习PLC

1.OB组织块 程序循环 PC ob1执行一次 ob123也执行一次 是 statup是程序启动的是第一个周期先执行starup(0b100)然后在执行ob1和0b123.这二个循环,周期执行这二个循环。1000是1s 2.DB块 建立指定数据块可以直接建立自己喜欢的类型 3.FB与…

Python学习打卡:day09

day9 笔记来源于:黑马程序员python教程,8天python从入门到精通,学python看这套就够了 目录 day964、字典课后习题65、5类数据容器的总结对比数据容器分类数据容器特点对比 66、数据容器的通用操作遍历统计len、max 和 min 转换list(容器)、…

miniconda安装教程以及pip换源【Windows版本】

Anaconda包含内容较多,这边采用miniconda进行安装演示。 下载安装包 官网链接:https://docs.anaconda.com/miniconda/ 蓝奏云加速链接:https://wwt.lanzoue.com/i6ts3225vuef 开始安装 配置conda 在Windows开始菜单中,找到刚安…

02-ES6新语法

1. ES6 Proxy与Reflect 1.1 概述 Proxy 与 Reflect 是 ES6 为了操作对象引入的 API 。 Proxy 可以对目标对象的读取、函数调用等操作进行拦截,然后进行操作处理。它不直接操作对象,而是像代理模式,通过对象的代理对象进行操作,…

微信小程序毕业设计-小区疫情防控系统项目开发实战(附源码+论文)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…

上海SNEC光伏展参展总结--安科瑞

安科瑞戴婷 Acrel-Fanny 今年的snec上海光伏展吸引了来自全球各地的光伏行业专业人士及爱好者,本次展会共有来自30多个国家和地区的超过2000家企业参展,展出的光伏产品涵盖了太阳能电池、太阳能组件、逆变器、太阳能辅助设备等众多领域。 随着近年来光…

RK3568技术笔记九 编译Linux详细介绍

在编译前需要按照前面的方法始化编译环境,否则会导致编译失败(若配置过则无需重复配置)。 全自动编译包含所有镜像编译,包括:uboot编译、Kernel编译、Recovey编译、文件系统编译、编译完成镜像的更新与打包。 按照前面…

Transformer模型:未来的改进方向与潜在影响

Transformer模型:未来的改进方向与潜在影响 自从2017年Google的研究者们首次提出Transformer模型以来,它已经彻底改变了自然语言处理(NLP)领域的面貌。Transformer的核心优势在于其“自注意力(Self-Attention&#xf…

用python实现多文件多文本替换功能

用python实现多文件多文本替换功能 今天修改单位项目代码时由于改变了一个数据结构名称,结果有几十个文件都要修改,一个个改实在太麻烦,又没有搜到比较靠谱的工具软件,于是干脆用python手撸了一个小工具,发现python在…

python中scrapy

安装环境 pip install scrapy 发现Twisted版本不匹配 卸载pip uninstall Twisted 安装 pip install Twisted22.10.0 新建scrapy项目 scrapy startproject 项目名 注意:项目名称不允许使用数字开头,也不能包含中文 eg: scrapy startproject scrapy_baidu_…

FlowUs项目经理初体验

作为一名项目经理,FlowUs可以作为一个强大的工具来帮助我管理项目的所有方面,从规划到执行再到监控和回顾。 FlowUs息流是什么?FlowUs息流是一款集文档、多维表、文件夹等功能于一体的新一代知识管理与协作平台 以下是一些使用FlowUs作为项…

精益管理咨询公司可以为企业带来哪些实际的效益?

在竞争激烈的市场环境中,企业要想立于不败之地,就必须不断寻找提升效益、优化运营的新途径。而精益管理咨询公司正是这样一股不可忽视的力量,它们凭借专业的知识和丰富的经验,成为企业实现效益飞跃的“隐形推手”。 首先&#xff…

强得离谱,AI音乐的 Stable Diffusion: MusicGen

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

Qt做群控系统

群控系统顾名思义,一台设备控制多台机器。首先我们来创造下界面。我们通过QT UI设计界面。设计界面如下: 登录界面: 登录界面分为两种角色,一种是管理员,另一种是超级管理员。两种用户的主界面是不同的。通过选中记住…

2024加密软件排行榜|最新企业常用加密软件推荐

安秉网盾加密软件: 专注于企业级的透明加密解决方案,确保公司内部文件在公司环境外无法被访问。 审批机制灵活,支持多种审批方式,方便管理。 广泛应用于多个行业,拥有丰富的企业环境适配经验。 适合对内部数据安全有严…

RockChip Android12 System之Datetime

一:概述 本文将针对Android12 Settings二级菜单System中Date&time的UI修改进行说明。 二:Date&Time 1、Activity packages/apps/Settings/AndroidManifest.xml <activityandroid:name="Settings$DateTimeSettingsActivity"android:label="@stri…