1、传输层功能
传输层提供端到端的通信,也提供面向连接和无连接的两种服务。
传输层的传输单位称为segment
2、传输层 vs 网络层
传输层提供应用进程之间的逻辑通信机制,网络层提供主机之间的逻辑通信机制,一个主机可以有多个通信进程
3、UDP
User Datagram Protocol是一个无连接的非可靠传输层协议。他在IP纸上值提供2个附加服务:多路复用和对数据的错误检查,他不进行流量控制、拥塞控制和重传,所有维护可靠性的工作应由应用层完成;他指示提供一个与IP协议的接口。
- UDP length是包含UDP Header和数据在内的总字节数,最小是8Byte,最大是65515
- UDP checksum是可选的,如果不想检查就全写0.
2、可靠数据传输
本章为TCP的前置章节
2.1、GBN
Go-Back_N协议,窗口大小为N,发送方每次发送N个分组,接收方收到分组之后返回当前接收到的连续的最大的分组号的ACK,(假设N=6)比如接收方接收到1、2、4、5、6,则接收方会返回1、2、2、2、2,因为没有收到3,所以连续的最大的分组号为2,发送方只判断收到的最大的ACK,目前最大的为2,所以从3号开始发送3、4、5、6,知道收到6为止,移动窗口到接下来N个分组
2.2、SR
Selective repeat,回退N步协议存在一个问题就是当窗口和带宽的时延都较大时,单个分组的差错可能会引起GBN重传大量的分组,然后许多本来不用重传的分组会充斥在信道中,造成资源浪费;选择重传就是让发送方仅重传那些丢失和受损的分组而避免不必要的重传。
窗口长度必须小于或等于序号空间大小的一半
3、TCP
-
点对点
-
可靠的、按序的字节流
-
流水线机制
- 拥塞控制和流量控制
-
全双工
-
面向连接
- sequence number:TCP是面向字节流的,因此它的seq是以字节计数的。例如,一个segment的seq是301,数据长度是100B,那么这个segment就包含了第301-400字节,下一个段的seq就是401
- Ack number:期望收到的下一个segment的seq,例如收到了上面提到的那个段,那么发回去的ack就应该是401
- header length:标识该TCP头部有多长,具体长度为length*4字节,所以TCP头部最长60字节
- Revceive window:标识允许对方发送的数据量,用于流量控制,TCP是全双工的
- checksum:校验和
- Options:0~40 Bytes,但必须是 4 Bytes 的倍数,不足的用 0 补充。最初只规定了 MSS, Maximum Segment Size,即允许对方发来的 TCP segment 中 数据 部分的最大长度。
3.1、TCP连接
3.2、TCP中断连接
3.3、可靠传输机制
-
校验:与UDP相同。序号、确认,使用累计确认
-
重传:
- 超时重传:TCP发送方维护一个Time out Timer,如果超过超时重传时间(RTO)就重新发送这个段。RTO的设置为多个测量的RTT的加权平均
- 收到多个重复ACK:假如发送方发送了 1~5 这几个 segment,但是 2 丢掉了,那么接收方收到 1, 3, 4, 5 时各会发回一个 ACK 2,后面 3 个 ACK 1 是冗余的,提示发送方 2 号 segment 丢掉了。此时发送方可以不必等待超时而是立刻重传 2 号 segment,这种技术称为 快速重传。
3.4、流量控制
- 接收方为发送方分配Buffer,通过在Segment的头部字段将RcvWindow告诉Sender
- Sender限制自己发送的但还未收到ACK的数据不超过接收方的空闲RcvWindow的尺寸
3.5、拥塞控制
- 如何感知网络拥塞?
- Loss事件=timeout或3个重复的ACK
- 发生Loss事件后,发送方降低速率
- 如何合理地调整发送速率?
- 加性增,乘性减
- 慢启动
- Congwin与Threshold
Loss事件发生后,Threshold变为CongWin的一半
- Loss事件的处理
- 3个重复ACK:CongWin切换到一半,然后线性增长
- Timeout:CongWin切换到1,调整threshold,然后指数增长,增长到Threshold后线性增长