三次握手+四次挥手
建立连接的三次握手:
SYN:创新连接
ACK:确认序号,确认网络包没有丢包。
FIN:释放一个连接,表示接受连接。
ack:序号,ack = seq+1
整个的连接过程如下:
用通俗的话说就是:1、客户端向服务器询问:你听得到我吗?
2、服务器向客户端回答:我听得到你,你能听到我吗?
3、客户端回复服务器:我听到了,开始通话吧。
连接过程的第一步就是在TCP模块处创建表示连接控制信息的头部,头部包括很多字段,重要的是接收方和发送方的端口号和IP地址。
当TCP头部创建好后,TCP模块就会将控制信息传递给IP模块并委托它进行发送;IP模块执行网络包发送操作后,网络包会通过网络到达服务器,然后服务器上的IP模块会将接收到的数据传递给TCP模块,服务器的TCP模块根据控制信息中的端口号找到对应的套接字即可。(P74)
滑动窗口相关:
滑动窗口来管理数据发送和ACK号的操作,怎么处理数据溢出问题呢?
服务器端会把缓冲区的内存剩余放在窗口字段告诉发送方,这个能够接受的最大数据量被称为窗口的大小,它是TCP调优参数中非常有名的一个。
通常将ACK号与窗口更新的包合并在一起进行发送,避免网络传输效率下降。
确认断开的四次挥手(断开连接,删除套接字):
为什么挥手要四次而不是三次呢?
因为一个方向的断开,仅代表这个方向的传输结束了,而另一方可能还有数据,所以需要等另一方数据也全部传输完毕完成后,才能执行挥手。
关于连接操作、收发操作和最后的断开操作,合并图可以看书p94页。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix