TCP 与 UDP 协议笔记

一、传输层的作用

两种传输层协议TCP和UDP

在TCP/IP中能够实现传输层功能的,具有代表性的协议是TCP和UDP。

  • TCP

1.TCP是面向连接的、可靠的流协议。
2.流就是指不间断的数据结构。
3.TCP为提供可靠性传输,实行“顺序控制”或者“重发控制”机制。此外还具备“流控制(流量控制)”、“拥塞控制“、提高网络的利用率等众多的功能。

  • UDP

UDP是不具有可靠性的数据报协议。细微的处理它会交给上层的应用去完成。虽然可以确保发送信息的大小,但却不能保证信息一定会到达。

TCP与UDP区分
  • TCP用于在传输层有必要实现可靠传输的情况。由于他是面向有连接并具备顺序控制、重发控制等机制的,所以它可以提供有效的可靠传输。
  • UDP主要用于对高速和实时性有较高要求的通信或广播通信。此外,在多播或者广播通信中也是使用UDP而不是TCP。

二、端口号

端口号定义
  • 数据链-------MAC地址==>用来识别同一链路中不同的计算机。
  • IP------------IP地址====>用来识别TCP/IP网络层中互相连接的主机和路由器。
  • 传输层-------端口号====>用来识别同一台计算机中通信的不同应用程序。(也被称为:程序地址)
通信识别
  • TCP/IP 或者 UDP/IP通信通常采用5个信息来识别一个通信。
  • 源IP地址
  • 目标IP地址
  • 协议号
  • 源端口号
  • 目标端口号

注:只要其中耨一项不同,则被认为其他通信。

端口号如何确定

在实际进行通信时,要事先确定端口号,确定端口号的两种方法如下:

  • 标准既定的端口号

这种方法也叫静态方法。指每个应用程序都有其指定的端口号,每个端口号都有其对应的是用目的。

例如,HTTP、TELNT、FTP等为固定端口号。也被称为知名端口号(0 ~ 1024)。别的注册端口号为(1024 ~ 49151)之间。

  • 时序分配法
  • 也叫动态分配法。服务端有必要确定监听端口号,客户端没有必要监听端口号。
  • 客户端应用程序可以完全不用自己设置端口号,而是交给操作系统进行分配。

例: 操作系统分配互不冲突的端口号,即在之前分配号码的基础上加 1 就可以得到新的端口号。这样操作系统就可以动态的管理端口号了。
注:动态分配端口号取值范围:49152~65535。

端口号与协议
  • 端口号由其使用的传输层协议决定。不同的传输协议可以使用相同的端口号。
  • 知名端口号与传输协议并无关系,只要端口一致都将分配同一个种程序进行处理。

三、UDP

UDP的特点及其目的
  • UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务,且接收到数据的那一刻立即按照原来样式发送到网络上的一种机制。
  • UDP是按照 ”制作程序的那些用户的指示行事。“
  • 由于UDP面向无连接,随时发送数据,本身处理简单即高效,因此,经常用于以下方面:
  • 包总量较少的通信(DNS、SNMP等)
  • 视频、音频等多媒体通信(即时通讯)
  • 限定于LAN等特定网络中的应用通信
  • 广播通信(广播、多播)

四、TCP

TCP的特点及其目的
  • TCP通过检验和、***、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。
通过***与确认应答
  • 确认号:在 TCP 中,当发送端的数据到达接收端主机时。接收端主机会返回一个已经收到的信息的通知。这个信息叫做应答(ACK)。
  • ***:防止反复收到重复数据包,提供可靠的传输。
  • ***初始值为建立连接后随机生成值。
  • 接收端查询接收数据TCP首部中的***和数据的长度,将自己下一步应该接收的***作为确认应答返送回去。
重发超时如何确定
  • 在BDS的Unix以及Windows系统中,重发超时以 0.5秒为整数倍。所以最小的重发时间是 1 秒。多设置为 6 秒左右。
  • 数据被重发后还收不到确认应答,则进行再次发送,则等待确认应答的时间建辉以2倍、4倍的指数函数延长。多次尝试任然不成功则最后会强制关闭连接。
连接管理
  • TCP 提供面向有连接的通信传输,数据通信开始前需要两端建立面向有连接的工作。
  • 方式为:

