「客户端」学习网络编程,不了解TCP协议?难怪面试被刷下去,还不来学习!( 三 )

  • 序列号:用来解决乱序问题等
  • 窗口大小:用来做流量控制
  • 如何唯一确定一个 TCP 连接呢?
    TCP 四元组可以唯一的确定一个连接 , 四元组包括如下:
    • 源地址
    • 源端口
    • 目的地址
    • 目的端口

    TCP 四元组

    源地址和目的地址的字段(32位)是在 IP 头部中 , 作用是通过 IP 协议发送报文给对方主机 。
    源端口和目的端口的字段(16位)是在 TCP 头部中 , 作用是告诉 TCP 协议应该把报文发给哪个进程 。
    有一个 IP 的服务器监听了一个端口 , 它的 TCP 的最大连接数是多少?
    服务器通常固定在某个本地端口上监听 , 等待客户端的连接请求 。
    因此 , 客户端 IP 和 端口是可变的 , 其理论值计算公式如下:
    对 IPv4 , 客户端的 IP 数最多为 2 的 32 次方 , 客户端的端口数最多为 2 的 16 次方 , 也就是服务端单机最大 TCP 连接数 , 约为 2 的 48 次方 。
    当然 , 服务端最大并发 TCP 连接数远不能达到理论上限 。
    • 首先主要是文件描述符限制 , Socket 都是文件 , 所以首先要通过 ulimit 配置文件描述符的数目;
    • 另一个是内存限制 , 每个 TCP 连接都要占用一定内存 , 操作系统是有限的 。
    UDP 和 TCP 有什么区别呢?分别的应用场景是?
    UDP 不提供复杂的控制机制 , 利用 IP 提供面向「无连接」的通信服务 。
    UDP 协议真的非常简 , 头部只有 8 个字节( 64 位) , UDP 的头部格式如下:
    UDP 头部格式

    • 目标和源端口:主要是告诉 UDP 协议应该把报文发给哪个进程 。
    • 包长度:该字段保存了 UDP 首部的长度跟数据的长度之和 。
    • 校验和:校验和是为了提供可靠的 UDP 首部和数据而设计 。
    TCP 和 UDP 区别:
    1. 连接
    • TCP 是面向连接的传输层协议 , 传输数据前先要建立连接 。
    • UDP 是不需要连接 , 即刻传输数据 。
    2. 服务对象
    • TCP 是一对一的两点服务 , 即一条连接只有两个端点 。
    • UDP 支持一对一、一对多、多对多的交互通信
    3. 可靠性
    • TCP 是可靠交付数据的 , 数据可以无差错、不丢失、不重复、按需到达 。
    • UDP 是尽最大努力交付 , 不保证可靠交付数据 。
    4. 拥塞控制、流量控制
    • TCP 有拥塞控制和流量控制机制 , 保证数据传输的安全性 。
    • UDP 则没有 , 即使网络非常拥堵了 , 也不会影响 UDP 的发送速率 。
    5. 首部开销
    • TCP 首部长度较长 , 会有一定的开销 , 首部在没有使用「选项」字段时是 20 个字节 , 如果使用了「选项」字段则会变长的 。
    • UDP 首部只有 8 个字节 , 并且是固定不变的 , 开销较小 。
    TCP 和 UDP 应用场景:
    由于 TCP 是面向连接 , 能保证数据的可靠性交付 , 因此经常用于: