TCP服务端的默认函数调用顺序

进入等待连接请求状态

服务器端套接字作为门卫受理连接请求,等候室就是 连接请求队列

受理客户端请求

服务器端通过调用 accept 接受连接请求,并创建一个 对等的socket 用来与客户端通信(面向连接的套接字是一一对应的),服务端套接字继续受理连接请求

TCP客户端的默认函数调用

请求连接


这里所说的 接受连接请求,并不意味着服务端调用 accept,而是 服务端把连接请求记录到等待队列
客户端的IP地址和端口号 在调用 connect 时自动分配

基于TCP的服务端/客户端函数调用关系


TCP原理
TCP套接字的IO缓冲


TCP内部工作原理1:与对方套接字的连接
三次握手

套接字是以全双工方式工作的,它可以双向传递数据
- 主机A向主机B发送一个数据同步消息(SYN),表示请求连接
- 主机B向主机A发送一个ACK确认和一个SYN同步消息
- 主机A向主机B发送一个ACK确认
第一步,用来确认主机A的发送能力(SYN)
第二步,用来确认主机B的发送能力(SYN)和接收能力(ACK)
第三步,用来确认主机A的接收能力(ACK)
经过三次握手,我们就能够确认通信双方是否具备正常的发送/接收能力
TCP内部工作原理2:与对方主机的数据交换


通过ACK的信息来确定是否正常

发生错误时,会有 重传机制
TCP内部工作原理3:断开与套接字的连接
四次挥手
TCP套接字断开连接时,通信双方可能还会有数据在缓冲区中准备传送,所以不能直接断掉,需要进行一定的协商

TCP套接字都有各自的IO缓冲区,也就是说都有自己的读端和写端
-
主机A向主机B发送FIN消息,表示没有数据要发送,准备断开连接
-
主机B向主机A发送ACK消息,表示同意断开连接
-
主机B向主机A发送FIN消息,表示没有数据要发送,准备断开连接
-
主机A向主机B发送ACK消息,然后双方连接正式关闭
第一步,主机A关闭自己的写端
第二步,主机B在读完缓冲区中的数据后,关闭自己的读端
第三步,主机B关闭自己的写端
第四步,主机A在读完缓冲区中的数据后,关闭自己的读端
经过四次挥手,服务端和客户端的套接字的IO端均关闭,双方正式断开连接
posted on
浙公网安备 33010602011771号