TCP报文段

什么是TCP

TCP是面向连接的、可靠的、基于字节流、点到点的传输层通信协议。它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的

特点:
1、面向连接:三次握手四次挥手

2、TCP提供可靠交付的服务
校验和
序列号保证包的有序性
超时重传快速重传
流量控制拥塞控制

3、 面向字节流

4、 TCP 是全双工的协议
一次TCP连接中,TCP的双方在任意时刻既可以接收数据也可以发送数据

5、每一条TCP连接只能有两个端点
TCP只能提供点到点的通信,而UDP提供一对一、多对一、一对多、多对多等通信。

如何唯一确定一个 TCP 连接呢?
TCP 四元组可以唯一的确定一个连接
四元组:(源IP地址,源端口号,目的IP地址,目的端口号)

TCP报文段

TCP报文段=首部+数据部分
在这里插入图片描述
在这里插入图片描述

源端口号、目标端口号

源 IP、源端口、目标 IP、目标端口构成了 TCP 连接的「四元组」。一个四元组可以唯一标识一个连接。目标 IP和源IP在IP报文中。

序列号(Sequence number)

序列号(Sequence number)指的是本报文段数据部分中的第一个字节的编号。序列号加上报文的长度,就可以确定传输的数据范围。TCP 协议的通信双方, 都必须维护一个「序列号」, 序列号是可靠传输的一个关键因素。

确认号ack

ack=n表示:告知对方下一个期望接收的起始序列号为n,说明[0,n-1]的所有字节都已经收到。

数据偏移=首部长度

以4字节为单位。用来指出TCP报文段的数据载荷部分的起始位置.实际上指出了TCP报文段的首部长度.

保留

占6byte,保留为今后所用。目前置为0

8个标志(核心)

TCP 有很多种标记,有些用来发起连接同步初始序列号,有些用来确认数据包,还有些用来结束连接。TCP 定义了一个 8 位的字段用来表示 flags,每一个flags只占一位,取值为0或1,如下图所示
在这里插入图片描述
最常见的有下面这几个:

1、SYN(Synchronize Sequence Numbers ):同步序列号,用于握手
当SYN=1时用于发起握手,SYN数据包中包含用于同步双方的初始序列号ISN。搭配序列号seq一起使用。

2、 ACK(Acknowledge):
ACK=1表示这是确认数据包,搭配确认号ack一起使用。

3、RST(Reset): 重置连接
作用:

  • 用来异常的关闭连接,发送 RST后,发送方不必等缓冲区的数据都发送出去,直接丢弃缓冲区中的数据,释放连接进入CLOSED状态。而接收端收到 RST后,也不需要发送 ACK 确认。
  • 用来拒绝打开一个TCP连接。

常见的几种会出现 RST 的情况
1、服务器的IP存在,但是服务器并没有监听目标端口
浏览器向服务器指定端口发送 SYN 包,如果服务器回复了 SYN+ACK,说明监听端口存在,如果返回 RST,说明端口未被监听,可以用来检测端口是否打开

2、 A断电重启之后,之前建立的连接信息丢失,就会发送 RST 给B重置连接

4、 FIN(Finish):
通知对方我发完了所有数据,准备断开连接,后面我不会再发数据包给你了。

5、PSH(Push)
发送方不等发送缓冲区满立马发送
接收方不等接收缓冲区满立即读取数据

6、URG:紧急标志
接收方收到该报文时会优先处理该紧急报文

窗口大小

接收窗口大小决定发送窗口大小。用于流量控制

校验和

占16byte, 检查范围包括TCP报文段的首部和数据两部份.

可选项

常用的选项有以下几个:
1、MSS:(Max Segment Size),标记TCP一段的最大长度为多少。
2、 SACK:选择确认选项,可使得发送方知道哪些数据丢失需要重新发送,而那些数据是已经收到无需发送的。
3、 Window Scale:窗口缩放选项,控制窗口大小
4、Timestamps Option(时间戳):

填充

因为首部长度字段, 是以4字节为单位的, 因此使用填充来确保报文段首部能被4整除

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值