39、传输层的任务和协议

从本节内容开始,我们学习TCP/IP模型的传输层的知识。传输层是TCP/IP模型中的重要组成部分,如果没有传输层的处理,那么源主机发送的IP数据包到达目的主机之后,目的主机将不知道这个数据是哪个应用程序的数据,就不能很好地跟应用层对接,最终无法面向用户。所以传输层是一个非常重要存在,在各类考试当中,尤其是计算机考研408科目中,根据传输层的知识点出的题目也占有较高的比重。


传输层的任务

首先,我们仍然要回忆一下TCP/IP模型,传输层的位置处在网络层和应用层之间,它接受网络层提供的服务,同时为应用层提供服务。

从数据封装与解封装过程的角度看,发送方应用层的数据到达传输层,加上传输层的首部,向下交给网络层;接收方网络层去除 IP首部后将其数据部分向上交给传输层,由传输层进行处理。

传输层负责的任务是:为两台主机中的应用进程之间的通信提供通用的数据传输服务。在这里,有两个主要的地方:

第一,应用进程,这是一个计算机操作系统领域的概念,可以通俗的理解为计算机中正在运行的应用程序。那么,传输层为两台主机中的应用进程之间的通信提供数据传输服务是什么意思呢?其实,我们之前所说的两台主机之间的通信,这种说法是不够准确的,更准确的说法是两台主机的应用进程之间在互相通信。例如,QQ、微信这是两个不同的应用程序,它们在运行的时候各自创建一个应用进程,主机A的用户用QQ和主机B的用户消息聊天,这其实是双方主机上的QQ进程在通信。

那么在这里,传输层存在的意义就在于:如果主机B用户同时登录着QQ、微信,还有其他的应用程序,那么当主机A的消息发送过来以后,让主机B能够知道这是一个应该由QQ进程接收的消息。

所以,网络层负责解决的是:数据怎么能够从源主机传输到目的主机;而传输层负责解决的是:数据到达目的主机之后,应该交由哪一个具体的应用程序来接收。

谢希仁教授的教材中有这样一个很好的例图(图中,AP1、AP2指的就是不同的应用进程;另外图中还标注出了端口,端口的概念在本节的后半部分会解释):

4945e30795f8464b9fea7842176beac1.png

第二,通用的数据传输服务,“通用”的意思就是,不针对特定的应用,多种应用可以使用同一个运输层服务。拿上面的例子来说,不管是QQ还是微信,或者其他的应用,这些数据在经过传输层封装的时候都是使用传输层的协议(TCP或UDP)。

这就有点类似于我们前面学过的多路复用,发送方多个应用程序的数据“复用”传输层的TCP或UDP,数据到达接收方的传输层后再进行“分用”,上交给应用层的不同应用程序。


传输层的两大协议

传输层这一部分的学习内容,其实主要就是学习传输层的两大协议:TCP和UDP。这两个协议各有特点:TCP提供可靠传输的机制,UDP提供不可靠但简单有效的传输机制。我们知道网络层的IP协议提供的是尽最大努力交付的不可靠的服务,如果数据传输出错,会通过ICMP差错报告通知源主机,由高层来实施处理,这里的高层就是传输层,如果传输层使用TCP协议,TCP会通过重传数据等方式解决问题。

不过这两种协议虽是一个可靠,一个不可靠,但都有各自的用处:对一些时延不敏感,而且要保证数据准确度的应用,应使用可靠的TCP协议传输而对一些时延比较敏感,比如在网络上看个直播,这时候就需要用UDP协议传输了,虽然不如TCP可靠,但是使用UDP反而效果要好,因为即使在UDP传输过程中,可能会出现偶尔的丢包,表现在看直播上会有一点小卡顿,但并不会影响太大。试想这种情况下如果用TCP的话,只要出一点错误就重传一次数据,那么直播的画面可能一直在重复“倒带”,观看效果就更差了。


好了,以上就是传输层第一节的内容,主要是了解传输层为主机之间不同应用进程的通信提供服务。包括两大协议,TCP和UDP。下一节内容我们学习另一个重要的基础性概念——端口号。

参考教材:谢希仁《计算机网络》第八版

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【uniapp】封装一个全局自定义的模态框

【需求描述】 在接口401处,需要实现全局提示并弹出自定义模态框的功能。考虑到uni-app内置的模态框和app原生提示框的自定义能力有限,我决定自行封装全局自定义的模态框,以此为应用程序提供更加统一且个性化的界面。 【效果图】 【封装】 主…

实战项目——多功能电子时钟

一,项目要求 二,理论原理 通过按键来控制状态机的状态,在将状态值传送到各个模块进行驱动,在空闲状态下,数码管显示基础时钟,基础时钟是由7个计数器组合而成,当在ADJUST状态下可以调整时间&…

Nginx+Tomcat负载均衡、动静分离实例详细部署

一、反向代理两种模式 四层反向代理 基于四层的iptcp/upd端口的代理 他是http块同一级,一般配置在http块上面。 他是需要用到stream模块的,一般四层里面没有自带,需要编译安装一下。并在stream模块里面添加upstream 服务器名称,…

Git入门到精通——保姆级教程(涵盖GitHub、Gitee、GitLab)

