湖科大计网:传输层
一、传输层概述
一、基本概念
传输层是端到端的协议。
因特网的两种不同的传输层协议:
TCP:面向连接
UDP:无连接
我们在学习的过程中,只需要关注传输层之间的通信,不需要关注传输层协议数据是经过路由器转发至目的网络,如果经过数据链路层和物理层在目的网络中传递的。只需要关注两主机之间产生的关系即可。
二、传输控制协议TCP
一、TCP和UDP的对比
TCP(transmission control protocol):传输控制协议
UDP(user datagram protocol):用户数据报协议
一、数据传输方式
TCP是面向连接的可靠传输
UDP是无连接的不可靠传输
二、单播、多播、广播的支持
三、对应用报文的处理
UDP是面向应用报文的,既不合并也不拆分,从应用层来的报文直接封装,发送。
TCP是面向字节流的,并且发送方和接收方不一定使用同样大小的数据块,只需确保字节流是一样的即可,TCP是全双工通信的。
四、为上层提供的服务
UDP由于提供的是无连接不可靠传输服务,适用于实时应用。
五、数据报首部
UDP数据报;TCP段文报
二、TCP的流量控制
TCP以报文段为单位传输,两主机建立连接,A有发送窗口,B有接收窗口。
累积确认,超时重传。
注意,在接收到确认帧之后,就会按规则移动发送窗口,调整发送窗口大小。
三、TCP的拥塞控制
实际上的发送窗口大小=min{拥塞窗口大小,接收方的窗口大小}。
实际上就是刚开始拥塞窗口大小为1,然后按照慢启动算法和拥塞避免算法计算拥塞窗口大小,如果出现“拥塞”:
两种情况:
①超时:则将慢启动阈值减半,拥塞窗口从1开始
②收到三个重复确认:将慢启动阈值减半,拥塞窗口=阈值 ;
注意:慢启动算法按指数增加,即1->2->4->8->16->32....
拥塞避免算法按线性增加,即ssthresh->ssthresh+1->ssthresh+2->ssthresh+3....
四、TCP超时重传时间的选择
直接按停等协议考虑了==
注意是每发送一个报文段都会重新计算一个超时重传时间,具体表现为,收到一个确认报文则计算(此时同时发送一个TCP报文段),超时重传的时候也会发送一个报文段,这个时候也会重新计算。
每一步都需要记住的值:RTTs(平滑往返时间smooth),RTTD,RTO
只有第一步进行特殊处理,之后的每一步都按照公式计算。
并且除了重传的ROT使用原来的ROT计算,其余的ROT都是用本次RTTS和RTTD计算的
重传时,原来的RTTs和RTTD不变,ROT变为原来的两倍。
五、TCP的可靠传输
TCP将上层的字节流,封装在TCP报文段中,TCP报文段增加了一个TCP首部,我们考虑的是实际传输的数据载荷部分。
注意TCP的滑动窗口协议与选择重传协议的区别:
TCP滑动窗口,是累积确认的,而且会进行流量控制,确认时自己的窗口大小给发送方;确认的窗口号是接下来想要接收的,而SR是最后一个接受到的。
其他的很像,比如乱序接收,按序发送,超时重传。
六、TCP的运输连接管理

一、TCP的连接建立
A首先发送的是一个序号为seq=x(消耗一个序号),B发送一个ack=x+1的确认,并且对于B来说这个确认报文段的序号是任意的,A随即回礼ack=y+1,seq=x+1(之前消耗了一个)。
二、TCP的连接释放
七、TCP首部格式
我们会发现一个TCP报文段中包含了本次要传给接收方的数据,以及数据的序号,同时包含了对接收方发来的数据的一个确认!(全双工嘛)
数据偏移字段指的是首部的大小,以四字节为单位取值。
序号字段是指本次TCP报文段数据载荷部分的首字节流的序号。
窗口 是指 控制发送方的窗口大小!
URG和PSH都是接受到了就将报文段直接向上交付。
同步SYN是三报文握手时需要用到的,
终止FIN是四报文挥手时需要用到的,发送方想断开连接,接收方用FIN表示自己已经发送完毕,继续进一步释放连接。
三、总结









