Unit 2. Transport

传输层

本单元着重讲解传输层。

主要是了解通讯中的数据传输问题。

Main Topics

  • 三种广泛的协议

    • TCP 应用间字节流的可靠传输

    • UDP 应用间数据报的不可靠传输

    • ICMP 检测何时出问题

  • TCP 的工作原理

    • 滑动窗口

    • Go back n

    • Selective repeat

    • TCP State Machine

  • End to End 原则

  • 3 种 数据安全 错误检测方法

1. The TCP Service Model

TCP 按顺序提供了可靠的端到端字节流交付服务。

1.1. Transmission Control Protocol (·TCP)

Peer TCP layers communication

TCP 间的通讯通过三次握手建立连接

  • SYN

    • A 发送 B 同步信号,起始编号

  • SYN + ACK

    • B 返回 A 同步信号,和逆向起始编号

  • ACK

    • A 发送 接受 B 反向通讯的请求

1.2. TCP 字节流 服务

字节流是一个字节的时间序列。

TCP 把常见的传输形式看作字节流

  • 流 stream 可以进行分割为 段 segment

  • 如果传输没有回应会选择重发(简单粗暴)

1.3. Connection teardown

连接关闭

  • Fin

    • A 发送 Finish 表示结束

  • Data + Ack

    • B 选择回应,或同时发送新数据表示未关闭

  • Fin

    • B 发送 Finish 表示结束

  • Ack

    • A 发送 ACK 表示回应,确认连接已经关闭

1.4. Model 表现

  1. 提供可靠的字节流传输服务

  2. 可靠传输

    1. Ack 表示接受信号

    2. 校验和 Checksums

    3. 序列号来进行数据的丢失检测,也就是一开始发送的 起始编号

    4. 流量控制防止双方过载,如果 A 快于 B 或相反,TCP提供服务来确定双法国可以继续发送数据

  3. 序列号传输

  4. Controls network congestion

1.5. TCP Segment Format

|TCP Data | TCP Hdr| -> |IP Data |

|IP Data | IP Hdr|

体现了封装的重要性

HDR

包含以下字段

  1. Source port

  2. Destination port

  3. Sequence

  4. Ack Sequence

  5. Checksum

  6. Window size

  7. Urgent pointer

  8. (TCP Options)

1.6. TCP Unique ID

  1. Host A 会使用递增的 port 来标识新连接

  2. TCP picks ISN 来避免和以往的连接 ID 相同

1.7. Sequence Numbers

会告诉 主机 数据段的起始值 和长度,也就是下一次传输的偏移量。以便进行初步丢包校验。

TCP 包会封装到 IP 数据段

1.8. TCP Sliding Window

后面会学...

2. The UDP Service Model

or the User Datagram Protocol,提供给那些不需要严格的 TCP 协议的应用使用

2.1. UDP Datagram Format

简单的 Source port 和 Destination port。

还有

  • Checksum (optional),如果使用,会覆盖部分的 UDP 数据头

  • Length,至少为 8 字节,这是 UDP 头部的长度

2.2. UDP: Port Demultiplexing

UDP 可以看作是多路分解西医

2.3. UDP 表现

  1. 无建立连接,packets 可能会以任何顺序出现。

  2. 但可以重新排序,根据序列号

  3. unreliable delivery

    1. 没有 Ack

    2. 没有 丢包检测(window size 和 sequence)

    3. 没有 flow control

那为什么还用呢?

  • 只是提供简单的 request - response 应用。

  • 使用更少的字节提供基础服务。轻量而快速。

  • 有关 DNS,后面会学

3. The ICMP Service Model

The Internet Control Message Protocol - 为网路层服务 - 尽管他在 IP 层之上,看似在 传输层 工作

互联网控制消息协议 - 用于报告错误和诊断问题

3.1. 网络层的工作

  1. IP

    1. IP 数据包

    2. 逐跳传输数据

  2. 路由表

    1. 利用 算法 来填充路由器 转发表

  3. ICMP

    1. 帮助 host 和 router 的交流

    2. 报告 error

    3. 找出出问题的数据包路径

3.2. ICMP run above the Network Layer

实际上在一些连接检验其作用。

EXAMPLE: 目标不可达。

  • 目标地址在路由器的转发表不存在

  • Destination Network Unreachable

3.3. ICMP 表现

  1. Reporting Message,自带报错信息

  2. Unrelliable,仅仅提供简单的 数据报服务 - and no retries......

3.4. ICMP Message Type

不用记,用到再查 - Internet RFC 792

  • 0 - 0 - 回应应答

  • 3 - 0 - 目标网络不可达

3.5. How "ping" uses ICMP

ping 用来检查 B 和主机是否有连接

ping 可以直接调用 ICMP,通过发送一个 ICMP 回显请求

