ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

计算机网络③TCP 与 UDP

2022-02-27 17:34:57  阅读:175  来源: 互联网

标签:发送 UDP 窗口 接收端 ACK 主机 TCP 计算机网络 端口号


4、TCP 与 UDP

4.1、传输层的作用

  1. IP 首部:协议字段,标识在网络层的上一层所采用的传输层协议。

    image-20220227142317870
  2. 传输层首部:根据端口号,标识在传输层的上一层应用层的具体应用程序。

  3. C/S 模式

    • Server:服务端,守护程序(daemon)提前启动,等待客户请求。提供服务的一方。
    • Client:客户端,使用服务的一方。
  4. 套接字(Socket)

    image-20220227145602235

4.2、端口号

  • 数据链路层:MAC 地址
  • 网络层:IP 地址
  • 传输层:端口号
  1. 端口号:识别同一台计算机中进行通信的不同应用程序。
  2. TCP/IP 或 UDP/IP 通信:通常采用 5 个信息
    • 源主机 IP 地址
    • 目标主机 IP 地址
    • 协议号
    • 源主机端口号
    • 目标主机端口号
  3. 确定方式
    • 静态方法:每个应用程序指定端口号。
      • 知名端口号(Well-Known):0 到 1024 之间;
      • 应用程序应避免使用知名端口号:19152 到 65535 之间
    • 动态方法(时序分配法)
      • 服务器需要监听端口号,但客户端无需确定端口号;
      • 操作系统可以为每个应用程序分配互不冲突的端口号(如在之前分配号码的基础上加 1);
      • 取值在 49152 到 65535之间。
  4. 端口号由传输层协议决定,不同传输协议可以使用相同的端口号。
  5. 数据到达接收端 IP 层后,会先检查 IP 首部的协议号,再传给相应传输层协议的模块。

4.3、UDP

用户数据报协议(User Datagram Protocol)

面向无连接的,不可靠的数据报协议

  • 无连接:收到应用程序的数据时,立刻按照原样发送到网络上。
  • 不可靠性:不负责可靠的细节控制,若有需要则由采用 UDP 的应用程序处理。
  • 场景
    1. 包总量较少:DNS、SNMP 等;
    2. 即时通信:视音频等多媒体;
    3. 广播通信:广播、多播;
    4. 限定于 LAN 等特定网络的应用通信。

4.4、TCP

传输控制协议(Transmission Control Protocol)

面向连接的、可靠的流协议

  • 面向连接:确认通信对端存在时,才会发送数据。
  • 可靠性:实现了数据传输时的控制功能
    • 保序、重发、流量控制、拥塞控制、提高网络利用率等;
    • 通过检验和、序列号、确认应答、重发控制、连接管理、窗口控制等机制实现。

ACK & SEQ

  • ACK(Postive Acknowledgement):确认应答
  • SEQ(Sequence Number):序列号

TCP 通过 ACK 和 SEQ 实现可靠传输。

ACK

  1. 当发送端的数据到达接收端主机时,接收端主机会返回一个已收到的通知。

  2. 超时重发:在一定时间内没有收到 ACK,认为数据已丢失,进行重发。

    image-20220227155014592

问题:ACK 可能在途中丢失或延迟到达。

  • 发送端主机只需重发数据;而接收端主机会反复收到相同的数据,并将其丢弃。
  • 需要一个机制:让接收端主机能识别是否已经接收数据,是否需要接收。
  • 这个机制就是序列号。

SEQ

  • 按顺序给发送数据的每个字节,都标上序号。

  • 接收端主机查询 TCP 首部中的序列号、数据长度;

  • 将确认应答号(自己下一步应该接收的序号)作为 ACK 返送给回去。

    image-20220227155949527

重发超时

重发超时:在重发数据之前,等待 ACK 到来的时间间隔。

  • 每次发包时,都会计算 RTT 及其偏差。
    • RTT(Round Trip Time):报文端的往返时间
    • 偏差:RTT 的波动值,也称抖动。
  • 重发超时:比 RTT 和 偏差的总和稍大的值。
  • 最初的数据报没有 RTT,其重发超时设为 6s 左右。
  • 重发后还是收不到 ACK,则再次重发。达到一定次数后,判断网络或接收端主机异常,强制关闭连接。

连接管理:SYN & FIN

