如果我们搜索tcp标志位,搜出来的文章基本上都在解释tcp的6个标志位。
但是你可能也在某些地方看到人说tcp有8个标志位(如下图)。
- 那到底是6位还是8位呢?
8位(如果不算在试验中的NS位的话) - 那为什么那么多人说有6位呢?
因为多出来的两个标志位后来加的一个功能:显式拥塞通知(英语:Explicit Congestion Notification,简称ECN)是一个对网际协议和传输控制协议(TCP)的扩展,定义于RFC 3168(2001)。ECN允许拥塞控制的端对端通知而避免丢包。
虽然如今普及度已经很高了,但仍有些老旧的路由器和操作系统(比如:xp)是不支持的。(详细内容请转至wiki百科 显式拥塞通知,如果打不开则是被墙了)
在TCP连接上使用ECN也是可选的;当ECN被使用时,它必须在连接创建时通过SYN和SYN-ACK段中包含适当选项来协商。
所以他们只是讲了tcp中最基础的,所有设备都支持的那6个标志位。 - 试验中的NS位是啥?
NS是随机和(Nonce Sum),用于防止TCP发送者的数据包标记被意外或恶意改动。
NS (experimental) - The nonce sum flag is still an experimental flag used to help protect against accidental malicious concealment of packets from the sender. See RFC 3540 for more details.(来源:https://www.keycdn.com/support/tcp-flags)
注意:如果考试中问你tcp flags有几个的话,就按照你们老师上课或教材上讲的写。(比如我们老师就给我讲的是6位,考试也考了,那我必然写6位啊,没有丝毫的犹豫和反抗)