非计算机专业,学校没有接触过 TCP/IP 协议,工作中接触到老外经典书籍「TCP/IP 详解」,厚厚的三卷,让人心生敬畏。工作中也极少接触,都是使用封装好的框架,平常浏览技术文章时候也是一知半解,似懂非懂。
很多技术知识点,知道个大致原理,但口述表达非常容易卡壳,技术知识点需要使用自己理解的文字笔记描叙,一图胜千语。使用 processon 在线工具绘制相关的逻辑流程图
TCP 报文头部TCP/IP 协议以及 TCP 传输握手.pngACK、SYN、FIN 标志位
seq:序号
ack:确认号
问题一:为什么建立链接是三次握手,关闭链接是四次挥手?
建立链接
:server 端收到 clientSYN
报文后,直接返回SYN + ack
报文,「SYN 同步字段,ack 确认字段」
关闭链接
:server 端收到FIN
报文, 不能直接断开,数据可能没有传输完成,不能直接断开 socket,返回给 client ack 确认字段报文,告知 FIN 字段已收到,等到server 端所有的数据接收完,才发送 FIN+ack 字段给 client,通知数据已接收完毕,可以关闭链接;
核心区别
:关闭链接时候,server 端可能数据没有接收完,不能及时关闭,先返回一个确认 ack 字段给 client,通知其已收到 client 报文,只有等 server 端数据接收完毕后才能发送 FIN+ack 字段
问题二:TCP 协议如何保证可靠传输?
- 确认和重传「server 收到报文会确认,client 在一段时间后没有收到确认就重发数据」
- 数据检验
- 数据合理分片与排序
- 流量控制「server 端来不及处理 data,降低发送速率」
- 拥塞控制「网络拥塞时,减少数据的发送」
网友评论