3.6. How "traceroute" uses ICMP

traceroute 告诉我们数据包跳转经过的路径,同样会调用 ICMP

通过发送 UDP 来实现,包含生存时间 TTL

  • 例如 TTL = 0 时候会返回 ICMP 11, TTL Expired

  • 等等,诸如此类

4. The End-to-End Principle

  • 正确性

  • 强端到端原则

4.1. Application View of the World

基本的网络通信比较简单 只需要基本的 socket 套接字,即可完成

网络的帮助很大!

  • 压缩数据

  • 格式化、翻译、改善 请求

  • 添加安全性,加密

  • 移动性支持,在网络中迁移链接...

  • any other

但是为什么没有 ?

它能保证帮助,但仅仅是帮助,不能实现主体。主题还得靠 端到端原则

4.2. Example: File Transfer

数据的传输在每一跳的节点都有 Error detection,但这其实并没有达到目的。它只会检测 传输的错误,而不是存储中的错误。

确保文件正确到达的唯一方式 还得是 端到端原则

还是那句话:

网络可以帮助,但不能完全保证正确性...

4.3. Example: Link Reliability

链路层的帮助极大的提升了性能。

在中间层可以做一些优化,但是无法避免有一天它会失效

有线链路

  • 非常可靠

  • 99.99% 的正确发送包率

无线链路:

  • 进行重传来保证正确性

  • 50 ~ 80% 的正确发送包率

  • 但是可以通过优化来达到约 99%

4.4. "Strong" End to End

不要在中间层实现,只应在网络边缘执行

强调了简洁性...认为在中间层做优化并不总是正确的事情...

而且在中间层做优化会导致网络僵化...后续难以改变

5. Error Detection: 3 schemes

端到端原则

了解差异...做出正确的协议决策

  • Checksum 校验和

  • CRC 循环冗余校验码

  • MAC 消息认证码

5.1. Error Detection

在数据的头部或者尾部加入校验的功能。

如 CRC、TLS MAC...

5.2. Checksum

  • fast and cheap

  • not very robust 比较脆弱

  • IP\USP\TCP 使用 one's complement checksum algorithm 补码

IP Checksum

对比特位进行运算...作为数据包的校验和

5.3. Cyclic redundancy code

  • 计算成本高于 checksum,鲁棒性也更好

  • 可以检测更多的错误

  • 在当今的硬件很容易实现。特别在 link layer

主要思想

将 n bits 的数据 提取为 c bits 且 c << n

但是不能匹配所有的数据包。2-c change another packet's CRC matches

涉及到计算多项式 以及 一些特殊计算方法。

5.4. Message authentication code

  • 只有拥有秘密信息者可以查看信息。

  • 对恶意修改具有很强的抵抗力,but not error

主要思想

千万不要与 Media Access Control (MAC) 地址混淆...

强大的密码学原理使得,如果你更改某个 bit of M,将会导致一个全新的 MAC......

  • 错误检测能力不如 CRC

5.5. Quiz

错误检测

8/16 Checksum:

  • 1 bit 错误

  • 不能检测 2 bit 错误

  • 不能检测 9 bit 错误

  • 不能检测相隔 100 bits 的错误

8/16 CRC:

  • 1 bit 错误

  • 2 bits 错误

  • 8 bits CRC 不能检测 2 bit 错误,16 bits 可以

  • 不能检测相隔 100 bits 的错误

32 MAC:

  • 不能保证检测到任何错误!

6. Finite State Machines

有限状态机

由有限状态组成,状态的边定义了 事件 event 和 行动 action

状态机只允许系统进入一种确定状态

6.1. FSM Example: HTTP Request

请求事件 可以导致 不同状态

例如 HTTP 的请求,导致不同的 响应

需要考虑具体的情况:

诸如

  • 空闲状态的特殊请求

  • close connection

  • 未定义状态或操作

用户需要制定协议

6.2. FSM Example: TCP Connection

课件上的例子。具有 TCP 的不同状态,状态切换,类似数电的状态转移图...状态机,只不过将情景转化为了网络的情况。

例子比较简单,借此机会复习了 TCP 连接的具体思路。有关三次握手。

下面在 CSDN 上找了个中文图片

7. Flow Control - Stop and Wait

Stop and Wait 流量控制算法

当某一方的收发数据不对等时,流量控制作为实现简单高效通信的重要因素之一。

  • 发送方不要超过接收方

  • 接受对方会给发送方某种 显性或者隐性的反馈

  • 滑动窗口(后续会讲)

7.1. Stop and Wait

基本算法 是 发送方 会等 接收方 发送 接受信息 后才会发送下一个 数据包。

如果长时间没有 回复,就会重发数据。

但是问题接踵而至:

