计算机网络之传输层

一、传输层提供的服务

1、传输层的功能

  • 向上面的应用层提供通信服务,属于面向通信的最高层,用户功能的最低层。
  • 传输层为运行在不同主机上的进程中间提供了逻辑通信,网络层提供主机之间的逻辑通信。
  • 边缘部分两台主机使用网络核心部分的功能进行端到端的通信时,只有主机的协议栈才有传输层和应用层路由器在转发分组时都只是用下三层的功能(即在通信子网中没有传输层,传输层只存在通信子网外的主机中)
  • 复用与分用

    复用时发送方不同的应用进程都可使用同一个传输层协议传送数据

    分用指接收方的传输层在剥去报文的首部后能够把这些数据正确交付给目的应用进程

  • 传输层对收到的报文进行差错检测(首部和数据部分),而网络层只检查IP数据报的首部

  • 提供两种协议,面向连接的TCP和无连接的UDP。而网络层无法同时实现两种协议(面向连接(如虚电路)or 面向无连接(如数据报))

  • 采用TCP,尽管下面的网络时不可靠(只提供尽最大努力的服务)。但这种逻辑通信信道就相当于一条全双工的可靠信道。采用UDP,则是不可靠信道。

2、传输层的寻址与端口

端口是传输层服务访问点(TSAP),相当于IP地址在网络层的作用或MAC地址在数据链路层的作用。

16bit 65536($2^{16}$)

只具有本地意义

端口号

分类

①服务器端

熟知端口号 0~1023

应用程序FTPTELNETSMTPDNSTFTPHTTPSNMP
212325536980161
  • FTP:文件传输协议
  • TELNET:主要用于远程登录到网络设备和服务器上
  • SMTP:邮件服务器之间传递消息所使用的协议
  • DNS:“域名系统”的英文缩写。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网
  • TFTP:简单文件传输协议
  • HTTP:超文本传输协议
  • SNMP:简单网络管理协议

登记端口号 1024~49151

②客户端

(短暂端口号/临时端口号)49152~65535

套接字

套接字Socket=(IP地址:端口号),唯一地标识网络中的一台主机和其上的一个应用(进程)。

3、无连接服务与面向连接服务

TCP:连接 可靠 增加开销->确认、流量控制、计时器、连接管理->协议数据单元的头部增大很多

TCP不提供广播或组播服务

UDP:仅提供两个附加服务:多路复用和对数据的错误检查

二、UDP协议

面向报文

UDP数据报:UDP首部(8B=2B+2B+2B+2B)+用户数据

源端口:需要对方回信时选用,不需要时可用0

目的端口

长度:UDP数据报长度(包括首部和数据),最小值是8

检验和:可选,当源主机不想计算校验和,则直接令该字段为全0

如果接收方UDP发现收到的报文中的目的端口号不正确(即不存在对应于端口号的应用进程)就丢弃该报文,并由ICMP发送“端口不可达”差错报文给发送方。

UDP校验

UDP的校验和检查首部和数据部分,加入伪首部进行二进制反码求和,将此和的二进制反码写入校验和字段并发送。

接收方把收到的UDP数据报加上12B伪首部后,二进制反码求和,当无差错时结果为全1。

三、TCP协议

面向字节流

