美文网首页
网络协议(七)-传输层(可靠传输)

网络协议(七)-传输层(可靠传输)

作者: 小冰山口 | 来源:发表于2020-11-10 11:28 被阅读0次

以下内容来自于小码哥"网络协议从入门到底层原理"

传输层(Transport)
  • 传输层有2个协议
    -- TCP(Transmission Control Protocol), 传输控制协议
    -- UDP(User Datagram Protocol), 用户数据报协议
image.png
UDP-数据格式
  • UDP是无连接的, 减少了建立和释放连接的开销

  • UDP尽最大能力交付, 不保证可靠交付
    -- 因此不需要维护一些复杂的参数, 首部只有8个字节(TCP的首部至少20个字节)

    image.png
  • UDP长度(Length)
    -- 占16位, 首部的长度 + 数据的长度

UDP-检验和(Checksum)
  • 检验和的计算内容: 伪首部 + 首部 + 数据
    -- 伪首部: 仅在计算检验和时起作用, 并不会传递给网络层


    image.png
端口(Port)
  • UDP首部中端口是占用2字节
    -- 可以推测出端口号的取值范围是: 0~65535

  • 客户端的源端口是临时开启的随机端口

  • 防火墙可以设置开启/关闭某些端口来提高安全性

  • 常用命令行
    -- netstat -an: 查看被占用的端口
    -- netstat -anb: 查看被占用的端口, 占用端口的应用程序
    -- telnet 主机 端口: 查看是否可以访问主机的某个端口

    image.png
TCP数据格式
image.png
  • 数据偏移
    -- 占4位, 取值范围是0x0101~0x1111
    -- 乘以4: 首部长度(Header Length)
    -- 首部长度是20~60bytes

  • 保留
    -- 占6位, 目前全为0

TCP-小细节
  • 有些资料中, TCP首部的保留(Reserved)字段占3位, 标志(Flags)字段占9
    -- Wireshark中也是如此

  • UDP的首部中有个16位的字段记录了整个UDP报文段的长度(首部 + 数据)

  • 但是, TCP的首部中仅仅有个4位的字段记录了TCP报文段的首部长度, 并没有字段记录TCP报文段的数据长度

  • 分析
    -- UDP首部中占16位长度字段是冗余的, 纯粹是为了保证首部是32bit对齐
    -- TCP/UDP的数据长度, 完全可以由IP数据包的首部推测出来
    ✔️传输层的数据长度 = 网络层的总长度-网络层的首部长度-传输层的首部长度

TCP-检验和(Checksum)
  • UDP一样, TCP检验和的计算内容: 伪首部 + 首部 + 数据
    -- 伪首部: 占用12字节, 仅在计算检验和时起作用, 并不会传递给网络层
TCP-标志位(Flags)
  • URG(urgent)
    -- 当URG = 1时, 紧急指针字段才有效, 表明当前报文段中有紧急数据, 应优先尽快传送

  • ACK(Acknowledgment)
    -- 当ACK = 1时, 确认号字段才有效

  • PSH(Push)

  • RST(Reset)
    -- 当RST = 1时, 表明连接中出现严重差错, 必须释放连接, 然后再重新建立连接

  • SYN(Synchronization)
    -- 当SYN = 1, ACK = 0时, 表明这是一个建立连接的请求
    -- 若对方同意建立连接, 则回复SYN = 1, ACK = 1

  • FIN(Finish)
    -- 当FIN = 1, 表明数据已经发送完毕, 要求释放连接

TCP- 序号, 确认号, 窗口
  • 序号(Sequence Number)
    -- 占4字节
    -- 首先, 在传输过程的每一个字节都会有一个编号
    -- 在建立连接后, 序号表示: 这一次传给对方的TCP数据部分的第一个字节的编号

  • 确认号(Acknowledgement Number)
    -- 占4字节
    -- 在建立连接后, 确认号代表: 期望对方下一次穿过来的TCP数据部分的第一个字节的编号

  • 窗口(Window)
    -- 占2字节
    -- 这个字段有流量控制功能, 用以告知对方下一次允许发送的数据大小(字节为单位)

TCP可靠传输-停止等待ARQ协议
  • ARQ(Automatic Repeat-reQuest)自动重传请求
    image.png
image.png
TCP可靠传输-连续ARQ协议 + 滑动窗口协议
image.png TCP01_序号_确认号.png
TCP可靠传输-SACK(选择性确认)
  • TCP通信过程中, 如果发送序列中间某个数据包丢失(比如1,2,3,4,5中的3丢失了)

  • TCP会通过重传最后确认的分组后续的分组(最后确认的是2, 会重传3,4,5)

  • 这样原先已经正确传输的分组也可能重复发送(比如4,5), 降低了TCP性能

  • 为改善上述情况, 发展出了SACK(Selective Acknowledgement, 选择性确认)技术
    -- 告诉发送方哪些数据丢失, 哪些数据已经提前收到
    -- 使TCP只重新发送丢失的包(比如3), 不用发送后续所有的分组(比如4,5)

  • SACK信息会放在TCP首部的选项部分

    image.png

-- Kind: 占1字节. 值为5代表着是SACK选项
-- Length: 占1字节. 表明SACK选项一共占用多少字节
-- Left Edge: 占4字节, 左边界
-- Right Edge: 占4字节, 右边界

image.png
  • 一对边界信息需要占用8字节, 由于TCP首部的选项部分最多40个字节, 所以
    -- SACK选项最多携带4组边界信息
    -- SACK选项的最大占用字节数= 4 * 8 + 2 = 34

相关文章

  • 网络协议(七)-传输层(可靠传输)

    以下内容来自于小码哥"网络协议从入门到底层原理" 传输层(Transport) 传输层有2个协议-- TCP(Tr...

  • 网络知识体系(三) —— TCP 如何保证可靠传输

    TCP 是可靠传输协议,他是在运输层实现的可靠传输: 网络层的传输是不可靠的,虽然在网络层甚至数据链路层就可以通过...

  • iOS 网络相关面试题(IP协议、IP数据报分片、IPv4编址、

    之前有说到OSI七层协议中的应用层(HTTP协议)、传输层(TCP协议、UDP协议),在传输层之上就是网络层,网络...

  • 计算机网络面试核心

    计算机网络面试核心 传输层控制协议 TCP 简介 传输层控制协议 TCP 简介面向连接的,可靠的,基于字节流的传输...

  • NETWORK

    传输层 TCP协议 TCP协议的特点 TCP是在不可靠的IP层之上实现的可靠的数据传输协议,它主要解决传输的可靠、...

  • iOS知识整理-网络

    HTTP协议(超文本传输协议) OSI网络七层协议:应用层、表示层、会话层 、传输层、网络层 、数据链路层、物理层...

  • HTTP协议相关

    1.介绍一下网络七层模型,HTTP在哪一层? 2.概念 1.HTTP:超文本传输协议基于TCP协议进行可靠传输,用...

  • 2018-03-13无线组网

    TCP协议:保证传输层可靠传输,同时做数据控制。

  • TCP与UDP

    TCP与UDP都是OSI七层协议中传输层的协议。 TCP(传输控制协议) 1)面向连接的服务,可靠连接。(三次握手...

  • TCP/UDP详解

    TCP简介(网络基础中有所介绍) TCP传输控制协议: 面向连接、可靠的、基于字节流的传输层协议 将应用层的数据分...

网友评论

      本文标题:网络协议(七)-传输层(可靠传输)

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