如果网络延迟,如何判断 Data 和 ACK 的对应关系?

  • 使用 1 bit 的 cnt 可以解决

  • 标注 Data 0 对应 ACK 0

  • Data 1 对应 ACK 1

  • 但会有其他问题,比如多倍长时延迟

8. Flow Control - Slip Window

前情提要:SW 算法有一些弊端难以避免,适合在一些理想环境的 Network 使用

Problem:

  • Bottleneck:传输瓶颈:10 Mbps,代表接收方的最大接受数据量 per second

  • RTT:往返时间

SaW 算法效率往往底下,不能充分利用网络容量

这是用我们可以使用段的思想。发送多个数据包(包数量称为窗口),一旦接收信号到达就发送下一个数据包。保持每次都有 window size 的数量的数据包在传输

窗口大小可以进行动态调整

8.1. Sliding Window Sender

  • 每一段都有一个序列号 - SeqNo

  • 维护着 三个变量

    1. Send window size(SWS)发送窗口大小

    2. Last acknowledgment received(LAR)接收方的最后一个确认 的位置编号

    3. Last segement sent(LSS)最后一个发送的段 的位置编号

  • 维护一个不等式

    • LSS - LAR <= SWS

    • 也就是 最后一个发送 - 最后一个接收 <= 窗口大小

  • 更新 LAR 当有新的确认时

  • 选择性确认

  • NOTE: TCP 不是确认它接受到的数据 n ,而是确认 n + 1

8.2. Example

Receive window size,接收方缓存的大小内的包接收方可以一并缓存。

接收方实际上会连续发送两次 的连续最后接受数据 ACK,来提醒发送方丢包。

累计确认

9. Retransmission Strategies

传输协议的重传策略,需要小心的选择策略,根据多方因素(如 SWS\RWS)。

  • go back n 回退重传 - pessimistic behavior,如果一个数据包丢失,我们会停止传输,回退 n 个数据包并重传

  • selective repeat 选择性重传

9.1. Go-Back-N

将丢包之后的包也重发一遍,就像事件倒流一样。

如果接收方窗口大小为 1,实际上它只能 go back n

9.2. Selective Repeat

只重新传那个没有 收到 ACK 的。但如果有大量数据包丢失,这个策略其实比 go back n 更慢。

如果 接收方窗口大小 与 发送方大小均为 n,实际上它可以冒险的使用 selective repeat

10. TCP Header

32 bits 4 octets

  • source port

  • destination port

  • sequence number

  • acknowledgment number

  • offset: 告诉你每次的偏移量

  • reserved

  • U: urgent bit

  • A: ack bit 建立的时候没有 ACK

  • P: push bit

  • R: reset 发生了错误

  • S: SYN 建立的时候需要告诉 序列号

  • F: FIN 拆除链接

  • window

  • checksum

  • urgent pointer: 如果有 U,会指向此数据

  • options

  • padding

10.1. 安全性

固然可以每次使用同一个序列号,但是人们就可以猜测你的序列号,然后插入一些致命的数据包

11. TCP Setup and Teardown

  • 三次握手

  • 同时打开现象

  • TCP有限状态机

11.1. 3-way Handshake

回顾一下 TCP 的 Header,connection setup.

下面详细了解三次握手的过程

  • 随机化起始序列号

    • 避免别人插入数据

    • 避免与其他包混淆

一方主动,标准三次握手

  • 发送端是 active 的

  • 接收方是 passive 的

  • 双方互相知道对方的端口号

11.2. simutaneous open 同时打开现象

双方主动,四次握手

  • 发送端是 active 的

  • 接收方是 active 的

  • 双方同时回应...形成四次握手

11.3. Connection Tearfown

需要使用 Fin bit......

  • Both sides must send FIN to terminate a connection

  • 典型关闭交换

    • A -> B: Fin, seq SA , ack SB

    • B -> A: ack SA+1

    • B -> A: FIN, seq SB , ack SA+1

    • A -> B: ack SB+1

    • 对于 seq,确认的方式是 ack + 1

    • 对于 fin,确认 FIN 即可,甚至可以并行 FIN

11.4. Cleaning Up Safely

  • 发送了最后一个 ACK 之后 不能马上发送 FIN

    • 最后一个包丢了怎么办?

  • 主动关闭者会进入一个 TIME WAIT 阶段

    • 称为 2MSL 最大的段寿命

11.5. 三次握手 关闭连接

  1. 发送 FIN0,确认之前的一些数据

  2. 确认 FIN0,发送你自己的 FIN1

  3. 确认 FIN1

11.6. Full TCP FSM

整合上述的和之前所学的内容可以得到一个完整的 TCP 有限状态机

一共有 12 个状态。(我一直觉得自己画一次这个图是很好的练习...)

Last updated