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的状态转换图。

拓展链接:

抓包

相关推荐
kaixin_learn_qt_ing1 小时前
了解RPC
网络·网络协议·rpc
Hacker_LaoYi3 小时前
【漏洞分析】DDOS攻防分析(四)——TCP篇
网络·tcp/ip·ddos
爱吃水果蝙蝠汤3 小时前
DATACOM-IP单播路由(BGP)-复习-实验
网络·网络协议·tcp/ip
loong_XL4 小时前
服务器ip:port服务用nginx 域名代理
服务器·tcp/ip·nginx
从后端到QT9 小时前
boost asio 异步服务器
服务器·网络·tcp/ip
手心里的白日梦10 小时前
网络计算器的实现:TCP、守护进程、Json、序列化与反序列化
网络·tcp/ip·json
言成言成啊10 小时前
TCP与UDP的端口连通性
网络协议·tcp/ip·udp
敲代码娶不了六花10 小时前
对计算机网络中“层”的理解
网络·网络协议·tcp/ip·计算机网络
x66ccff10 小时前
HTTPS如何通过CA证书实现安全通信,以及HTTPS的局限性
网络协议·安全·https
Graceful_scenery10 小时前
https双向认证
服务器·网络·网络协议·http·https