运输层

  • 运输层的功能:为不同主机上的进程提供逻辑通信

运输层与网络层的关系 :网络层为运输层提供服务,运输层构建在网络层之上

运输层协议

  • TCP
  • UDP

运输层通过Socket端口来实现多路复用与多路分解

UDP

  • 对发送时间以及发送内容控制能力更强
  • 无连接
  • 无状态
  • 分组首部小
  • 支持一对一、一对多、多对一和多对多的交互通信

虽然 UDP 不提供可靠交付,但在某些情况下 UDP 确是一种最有效的工作方式(一般用于即时通信),比如: QQ 语音、 QQ 视频 、直播等等

UDP首部

2020379295

TCP

面向连接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流,每一条 TCP 连接只能是点对点的

TCP首部

20203793059

序号:对字节流进行编号,序号为 301,表示第一个字节的编号为 301,如果携带的数据长度为 100 字节,那么下一个报文段的序号应为 401

确认号:期望收到的下一个报文段的序号,例如 B 正确收到 A 发送来的一个报文段,序号为 501,携带的数据长度为 200 字节,因此 B 期望下一个报文段的序号为 701

数据偏移:也就是首部的长度

RST/SYN/FIN 用于连接的建立与拆除 URG 代表是上层紧急数据 ACK 确认 PSH 尽快交给应用层

窗口:窗口值作为接收方让发送方设置其发送窗口的依据

RTT 估计

一个报文段从发送再到接收到确认所经过的时间称为往返时间 RTT

均值RTT = 0.875 * 均值RTT + 0.125 * 样本RTT

可靠数据传输

20203795214

TCP使用以下方式保证可靠传输:

  1. 应用数据被分割成 TCP 认为最适合发送的数据块。
  2. TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。 校验和: TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
  3. TCP 的接收端会丢弃重复的数据。
  4. 流量控制: TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制)
  5. 拥塞控制: 当网络拥塞时,减少数据的发送。
  6. ARQ协议: 也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。
  7. 超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

ARQ协议

通过使用确认和超时这两个机制,在不可靠服务的基础上实现可靠的信息传输

停止等待ARQ协议

每发完一个分组就停止发送,等待对方确认(回复ACK)。如果过了一段时间(超时时间后),还是没有收到 ACK 确认,说明没有发送成功,需要重新发送,直到收到确认后再发下一个分组

连续ARQ协议

发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认

流量控制

  • 滑动窗口

2020379557

接收方通过在报文段中添加接口窗口字段来进行双方之间的速度匹配 接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据

拥塞控制

拥塞控制就是为了防止过多的数据注入到网络中,这样就可以使网络中的路由器或链路不致过载

为了进行拥塞控制,TCP 发送方要维持一个 拥塞窗口(cwnd) 的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化

原则

  • 报文段丢失时发送方降低速率
  • 未确认报文段确认到达时,发送方增加速率
  • 带宽探测

慢启动

慢开始算法的思路是当主机开始发送数据时 较好的方法是先探测一下,即由小到大逐渐增大发送窗口

20203795753

不断增加直到超时,超时后将cwnd/2

拥塞避免

让拥塞窗口cwnd缓慢增大,即每经过一个往返时间RTT就把发送放的cwnd加1.

快重传与快恢复

20203710029

公平性

UDP源有可能压制TCP流量

  • 明确拥塞通知:由路由器在报文中插入当前路由器的拥塞情况

连接管理

三次握手

20203793532

  • 客户端–发送带有 SYN 标志的数据包–一次握手–服务端
  • 服务端–发送带有 SYN/ACK 标志的数据包–二次握手–客户端
  • 客户端–发送带有带有 ACK 标志的数据包–三次握手–服务端

第一次握手:Client 什么都不能确认;Server 确认了对方发送正常,自己接收正常

第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,自己接收正常

第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常

所以三次握手就能确认双发收发功能都正常,缺一不可

客户端:A 服务端: B

屏幕截图 2020-09-13 105531

为什么要回传SYN:

接收端传回发送端所发送的 SYN 是为了告诉发送端,我接收到的信息确实就是你所发送的信号了

同样 使用ACK服务端就能验证客户端

四次挥手

20203794049

  • 客户端发起一个关闭连接的请求,服务器响应这个关闭请求
  • 此时,客户端不能再向服务端发送数据,但是服务器可以发送数据给客户端,当服务器的数据传送完毕,向客户端发送一个关闭连接的请求
  • 客户端接收到服务端的关闭请求后,再发送一个确认消息,等待2MSL的时间,关闭
  • 服务端接收到客户端的最后一个关闭请求后,关闭

等待2MSL时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文

TCP状态转化

屏幕截图 2020-09-28 135050

影响网络传输的因素:

  • 网络带宽
  • 传输距离造成的时延
  • 拥塞控制

results matching " "

No results matching " "

results matching " "

No results matching " "