TCP

如何保证数据的可靠性

  1. 对数据包进行编号,保证数据的有序性。
  2. 提供首部和数据的校验和。
  3. ARQ协议
  4. 超时重传。

保证连接的可靠性

  1. 3次握手、四次挥手
  2. 流量控制、拥塞控制
  3. 慢启动、拥塞避免、快开始、快重传。

拥塞控制和流量控制

  • 流量控制主要针对接收者,通过流量控制保证发送数据始终处于接收者的处理能力内。
  • 拥塞控制主要针对网络环境,避免网络出现负载过大的情况。

    流量控制

    通过滑动窗口和连续ARQ协议实现。接收方返回ACK会有窗口大小的字段,用于控制窗口大小。

拥塞控制

发送方维持一个拥塞窗口,该窗口的大小取决于网络的拥塞程度,并且动态的在变化。发送方让自己的发送窗口等于
慢开始、拥塞避免
(快重传,不是拥塞控制内容),快恢复。

UDP

image.png

一对多是怎么回事

UDP套接字允许广播和多播,但是TCP不允许进行广播和多播

广播和多播的区别

  • 广播直接向整个网段发送,使用广播地址:255.255.255.255
  • 多播向网络中的特定主机发送数据,D类地址用于多播

综合

TCP和UDP的区别

  1. TCP是面向连接、UDP是无连接的
  2. TCP提供可靠的服务,UDP尽最大努力交付,不保证可靠交付
  3. TCP面向字节流,UDP面向报文(用户数据报)
  4. 每一个TCP连接只能是点到点的,UDP支持一对一、一对多、多对一和多对多的交互通信
  5. TCP首部开销20个字节,UDP首部开销小,只有8个字节

最大TCP连接数量

client

每个TCP连接都会监听端口,所以客户端最大65535个连接。

server

根据客户IP和端口不同,理论可以创建2的48次方的连接。
但是:linux的文件描述符的数量是有限的,每个连接都会占用一个文件描述符。同时一个进程默认可打开的文件描述符数量也是有限制的。所以server端建立的TCP连接受制于这两个因素。