TCP协议的一些小细节

前言

之前做DPI,一直做封包解包,感觉对tcp协议还是比较了解的,后来发现还是远远不够的。开这个博客是记录一下遇到的细节,记录在这里。有时间就补充一下

tcp协议

1. 为什么是三次握手?

三次握手的目的是同步服务端和客户端的序列号,并且需要确认。所以三次握手也是不难理解的。第一次握手时,客户端把自己的序列号告诉服务端; 第二次握手时,服务端把自己的序列号告诉客户端,并且确认自己收到了客户端的序列号;第三次握手的时候,客户端告诉服务器端,确认了服务器端的序列号。说白了就是服务器端和客户端相互交换序列号并且确认已经收到了序列号的过程。

也可以这样理解,把三次握手拆分为四次:
客户端发送自己的序列号;
服务器端确认收到了客户端的序列号;
服务端发送自己的序列号;
客户端确认了收到了服务端的序列号。

只不过在具体的实现中,第2、3步是同一个包而已。

另外,在用类似tcpdump来抓取实际的tcp数据的时候,第三次握手有时候会带着客户端的数据一起到服务器端。这也很好理解,在确认服务器端的序列号的时候,可以开始正常的数据交互了。syn是会占用一个字节的数据的,第三次握手完全可以理解为正常的数据交互过程。

2. 为什么是四次挥手?

理解了三次握手,就不难理解四次挥手了。加入tcp交互的两端是A,B。
A端发送fin, 说明A端没有数据发送了;
B服务器端确认收到了A端的关闭请求;
B端发送fin, 说明B端没有数据发送了;
A服务器端确认收到了B端的关闭请求。

为什么说A,B端而不是服务器和客户端呢,那是因为服务器端和客户端都有可能先提出来要断开。
另外,为什么不把2、3次的挥手合并呢,那是应为B端可能暂时还不想关闭连接,还有数据需要发送。所以是四次挥手,不像握手,总可以将2、3合并在一起。

MSL 和 TIME_WAIT

TCP重传机制

TCP的拥塞控制

tcp有哪些常用的攻击手段?

syn超时和泛洪攻击

参考资料

http://coolshell.cn/articles/11564.html
http://coolshell.cn/articles/11609.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值