三次握手+四次挥手
建立连接的三次握手:
SYN:创新连接
ACK:确认序号,确认网络包没有丢包。
FIN:释放一个连接,表示接受连接。
ack:序号,ack = seq+1
整个的连接过程如下:
用通俗的话说就是:1、客户端向服务器询问:你听得到我吗?
2、服务器向客户端回答:我听得到你,你能听到我吗?
3、客户端回复服务器:我听到了,开始通话吧。
连接过程的第一步就是在TCP模块处创建表示连接控制信息的头部,头部包括很多字段,重要的是接收方和发送方的端口号和IP地址。
当TCP头部创建好后,TCP模块就会将控制信息传递给IP模块并委托它进行发送;IP模块执行网络包发送操作后,网络包会通过网络到达服务器,然后服务器上的IP模块会将接收到的数据传递给TCP模块,服务器的TCP模块根据控制信息中的端口号找到对应的套接字即可。(P74)
滑动窗口相关:
滑动窗口来管理数据发送和ACK号的操作,怎么处理数据溢出问题呢?
服务器端会把缓冲区的内存剩余放在窗口字段告诉发送方,这个能够接受的最大数据量被称为窗口的大小,它是TCP调优参数中非常有名的一个。
通常将ACK号与窗口更新的包合并在一起进行发送,避免网络传输效率下降。
确认断开的四次挥手(断开连接,删除套接字):
为什么挥手要四次而不是三次呢?
因为一个方向的断开,仅代表这个方向的传输结束了,而另一方可能还有数据,所以需要等另一方数据也全部传输完毕完成后,才能执行挥手。
关于连接操作、收发操作和最后的断开操作,合并图可以看书p94页。