计算机网络-传输层-总结

传输层协议 Transport-layer protocol

  • 提供运行在不同主机上的进程之间逻辑上的连接。(网络层提供主机间的逻辑连接)。
  • 在终端系统上实现,而不在路由器上实现(网络上的路由器工作在网络层)(transport-layer protocols are implemented in the end systems but not in network routers.)
  • 传输层复用和解复用(transport-layer multiplexing and demultiplexing)(extending host-to-host delivery to process-to-process delivery)
    • 通过**端口号(port number)**实现
    • 端口号 16位 (0-65535)
    • 知名端口号(well-known port numbers)
      • HTTP 80
      • FTP 21 …
    • UDP由2元组来区分一个连接 (目的IP,目的端口号) – 不区分来源
    • TCP由4元组来区分一个连接(源的IP,源的端口号,目的的IP地址,目的的端口号) – 来源不同的段将分到不同的socket上
    • 应用层使用UDP/TCP:请添加图片描述

UDP(User Datagram Protocol)

  • 不可靠的、无连接的(unreliable, connectionless)

  • 没有建立连接的过程

  • 没有连接状态(Connection state)

  • 报头更小(8bytes)

  • UDP数据报结构 :请添加图片描述

  • 校验和(Checksum): 数据报中所有16bits的字的1的补码和(全部异或),再按位区分反。

  • 接收方收到数据报后,计算数据报中所有16bits的字的1的补码和,若值为0xffff,则确认无误。

TCP(Transmission Control Protocol)

  • 可靠的、面向连接的(reliable, connection-oriented)
  • 提供拥塞控制(congestion control)
  • 提供全双工服务(full-duplex service)
  • 最大段长度(maximum segment size MSS):段可携带的大的数据长度
TCP段结构:

请添加图片描述

  • header length field - 4bytes: 指示TCP头部的长度(以4字节为单位)(因为option field可变长所以需指示头部的长度)
  • flag field - 6bits:
    • CWR:用于拥塞控制
    • ECE:用于拥塞控制
    • URG:urgent
    • ACK:acknowledgement field是否有效
    • PSH:指示接收者应该立即把该段传递到上层
    • RST:reset 端口号不匹配
    • SYN:用于建立连接
    • FIN:用于关闭连接
    • 序号:该段中第一个字节的序号(在字节流中的序号)
    • 积累确认(cumulative acknowledgement):TCP只确认流中到第一个丢失字节为止的字节。接收者回复ACK y,说明y以及y之前的字节已经被接收。
  • TCP连接建立时,两方可随机地选择初始端口号,以减少先前网络中残余的段被错误接收的可能性
估计往返时间

往返时间(Round-Trip Time RRT) :从段发出到该段被确认之间的时间

  • TCP对RRT的估计-以确定多长时间为超时
  • 一种实现:
    • 在某个时刻测量一次RRT,作为一个样本SampleRTT
    • TCP维护一个平均值EstimatedRTT作为对RRT的估计:每测得一个新的SampleRTT,更新这个平均值 EstimatedRTT = (1 - α) * EstimatedRTT + α * SampleRTT.(指数加权移动平均值(exponential weighted moving average(EWMA))) (通常取α为0.25)
    • 同时也维护一个对RTT变化的估计DevRTT,与对EstimatedRTT的计算方法相同: DevRTT = (1 - β) * DevRTT + β|SampleRTT - EstimatedRTT|* (通常取β为0.25)
    • 用于确定超时的时间间隔:TimeoutInterval = EstimatedRTT + 4 * DevRTT (初始建议为1秒)
    • 当超时发送时,TimeoutInterval = 2 * TimeoutInterval。当段重新被确认后更新EstimatedRTT,再从新计算TimeoutInterval。
    • 请添加图片描述
实现可靠连接
  • 更加详细
  • TCP使用积累确认(cumulative acknowledgement):接收者缓存收的段(之前的Go-Back-N中是仅接收下一个期待的段),但只确认流中到第一个丢失字节为止的字节。若接收者回复ACK y,说明y以及y之前的字节已经被接收, 将SendBase推进到y。
  • (一种实现)TCP只维护一个计时器,只检测最早的未确认的一个段是否超时。超时后,仅重发这个最早的段(而不是像Go-Back-N一样重发窗口内的所有段)。
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YVU54JDc-1643207580649)(TCPSender.png)]
  • 快速重传(Fast Retransmit):发送者可以通过**冗余ACK(duplicated ACK)**来提前认为一个段丢失,不必等到超时发送后再重发。若发送者接收到三个相同的冗余ACK,就认为该段已经丢失,并重发
    • 产生TCP ACK的建议:

      • 请添加图片描述
      • 请添加图片描述
    • TCP的错误恢复机制是GBN和SR的混合

