TCP网络编程的代码网上很多,这里就不再赘述,简单用一个图展示一下tcp网络编程的流程:
1、深入connect、listen、accept系统调用,进一步理解TCP的三次握手
这三个函数都是系统调用,我们可以分为请求连接方和被动连接两部分,我们知道请求连接方并非都是client,为了方便,本文用client代表主动连接方,server代表被动连接方。
- connect()是client的请求连接函数;处理client端的三次握手
- listen()是server用来监听client端有没有连接请求,本质上它是监测半连接队列和全连接队列中有没有信息,这两个队列中存放的是需要和server端进行连接的客户端信息,下文对这两个队列有解释。下图listen函数的解析中可以看到,第二个参数backlog表示等待连接队列的最大长度。
- accept()是server端为了独立管理每一个client连接,为其请求分配fd的函数,此函数调用时其实三次握手已经完成了。它从全连接队列中取出第一个节点,并为其分配fd。详情见下图
1、三次握手发生在那个函数?
- 三次握手具体流程: