IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 计算机网络笔记(七) -> 正文阅读

[网络协议]计算机网络笔记(七)


前言

本篇是计算机网络的第七部分,主要是运输层的相关内容。


一、运输层概述

前面的物理层、数据链路层、网络层共同实现了主机到主机之间的通信,但实际上在计算机网络中进行通信的真正实体是位于通信两端主机中的进程。
运输层的任务是为运行在不同主机上的应用进程提供直接的通信服务。运输层的作用范围是应用进程到应用进程,又称为端到端。

在这里插入图片描述

1、端口号

在这里插入图片描述
关于使用端口号通信的具体过程:
假设同一个以太网中有DNS服务器,Web服务器和PC。DNS服务器中有IP地址个域名的对应关系。

  1. 用户PC向DNS服务器发送DNS请求报文(询问某域名对应的IP地址),运输层给报文加上UDP首部,其中源端口从短暂端口号中随机选择,目的端口为53(熟知端口号)
  2. DNS服务器收到后根据目的端口找到DNS程序并查询到域名对应的IP地址,然后再发回给用户PC。
  3. 用户PC得到Web服务器的IP地址,向Web服务器发送HTTP请求报文。运输层给报文加上TCP首部,其中源端口从短暂端口号中随机选择,目的端口为80
  4. Web服务器收到后同上将网页内容发回给PC。用户PC的HTTP进程解析出网页内容并显示。

二、TCP

1、流量控制

一般来说,我们总希望数据传输能够快一点,但是太快可能接收方来不及接收导致丢包。所以就需要流量控制。

TCP的流量控制是通过滑动窗口实现的,即目的主机在来不及接收时减小自己的接收窗口大小并在TCP确认报文中告知发送主机,发送主机收到后调制发送窗口大小与接收窗口大小一致。

一旦TCP的发送窗口大小被调整为0后,发送方就会停止发送TCP报文,如果接收方可以接收了,会发送确认报文调整发送方发送窗口大小。但是如果这个调整的报文丢了,发送方不知道,就会一直不发送,连接就会产生死锁。所以TCP为每一个连接设置一个持续计时器。当窗口大小调整为0后,计时器开始计时,超时发送方就发送一个零窗口探测报文(一字节),接收方收到后发送确认报文告知发送方当前接收窗口大小,如果不为零就可以发送了,为0则继续重启计时器。

2、拥塞控制

拥塞是指某段时间内,对网络的某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏。如果不对拥塞进行控制,网络吞吐量将随输入的符合增大而下降,如图所示,实际我们希望拥塞控制的效果越接近理想状态越好。
在这里插入图片描述

接下来是拥塞控制的四种算法——慢开始、拥塞避免、快重传、快恢复,这里以TCP最大报文段的个数为单位讨论而不是字节,另外不考虑其他因素对窗口大小的调整。关于拥塞控制的基本思想:
在这里插入图片描述

1、慢开始算法

  • 开始时拥塞窗口大小cwnd=1,慢开始门限ssthresh大小为16
  • 每收到一个确认报文就将拥塞窗口大小×2,然后开始下一轮(一轮指将当前窗口内的报文全部正确发送到接收端)传输

2、拥塞避免算法
当窗口大小达到门限时,使用拥塞避免算法,即窗口大小不再×2,而是加1。

当出现超时重传,就认为网络出现拥塞,进行以下操作:

  • 将ssthresh大小设置为发送拥塞时窗口大小cwnd的一半
  • 将cwnd重新设置为1,后面继续执行慢开始算法

有时候个别报文段会在网络中丢失但是网络并未发生拥塞,这将导致误认为发生拥塞,发送窗口减小,影响发送效率。于是就提出了快重传和快恢复算法,避免对拥塞的误判。
快重传:
在这里插入图片描述

快恢复:
在这里插入图片描述

3、超时重传时间

简单来看,超时重传时间RTO仅需要略大于RTT即可。但是,在复杂的网络环境下,RTT会收到路由选择以及网络传输速率的影响从而发生波动,此时如何选择合适的RTO就显得非常重要。于是便提出了如下所示的RTO算法:在这里插入图片描述
α \alpha α越大,新样本对结果的影响越大,反之亦然。这样计算出的 R T T S RTT_{S} RTTS? R T T D RTT_{D} RTTD? 相较于直接使用更加平滑,可以看出测量出的RTT的值对RTO有很大影响,如何测量RTT呢?

简单情况下,只要在发生报文时开始计时,在接收到确认报文时计算计时时间就能得到RTT,但是可能会出现以下两种情况:

在这里插入图片描述
以上问题是由于超时重传导致的RTT测量不准确,那么对于这一问题,就提出了新的解决方法:在计算 R T T S RTT_{S} RTTS?时,只要发生了超时重传,就不使用该次传输测量的RTT,也就不更新RTO。
但是这样又引出了新的问题:报文段的时延突然增大了很多,并且之后很长一段时间都会保持这种时延。因此在原来得出的重传时间内,不会收到确认报文段,于是就重传报文段。但是因为不考虑重传的报文段的往返时间样本,超时重传时间就无法更新。这会导致报文段反复被重传。
于是就要对上述方法进行修正,具体做法为:报文段每重传一次,就将RTO增大一些(常见为×2)

4、可靠传输

TCP和UDP的区别

1、使用UDP通信的双方主机可以随时发送数据;使用TCP双方传输前需要通过“三次握手”建立连接,传输完成后需要“四次挥手”释放连接。
2、UDP支持单播、多播、广播;TCP仅支持单播。
3、报文传输的区别:
在这里插入图片描述
TCP面向字节的特点也是它实现可靠传输、流量控制和差错控制的基础(图中只有一个方向,但TCP是全双工的)。TCP会先将收到的字节存在缓冲区,攒到一定大小(和发送的数据块大小无关,但总大小应该一致)再向上交付。
4、UDP提供的是不可靠服务,即仅丢弃错误数据报不做任何处理,因此适用于IP电话、视频会议等实时应用;TCP提供可靠传输服务,不会出现传输差错,适用与文件传输等。
5、UDP首部非常简单仅有8字节:
在这里插入图片描述
而TCP由于需要实现可靠传输,首部要复杂的多,这个我们后面会聊到。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-18 10:36:22  更:2021-09-18 10:39:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:56:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码