超级详解的TCP三次握手与四次挥手

TCP报文包含TCP头部数据的两部分,其数据格式如下图:
在这里插入图片描述

源端口号和目的端口号

每个TCP段都包含源端和目的端的端口号,用于寻找发送段和接收端的应用进程。这两个值加上IP头部中的源端IP地址和目的端IP地址能够唯一确认一个TCP连接。

序号

序号用来标识从TCP发送端向TCP接收端发送的数据字节流。如果将字节流看作在两个应用程序间的单向流动,则TCP用序号对每个字节进行计数。序号是32位的无符号数,序号达到2^23-1后又从0 开始。

确认号

发送方对发送的首字节进行编号,当接收方成功接收后,发送回接收方成功的序号加1标识确认,发送方再次发送的时候从确认号开始。

头部长度

头部长度给出头部中32位字的数目。需要这个值是因为TCP有可选字段,且可选字段的长度是可变的。这个字段占4位,因此TCP最多有60个字节的头部。如果没有可选字段,通常的长度是20个字节。

保留位

保留位的6位并没有使用,必须设置为0.

控制位

在TCP头部中有6个标志控制位,他们可以同时多个位一起设置,各个位代表的含义如下表:
字段 | 含义
URG | 紧急指针字段有效
ACK | 确认编号栏有效,大多数情况下该标志位是置位的。TCP报头内的确认编号栏包含确认编号为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。
PSH | 该标志置位时,接收端不将该数据进行队列处理,而是尽可能快地将数据转由应用处理,在处理telnet或rlogin等交互模式的连接时,该标志总是置位的
RST | 复位标志有效,该标志仅在3次握手建立TCP连接是有效,它提示TCP连接的服务端检查序列编号,该编号为TCP连接初始端(一般是客户端)的初始序列编号。
FIN | 用于表示将要断开TCP连接。

窗口大小

窗口大小标识本机上TCP协议可以接收的以字节为单位的数目。

TCP校验和

TCP校验和覆盖了整个的TCP报文段,包括TCP头部和TCP数据。这是一个强制性的字段,一定是由发送段计算和存储,并由接收端进行验证。

建立TCP连接

主机A与主机B要想通过TCP协议进行通信,需要通过3个报文段完成TCP连接的建立,这个过程称为三次握手。
在这里插入图片描述
TCP连接的建立需要双方发送自己的同步SYN信息给对方,在SYN中包含了末端初始化的数据序号,并且需要收到对方对自身发出SYN的确认。三次握手过程为:
第一次握手:主机A向主机B发送自己的同步SYN信息给对方,在SYN中包含了末端初始化的数据序号,以及初始序号。
第二次握手:主机B应答主机A,向主机A发送建立连接请求,并发送主机B的初始序号。其中ACK段位主机A发送的ISN+1.
第三次握手:主机A将主机B发送的SYN段加1(SYN+1)作为确认号返回给主机B作为应答。
至此,连接建立完成。

断开TCP连接

建立一个连接需要握手三次,断开一个连接需要握手四次。
在这里插入图片描述
第一次挥手:主机A发送FIN字段到主机B,发送断开连接请求。
第二次挥手:主机B先确认主机A的FIN请求,然后发送ACK字段到主机A,确认序号为主机A序号加上1.
第三次挥手:主机B向主机A发送FIN请求。
第四次挥手:主机A对主机B的FIN请求确认后断开TCP连接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值