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

拓展链接:

抓包

相关推荐
咖啡教室6 小时前
每日一个计算机小知识:ICMP
后端·网络协议
张人玉6 小时前
网络通讯TCP和UDP的区别
网络协议·tcp/ip·udp
咖啡教室6 小时前
每日一个计算机小知识:IGMP
后端·网络协议
打不了嗝 ᥬ᭄7 小时前
数据链路层
linux·网络·网络协议·http
小李独爱秋12 小时前
计算机网络经典问题透视:什么是NAPT?它有哪些特点?
网络·网络协议·计算机网络·网络安全·智能路由器
wukan88813 小时前
【SMTP】在线配置测试工具,如何配置接口?
git·网络协议·编辑器
铭哥的编程日记16 小时前
【Linux网络】传输层协议TCP
linux·网络·tcp/ip
教练、我想打篮球17 小时前
29 ip查询工具 并发送邮件通知目标用户
tcp/ip·ip·query
拾忆,想起17 小时前
超时重传 vs 快速重传:TCP双保险如何拯救网络丢包?
java·开发语言·网络·数据库·网络协议·tcp/ip·php
2021_fc17 小时前
WebSocket技术分享
网络·websocket·网络协议