C/S架构学习之TCP的三次握手和四次挥手

  • TCP的三次握手:
  • 一定由客户端主动发起的,发生在建立连接的过程中。
  • 此过程发生在客户端的connect()函数服务器的accept()函数之间。
  • 第一次握手:
  • 客户端向服务器发送一个带有SYN标志的数据包,表示客户端请求建立连接。
  • 并且客户端会选择一个随机的序列号a放在SYN标志的数据包中,然后向服务器发送这个数据包。
  • 第二次握手:
  • 服务器收到客户端的请求后,会回复一个带有SYN/ACK标志的数据包,表示服务器已经收到客户端的请求,并同意建立连接。
  • 服务器会选择一个随机的序列号b放在SYN标志的字段中,并且序列号a+1放在ACK标志的字段中,然后将数据包发送给客户端。
  • 第三次握手:
  • 客户端收到服务器的回复后,会发送一个带有ACK标志的数据包,表示客户端确认已经收到了服务器的响应,并同意建立连接。
  • 客户端将服务器的序列号b+1放在ACK标志的字段中,然后将数据包发送给服务器。
  • TCP的四次挥手:
  • 主动关闭方(客户端或者服务器都可以扮演这个角色)发起的,发生在断开连接的过程中。
  • 客户端主动发起断开连接为例:
  • 第一次挥手:
  • 客户端向服务器发送一个带有FIN/ACK标志的数据包,表示客户端请求与服务器断开连接。
  • 并且客户端会选择一个随机的序列号a放在FIN/ACK标志的数据包中,然后向服务器发送这个数据包。
  • 第二次挥手:
  • 服务器收到客户端的请求断开连接后,会回复一个带有ACK标志的数据包,表示服务器已经收到客户端的请求,并且序列号a+1放在ACK标志的字段中,然后将数据包发送给客户端。
  • 第三次挥手:
  • 服务器向客户端发送一个带有FIN/ACK标志的数据包,通知客户端,服务器要关闭了。
  • 并且服务器会选择一个随机的序列号b放在FIN/ACK标志的数据包中,然后向客户端发送这个数据包。
  • 第四次挥手:
  • 客户端收到服务器的断开连接信号后,会回复一个带有ACK标志的数据包,表示客户端已经收到服务器的请求,并且序列号b+1放在ACK标志的字段中,然后将数据包发送给服务器。
  • TCP的三次握手和四次挥手,抓包如下图所示:
相关推荐
YM52e3 小时前
鸿蒙Flutter Padding内边距:EdgeInsets详解
android·学习·flutter·华为·harmonyos·鸿蒙
西安老张(AIGC&ComfyUI)5 小时前
第034章:ComfyUI&AIGC一阶段学习总结及下阶段学习安排
学习·aigc
treesforest7 小时前
平时上网留下的IP地址,到底能被查到什么?
网络·网络协议·tcp/ip·ip地址·ip查询·定位服务
正经人_x8 小时前
学习日记43:FINO
学习
童谣19 小时前
越华环保集团市级统筹申报数字化中台:政策校验与减排仿真一体化架构
数据库·架构
网络工程小王10 小时前
【HCIE-AI】11.模型 昇腾迁移适配-精度调试-性能调优
人工智能·学习·华为·迁移学习·昇腾
一只小菜鸡..11 小时前
CMU 15-213 CSAPP:机器级编程与内存的暗黑魔法(Machine-Level)
笔记·学习
2601_9567436811 小时前
上海小程序开发公司技术路径全解:从架构选型到工程落地的核心判断
小程序·架构·开发经验·上海
JAVA面经实录91712 小时前
图解23种设计模式完整知识体系(Java后端面试完整版)
java·架构
AI_小站12 小时前
Loop Engineering又是啥?一文讲清企业Agent落地的四层工程进化论
java·人工智能·架构·prompt·大模型开发·智能体·大模型应用