SYN 和 FIN 各占一个序列号(SEQ)。

  • SYN(Synchronize):同步序列号;
  • FIN(Finish):断开序列号。
  • SYN:建立连接的请求。

    • 若对端发来 ACK,认为可以进行数据通信。
    • 若对端 ACK 未到达,则不会进行数据通信。
  • FIN:断开连接。

  • 三次握手,四次挥手

    image-20220227161420407

MSS

最大消息长度(Maximum Segment Size)

  • TCP 传送数据,以 MSS 的大小将数据进行分割发送(包括重发)。

  • MSS 在三次握手时,在两端主机之间计算得出。

    • 发出建立连接请求时,会在 TCP 首部中写入 MSS 项;
    • 在二者之间选择一个较小的值作为 MSS。

    image-20220227171008763

窗口控制

  1. 如果每发一个段(segment)就进行一次 ACK 的处理,会降低通信性能。

    image-20220227162343808
  2. 窗口:ACK 不是以段为单位,而是以窗口大小为单位。

  3. 窗口大小:无需等待 ACK 而可以发送数据的最大值。

    image-20220227162357915
  4. 缓冲区(Buffer)

    • 发送端:在收到数据对应的 ACK 之前,在缓冲区中存储这部分数据。
    • 接收端:在收到不按顺序的数据时,在缓冲区存储这部分数据。
  5. 滑动窗口控制

    1. 在窗口内的数据即使没有收到 ACK,也可以继续发送;
    2. 收到 ACK 后,将窗口滑动到 ACK 中确认应答号的位置;
    3. 按顺序地将多个段同时发送,以提高通信性能。

    image-20220227162900435

重发控制

  1. 窗口控制中未收到 ACK 的情况
    1. ACK 未能返回:ACK 在途中丢失,但发送的数据已到达对端,无需重发。
    2. 报文端丢失
  2. 高速重发控制
    1. 接收端主机如果收到一个应接受的序号以外的数据,会针对当前为止收到的数据返回 ACK。
    2. 在窗口比较大,出现报文端丢失的情况下,同一个序号的 ACK 会重复返回;
    3. 发送端主机如果连续 3 次收到同一个 ACK,会将对应数据进行重发。

流量控制

  1. 流量控制(流控制):发送端根据接收端的实际接收能力,控制发送的数据量。
    • 接收端主机向发送端主机通知主机可以接收的数据的大小(窗口大小);
    • 发送端发送的数据不会超过窗口大小。
  2. 窗口大小(Windows Size):TCP 首部中的字段
    • 接收端主机可以将自己的接收缓冲区的大小,放入该字段,通知发送端。
    • 值越大说明网络吞吐量越高。
    • 当缓冲区面临数据溢出,窗口大小的值也会减小,从而控制数据发送量。
  3. 窗口探测:仅含一个字节
    • 当接收端主机缓冲区满时,发送端主机会暂停发送数据,等待接收端主机的窗口更新通知。
    • 超过重发超时后还未收到通知,发送端主机会时不时地发送一个窗口探测的数据段,以获取最新的窗口大小信息。

拥塞控制

  • 拥塞窗口(CWND)
  • 慢启动算法
    1. 慢启动时,将 CWND 设为 1MSS;
    2. 发送数据时,比较 CWND 与接收端主机通知的窗口大小;选择较小的值,发送还要小的数据量。
    3. 每收到一次 ACK,将 CWND 加一。
  • 慢启动阈值:当 CWND 大于阈值,每收到一次 ACK 只允许按比例扩大 CWND。
    • TCP 通信开始时,没有设置慢启动阈值。
    • 超时重传:阈值设为 CWND 的一半。
    • 重复收到三次 ACK:阈值设为当前窗口大小的一半毛病将窗口设为(阈值 + 3MSS)

提高网络利用率

  1. Nagle 算法:发送端的还有少部分数据待发送时,延迟发送。
  2. 延迟确认应答
  3. 捎带应答:应用层发出的消息到达对端,对端处理后返回一个回执。

4.5、首部

UDP 首部

image-20220227171831558

TCP 首部

image-20220227171845410

标签:发送,UDP,窗口,接收端,ACK,主机,TCP,计算机网络,端口号
来源: https://www.cnblogs.com/secretmrj/p/15942812.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有