昨天,实习的导师向我提了一个问题,关于TCP连接时绑定的端口问题,由于最近一直在阅读PG的源码,PG和MYSQL不同的地方在于PG对于多连接时的处理是开启多进程,而MYSQL的处理是多线程。那么为何多进程连接时绑定的是同一个端口呢,还有多线程连接时的端口信息又是如何区分的呢。

    https://blog.csdn.net/zsxy309/article/details/6739262读了这篇博客之后,我了解到socket连接是由源IP、源端口、宿IP、宿端口来区分,对于一个MYSQL服务端,它的进程绑定了端口,而由不同的线程完成了socket连接。这些连接的宿IP和宿端口是不变的,如果是本地连接的话源IP不变,由随机分配的源端口区分。

    https://blog.csdn.net/yanzongshuai/article/details/82056057而对于PG而言,PG的整体流程是由主进程接收到socket连接后会fork给子进程。这里查阅了很多c++的资料,父进程fork给子进程时,子进程是可以继承这种socket绑定状态共享端口,而当子进程结束时也会关掉父进程的socket连接。

    自我理解总结,TCP对于多线程也好多进程也好,服务端bind端口后,不同连接的消息都会通过此端口来传输,而区分消息具体的传输对象就是根据socket来区分。通过对PG的简单抓包分析验证了结论。

关于TCP连接的理解(MySQL,PostgreSQL)

相关文章:

  • 2021-06-09
  • 2021-04-20
  • 2022-12-23
  • 2021-10-28
  • 2022-12-23
  • 2021-06-09
  • 2021-10-25
猜你喜欢
  • 2022-12-23
  • 2021-12-26
  • 2021-07-28
  • 2021-11-30
  • 2022-03-07
  • 2021-10-18
  • 2022-12-23
相关资源
相似解决方案