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 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Computer Networking: A Top-Down Approach 笔记 Chapter 3 Transport Layer -> 正文阅读

[网络协议]Computer Networking: A Top-Down Approach 笔记 Chapter 3 Transport Layer

完整笔记
第三章是整本书最核心的部分



前言

一、思维导图

在这里插入图片描述

二、第三节内容

1. Transport-Layer services

transport-layer protocols 提供 logical communication(逻辑通讯)

运输层在端系统的工作
sender: 分割application message 为 segments,并传给网络层
recevier: reassembles(重组)segments 成 messages, 并传回应用层

2种 transport protocols:

  • UDP(User Datagram Protocol)
  • TCP (Transmission Control Protocol)

1.1 Example:transport & network layer protocol

下图是一个类比用于分清hosts, process ,app messages
两个家庭各有12个小孩,互相写信
主机:家庭
进程:孩子
应用层数据:信件中的字符
运输层协议:家长收齐信件并寄信/收到邮件后分给小孩
网络层协议:邮政服务
在这里插入图片描述
网络层: logical communication bewteen hosts
运输层: logical communication bewteen processes

1.2 Transport layer actions

(Sender & Receiver)
在这里插入图片描述
在这里插入图片描述

1.3 TCP & UDP

TCP:

  • reliable, in-order delivery
    (正常运转时数据都是按顺序的,字节流传输)
  • congestion control
  • flow control
  • connection setup(需要建立连接)

UDP:

  • unreliable, unordered delivery
  • no-frills extension of best effort IP
    随遇而安,不保证能达到最优

两个协议都不提供延迟和带宽保证

2. Multiplexing(多路复用) & Demultiplexing(多路分解)

通过这两幅图很好理解
在这里插入图片描述
在这里插入图片描述
demultiplexing工作原理:
每个数据报都含有source port & dest port
主机根据这两个信息把报文段发送个合适的socket
在这里插入图片描述
Multiplexing & demultiplexing 都是基于报文段,数据报首部的字段值,发生在所有的 layers
UDP:demultiplexing 只依赖于 dest port number
TCP: demulitplexing 依赖于source & dest & ip address and port number

3. Connectionless transport : UDP

没有握手的过程,会存在乱序,丢失
每个UDP 报文处理独自

使用UDP的原因:

  • 不需要连接
  • 简单
  • 首部字段小
  • 没有拥塞控制

在这里插入图片描述
在这里插入图片描述

3.1 Exmaple:checksum

在这里插入图片描述
多出来的1放到尾部(利用模运算)
carryout(进位)
significant bit(最高位)

4. Principles of reliable data transfer

整本书最重要的内容
理想的可靠传输的抽象
在这里插入图片描述
但现实是下图
在这里插入图片描述
因此需要解决存在的许多问题
在这里插入图片描述

4.1 Reliable data transfer protocol(可靠传输协议)

Reliable data transfer protocol(rdt)
Unreliable data transfer protocol (udt)
在这里插入图片描述

4.2 Finite state machines(有限状态机)

在这里插入图片描述

4.21 Rdt 1.0

Reliable Data Transfer over a Perfectly Reliable Channel
没有丢失没有错误的理想状态
在这里插入图片描述

4.22 Rdt 2.0

Reliable Data Transfer over a Channel with Bit Errors
存在错误
Acknowledgements(ACKs): 接收方告诉发送方没有问题
Negative acknowledgements(NAKs): 接收方告诉发送方存在错误
形成了停止等待机制
在这里插入图片描述
存在的问题:
ACK/NAK可能出错,不能简单的重传(可能正确接收了,只是没有收到ACK)

4.22 Rdt 2.1

Protocol Rdt2.1 增加 sequence number(序列号)
handle garbled(混淆) ACK/NCKs
在这里插入图片描述
在这里插入图片描述
序列号只是0和1可能不够用,比如出错了,不能确定到底是数据出错还是ACK/NCKs出错

4.22 Rdt 2.2

using ACKs only
在这里插入图片描述

4.23 Rdt 3.0

Rdt 2.1和Rdt2.2解决了错误的问题,但是没有解决丢失的问题
丢失问题多半是由于拥塞引起的丢包,因此可以预留等待时间
在这里插入图片描述
在这里插入图片描述
Rdt3的效率计算如下图,可以看出准确率很高,效率很低
在这里插入图片描述

4.3 Pipelined operation

为了解决Rdt3效率低的问题,通过流水线机制快速的发送多个包
在这里插入图片描述

4.4 Go-Back-N

Go-Back-N:sender
回退N
N就是滑动窗口的大小
窗口可以不断自适应的调整(根据网络是否拥堵和接收方要求)
在这里插入图片描述
cumulative ACK(累计确认)
timeout(n): 超时就重新发送第n个包

Go-Back-N: receiver
ACK-only: 发送到n个为止的最后一个按顺序的
(可能出现数据重复)

on receipt of out-of-order packet
rcv_base指针指到正确的指到哪