数据通信之前,通过 TCP 首部发送一个 SYN 包作为建立连接的请求等待确认应答。如果确认应答则进行数据通信。此外,在通信结束时会通过 FIN 包进行断开的连接的处理。

  • 可以使用 TCP 首部用于控制的字段来的管理 TCP 连接。一个连接的建立和断开,正常过程至少需要来回发送 7 次(三次握手和四次挥手)才能完成。
TCP 以段为单位发送数据
  • 在建立 TCP 连接的同时,也可以确定发送数据包的单位,我们称之为“最大消息长度”(MSS)。
  • TCP 在传送大量数据时,是以 MSS 的大小将数据进行分割发送,重发也是以此为单位。
  • MSS 是在三次握手的时候在两端主机之间计算出来的。连接请求时互相告诉对方的接口能够适应的 MSS的大小,然后选择两者之间较小的值投入使用传输。
利用窗口控制提高速度
  • 由于 TCP 以 1 个段为单位,没发一段就确认一段,效率比较低,因此,提出了窗口概念。
  • 所谓窗口就是,一个窗口包括多个段同时发送,从而提高了效率。
  • 滑动窗口:收到确认应答的情况下,将窗口滑动到确认答应中的序列的位置。以顺序的同时发送多段提高性能。
窗口控制与重发控制

*TCP 与 UDP 协议笔记

流控制
  • 未来防止接收发的流量资源浪费,所以流控制就是更好的根据发送端主机接收到接收端主机的指示的流量控制。
  • TCP 与 UDP 协议笔记
拥塞控制
  • 为了防止通信使得网络阻塞, TCP 通信首先一开始会通过一个慢启动的算法得出数字,对发送数据量进行控制。
  • 过程:发送端调节索要发送的数据量,定义一个“拥塞窗口”,于是启动慢启动的时候,将这个窗口的大小设置为1 个数据段(1MSS)发送数据段。之后每收到一次确认应答(ACK),拥塞窗口的值加1。

五、UDP 首部的格式

  • 除去数据部分,UDP 的首部由源端口号、目标端口号、包长度和校验和组成。
  • TCP 与 UDP 协议笔记
  • 源端口号:表示发送端端口号,字段长16位,字段可选,有时会不设置。无端口号值设置为0.
  • 目标端口号:表示接收端断口,字段长 16 位。
  • 包长度:该字段保存了 UDP 首部的长度跟数据的长度之和。单位为字节。
  • 校验和:

TCP 与 UDP 协议笔记

六、TCP 首部的格式

  • TCP 中没有表示包长度和数据长度的字段,可由 IP 层获知 TCP 的包长度由 TCP 的包长度可知数据的长度。

  • TCP 与 UDP 协议笔记

  • 源端口号
    表示发送端端口号,字段长 16 位。

  • 目标端口号
    表示接收端端口号,字段长 16 位。

  • ***

    • 指发送数据的位置,字段长 32 位,每发送一次数据就累加一次该数据字节的大小。
    • ***是由计算机生成的随机值,在建立连接和断开时, SYN 包和 FIN 包不携带数据,但是也会作为一个字节增加对应的***。
  • 确认应答
    指下一次应该收到的数据的系列号,字段长 32 位。即指已经收到确认应答号减一为止的数据。

  • 数据偏移
    表示 TCP 所传输的数据部分应该从 TCP 包的哪个位开始计算(也可看作 TCP S首部的长度)。该字段长4位,单位为4字节(32位)。

  • 保留
    该字段主要为后期拓展时使用,其长度为 4 位,一般设置为 0 。

  • 控制位
    字段长为 8 位,每一位分别为
    TCP 与 UDP 协议笔记

    名称 标志为 0 标志为 1
    CWR 与 ECE 标志都用于 IP 首部的ECN 字段。标志为1时,则通知对方已将拥塞窗口缩小
    ECE 表示从对方到这部的网络有阻塞
    URG 表示有需要紧急处理的数据
    ACK 确认应答的字段变为有效,TCP 规定除了最初建立的 SYN 包以外该位必须设置为1
    PSH 先缓存数据 将收到的数据立即传给上层应用协议
    RST 连接出现异常,必须强制断开
    SYN 表示希望建立连接,并在其***的字段进行***初始值得设定
    FIN 希望断开连接
    • TCP 与 UDP 协议笔记