网络 - 传输层

236 阅读4分钟

TCP(transmission control protocol)传输控制协议

特点:

  1. 面向连接,传输数据之前需要通过三次握手建立连接,数据传输之后需要通过四次挥手释放连接
  2. 可靠传输,通过停止等待协议实现, 无差错 不丢失 无重复 按顺到达
  3. 面向字节流,当发送方发送报文到TCP缓冲区, tcp可以根据实际情况(发送窗口=min(接收窗口,拥塞窗口))发送多少个字节
  4. 流量控制,通过滑动窗口协议来实现
  5. 拥赛控制,通过 慢开始->拥赛避免->快重传->快恢复

连接过程

1. 三次握手

  1. 由客户端向服务器发送SYN同步报文
  2. 当服务端收到SYN同步报文后,会返回给客户端ACK确认报文和SYN同步报文
  3. 客户端收到ACK确认报文和SYN同步报文后,会向服务端回一个ACK确认报文,此时客户端和服务端的连接正式建立

2. 四次握手

  1. 由客户端向服务端发送一个FIN结束报文
  2. 服务端会返回给客户端一个ACK确认报文,此时客户端发起的断开连接已经完成
  3. 服务端向客户端发送一个FIN结束报文
  4. 客户端会返回一个ACK确认报文给服务端, 至此,由服务端方向的断开连接已经完成

可靠传输:

停止等待ARQ(自动重传请求)协议

  1. 无差错情况
  2. 超时重传(发送方超时重传):当发送发发送报文,在规定时间内没有收到接受方的确认,发送方会重传报文,如果超过重传限制,会关闭连接
  3. 确认丢失(接收方丢弃重复的报文),当接收方接到发送方重复的报文, 会丢弃重复的报文,向发送方重传第一次收到的确认报文
  4. 确认迟到(发送方确认),当发送方出现超时重传时, 第一次发送的报文的确认后面才到达客户端,客户端收下迟到的确认, 但什么也不做

包重传次数:一个包的重传次数由系统决定,比如有些系统5次,如果重传5次还没成功就会发送一个reset报文(RST)断开TCP连接

连续ARQ协议 + 滑动窗口协议

SACK 选择性确认

原因:
  1. 在TCP通信过程中,如果发送序列中间某个数据包丢失(比如1、2、3、4、5中的3丢失了)
  2. TCP会通过重传最后确认的分组后续的分组(最后确认的是2,会重传3、4、5)
  3. 这样原先已经正确传输的分组也可能重复发送(比如4、5),降低了TCP性能
改进:
  1. 为改善上述情况,发展出了SACK(Selective acknowledgment,选择性确认)技术
  2. 告诉发送方哪些数据丢失,哪些数据已经提前收到
  3. 使TCP只重新发送丢失的包(比如3),不用发送后续所有的分组(比如4、5)

流量控制

  1. 通过滑动窗口来控制

拥赛控制

原因:
  1. 防止过多的数据注入到网络中
  2. 避免网络中的路由器或链路过载
过程:
  1. 慢开始 (拥塞窗口指数增⻓到阀值 ssthresh)
  2. 拥塞避免 ( 拥塞窗口加法增大, 线性增⻓)
  3. 网络拥塞 (丢包)
  4. 快重传算法 (接收方连续发送三个重复的确认报文M2, 接收方收到三个连续的对M2的重复确认,就理解重传M3)
  5. 乘法减小 阈值减半
  6. 快恢复: 从新的阈值开始进行线性增⻓

拥塞窗口: 一次可以发多少个端 ssm(数据链路层 1500 -> 网路层1480 -> 传输层 1460)

发送窗口 = min(接收窗口 拥塞窗口)

UDP(user datagrama protocol)用户数据报协议

特点

  1. 无链接,减少了建立和释放连接的开销
  2. 尽最大能力交付,不保证可靠传输, 因此不需要维护负责参数, 首部只有八个字节(TCP首部至少二十个字节)
  3. 面向报文,对于上层应用层的报文,既不合并也不拆分, 原封不动的作为传输层UDP的用户数据报的数据部分, 然后拼接一个UDP头部组成了UDP数据报,往下传递

数据结构