1.服务端实现
socket()-->bind()-->listen()-->accept()-->recv()-->send()-->close()
2.客户端实现
socket()-->connect()-->send()-->recv()-->close()
3.tcp三次握手 listen函数
客户端--->服务端 发送:SYN(请求连接)、序列号x,进入SYN_SEND状态 connect()开始执行三次握手
服务端-->客户端 发送:服务端确认收到,然后发送ACK=x+1,SYN(请求连接)、序列号y,进入SYN_RECV状态 服务端在listen的时候,二次握手,然后将连接信息放入SYN_QUEUE半连接队列
半连接队列(syn queue)最大值 /proc/sys/net/ipv4/tcp_max_syn_backlog 可以进行修改
半连接队列未满,将连接信息放入半连接队列;半连接队列已满,丢弃,或者在tcp_max_syn_backlog文件中修改半连接最大值
客户端-->服务端 发送: 客户端收到后,发送ACK=y+1,双方建立ESTABLISHED 进入accept_QUEUE全连接队列,然后accept从全连接队列取已连接的sockfd,accept是没有参与三次握手的
全连接队列(accept queue)的最大值 /proc/sys/net/core/somaxconn (默认128)
全连接队列未满,将半连接队列中连接信息移除,然后放入全连接队列;全连接队列满,服务器丢弃,然后由client重传,一定次数后client认为异常,断开连接
4.tcp四次挥手 accept函数
主动-->被动方 发送:FIN请求,序列号x 进入FIN_WAIT1状态
被动方-->主动方 发送:被动方确认收到,然后发送ACK=x+1 被动方进入CLOSE_WAIT状态,主