Github IO

计算机网络——传输层

运输层概述

TCP面向连接,UDP无连接

套接字 = (IP地址:端口号)

端口号:0~65535(16 bit )

熟知端口号:0~1023

可靠:使用确认机制确保数据不丢失

连接:

UDP

UDP数据报首部

16比特 源端口 16比特 目的端口
16比特 UDP长度 16比特 校验和

UDP校验

  • 错误即抛弃
  • 校验和可选,全0代表不校验,校验和恰好为全0,取全1
  • 校验和采用模2加法(即反码运算)再取反的方法获得。
  • 校验和计算对象为伪首部 + UDP数据报 + 1B填充字段(用来凑齐数据位为16的倍数)

TCP

TCP报文段

首部

  • 16bit源端口 16bit目的端口
  • 32bit序号(发送方)
  • 32bit确认号(接收方)
  • 4bit数据偏移(意味着最长15*4B的首部) 保留 标志位(用于确认机制,TCP连接等),16bit窗口(接收窗口,用于流量控制)
  • 16bit检验和,16bit紧急指针
  • (可变长选项)(填充字段(填充为4B倍数))

TCP连接管理

TCP连接建立

  • --> SYN, seq 客户机伸手
  • <-- SYN, ACK, seq, ack 服务器伸手
  • --> data 客户机握手

客户机握手报文段到达服务器后,服务器才进入连接建立态,所以叫三次握手(实际上第二个RTT的开始就开始传数据了)

TCP连接释放

  • --> FIN 客户机停止传送数据报文
  • <-- ACK 服务器知晓客户机无数据
  • <-- FIN 服务器停止传送
  • --> ACK 客户机知晓
  • --- 客户机等待,仅当服务器知晓 客户机知晓服务器停止 服务器才不会发送报文。服务器收到ACK知道数据传送终止,释放资源,引起客户机超时;超时后客户机知晓对方没有数据传送,释放资源。

TCP可靠传输

校验机制

丢弃校验失败的包(报文段损坏 = 报文段丢失)

确认机制

  • 序号:保证TCP报文段之间的顺序正确,报文段的序号为首字节序号
  • 确认:TCP使用累积确认,确认号代表未收到的第一个字节。

重传机制

保证可靠传输关键在于触发重传的机制:

超时重传(报文段丢失)

  • 机制:每发送一个包启动一个计时器,由ACK停止,ACK超时则触发重传
  • 超时重传时间RTO:由以移动平均的RTT计算得知。

快速重传(报文段丢失)

  • 机制:当连续收到三个冗余ACK(即共计收到四个ACK),触发重传

TCP发送窗口

发送窗口大小 = min{rwnd, cwnd}

TCP流量控制:接收窗口rwnd

  • 接收窗口大小以字节为单位
  • 接收窗口大小由接收方填写,在窗口字段告知发送方

发送方限制未确认的数据量在rwnd之内

TCP拥塞控制:拥塞窗口cwnd

  • cwnd以每个RTT按MSS为单位的速度增减。
  • 拥塞控制是为了避免网络拥堵,流量控制是为了匹配接发速率

代表网络拥塞的不同事件导致不同策略(TCP Reno):

  • 无拥塞:
    • cwnd < ssthresh: cwnd = min{cwnd*2, ssthresh}(慢开始)
    • cwnd > ssthresh: cwnd = cwnd + 1; (拥塞避免)
  • 重传:ssthresh/2,cwnd = 1 (慢开始)
  • 快重传:连续三个冗余ACK,ssthresh/2, cwnd = ssthresh (拥塞避免) (这个跳过慢开始的策略叫快恢复)。

杂记

  • 应用层只是用而已。
  • 运输层提供端口到端口通信,协议首部中只包含16bit的端口号,将传到主机的IP数据报分拣到各端口;
  • 网络层提供IP到IP通信,协议中的SAC为4B(32bit)的IPv4地址,在网络中将上层数据包成IP快递送来送去;
  • 数据链路层提供硬件到硬件通信,协议中的SAC为MAC地址
  • 物理层是真传。

传输层的长度是全部长度,网络层的长度是首部长度

posted @ 2021-02-21 18:03  laiyk  阅读(176)  评论(0)    收藏  举报