Syn 三次与FiN四次相关讨论
来源:互联网 发布:大型酒店网络解决方案 编辑:程序博客网 时间:2024/05/21 09:55
我们知道序列号和确认号是用来保证tcp可靠传输的,序列号的增加通常表示发送的数据多少。但有时候是不是想不通为什么syn和fin也会占用一个序列号。
首先,tcp是一个支持可靠数据传输的网络协议,怎么做到可靠传输?主要是看“确认”这个步骤来做到的,也就是ack号。用ack号来表达我这边已经收到了你传过来的东西,注意 这里的东西是一个广义的概念,包含了数据和命令两种内容。在可靠的tcp传输过程中,用于建议和释放这个可靠通道的东西就是命令。
至于为什么需要这两个过程,很简单,可靠的通信需要双方通信之前做一些协商,确认了双方的“底子”,然后喊一声“开始”。同样在结束的时候通知一下对方“我不再发送数据啦”。一个开始,一个结束,这两和过程都是需要双方主动参与和确认回复的,当一方说我想开始一段可靠连接,并且给予了相关自己的情况数据,另外一方,则需要对这一命令进行确认,确认只能通过确认号来做。这个事情在断开连接的时候也是一样的。
我们知道tcp除了syn和fin还有其它的标志,为什么他们不需要占用一个序列号呢?首先,ack就不用说了,它本身就是为了确认这个动作而生的,如果在给它一个序列号,就意味着还要给这一序列号进行ack,这是一个很奇怪的事情。pus,urg是一个属性,一个附加在一段数据传输上的属性,它不属于命令或数据,rst比较特殊,它似乎是一个命令,但是基本上如果需要用这个命令的时候,tcp的可靠性也基本没有了,所以对这个命令进行确认已经无意义啦。
总的来说,tcp是用“确认”这个手段来保证可靠的,在tcp整个过程中,我们需要确认syn,fin,两个命令,以及数据传输,这样才能保证可靠。
三次握手其实是通信双方互喊开始然后确认而已,中间的是为了节约将ack和syn放一起而已,其实这里的放一起,跟数据通信时带着ack的意义是一样的。那么为什么要四次分手呢?不能和三次握手一样吗?不行,因为通信是双方的,你说完你该说的,不代表我就说完了,所以四次握手应该是两次说再见。那这就引出另外一个问题啦,结束的时候可以出现到通道的情况,那开始的时候为什么不能也这样呢?不能是只先一方对另外一方说,如果另一方需要说的时候再开启这个通道吗?但是之所以为什么不这么干可能是因为同时建立双通道的代价并不高,分开建立两个通道的方发会让过程变复杂。
- Syn 三次与FiN四次相关讨论
- 【TCP】TCP的状态 (SYN, FIN, ACK, PSH, RST, URG)-与三次握手
- TCP:三次握手,URG、ACK、PSH、RST、SYN、FIN 含义
- TCP:三次握手,URG、ACK、PSH、RST、SYN、FIN 含义
- TCP的连接(三次握手,SYN泛洪)与终止(三次握手和四次挥手,time_wait)
- 浅谈TCP扫描与SYN扫描与FIN扫描
- TCP三次握手和四次握手以及SYN攻击
- 了解TCP三次握手、四次挥手以及syn攻击
- 三次握手与四次挥手
- 三次握手与四次挥手
- 三次握手与四次挥手
- 三次握手与四次挥手
- 三次握手与四次挥手
- 三次握手与四次挥手
- 三次握手与四次挥手
- Tcp三次握手与四次挥手
- Tcp三次握手与四次挥手
- 三次握手与四次挥手 机制
- mq c++ windows环境编译运行说明
- hibernate枚举类型注解 @Enumerated
- 史上最简单的 MySQL 教程(三十二)「子查询(下)」
- JDK的下载安装与环境变量的设置
- Linux ubuntu中13个常用命令
- Syn 三次与FiN四次相关讨论
- 稀疏编码系列3:理解稀疏编码sparse coding
- iOS弹幕库OCBarrage-如何hold住每秒5000条巨量弹幕
- Android studid—每日笔记1
- Java多线程之同步锁定--synchronized同步方法和同步块、脏读、锁重入、死琐
- TP5的命令新增模块
- Python学习之路-C++程序员的血泪史
- ocamlrun未安装的问题
- iOS修改transform形变也能够实现动画