【计算机网络】运输层协议解析

devtools/2024/9/23 0:33:11/

前言

运输层直接为应用进程间的逻辑通信提供服务。

运输层向高层用户屏蔽了下面网络核心细节(如网络拓扑、路由选择协议等)它使应用进程看见的就好像是在两个运输层实体之间有一条端到端的逻辑通信信道。

UDP与TCP对比

  • UDP:
    无连接
    支持一对一,一对多,多对一和多对多交互通信
    对应用层交付的报文直接打包
    尽最大努力交付,也就是不可靠
    不使用流量控制和拥塞控制
    首部开销小,仅仅8字节
  • TCP:
    面向连接
    每一条TCP链接只能有两个端点EP,只能是一对一通信
    面向字节流
    可靠传输,使用流量控制和拥塞控制
    首部最小20字节,最大60字节

TCP流量控制

  • 流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。
    利用滑动窗口机制可以很方便的在TCP连接上实现对发送方的流量控制、
    TCP接收方利用自己的接收窗口的大小来限制发送方发送窗口的大小。
    TCP发送方收到接收方的零窗口通知后,应启动持续计时器,持续计时器超时后,向接受方发送零窗口探测报文。

TCP拥塞控制

  • 网络中某一资源的需求超过该资源所能提供的可用部分,网络性能就要变坏–拥塞
    如果出现拥塞不进行控制,整个网络的吞吐量就将随输入负荷的增大而下降。

TCP超时重传时间选择

  1. RFC6298建议使用一下公式进行计算超时重传时间RTO
    RTO = RTTS + 4 * RTTD
    加权平均往返时间RTTS
    RTTS1 = RTT1
    新的RTTS = (1 - a)*旧的RTTS + a * 新的RTT样本
    0<= a <1
    a的RFC6298推荐值为1/8,即0.125

  2. RTT偏差的加权平均RTTD
    RTTD1 = RTT1 / 2
    新的RTTD = (1 - b)*旧的RTTD + b * |RTTS - 新的RTT样本|
    0<= b <1
    b的RFC6298推荐值为1/4,即0.25

TCP可靠传输实现

  1. TCP基于以字节为单位的滑动窗口来实现可靠传输
    发送方在未收到接收方的确认时,可以将发送窗口内还未发送的数据全部发送出去,接收方只接收序号落入发送窗口内的数据
    虽然发送方的发送窗口是根据接收方的接收窗口设置的,但在同一时刻,发送方的发送窗口并不总是和接收方的接收窗口一样大。
    网络传送窗口值需要经历一定时间的滞后,并且这个时间还是不确定的。发送方还可能根据网络当时的拥塞情况适当减少自己的发送窗口尺寸。
  2. 对于不按序到达的数据如何处理,TCP并无明确规定。
    如果接收方把不按序到达的数据一律丢弃,那么接受窗口的管理将会比较简单,但是不利于网络资源利用。TCP通常对不按序到达的数据是先临时存放在接收窗口中,等到字节流中所缺失的字节收到后,再按序交付上层应用进程。
  3. TCP要求将接收方必须有积累确认和捎带确认机制,这样可以减少传输开销、接收方可以在合适的时候发送确认,也可以在自己有数据要发送时把确认信息顺便捎带上。
  4. 接收方不应过分推迟发送确认,否则会导致发送方不必要的超时重传。
  5. TCP的通信是全双工通信。通信中的每一方都在发送和接收报文。

http://www.ppmy.cn/devtools/115710.html

相关文章

2024.9.22

写了一天的多项式 P3803 【模板】多项式乘法&#xff08;FFT&#xff09; P1919 【模板】高精度乘法 | A*B Problem P4721 【模板】分治 FFT 然后写了两道原题 P9117 [春季测试 2023] 涂色游戏 P9118 [春季测试 2023] 幂次 [P9119 [春季测试 2023] 圣诞树](

javase复习day30综合练习

制造假数据 制造数据 练习一 package Demo1;import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; im…

读取t x t文件生成exce

读取t x t文件生成excel package com.moka.api.custom.core.controller; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermode…

c语言中define使用方法

在C语言中&#xff0c;#define指令是预处理指令&#xff0c;用于定义宏。其常用格式是&#xff1a; 定义常量&#xff1a; #define 常量名 常量值 例子&#xff1a; #define PI 3.14159 #define MAX_SIZE 100 这里&#xff0c;PI和MAX_SIZE在代码中会被替换为其对应的值。没有…

音视频入门基础:AAC专题(8)——FFmpeg源码中计算AAC裸流AVStream的time_base的实现

音视频入门基础&#xff1a;AAC专题系列文章&#xff1a; 音视频入门基础&#xff1a;AAC专题&#xff08;1&#xff09;——AAC官方文档下载 音视频入门基础&#xff1a;AAC专题&#xff08;2&#xff09;——使用FFmpeg命令生成AAC裸流文件 音视频入门基础&#xff1a;AAC…

如何制作ubuntu启动U盘

步骤&#xff1a; 选择一个U盘&#xff0c;千万不要超过32G&#xff08;因fat32不支持超过32G的卷&#xff09;下载ubuntu镜像&#xff0c;我选择的是优麒麟的20.04&#xff0c;主要因为大小适中使用rufus工具将ubuntu镜像写入U盘在新电脑上插入U盘&#xff0c;进bios设置USB启…

ubuntu安装wordpress(基于LNMP环境)

参考链接 Ubuntu安装LNMP 安装步骤 环境需要LNMP环境&#xff0c;如果没有安装可以参考ZATA—LNMP简单安装 在mysql中设置wordpress所用的用户名和密码 #1. 登录mysql mysql -uroot -p #2. 创建wordpress数据库 create database wordpress; #3. 创建新用户user&#xff0c;…

【Taro】初识 Taro

笔记来源&#xff1a;编程导航。 概述 Taro 官方文档&#xff1a;https://taro-docs.jd.com/docs/ &#xff08;跨端开发框架&#xff09; Taro 官方框架兼容的组件库&#xff1a; taro-ui&#xff1a;https://taro-ui.jd.com/#/ &#xff08;最推荐&#xff0c;兼容性最好&…