JHHK

欢迎来到我的个人网站
行者常至 为者常成

10、TCP_序号、确认号

目录

快速开始

一、SYN、ACK、seq、ack

SYN=1:表示这是一个同步请求,在连接时有用
ACK=1:表示确认号有效
seq:相对序号,发送的数据的第一个字节的编号
ack:确认号,告知对方我已经收到你ack-1个字节,请发送ack号开始的数据

seq是对对方ack的回应
ack是对对方seq的确认,
ack从另一个角度理解是告诉对方目前已经收到了ack-1个字节

二、数据分片和组装

lxy:
客户端发送http请求一个大文件
服务器大块数据 -> 服务器应用层 -> 服务器传输层对数据分片(分片1, 分片2,…) -> …. -> 客户端传输层对数据组装(分片1, 分片2,…)大块数据 -> 客户端应用层

从wearShark看:
http:客户端的request请求
tcp
tcp
tcp
http:服务端的response响应

序号、确认号

一、再来看下相关概念

ACK(Acknowledgment)
当ACK=1时,确认号字段才有效

SYN(Synchronization)
当SYN=1、ACK=0时,表明这是一个建立连接的请求
当SYN=1、ACK=1时,表明对方同意建立连接
SYN=1代表这是个同步请求,第一次发数据给对方
其它情况下SYN=0

序号(Sequence Number)
占4字节
首先,在传输过程的每一个字节都会有一个编号
在建立连接后,序号代表:这一次传给对方的TCP数据部分的第一个字节的编号

确认号(Acknowledgment Number)
占4字节
在建立连接后,确认号代表:期望对方下一次传过来的TCP数据部分的第一个字节的编号

二、相对序号、确认号

img

三、原生序号、确认号

img

序号、确认号变化流程

一、流程图 - 简洁

img

1、连接操作 - 序号、确认号变化

img

2、数据收发操作 - 序号、确认号变化

img

img

3、抓包

img

二、流程图 - 实际

img


行者常至,为者常成!





R
Valine - A simple comment system based on Leancloud.