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

湖科大计网:传输层

一、传输层概述

一、基本概念

传输层是端到端的协议。

因特网的两种不同的传输层协议:

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表示自己已经发送完毕,继续进一步释放连接。

三、总结

http://www.lryc.cn/news/237494.html

相关文章:

  • 设计模式(二)-创建者模式(3)-抽象工厂模式
  • [计算机网络]网络层概述
  • 猫12分类:使用yolov5训练检测模型
  • Kubernetes Dashboard部署ImagePullBackOff问题处理
  • 十四、Docker的基本操作
  • C#,数值计算——插值和外推,分段线性插值(Linear_interp)的计算方法与源程序
  • 详细讲解什么是单例模式
  • 在springBoot中同时使用mysql和MongoDB
  • 2023.11.19 hadoop之MapReduce
  • 力扣第841题 钥匙和房间 C++ DFS BFS 附Java代码
  • React 中 react-i18next 切换语言( 项目国际化 )
  • antd design 5 版本 文件上传
  • 【如何学习Python自动化测试】—— 浏览器操作
  • Python编程技巧 – 使用字典
  • el-tree 与table表格联动
  • Leetcode刷题详解——删除并获得点数
  • HTTP四种请求方式,状态码,请求和响应报文
  • Python - Wave2lip 环境配置与 Wave2lip x GFP-GAN 实战 [超详细!]
  • 2311rust,1.31版本更新
  • 文心一言-情感关怀之旅
  • 下厨房网站月度最佳栏目菜谱数据获取及分析PLus
  • buildadmin+tp8表格操作(5)自定义组装搜索的查询
  • 企业级固态硬盘如何稳定运行?永铭固液混合铝电解电容来帮忙
  • 【MISRA C 2012】Rule 4.2 不应该使用三连符
  • spring boot加mybatis puls实现,在新增/修改时,对某些字段进行处理,使用的@TableField()
  • 如何构建风险矩阵?3大注意事项
  • SpringSecurity5|12.实现RememberMe 及 实现原理分析
  • 持续集成交付CICD:Jenkins Sharedlibrary 共享库
  • Linux--网络编程
  • 数据结构 并查集