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

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

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

    • 运输层的任务
    • 端口号
    • 复用与分用
    • 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 不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块,具有对应大小的关系。

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


相关文章:

  • 【调试笔记-20240611-Linux-配置 OpenWrt-23.05 支持泛域名 acme 更新】
  • 如何编辑和修改ROM,快速上手
  • mysql安装配置教程(Linux+Windows)
  • 工具清单 - Bug追踪管理
  • 01- ES6语法
  • APP渗透、WIFI近源渗透之透明代理下的流量分析与嗅探
  • 深度神经网络——什么是降维?
  • 数据结构——顺序表的实现
  • Spring-boot-logback-spring.xml文件Appender标签下的属性
  • 英码科技携手昇腾打造“三位一体”智慧化工解决方案,使能化工产业管理更高效、智能
  • C# Winform 侧边栏,切换不同页面
  • 用python实现多文件多文本替换功能
  • 【算法与设计】期末总结
  • 国际荐酒师香港协会受邀参加2024年美国独立日庆祝活动
  • 【进阶篇-Day3:JAVA接口新特性、代码块、内部类、Lambda表达式、组件等的介绍】
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Flex布局到底解决了什么问题
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Material Design
  • mysql常用命令汇总
  • node学习系列之简单文件上传
  • SAP云平台里Global Account和Sub Account的关系
  • Sass Day-01
  • Spring Boot MyBatis配置多种数据库
  • use Google search engine
  • vue-cli在webpack的配置文件探究
  • 半理解系列--Promise的进化史
  • 大数据与云计算学习:数据分析(二)
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 看域名解析域名安全对SEO的影响
  • 面试遇到的一些题
  • 前端设计模式
  • 前嗅ForeSpider教程:创建模板
  • 浅谈Golang中select的用法
  • 通过几道题目学习二叉搜索树
  • 在Unity中实现一个简单的消息管理器
  • 正则表达式
  • Java数据解析之JSON
  • ​虚拟化系列介绍(十)
  • ​学习一下,什么是预包装食品?​
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • # Maven错误Error executing Maven
  • #控制台大学课堂点名问题_课堂随机点名
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (C语言)共用体union的用法举例
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (八)Spring源码解析:Spring MVC
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (五)IO流之ByteArrayInput/OutputStream