文章目录 前言一、Git1.Git-概述1.1.Git-概述-版本控制介绍1.2.Git-概述-分布式版本控制VS集中式版本控制1.3.Git-概述-代码托管中心1.4.Git-概述-安装和客户端的使用 2.Git-命令(常用命令)2.1.Git-命令-设置用户签名2.2.Git-命令-初始化本地库2.3.Git-命令-查看本地库状态2.4.…

C++11语法笔记

文章目录 一.类中新增的默认成员函数:移动赋值和移动构造二.lambda表达式三.包装器bind函数 一.类中新增的默认成员函数:移动赋值和移动构造 二.lambda表达式 三.包装器 bind函数

PHP8定义字符串的方法-PHP8知识详解

字符串,顾名思义,就是将一堆字符串联在一起。字符串简单的定义方法是使用英文单引号( )或英文双引号(" ")包含字符。另外,还可以使用定界符定义字符串。本文还介绍了字符串的连接符。…

《Java-SE-第三十一章》之网络编程

前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页:KC老衲爱尼姑的博客主页 博主的github,平常所写代码皆在于此 共勉:talk is cheap, show me the code 作者是爪哇岛的新手,水平很有限&…

一文读懂c++语言

一文读懂C语言 C的发展C的设计目标C的特性C的挑战 C的发展 C是一种通用的、高级的编程语言,它是C语言的扩展。C由Bjarne Stroustrup于1983年首次引入,并在之后的几十年中不断发展壮大。C被广泛应用于各种领域,包括系统开发、游戏开发、嵌入式…

开启MySQL的binlog日志

1.判断MySQL是否已经开启binlog SHOW VARIABLES LIKE log_bin; 查看MySQL的binlog模式 show global variables like "binlog%";几个关于binlog常用的命令 #查看日志开启状态 show variables like log_%; #查看所有binlog日志列表 show master logs; #查看最新一个b…

mac安装open3d时候出现错误

在测试open3d是否正常顺利安装时&#xff0c;出现了如下错误&#xff1a; python -c "import open3d as o3d; print(o3d.__version__)" Traceback (most recent call last):File "<string>", line 1, in <module>File "/Users/huangzhe/…

python——案例18:判断该元素是否在列表中

案例18&#xff1a;判断该元素是否在列表中test_list[10,-8,25.6,88,0,4]print("查看88是否在列表里面&#xff1a;")for i in test_list:if(i88):print("存在") print("查看88是否在列表中&#xff1a;") if(88 in test_list):print("存在…

监控Kubernetes 控制面组件的关键指标

控制面组件的监控&#xff0c;包括 APIServer、Controller-manager&#xff08;简称 CM&#xff09;、Scheduler、etcd 四个组件。 1、APIServer APIServer 的核心职能是 Kubernetes 集群的 API 总入口&#xff0c;Kube-Proxy、Kubelet、Controller-Manager、Scheduler 等都需…

【Java】 java | git | win系统重装会给开发环境带来哪些问题

一、概述 1、近期发现电脑用起来不丝滑了&#xff0c;文件夹操作卡顿&#xff0c;一阵操作还会蓝屏 2、不能忍&#xff0c;整理排查 二、电脑情况 1、CPU&#xff1a; I5-9400F 2.9GHz 6核 2、内存&#xff1a; 32G 3、固态&#xff1a;256G 4、机械&#xff1a;1T 5、盘符使用…

机器学习深度学习——RNN的从零开始实现与简洁实现

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——循环神经网络RNN &#x1f4da;订阅专栏&#xff1a;机器学习&&深度学习 希望文章对你们有所帮…

R语言5_安装Giotto

环境Ubuntu22/20, R4.1. 已开启科学上网。 第一步&#xff0c;更新服务器环境&#xff0c;进入终端&#xff0c;键入如下命令&#xff0c; apt-get update apt install libcurl4-openssl-dev libssl-dev libxml2-dev libcairo2-dev libgtk-3-dev libhdf5-dev libmagick9-dev …

【Java多线程学习7】Java线程池技术

线程池技术 一、什么是线程池 线程池顾名思义是管理一组线程的池子。当有任务要处理时&#xff0c;直接从线程池中获取线程来处理&#xff0c;处理完之后线程不会立即销毁&#xff0c;而是等待下一个任务。 二、为什么要使用线程池? 线程池的作用&#xff1f; 1、降低资源…

Javascript 数据结构[入门]

作者&#xff1a;20岁爱吃必胜客&#xff08;坤制作人&#xff09;&#xff0c;近十年开发经验, 跨域学习者&#xff0c;目前于海外某世界知名高校就读计算机相关专业。荣誉&#xff1a;阿里云博客专家认证、腾讯开发者社区优质创作者&#xff0c;在CTF省赛校赛多次取得好成绩。…

数据结构-栈和队列

目录 栈的概念 栈的使用 ​编辑 模拟实现栈 中缀表达式转后缀表达式 括号匹配 出栈入栈次序匹配 队列概念 队列的使用 栈的概念 栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素的操作.进行数据插入和删除操作的一端称为栈顶,;另一端称为栈底.栈中的数据…

【强化学习】值函数算法DQNs详解【Vanilla DQN Double DQN Dueling DQN】

DQNs【Vanilla DQN & Double DQN & Dueling DQN】 文章目录 DQNs【Vanilla DQN & Double DQN & Dueling DQN】1. DQN及其变种介绍1.1 Vanilla DQN1.2 Double DQN1.3 Dueling DQN 2. Gym环境介绍2.1 Obseravtion Space2.2 Reward Function2.3 Action Space 3. D…