TCP的三次握手和四次挥手

整理一点自己的笔记上来:

笔记:

我们都知道TCP和UDP都是传输层的协议。

前者相当于打电话,是基于连接的,后者相当于写信,根本不知道是否丢包了,是否缺了一页。

TCP的三次握手+四次挥手+传输确认保证了它的基于连接。

Acknowledgment Number中文为确认序列号,简称ack。是TCP报文中的一部分。

一个TCP报文包含太多,有32bit的seq也就是这个包的序号,还有32bit的ack,也就是确认序号。还有好多标志:FIN,ACK(这个和ack不是一个东西),SYN等。

A发送一个TCP包,其中SYN=1,序号seq假设为x,B回复的TCP报文中ACK=1,序号ack为x+1,SYN=1,序号码seq=y。此时A再回复一个TCP报文,其中ACK为1,ack为y+1,seq=x+1 共三次操作,对应三个TCP包,所以叫做三次握手。(我们常常说的SYN包就是一个TCP报文,SYN标志为1。按照上述写的更好理解)。

例子:A发送了SYN包,但是由于在中间节点的滞留,对方无法回复,他以为SYN包丢了,所以重新发了一个SYN包,B收到一个SYN包之后回复了一个ACK+SYN包,连接建立成功。结果此时滞留的SYN包到达B,B会查看连接表(位于内核的网络栈),发现连接已经建立(当 B 收到 SYN 包时,内核会解析出 IP 和端口信息,并与连接表中的现有条目进行比对,以判断是否已经建立了连接。),所以会忽略掉这个SYN包。有一种情况,B发送了回复之后,他也不知道这个包A收到没有,此时它可能会以为连接已经建立,但实际没有,A还以为自己的SYN包丢了,导致A重发。

连接表记录了源IP源头端口+目的IP目的端口。怎么记录的?TCP中没有IP啊。答:

IP 报文(网络层):在 TCP 报文被封装在 IP 数据包中时,源 IP 和目标 IP 是在 IP 头部中携带的。操作系统可以从 IP 头中获取源 IP。

TCP 头部:TCP 报文中包含源端口和目标端口,操作系统在处理 TCP 报文时会将源 IP、源端口、目标 IP 和目标端口一起作为连接的唯一标识。

四次挥手:A如果close,则向B发送TCP报文,其中FIN标志为1,seq=u,B收到后回复TCP报文,其中ACK=1,ack=u+1,seq=v; B此时执行了close之后发送TCP报文,FIN标志为1,seq=w,ack=u+1,ACK标志位为1。A回复TCP报文,ACK标为1,ack=w+1,seq=u+1。注意A在发送了ACK之后它进入timewait状态,防止它后边发的这个包丢失B收不到。

TCP报文是有序列号的,发送方发送TCP报文之后,如果一切没问题,对方会回复下一次期望收到的数据。

seq是序列号的意思,占用TCP报头中的32bit。TCP报头除了序列号还有几个标志位,SYN FIN ACK这些都是标志位。

图片:

上图为TCP头部。

上图中:上面为三次握手,下面为四次挥手。

上图为wd书中的三次握手图。互相结合着看。

上图为wd书中的四次挥手图。

上图为TCP的状态转换图。

拓展链接:

抓包

相关推荐
treesforest11 小时前
AI安全系统如何识别异常访问?IP风险识别正在成为关键能力
网络·人工智能·tcp/ip·安全·web安全
程序员mine11 小时前
HTTPS-TLS加密与证书完全指南(中)
网络协议·https·ssl
之歆12 小时前
现代 HTTP 客户端深度解析:Fetch 与 Axios
chrome·网络协议·http
江华森13 小时前
TCP/IP 协议栈实战 — 7 个实验详解
网络·tcp/ip·智能路由器
酉鬼女又兒14 小时前
零基础入门计算机网络运输层:端到端通信核心作用、端口号分类规则、复用分用工作机制及UDP与TCP协议全方位对比详解
网络·网络协议·tcp/ip·计算机网络·考研·udp·php
dog25014 小时前
不要再继续优化 TCP
网络协议·tcp/ip·php
程序员mine14 小时前
HTTPS-TLS加密与证书完全指南(上)
网络协议·https
Shepherd061916 小时前
【IT 运维】Apache 使用 mod_remoteip 恢复 Cloudflare 后的真实访客 IP
运维·tcp/ip·apache
VidDown16 小时前
视频帧率技术详解:从 24fps 到 120fps,帧率如何影响你的观看体验?
网络·网络协议·编辑器·音视频·视频编解码·视频
C++ 老炮儿的技术栈16 小时前
Qt工控实战:自研机器人TCP长连接客户端(粘包处理+心跳保活+自动重连完整源码解析)
qt·tcp/ip·机器人