1、TCP报文段

  1. 源端口和目的端口
  2. 序号:4B 0~$2^{32}-1$ TCP面向字节流,所以每个字节按顺序编号
  3. 确认号:4B 期望收到对方下一个报文段的第一个数据字节的序号
  4. 数据偏移(即首部长度)
  5. 保留
  6. 紧急位URG:=1,表明紧急指针字段有效,告诉系统此报文段中有紧急数据,应尽快传送
  7. 确认位ACK:ACK=1时确认号字段才有效,TCP规定,在连接建立后所有传送的报文段都必须把ACK置1
  8. 推送位PSH(Push):接收方TCP收到PSH=1的报文段就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付
  9. 复位位RST(Reset):当RST=1时,表明TCP连接中出现严重差错(如主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接
  10. 同步位(SYN):当SYN=1,ACK=0,表明这是一个连接请求报文,对方若同意建立连接,则应在响应报文中使用SYN=1,ACK=1
  11. 终止位(FIN):FIN=1,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接。
  12. 窗口:2B,指出现在允许对方发送的数据量
  13. 校验和:2B
  14. 紧急指针:仅在URG=1时才有意义,它指出在本报文段中紧急数据共有多少字节
  15. 选项
  16. 填充

2、TCP连接管理

要解决的问题:

  • 要使每一方能够确知对方的存在
  • 要允许双方协商一些参数(如最大窗口值、是否使用窗口扩大选项、时间戳选项及服务质量等)
  • 能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配

TCP连接的端点是套接字(Socket)或插口,每条TCP连接唯一地被通信的两个端点确定

TCP连接的建立采用客户/服务器模式。

(1)TCP连接的建立——三次握手

!!经典中的经典

连接建立前,服务器进程处于LISTEN(收听)状态,等待客户的连接请求

同步位(SYN)连接请求报文

① 客户机TCP向服务器TCP发送连接请求报文(SYN=1,初始序号seq=x),

TCP客户进程进入SYN-SENT(同步已发送)状态

② 服务器TCP收到后,如同意建立连接,则向客户机发回确认,并为该TCP连接分配缓存和变量(SYN=1,ACK=1,ack=x+1,seq=y) 

TCP服务器进程进入SYN-RCVD(同步收到)状态

③ 客户机收到确认报文段后,还要向服务器给出确认,并为该TCP连接分配缓存和变量。(ACK=1, ack=y+1, seq=x+1), 该报文段可以携带数据,若不携带数据则不消耗序号。

TCP客户进程进入ESTABLISHED(已建立连接)状态

(2)TCP连接的释放——四次握手

① 客户机打算关闭连接时,向其TCP发送连接释放报文段,并停止发送数据,主动关闭TCP连接(FIN=1,seq=u(等于前面已传送过的数据的最后一个字节的序号+1))

TCP客户进程进入FIN-WAIT-1(终止等待1)状态

② 服务器收到连接释放报文段后即发出确认(ack=u+1,seq=v)

服务器进入CLOSE-WAIT(关闭等待)状态

此时从客户机到服务器这个方向的连接就释放了,TCP连接处于半关闭状态。服务器若发送数据,客户机仍要接收。

③ 若服务器已经没有要向客户机发送的数据,就通知TCP释放连接(FIN=1,ack=u+1,seq=w)

服务器进入LAST-ACK(最后确认)状态

④ 客户机发出确认(ACK=1,ack=w+1,seq=u+1)

经过时间等待计数器设置的时间2MSL(最长报文段寿命)后,

客户机进入CLOSED(连接关闭)状态

3、TCP可靠传输

TCP使用校验、序号、确认和重传等机制来提供可靠数据传输

(1) 序号

TCP把数据视为一个无结构但有序的字节流

(2)确认

累积确认:eg收到0~2,6~7,此时B仍在等待3,因此B到A的下一个报文段将确认号字段置为3

(3)重传

超时和冗余ACK 会导致重传

超时

报文往返时间(Round-Trip Time ,RTT):一个报文段发出的时间以及收到相应确认的时间

加权平均往返时间$RTT_s$ : 随新测量RTT样本值的变化而变化

超时重传时间(Retransmission Time-Out,RTO)应略大于$RTT_s$ 

冗余ACK

每当比期望序号大的失序报文段到达时,就发送一个冗余ACK,指向下一个期待字节的序号

快速重传

4、TCP流量控制

基于滑动窗口协议

接收窗口rwnd

拥塞窗口cwnd : 根据网络拥塞程度估计,其大小与网络的带宽和时延有关

5、TCP拥塞控制 

(1)慢开始和拥塞避免

慢开始:每经过一个传输轮次(即往返时延RTT),cwnd就会加倍,增大到一个规定的满开始门限ssthresh(阈值),然后改用拥塞避免算法

拥塞避免:+1

网络拥塞的处理:

把慢开始门限ssthresh设置为出现拥塞时cwnd值的一半,然后把拥塞窗口cwnd重新设置为1,执行慢开始算法

(2) 快重传和快恢复

快恢复:把cwnd值设置为慢开始门限ssthresh改变后的数值

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

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

相关文章

网络编程(15)——服务器如何主动退出

十五、day15 服务器主动退出一直是服务器设计必须考虑的一个方向,旨在能通过捕获信号使服务器安全退出。我们可以通过asio提供的信号机制绑定回调函数即可实现优雅退出。 之前服务器的主函数如下 #include "CSession.h" #include "CServer.h"…

[Git] Git下载及使用 从入门到精通 详解(附下载链接)

前言 目录 Git概述 简介 下载 Git代码托管服务 Git常用命令 Git全局配置 获取Git仓库 在本地初始化一个Git仓库 从远程仓库克隆 基本概念 工作区文件状态 本地仓库操作 远程仓库操作 分支操作 标签操作 在IDEA中使用Git 在IDEA中配置Git 本地仓库操作 远程仓…

Ngx+Lua+Redis 实时IP黑名单系统

实时黑名单系统,如果用php脚本实现很容易,但是效率惨不忍睹呀。 要想速度快还的在nginx层实现阻塞。如果iptables 层阻塞速度更快,但是黑名单列表如果有更新就必须要重载配置,实现还是有难度的。php管理后台把黑名单ip写入到redis…

万字详解AI实践,零手写编码用AI完成开发 + 数据清洗 + 数据处理 的每日新闻推荐,带你快速成为AI大神

用AIdify完成前后端开发数据处理和数据清洗。 引言数据获取和数据处理dify构建workflow进行数据清洗前端页面构建和前后端交互总结 引言 AI时代对开发人员的加强是非常明显的,一个开发人员可以依靠AI横跨数个自己不熟悉的领域包括前后端、算法等。让我们来做个实践…

生信初学者教程(二十八):单细胞数据标准化

文章目录 介绍加载R包导入数据消除测序深度影响评估细胞周期的影响识别高度可变的特征缩放数据降维聚类输出结果总结介绍 scRNA-seq的标准化是一个重要的预处理步骤,目的是消除技术变异(比如比如测序深度和基因长度等因素),使基因表达和/或样本之间的比较更加可靠。标准化方…

如何彻底掌握 JavaScript 23种设计模式

设计模式是解决特定问题的常用解决方案,它们可以帮助开发者编写更清晰、可维护、可扩展的代码。在 JavaScript 中,常见的设计模式可以分为三大类:创建型模式、结构型模式 和 行为型模式。本文将全面介绍 JavaScript 中常见的设计模式&#xf…

Java 日志打印

使用日志打印: private static Logger log LoggerFactory.getLogger(DeptController.class);RequestMapping("/depts")public Result list() { // System.out.println("查询全部部门数据");log.info("查询全部部门数据");ret…

pytorch 与 pytorch lightning, pytorch geometric 各个版本之间的关系

主要参考 官方的给出的意见; 1. pytorch 与 pytorch lightning 各个版本之间的关系 lightning 主要可以 适配多个版本的 torch; https://lightning.ai/docs/pytorch/latest/versioning.html#compatibility-matrix; 2. pytorch 与 pytorch geometric 各…

【AIGC】2022-NIPS-视频扩散模型

2022-NIPS-Video Diffusion Models 视频扩散模型摘要1. 引言2. 背景3. 视频扩散模型3.1. 重建引导采样以改进条件生成 4. 实验4.1. 无条件视频建模4.2. 视频预测4.3. 文本条件视频生成4.3.1 视频与图像建模的联合训练4.3.2 无分类器指导的效果4.3.3 更长序列的自回归视频扩展 5…

线程池简单原理

设置了isRun导致任务没有执行完是因为子线程在消费队列的时候的run内while循环取队列的值,如果isRun为flase会停掉所有线程,解决是不仅isRun为false还要求队列的数据10个全取出队列大小为0. 当线程池队列满的时候任务会不会丢 可以使用默认的rejectExc…

Superset SQL模板使用

使用背景 有时想让表的时间索引生效,而不是在最外层配置报表时,再套多一层时间范围。这时可以使用SQL模板 参考官方文档 https://superset.apache.org/docs/configuration/sql-templating/#:~:textSQL%20Lab%20and%20Explore%20supports%20Jinja 我…

面试题:Redis(二)

1. 面试题 2. MoreKey案列 事故案例 2.1 生成上如何限制key*/flushdb/flushall等危险命令的使用? 通过redis.conf配置文件中在SECURITY选项中禁用这些命令 2.2 不用key*避免卡顿那用什么? 用scan命令,类似mysql中的limit命令 语法&…

VSCode的常用插件(持续更新)

点击左边工具栏的“扩展”,在搜索栏中查找对应插件,点击“安装”,安装完成后右边界面的插件会显示“卸载”按钮。 1、中文(简体)语言包 2、Auto Rename Tag 修改开始标签,结束标签也会随之自动变化。 3、O…

《Windows PE》4.3 延迟加载导入表

延迟加载导入表(Delayed Import Table)是PE文件中的一个数据结构,用于实现延迟加载(Lazy Loading)外部函数的机制。 延迟加载是指在程序运行时,只有当需要使用某个外部函数时才进行加载和绑定,…

wms智能供应链仓储管理系统,一站式仓储管理产品溯源解决方案

几度WMS条码仓储 管理系统是公司凭借多年为制造企业信息化服务的经验积累,结合WMS、条码、ERP思想而设计的智能供应链仓储系统。 主要包括以下六大模块:库位管理、存货管理、来料管理、发料管理、成品管理、日常管理。WMS条码仓储管理系统,是…

Unity中搜索不到XR Interaction Toolkit包解决方法

问题: 针对Unity版本2020.3在中PackageManager可能搜素不到XR Interaction Toolkit包 在Package Manager中未显示XR Interaction Toolkit包 解决方法: Package manager左上角,点加号,选择 Add package from git URL..,…

21年408数据结构

第一题: 解析:q指针指向要被删除的元素,当这个元素是链表中唯一一个元素时,q指针和尾指针都指向同一个元素,那么在删除掉这个元素之前,需要将尾指针调整到指向头指针的位置,此时链表为空&#x…

说下SSL/TLS四次握手过程?

参考自:SSL/TLS四次握手过程是怎么样的?HTTPS、SSL、TLS三者之间的联系和区别 一.SSL/TLS 简介 SSL(Secure Socket Layer 安全套接层)是基于 HTTPS 下的一个协议加密层,用于解决 HTTP 在传输数据时使用明文而导致的不安全问题。 SSL 是 HT…

【数据结构】零碎知识点(易忘 / 易错)总结回顾

一、数据结构的概念 数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。 二、算法 算法(Algorithm)就是定义良好的计算过程,它取一个或一组的值为…

二分图算法总结 C++实现

总体概念 染色法 基本思路步骤 将所有的边及其相接的边用邻接表存储起来;遍历所有的点,找到未上色的点;用BFS将该点及其相接的点迭代上色;在上述染色步骤中,如果相邻点的颜色相同则无法形成二分图; 题目…