美文网首页网络协议
网络协议 Day08 TCP可靠传输

网络协议 Day08 TCP可靠传输

作者: 望穿秋水小作坊 | 来源:发表于2020-11-13 16:22 被阅读0次

    一、网络层

    1. TCP 首部(记得每个字段含义即可)
    TCP 首部
    • URG(Urgent)
    • URG=1 时,紧急指针字段才有效。表明当前报文段中有紧急数据,应优先尽快传送
    • ACK(Acknowledge)
    • ACK=1 时,确认号字段才有效
    • RST(Reset)
    • 当 RST=1 时,表明连接中出现严重差错,必须释放连接,然后再重新建立连接
    • SYN(Synchronization)
    • 当 SYN=1、ACK=0 时,表明这是一个建立连接的请求
    • 若对方同意建立连接,则回复 SYN=1、ACK=1
    • FIN(Finish)
    • 当 FIN=1 时,表明数据已经发送完毕,要求释放连接
    • 序号(Sequence Number)
    • 占 4 个字节
    • 首先,传输的每一个字节都会有一个编号
    • 在建立连接后,序号代表:这一次传给对方的 TCP 数据部分的第一个字节的编号
    • 确认号(Acknowledge Number)
    • 占 4 个字节
    • 在建立连接后,确认号代表:期望对方下一次传输过来的 TCP 数据部分的第一个字节的编号
    • 窗口(Window)
    • 占 2 个字节
    • 这个字段有流量控制功能,用以告知对方下一次允许发送的数据大小(字节为单位)
    2. 为什么 TCP 的首部仅仅有 4 位的数据偏移字段记录了 TCP 首部的长度,并没有字段记录 TCP 的数据长度?UDP 首部中有个 16 位的字段记录了整个 UDP 报文的长度(首部+数据)。
    • UDP 首部中占 16 位的长度字段是冗余的,纯粹是为了保证首部是 32bit 对齐
    • TCP\UDP 的数据长度,完全可以由 IP 数据包的首部推测出来
    • 传输层的数据长度 = 网络层的总长度 - 网络层的首部长度 - 传输层的首部长度

    二、TCP 可靠传输

    1. 停止等待 ARQ 协议
    • ARQ(Automatic Repeat-reQuest) 自动重传请求
      图解 1
    图解 2
    2. 连续 ARQ 协议 + 滑动窗口协议
    • 停止等待ARQ协议,让A只能一条一条传递数据给 B,这无疑是效率比较低的,必须得到进化

      图解
    • 发送方的窗口大小,一般是由接收端决定的

    3. 完整的读下图,理解连续 ARQ 协议 + 滑动窗口协议
    需要理解
    4. 为什么需要 SACK(选择性确认)?
    • 在 TCP 通信过程中,如果发送序列中间某个数据包丢失(比如 1、2、3、4、5 中的 3 丢失了)
    • TCP 会通过重传最后确认的分组后续的分组(最后确认的是 2,会重传 3、4、5)
    • 这样原先已经正确传输的分组也可能重复发送(比如 4、5),降低了 TCP 性能
    5. SACK(选择性确认)是怎么做的呢?
    • 为了改善上述情况,发展出了 SACK(Selective Acknowledge,选择性确认)技术
    • 告诉发送方哪些数据丢失,哪些数据已经提前收到
    • 使得 TCP 值重新发送丢失的包(比如 3),不用发送后续所有的分组(比如 4、5)
    6. SACK 技术实现原理(了解即可)
    实现原理
    7. PDU 是我们在网络协议中经常看到的词汇什么意思呢?
    • 协议数据单元(Protocol Data Unit,PDU
    • 在分层网络结构,例如开放式系统互联(OSI)模型中,在传输系统的每一层都将建立协议数据单元(PDU)

    三、遗留的一些疑惑

    1. 确认号序号中存储的编号到底是谁给的?或者怎么来的?存储在哪里?
    2. 不应该客户端只有一个确认吗?抓包地址 icp.chinaz.com
    我抓到的包,好像跟理论上的不一致丫

    相关文章

      网友评论

        本文标题:网络协议 Day08 TCP可靠传输

        本文链接:https://www.haomeiwen.com/subject/stwvbktx.html