计算机网络(第8版)-第5章 运输层
5.1 运输层协议概述
5.1.1 进程之间的通信
图5-1 中两个运输层之间有一个深色双向粗箭头,写明“运输层提供应用进程间的逻辑通信”。
图5-1 运输层为相互通信的应用进程提供了逻辑通信
5.1.2 运输层的两个主要协议
5.1.3 运输层的端口
请注意,这种在协议栈层间的抽象的协议端口是软件端口,和路由器或交换机上的硬件端口是完全不同的概念。硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与运输实体进行层间交互的地点。
客户在发起通信请求时,必须先知道对方服务器的 IP 地址(用来找到目的主机)和端口号(用来找到目的进程)。因此运输层的端口号分为下面的两大类。
(1)服务器端使用的端口号 这里又分为两类,最重要的一类叫作熟知端口号(well-known port number)或全球通用端口号,数值为 0~1023。
应用程序 | FTP | TELNET | SMTP | DNS | TFTP | HTTP | SNMP | SNMP(trap) | HTTPS |
---|---|---|---|---|---|---|---|---|---|
熟知端口号 | 21 | 23 | 25 | 53 | 69 | 80 | 161 | 162 | 443 |
另一类叫作登记端口号,数值为 1024~49151。这类端口号是为没有熟知端口号的应用程序使用的。
(2)客户端使用的端口号 数值为 49151~65535。由于这类端口号仅在客户进程运行时才动态选择,因此又叫作短暂端口号。
5.2 用户数据报协议 UDP
5.2.1 UDP 概述
UDP 的主要特点是:简单方便,但不可靠(多应用类型)
(1)UDP 是无连接的,即发送数据之前不需要建立连接(当然,发送数据结束时也没有连接可释放),因此减少了开销和发送数据之前的时延。
(2)UDP 使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表(这里面有许多参数)。
(3)UDP 是面向报文的。发送方的 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP 层。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。
(4)UDP 没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。
(5)UDP 支持一对一、一对多、多对一和多对多的交互通信。
(6)UDP 的首部开销小,只有 8 个字节,比 TCP 的 20 个字节的首部要短。
5.2.2 UDP 的首部格式
UDP 计算检验和的方法和计算 IP 数据报首部检验和的方法相似。但不同的是:IP 数据报的检验和只检验 IP 数据报的首部,但 UDP 的检验和是把首部和数据部分一起都检验。
5.3 传输控制协议 TCP 概述
5.3.1 TCP 最主要的特点
(1)TCP 是面向连接的运输层协议。
(2)每一条 TCP 连接只能有两个端点(endpoint),每一条 TCP 连接只能是点对点的(一对一)。
(3)TCP 提供可靠交付的服务。通过 TCP 连接传送的数据,无差错、不丢失、不重复,并且按序到达。
(4)TCP 提供全双工通信。TCP 允许通信双方的应用进程在任何时候都能发送数据。
(5)面向字节流。TCP 中的“流”(stream)指的是流入到进程或从进程流出的字节序列。“面向字节流”的含义是:虽然应用程序和 TCP 的交互式一次一个数据块(大小不等),但 TCP 把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。
5.3.2 TCP 的连接
5.4 可靠传输的工作原理
5.4.1 停止等待协议
全双工通信的双方既是发送方也是接收方。 下面为了讨论问题的方便,我们仅考虑 A发送数据而 B 接收数据并发送确认。因此 A 叫做发送方,而 B 叫做接收方。因为这里是讨论可靠传输的原理,因此把传送的数据单元都称为分组,而并不考虑数据是在哪一个层次上传送的 。“停止等待”就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。
1. 无差错情况
2. 出现差错
3. 确认丢失和确认迟到
4. 信道利用率 (优点:简单 ;缺点:信道利用率太低)
5.4.2 连续 ARQ 协议
5.5 TCP 报文段的首部格式
TCP 报文段首部的前 20 个字节是固定的(如图5-13 所示),后面有 4n 字节是根据需要而增加的选项(n 是整数)。因此 TCP 首部的最小长度是 20 字节。
首部固定部分各字段的意义如下:
(1)源端口和目的端口
(2)序号
首部中的序号字段值则指的是本报文段所发送的数据的第一个字节的序号。
(3)确认号 占 4 字节,是期望收到对方下一个报文段的第一个数据字节的序号。
若确认号 = N,则表明:到序号 N-1 为止的所有数据都已正确收到。
(4)数据偏移
(5)保留
(6)紧急 URG(URGent)
(7)确认 ACK(ACKnowledgment)
(8)推送 PSH(PuSH)
(9)复位 RST(ReSeT)
(10)同步 SYN(SYNchronization)
(11)终止 FIN(FINish,意思是“完了”“终止”)
(12)窗口
(13)检验和
(14)紧急指针
(15)选项
TCP 最初只规定了一种选项, 即最大报文段长度 MSS (Maximum Segment Size) [RFC879]。请注意MSS这个名词的含义。MSS是每一个TCP报文段中的数据字段的最大长度。数据字段加上TCP首部才等于整个的TCP报文段。
5.6 TCP 可靠传输的实现
5.6.1 以字节为单位的滑动窗口
5.6.2 超时重传时间的选择
5.6.3 选择确认 SACK
5.7 TCP 的流量控制
5.7.1 利用滑动窗口实现流量控制
流量控制(flow control)就是让发送方的发送速率不要太快,要让接收方来得及接收。
5.7.2 TCP 的传输效率
5.8 TCP 的拥塞控制
5.8.1 拥塞控制的一般原理
在计算机网络中的链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫作拥塞(congestion)。可以把出现网络拥塞的条件写成如下的关系式:
Σ对资源的需求 > 可用资源 (5-7)
拥塞控制就是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不至于过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。
5.8.2 TCP 的拥塞控制方法
TCP 进行拥塞控制的算法有四种:即慢开始(slow-start)、拥塞避免(congestion avoidance)、快重传(fast retransmit)、快恢复(fast recovery)(见草案标准 RFC 5681)。下面就介绍这些算法的原理。为了集中精力讨论拥塞控制,我们假定:
(1)数据是单方向传送的,对方只传送确认报文。
(2)接收方向总是有足够大的缓存空间,因而发送窗口的大小由网络的拥塞程度来决定。
1. 慢开始和拥塞避免
拥塞避免算法的目的是让拥塞窗口 cwnd 缓慢地增大(具体算法见[RFC 5681])。执行算法后的结果大约是这样的:每经过一个往返时间 RTT,发送方的拥塞窗口 cwnd 的大小就加1,而不是像慢开始阶段那样加倍增长。因此在拥塞避免阶段就称为“加法增大”AI(Additive Increase),表明在拥塞避免阶段,拥塞窗口 cwnd 按线性规律缓慢增长。
但请注意,“拥塞避免”并非完全避免拥塞,而是让拥塞窗口增长得缓慢些,使网络不容易出现拥塞。
5.8.3 主动队列管理 AQM
5.9 TCP 的运输连接管理
5.9.1 TCP 的连接建立
TCP 建立连接的过程叫作握手,握手需要在客户和服务器之间交换三个 TCP 报文段。图5-28 画出了三报文握手建立 TCP 连接的过程。
图5-28 用三报文握手建立 TCP 连接
上面给出的连接建立过程叫作三报文握手。请注意,在图5-28 中 B 发送给 A 的报文段,也可拆成两个报文段。可以先发送一个确认报文段(ACK = 1,ack = x + 1),然后再发送一个同步报文段(SYN = 1,seq = y)。这样的过程就变成了四报文握手(释放连接),但效果是一样的。
为什么 A 最后还要发送一次确认呢?这主要是为了防止已失效的连接请求报文段突然又传送到了 B,因而产生错误。
5.9.2 TCP 的连接释放
5.9.3 TCP 的有限状态机
本章的重要概念
习题
相关文章:
计算机网络(第8版)-第5章 运输层
5.1 运输层协议概述 5.1.1 进程之间的通信 图5-1 中两个运输层之间有一个深色双向粗箭头,写明“运输层提供应用进程间的逻辑通信”。 图5-1 运输层为相互通信的应用进程提供了逻辑通信 5.1.2 运输层的两个主要协议 5.1.3 运输层的端口 请注意,这种…...
AtCoder Beginner Contest 231(D-F,H)
D - Neighbors (atcoder.jp) (1)题意 给出M组关系,问是否有一个排列,能表示A[i]和B[i]相邻 (2)思路 考虑如果有环,显然不能满足排列,因为排列中度数最多为2,若有超过2的显…...
【Python】map
map()函数是Python内置函数之一,它的主要作用是将一个函数应用于可迭代对象中的每个元素,并返回一个包含结果的迭代器。 map()函数的语法如下: map(function, iterable)function参数是一个函数,表示要应用于可迭代对象每个元素的…...
Swift 5.9 与 SwiftUI 5.0 中新 Observation 框架应用之深入浅出
0. 概览 Swift 5.9 一声炮响为我们带来全新的宏(Macro)机制,也同时带来了干霄凌云的 Observation 框架。 Observation 框架可以增强通用场景下的使用,也可以搭配 SwiftUI 5.0 而获得双剑合璧的更强威力。 在本篇博文,…...
【已解决】在 Vite 项目中使用 eslint-config-ali 时遇到的解析错误
错误还原 搭建 Vite 项目 pnpm create vite my-vue-app --template vue-ts安装 eslint-config-ali pnpm i -D eslint-config-ali typescript-eslint/parser typescript-eslint/eslint-plugin eslint-plugin-import eslint-import-resolver-typescript vue-eslint-parser esl…...
蓝桥杯每日一题2023.10.5
3420. 括号序列 - AcWing题库 题目描述 题目分析 对于这一我们需要有前缀知识完全背包 完全背包的朴素写法: #include<bits/stdc.h> using namespace std; const int N 1010; int n, m, v[N], w[N], f[N][N]; int main() {cin >> n >> m;fo…...
PyTorch实例:简单线性回归的训练和反向传播解析
文章目录 🥦引言🥦什么是反向传播?🥦反向传播的实现(代码)🥦反向传播在深度学习中的应用🥦链式求导法则🥦总结 🥦引言 在神经网络中,反向传播算法…...
Arcgis提取玉米种植地分布,并以此为掩膜提取遥感影像
Arcgis提取玉米种植地分布上,并以此为掩膜提取遥感影像 一、问题描述 因为之前反演是整个研究区,然而土地利用类型有很多类,只在农田或者植被上进行反演,需要去除水体、建筑等其他类型,如何处理得到下图中只有耕地类…...
软件工程与计算总结(四)项目管理基础
目录 一.项目和项目管理 二.团队组织与管理 三.软件质量保障 四.软件配置管理 五.项目实践 一.项目和项目管理 1.软件开发远不是纯粹的编程,随着软件规模的增长,软件开发活动也变得越来越复杂~ 2.软件项目就是要将所有的软件开发活动组织起来&#…...
【Python】datetime 库
# timedelta(days, seconds, microseconds,milliseconds, minutes, hours, weeks) 默认按顺序传递参数 # 主要介绍 datetime.datetime 类 # 引入 from datetime import datetime today datetime.now() # 获取当前时间 2023-10-05 15:58:03.218651 today1 datetime.utcnow() #…...
从0开始python学习-28.selenium 需要图片验证的登录
url https://test.com/login driver.get(url) # 获取登录页面需要输入账号密码进行模拟登录操作 user driver.find_element(By.XPATH,//*[id"login"]/div[2]/div/form[2]/div[2]/div/div/input).send_keys(username) pwd driver.find_element(By.XPATH,//*[id&qu…...
Nginx搭建Rtmp流媒体服务,并使用Ffmpeg推流
文章目录 1.rtmp流媒体服务框架图2.nginx配置3.配置nginx4.使用ffmpeg推流5.实时推摄像头流 本项目在开发板上使用nginx搭建流媒体服务,利用ffmpeg进行推流,在pc上使用vlc media进行拉流播放。 1.rtmp流媒体服务框架图 2.nginx配置 下载:wge…...
IDEA 将一个普通Java工程转化为maven工程
打开IntelliJ IDEA并打开Java工程。 在项目窗口中,右键单击项目名称,选择“Add Framework Support”。 在弹出的窗口中,选择“Maven”。 在“Maven Information”窗口中,填写Group Id、Artifact Id和Version等基本信息。 点击…...
linux下的永久保存行号
linux下的永久保存行号 1.首先 这里是引用 输入命令:vi ~/.vimrc 其次 这里是引用 输入命令 set number...
92岁高龄的创始人张忠谋谈台积电发展史
一、张忠谋和台积电 在台北一间办公室里,张忠谋最近拿出一本印有彩色图案的旧书。它的标题是《VLSI 系统导论》,这是一本研究生水平的教科书,描述了计算机芯片设计的复杂性。92岁的张先生满怀敬意地举起它。 92岁高龄的台积电创始人张忠谋 “…...
【VIM】VIm初步使用
玩转Vim-从放弃到入门_哔哩哔哩_bilibili...
教育类《中学政史地》收稿方向-投稿邮箱
教育类《中学政史地》收稿方向-投稿邮箱 《中学政史地》收稿方向:中学政治、历史、地理类稿件 《中学政史地》创办于1987年,是我国唯一一份集中学政治、历史、地理三门学科为一体的综合性月刊。每月两期,分初中版和高中版。以服务学生、服务…...
数据库的备份与恢复
数据备份的重要性 备份的主要目的是灾难恢复。 在生产环境中,数据的安全性至关重要。 任何数据的丢失都可能产生严重的后果。 造成数据丢失的原因: 程序错误人为操作错误运算错误磁盘故障灾难(如火灾、地震)和盗窃 数据库备份…...
string类的模拟实现(万字讲解超详细)
目录 前言 1.命名空间的使用 2.string的成员变量 3.构造函数 4.析构函数 5.拷贝构造 5.1 swap交换函数的实现 6.赋值运算符重载 7.迭代器部分 8.数据容量控制 8.1 size和capacity 8.2 empty 9.数据修改部分 9.1 push_back 9.2 append添加字符串 9.3 运算符重载…...
C 函数指针
就像指针可以指向一般变量、数组、结构体那样,指针也可以指向函数。 函数指针的主要用途是向其他函数传递“回调”,或者模拟类和对象。 形式如下: int (*POINTER_NAME)(int a, int b) 这类似于指向数组的指针可以表示所指向的数组。指向函数…...
zkVM设计性能分析
1. 引言 本文主要参考: 2023年9月ZKSummit10 Wei Dai 1k(x) & Terry Chung 1k(x)分享视频 ZK10: Analysis of zkVM Designs - Wei Dai & Terry Chung 当前有各种zkVM,其设计思想各有不同,且各有取舍,本文重点对现有各z…...
调用gethostbyname实现域名解析(附源码)
VC常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/124272585C软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...&a…...
面向无线传感器网络WSN的增强型MODLEACH设计与仿真(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
前端页面初步开发
<template><div><el-card class"box-card" style"height: 620px"><el-input v-model"query.name" style"width:200px" placeholder"请输入用户姓名"></el-input>   …...
【赠书活动第3期】《构建新型网络形态下的网络空间安全体系》——用“价值”的视角来看安全
目录 一、内容简介二、读者受众三、图书目录四、编辑推荐五、获奖名单 一、内容简介 经过30多年的发展,安全已经深入到信息化的方方面面,形成了一个庞大的产业和复杂的理论、技术和产品体系。 因此,需要站在网络空间的高度看待安全与网络的…...
基于SpringBoot的智能推荐的卫生健康系统
目录 前言 一、技术栈 二、系统功能介绍 用户管理 科室类型管理 医生信息管理 健康论坛管理 我的发布 我的收藏 在线咨询 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在…...
几种开源协议的区别(Apache、MIT、BSD、MPL、GPL、LGPL)
作为一名软件开发人员,你一定也是经常接触到开源软件,但你真的就了解这些开源软件使用的开源许可协议吗? 你不会真的认为,开源就是完全免费吧?那么让我们通过本文来寻找答案。 一、开源许可协议简述 开源许可协议是指开…...
通过usb串口发送接收数据
USB通信使用系统api,USB转串口通信使用第三方库usb-serial-for-android, 串口通信使用Google官方库android-serialport-api。x 引入包后在本地下载的位置:C:\Users\Administrator\.gradle\caches\modules-2\files-2.1 在 Android 中&#x…...
Python3数据科学包系列(三):数据分析实战
Python3中类的高级语法及实战 Python3(基础|高级)语法实战(|多线程|多进程|线程池|进程池技术)|多线程安全问题解决方案 Python3数据科学包系列(一):数据分析实战 Python3数据科学包系列(二):数据分析实战 Python3数据科学包系列(三):数据分析实战 国庆中秋宅家自省: Pyth…...
UE4.27.2 自定义 PrimitiveComponent 出现的问题
目录 CreatePrimitiveUniformBufferImmediateFLocalVertexFactory 默认构造函数GetTypeHashENQUEUE_RENDER_COMMANDnull resource entry in uniform buffer parameters FLocalVertexFactory 在看大象无形,其中关于静态物体网络绘制的代码出错的 bug 我也搞了一会………...
北京网站建设工作室/四川省人民政府
2020博客地址汇总2019年博客汇总 python 学习持续更新 python 学习 Pycharm python 及 Django 安装详细教程 python 安装配置 及 虚拟环境 for windows python2 基础学习脚本 python 装饰器 python3 基础语法一 python3基础语法二 python3基础语法三-文档字符串 关键字参…...
柳州企业网站开发公司/网站管理和维护的主要工作有哪些
辉芒微单片机 单片机全系列 MTP制程可反复烧录 产品包括: FT60F02X FT60F021-RB FT60F022-RB FT60F023-RB FT60F024-RB FT60F024-DRB FT60F025-TRB FT60F02F-ERB FT60F01X FT60F010A-URB FT60F011A-RB FT60F22X FT60F223-RB FT60F227-RB 更多资料请联系唐…...
iis7 伪静态 wordpress/高级seo课程
数据类型 Tensor中的数据有数据类型 基本对应于常用的数据类型下表列出了数据类型的名称和python的对应关系 数据类型Python 类型描述DT_FLOATtf.float3232 位浮点数.DT_DOUBLEtf.float6464 位浮点数.DT_INT64tf.int6464 位有符号整型.DT_INT32tf.int3232 位有符号整型.DT_INT1…...
天津谁做网站/百度权重5的网站能卖多少钱
定义 哈夫曼树: 带权路径长度和最短的二叉树,也称之为最优二叉树。 哈夫曼编码:在网络传输过程中,对所有的信息进行编码,所有的信息都将转换为0101的二进制形式,根据信息出现的频率,将信息构造成…...
外贸网站怎么做推广/网络营销师证
一、默认定位 HTML结构如下: 和 是为了与窗口的顶部隔开距离便于观察,neighboor和child2的div是为了对比位置,我们真正需要定位的焦点放在了child1的div上。 Position Attribute Relative & Absolute CSS如下: .parent{b…...
网站建设到底属于什么行业/专业的郑州网站推广
引用类型数据作为参数看这样一个例子:public class Test1 {public static void main(String[] args) {String a "aaa";System.out.println(a);change(a);System.out.println(a);}static void change(String b) {b "bbb";}}你觉得打印结果会是…...