Concept

  1. 为何偏偏要用三次握手?
  • 条件:网络上的两端进行TCP可信通信,那么双方必须确认对方都有收发包的能力
  • 为了达到上述目的,计算机之间采用发握手报文来进行判断。
    • C->S SYN,说明C有发包能力
    • S->C SYN+ACK,说明S有接收和发送的能力
    • C->S ACK,说明C有收包的能力
  1. 为什么不用四次甚至五次以上的握手?

    1. 因为三次做到的最简且满足通信的条件,干脆利落完成任务,再多了就是累赘、浪费资源

      Questions

  2. listen的backlog队列作用体现在哪里?

  3. accept在三次握手中对应具体的收发包动作是什么?
  4. 客户端在connect前调用bind的话,每次发包会是固定端口吗?
    1. 如果设置为80、443这样的端口,会不会有迷惑性?但是我们能够控制客户端连接的端口吗?
  5. 创建socket标识符时候的domain和sockaddr_in中的sin_family有什么异同?

Exercise

Projects

Ref

[1] C/C++学习路线图—Linux高并发服务器开发