TCP三次握手过程

什么是TCP

tcp是一个面向连接的、可靠的、基于字节流的传输层通信协议

  • 面向连接:TCP连接是一对一的,不能实现一对多或多对一,TCP在通信前要首先建立连接,连接成功后才能开始进行通信
  • 可靠的:TCP连接要保证通信过程的可靠性,所谓可靠性是指TCP能够检查比特错误并纠正比特错误 ,同时能够对丢包、失序情况作出一定的应对。
  • 基于字节流:在 TCP 建立连接之后,数据被视为一个连续的字节流

为什么需要TCP

由于下层网络层(IP层)不保证网络包的交付、按序交付和数据的完整性,因此需要TCP协议在运输层保证数据传输的可靠性。

TCP报文头格式

各字段作用:

  • 序列号
    • 连接建立时该值是随机初始化 的。其后在数据传输过程中,TCP 连接中传送的数据流中的每一个字节都编上一个序号 ,而序号字段的值 则指的是本报文段所发送的数据的第一个字节的序号,以保证数据传输过程中不乱序。
    • 用来解决网络包的失序问题
  • 确认应答号
    • 期望收到对方的下一个报文段的数据的第一个字节的序号,发送端在收到确认应答后可认为在该序号之前的数据都已经被接收端正常接收。
    • 用以解决网络丢包的问题
  • 控制位:
    • ACK,该位为1时,确认应答号有效
    • SYN,该位为1,连接建立号,建立TCP连接所使用特殊字段,该位为1表示希望建立连接
    • FIN,同SYN字段的作用,是TCP断开连接时需要的特殊字段,该位为1表示希望断开连接
    • RST,该位为1,表示出现异常情况,需要强制断开连接
  • 源端口与目的端口
    • 用于告诉TCP协议应该把网络数据包交给哪个进程
  • 首部长度
    • 指出TCP报文的首部长度,单位为4字节,取值范围为0~15,故而TCP报文段的首部长度最大为60字节,固定字段为20字节,因此选项部分最大为40字节

如何确定一个TCP连接

一个TCP四元组可以确定一个TCP连接,其四元组组成为:

其中,源地址与目的地址在IP头部 中,作用是将数据包通过IP协议发送给主机

源端口与目的端口存在于TCP头部 中,作用是告诉TCP协议应该把报文发送给哪个进程

TCP建立连接的过程

TCP在通信前需要首先通过三次握手建立连接,之后才能进行通信,其过程如下:

  • 第一次握手:客户端发送SYN报文段,在tcp头部中,置SYN=1,并随机初始一个seq序号 ,但不携带任何数据。表示客户端要建立连接
  • 第二次握手:服务端收到客户端发来的链接请求后,在tcp头部中,置SYN=1,也随机初始化一个服务端的序号seq 放入tcp头部,同时置ACK=1,对客户端也响应一个确认号ack放入头部,该阶段同样不携带数据。表示服务端同意建立连接
  • 第三次握手:客户端收到服务端的同意链接请求报文,此时服务端已经做好了要连接并发送数据的准备,要对服务端发送一个确认报文。在tcp头部中,置ACK=1,但SYN=0 ,且此后的数据传输过程中SYN都等于0,同时对服务端的序号响应一个确认号,在该阶段,客户端可以携带数据发送给服务端

参考:
4.1 TCP 三次握手与四次挥手面试题 | 小林coding (xiaolincoding.com)

相关推荐
咕噜企业分发小米9 分钟前
有哪些开源的直播云服务器安全防护方案?
运维·服务器·云计算
开开心心_Every41 分钟前
安卓后台录像APP:息屏录存片段,行车用
java·服务器·前端·学习·eclipse·edge·powerpoint
qq_316837751 小时前
IP网段冲突 配置指定ip使用指定的网络接口发送,而不经过默认网关
服务器·网络·tcp/ip
布史1 小时前
Tailscale虚拟私有网络指南
linux·网络
枷锁—sha2 小时前
彻底解决 Google Gemini 报错:异常流量与 IP 地址冲突排查指南
网络·网络协议·tcp/ip
Xの哲學2 小时前
深入剖析Linux文件系统数据结构实现机制
linux·运维·网络·数据结构·算法
深圳市恒讯科技2 小时前
Linux 文件权限指南:chmod 755、644、drwxr-xr-x 解析
linux·服务器·xr
xingzhemengyou12 小时前
Linux taskset指令设置或查看进程的 CPU 亲和性
linux·服务器
开开心心就好2 小时前
图片格式转换工具,右键菜单一键转换简化
linux·运维·服务器·python·django·pdf·1024程序员节
-To be number.wan2 小时前
经典真题精讲|2010年408统考第34题:文件传输最少需要多久?
网络·计算机网络