TCP 握手一定是三次?TCP 挥手一定是四次? 为什么要有快速重传,超时重传不够用?为什么要有 SACK,为什么要有 D-SACK? 都知道有滑动窗口,那由于接收方的太忙了滑动窗口降为了 0 怎么办?发送方就永远等着了? Silly Window 又是什么? 为什么有滑动窗口流控还需要拥塞控制? 快速重传一定要依赖三次重复 ACK ?
TCP 是用来解决什么问题?
为什么要 TCP,IP 层实现控制不行么?
-
假设 BCDE 都需要关心这个积木搭错了没,都拆开包裹仔细的看看,没问题了再装回去,最终到了 F 的手中。 -
假设 BCDE 都不关心积木的情况,来啥包裹只管转发就完事了,由最终的 F 自己来检查这个积木答错了没。
连接到底是什么?
TCP 协议头
三次握手
初始序列号 ISN 的取值
SYN 超时了怎么处理?
SYN Flood 攻击
为什么要四次挥手?
四次挥手状态一定是这样变迁的吗
挥手一定需要四次吗?
为什么要有 TIME_WAIT?
-
就是怕被动关闭方没有收到最后的 ACK,如果被动方由于网络原因没有到,那么它会再次发送 FIN, 此时如果主动关闭方已经 CLOSED 那就傻了,因此等一会儿。 -
假设立马断开连接,但是又重用了这个连接,就是五元组完全一致,并且序号还在合适的范围内,虽然概率很低但理论上也有可能,那么新的连接会被已关闭连接链路上的一些残留数据干扰,因此给予一定的时间来处理一些残留数据。
等待 2MSL 会产生什么问题?
如何解决 2MSL 产生的问题?
自己攻击自己
超时重传机制是为了解决什么问题?
1、先采样 RTT 2、SRTT = ( ALPHA * SRTT ) + ((1-ALPHA) * RTT) 3、RTO = min[UBOUND,max[LBOUND,(BETA*SRTT)]]
为什么还需要快速重传机制?
SACK 的引入是为了解决什么问题?
D-SACK 又是什么东西?
滑动窗口干嘛用?
如果接收方回复的窗口一直是 0 怎么办?
假设接收方每次回应窗口都很小怎么办?
已经有滑动窗口了为什么还要拥塞控制?
拥塞控制怎么搞?
还有哪些拥塞控制算法?
总结
最后
巨人的肩膀
http://www.tcpipguide.com/
https://www.ionos.com/digitalguide/server/know-how/introduction-to-tcp/
https://www.ibm.com/developerworks/cn/linux/l-tcp-sack/
https://coolshell.cn/articles/11564.html/
https://tools.ietf.org/html/rfc793https://nmap.org/book/tcpip-ref.html
- END -
最近整理一份面试资料《Java技术栈学习手册》,覆盖了Java技术、面试题精选、Spring全家桶、Nginx、SSM、微服务、数据库、数据结构、架构等等。 获取方式:点“ 在看,关注公众号 Java后端 并回复 777 领取,更多内容陆续奉上。 推荐阅读 1. MySQL不推荐使用uuid或者雪花id作为主键? 2. Chrome 开发者工具各种骚技巧 3. 一文读懂 MySQL 主从复制读写分离 4. 消息队列面试连环问
喜欢文章,点个在看
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论