4.41 Example: Go-Back-N in action

在这里插入图片描述
这里出现的问题,通过拥塞控制后不太可能出现,就算出现了根据算法也可以很快推断出哪里出了问题

4.5 Selective Repeat

选择重传(不像之前是累计重传)
在这里插入图片描述
Sender:

  • Data received from above:接收到的数据发送成包
  • Timeout:重发第n个包,并且重置倒计时器
  • ACK(n) in [sendbase, sendbase + n]: 把第n个包标记为已接收,如果n个包全部接受,就把窗口右移

Receiver:
接收方如果收到接受窗口中的数据就发第N号的确认

  • packet n in [rcvbase, rcvbase+N-1]:
    send ACK(n)
    如果乱序存入缓存
    如果顺序就发送,然后移动窗口
  • packet n in [rcvbase-N, rcvbase-1]:
    ACK(n)
  • otherwise
    忽略

注意区分上下两幅图的区别(是否是selective reapeat)
receive pkt3 ack1
receive pkt3 ack3
这里没有用书上的图,用的是ppt里的,感觉比书上的要更清晰易懂一些
在这里插入图片描述
在这里插入图片描述
一个存在的问题
窗口太大,同时容纳重传和下一次的数据
分不清
在这里插入图片描述
解决结论:序号要足够多,至少是窗口大小的两倍

5. Connection-oriented transport : TCP

TCP:

  • point-to-point 1sender 1receiver
  • reliable, in order byte stream
  • full duplex data 全双工
  • cumulative ACKs
  • pipelining
  • connection-oriented
  • flow controlled

TCP segment structure
在这里插入图片描述
TCP sequence numbers, ACKs
在这里插入图片描述

5.1 TCP round trip time, timeout

timeout longer than RTT, but RTT varies
RTT不是恒定值,用实际测得的值作参数值

f o m a t 1 : {fomat 1:} fomat1:
E s t i m a t e d R T T = ( 1 ? a ) ? E s t i m a t e d R T T + a ? S a m p l e R T T { EstimatedRTT = (1-a) * Estimated RTT + a * SampleRTT } EstimatedRTT=(1?a)?EstimatedRTT+a?SampleRTT
第一次有初始值

f o m a t 2 : {fomat 2:} fomat2:
T i m e o u t I n t e r v a l = E s t i m a t e d R T T + 4 ? D e v R T T { TimeoutInterval = EstimatedRTT + 4*DevRTT} TimeoutInterval=EstimatedRTT+4?DevRTT
DevRTT 偏移量,safety margin
从下图来看估计的RTT和SampleRTT之间,需要预留一些时间

f o m a t 3 : {fomat 3:} fomat3:
D e v R T T = ( 1 ? β ) ? D e v R T T + β ? ∣ S a m p l e R T T ? E s t i m a t e d R T T ∣ { DevRTT = (1-\beta)*DevRTT + \beta*|SampleRTT - EstimatedRTT|} DevRTT=(1?β)?DevRTT+β?SampleRTT?EstimatedRTT
在这里插入图片描述

5.2 TCP flow control

通过窗口写相应的数值来实现
在这里插入图片描述
LastByteSent - LastByteAcked ≤ rwnd

5.3 TCP connection management

在正式传输数据之前,三次握手
这里没有详细的笔记,因为老先生的视频里简单带过,但在考研好像是个重点
(但我不考研,所以这里略过)
在这里插入图片描述

6. Principles of congestion control

现实中有很多个发送方和接收方,导致长延迟和丢包
和流量控制是两码事,发生在传输过程中
scenario 1:简单场景
在这里插入图片描述
在这里插入图片描述

scenario2:现实情况,路由是有限的,情况更糟糕
在这里插入图片描述
在这里插入图片描述
scenario3 :多路同时
在这里插入图片描述
在这里插入图片描述
到最后整个链路不只是拥塞的问题,直接卡死

解决方法:

  • End-end congestion control
    通过数据的丢包和延迟推迟是否发生拥塞
  • Network-assisted congestion control
    路由直接反馈拥塞

7. TCP congestion control

AIMD
一旦发生拥塞,发送速度减半
Additive increase 加性增加
Mulitiplicative decreas 乘性减少
在这里插入图片描述
在这里插入图片描述
图中的TCP Tahoe 和 TCP Reno是两种算法
TCP Tachoe:
开始快速增长,到congestion window(cwdn)一半时,
就进入拥塞避免,开始缓慢增加,直到拥塞,
跌回1
TCP Reno:
连续三次重复ACK就减半

总结拥塞控制:
slow-start 慢启动
congestion avoidance 拥塞避免
fast retransmit 快速重传
fast recovery 快速恢复
在这里插入图片描述

8. Evolution of transport-layer functionality

传输层的发展历史
在这里插入图片描述

总结

这一章是最重要的一章
而涉及TCP的内容更是重中之重

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-04-27 11:39:57  更:2022-04-27 11:41:20 
 
开发: 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 2:22:03-

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