相关文章:
湖科大计网:传输层
一、传输层概述 一、基本概念 传输层是端到端的协议。 因特网的两种不同的传输层协议: TCP:面向连接 UDP:无连接 我们在学习的过程中,只需要关注传输层之间的通信,不需要关注传输层协议数据是经过路由器转发至目的网络…...
设计模式(二)-创建者模式(3)-抽象工厂模式
一、为什么需要抽象工厂模式? 在工厂模式中,我们需要定义多个继承于共同工厂抽象基类的工厂子类,这些子类负责创建一个对应的对象。工厂模式存在一个缺点就是:每次扩展新的工厂子类,就会增加系统的复杂度。 如果我们…...
[计算机网络]网络层概述
呼,写了这么久终于重新开始啦! 自己落下了太多东西了.....是时候应该重新拾掇起来了. 关于后面的代码项目,我的想法是vilas.js仍然使用js来进行编写,但是后续其他的项目会开始尝试使用ts来进行书写了. 就算是前端也需要点规范吧..... 0.写在前面 这篇文章要和大家道个歉,首…...
猫12分类:使用yolov5训练检测模型
前言: 在使用yolov5之前,尝试过到百度飞桨平台(小白不建议)、AutoDL平台(这个比较友好,经济实惠)训练模型。但还是没有本地训练模型来的舒服。因此远程了一台学校电脑来搭建自己的检测模型。配置…...
Kubernetes Dashboard部署ImagePullBackOff问题处理
通常,出现ImagePullBackOff问题是由于Kubernetes集群无法拉取所需的镜像导致的。解决这个问题的方法通常包括以下步骤: 1. 检查Pod的描述信息: kubectl describe pod/[pod名称] --namespacekubernetes-dashboard 查看Events部分是否有关于…...
十四、Docker的基本操作
目录 (一)镜像命令 一、拉取Nginx 二、查看镜像 三、导出文件 四、删除镜像 五、加载镜像 (二)容器命令 一、例子:运行一个nginx容器 1、输入运行命令 2、使用命令查看宿主机ip 3、在外部浏览器访问 4、查看…...
C#,数值计算——插值和外推,分段线性插值(Linear_interp)的计算方法与源程序
1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// 分段线性插值 /// Piecewise linear interpolation object. /// Construct with x and y vectors, then call interp for interpolated values. /// </summary> …...
详细讲解什么是单例模式
当谈到单例模式时,我们指的是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。这种模式在软件开发中很常见,特别是需要控制资源访问、配置管理、日志记录器等情况下。 让我们用一个简单的例子来解释单…...
在springBoot中同时使用mysql和MongoDB
在SpringBoot中非关系向数据库MongoDB和关系型数据库MySQL都可通过引入相关依赖并按照指定配置单独集成; mysql引入依赖: compile "org.springframework.boot:spring-boot-starter-web:1.5.18.RELEASE"compile "org.springframework.boot:spring-boot-start…...
2023.11.19 hadoop之MapReduce
目录 1.简介 2.分布式计算框架-Map Reduce 3.mapreduce的步骤 4.MapReduce底层原理 map阶段 shuffle阶段 reduce阶段 1.简介 Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架; Mapreduce核心功能是…...
力扣第841题 钥匙和房间 C++ DFS BFS 附Java代码
题目 841. 钥匙和房间 中等 相关标签 深度优先搜索 广度优先搜索 图 有 n 个房间,房间按从 0 到 n - 1 编号。最初,除 0 号房间外的其余所有房间都被锁住。你的目标是进入所有的房间。然而,你不能在没有获得钥匙的时候进入锁住的房间…...
React 中 react-i18next 切换语言( 项目国际化 )
背景 平时中会遇到需求,就是切换语言,语种等。其实总的来说都是用i18n来实现的 思路 首先在项目中安装i18n插件,然后将插件引入到项目,然后配置语言包(语言包需要你自己来进行配置,自己编写语言包ÿ…...
antd design 5 版本 文件上传
<UploadcustomRequest{customRequest}accept".csv" showUploadList{false}><Button icon{<UploadOutlined />}>上传 CSV 文件</Button></Upload> accept 代表限制的上传类型 也可设置 .excel // 文件上传 ( CSV ) const customReques…...
【如何学习Python自动化测试】—— 浏览器操作
4 、 浏览器操作 4.1 浏览器最大化 Webdriver 打开浏览器后,默认不是最大化,如果需要界面最大化,需要通过 maximize_window()方法来实现,代码如下: maximize_window()方法是Selenium WebDriver提供的一个方法…...
Python编程技巧 – 使用字典
Python编程技巧 – 使用字典 Python Programming Skills – Using Dictionary Dictionary, 即字典,这是Python语言的一种重要的数据结构;Python字典是以键(key)值(value)对为元素,来存储数据的集合。 前文提到Python列…...
el-tree 与table表格联动
html部分 <div class"org-left"><el-input v-model"filterText" placeholder"" size"default" /><el-tree ref"treeRef" class"filter-tree" :data"treeData" :props"defaultProp…...
Leetcode刷题详解——删除并获得点数
1. 题目链接:740. 删除并获得点数 2. 题目描述: 给你一个整数数组 nums ,你可以对它进行一些操作。 每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] …...
HTTP四种请求方式,状态码,请求和响应报文
1.get请求 一般用于获取数据请求参数在URL后面请求参数的大小有限制 2.post请求 一般用于修改数据提交的数据在请求体中提交数据的大小没有限制 3.put请求 一般用于添加数据 4.delete请求 一般用于删除数据 5.一次完整的http请求过程 域名解析:使用DNS协议…...
Python - Wave2lip 环境配置与 Wave2lip x GFP-GAN 实战 [超详细!]
一.引言 前面介绍了 GFP-GAN 的原理与应用,其用于优化图像画质。本文关注另外一个相关的项目 Wave2lip,其可以通过人物视频与自定义音频进行适配,改变视频中人物的嘴型与音频对应。 二.Wave2Lip 简介 Wave2lip 研究 lip-syncing 以达到视频…...
2311rust,1.31版本更新
1.31.0稳定版 Rust1.31可能是最激动人心的版本! 使用Cargo创建一个新项目: cargo new foo以下是Cargo.toml的内容: [package] name "foo" version "0.1.0" authors ["名字"] edition "2018" //版本. [dependencies]在[package]…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...



































