网络连接是如何建立的
- 监听连接请求:
- 服务端应用程序调用bind()函数绑定到特定的IP地址和端口,然后调用listen()函数进入监听状态,等待客户端的连接请求。
- 多个连接请求到来时,操作系统内核通常会维护一个队列来缓存这些未完成连接的请求。这个队列是在TCP/IP协议栈内部实现的,对于Linux系统而言,这是通过内核空间的半连接队列(SYN Queue)和全连接队列(Accept Queue)来管理。
- 连接请求通知:
- 当有新的TCP连接请求到达时(即客户端发送SYN包),内核会暂存这个连接请求,并触发一个事件通知服务端应用程序可以接受新连接。
- 应用程序调用accept()函数,内核从连接请求队列中取出一个已完成三次握手的连接并将套接字描述符返回给应用程序,这样就建立了完整的网络连接。
总结来说,服务端在监听状态下,待处理的连接请求由操作系统内核维护的队列进行管理。在三次握手完成后,连接才真正建立起来,客户端和服务端可以通过这个连接进行数据的可靠传输。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果