流量控制
  • TCP提供**流量控制服务(flow-control service)**以防止使接收者的缓冲区溢出
  • TCP通过维护**接收窗口(receive window)**来实现流量控制。在报文段中携带接收窗口通知对方自己还的缓存还有少空闲空间。
    • 接收窗口 : rwnd = RcvBuffer - (LastByteRcvd - LastByteRead)
    • (LastByteRcv 收到的最后一个字节, LastByteRead 已经读取的最后一个字节)
  • TCP要求发送者继续发送带1byte数据, 即使接收者的接收窗口为0
TCP连接管理
  • 建立连接 – 三次握手(three-way handshake):请添加图片描述
  1. 客户端向服务器发送SYN段(SYN标志位设为1)(客户端随机选择初始的序列号client_isn
  2. 服务器接收到SYN段后,分配缓冲区、初始化变量…,发送SYNACK段(SYN标志位设置为1,ACK域为client_isn+1)(服务器也随机选择它的初始的序列号server_isn)
  3. 客户端接收到SYNACK后,初始缓冲区、初始化变量…,向服务器发送段(SYN=0,ACK=server+1,可能负载数据)
  • 关闭连接 – 客户端和服务器端都可以提出关闭链接
  1. 客户端发出FIN标识位为1的段给服务器端
  2. 服务器收到后返回ACK
  3. 服务器稍后也发送FIN为1的段给客户端
  4. 客户端收到后返回ACK(返回ACK后会等待一段时间(一般为30s)以防ACK丢失)
  5. 此时,两台主机上的资源全部被释放
    请添加图片描述
    当客户端请求连接的端口不被监听时,服务器返回标志位RST为1的段
拥塞控制
  • TCP使用端对端的拥塞控制(网络层的IP协议不提供显式的反馈)
  • TCP通过限制发送端的发送速率来来控制拥塞
  • 发送端维护一变量 拥塞窗口 congestion window(cwnd): 用于限制发送方能向网络中发送的流量的速率
  • 一个发送方中未确认的数据量不会超过cwnd和rwnd(接收窗口,对方还能缓存多少):
    • LastByteSent - LastByteAcked <= min{cwnd, rwnd)
  • TCP使用ACK来触发拥塞窗口的增大–拥塞窗口的增加速率与ACK到达的速率正相关(TCP被称是自计时的)
  • TCP控制发送速率的原则:
    • 丢失报文段意味着拥塞,所以当报文丢失时降低发送速率
    • 确认报文端意味着网络不拥塞,增加发送速率
    • 带宽探测:即不断进行以上两条
  • TCP拥塞控制算法(TCP congestion-control algorithm)
    • 慢启动(slow start):
      • 初始时,cwnd通常为1MSS(最大端长度)。每个ACK到达,将cwnd增加1MSS。发送速率将以2^n增长
      • 超时发生时(报文段丢失),将cwnd设置为1,并将ssthresh(slow start threshold)设置为cwnd/2 (丢失发生前cwnd的一半)
      • 当收到三个冗余的ACK时(报文段丢失,fast restransmit),进入快速恢复状态
      • 当cwnd到达ssthresh时,进入拥塞避免状态
    • 拥塞避免(congestion avoidance): 以更保守的方式增加cwnd
      • 每RTT增加1MSS(可通过每一次ACK到达增加MSS/cwnd)
      • 超时发生(丢失),将cwnd设置为1MSS,将ssthresh设置为cwnd/2,进入慢启动状态
      • 收到三个冗余的ACK(丢失),将cwnd减半(再加3MSS),将ssthresh设置为cwnd/2,进入快速恢复状态
    • 快速恢复(fast recovery): (TCP推荐的,并非必要)
      • 对于引起进入快速恢复状态的缺失报文段,对收到的每个冗余的ACK,cwnd的值增加一个MSS。最终,对丢失报文段的一个ACK到达时,降低cwnd后进入拥塞避免状态。
      • 如果超时发生,将cwnd设置为1MSS,ssthresh设置为cwnd/2,进入慢启动状态
    • 请添加图片描述
  • 假定丢包由3个冗余的ACK来指示,则cwnd在每个RTT内线性增加1MSS,三个冗余ACK到达时减半–>常称为加性增,乘性减(Additive-Increase, Multiplicative-Decrease, AIMD)请添加图片描述
  • 显示拥塞通知(Explicit Congestion Notification ECN):network-assited congestion control, 同时涉及TCP和IP
    • IP数据报中有2bit用于ECN。一组值由于标识正在经历拥塞(有路由器设置)。另一组值用于通知路由器接收者和发送者ECN-capable。
    • 接收方的TCP收到带ECN拥塞指示的IP数据包后,在返回ACK报文段时设置ECE(Explicit Congestion Notification Echo)位。发生方收到带ECE位的ACK时,(同收到冗余ACK时)减小拥塞窗口,再向接收发发生报文段时设置CWR(Congestion Window Reduced)位
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绫零依

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值