type 区分上层协议
IEEE 802.1Q 帧结构(byte)
Desination address 6|Dourcea address 6|Vlan tag 4|Type 2|802.2Header and data 46-1500|fcs 4
vlan tag: tpid 2|pri 3bit|cfi 1bit|vid 12bit
TPID:TagProtocolIdentifier(标签协议标识符),2Byte,表示帧类型,取值为0x8100时表示IEEE802.1Q的VLAN数据帧。如果不支持802.1Q的设备收到这样的帧,会将其丢弃,各设备厂商可以自定义该字段的值。当邻居设备将TPID值配置为非0x8100时,为了能够识别这样的报文,实现互通,必须在本设备上修改TPID值,确保和邻居设备的TPID值配置一致
PRI:Priority,3bit,表示数据帧的802.1p(是IEEE802.1Q的扩展协议)优先级。取值范围为0~7,值越大优先级越高。当网络阻塞时,交换机优先发送优先级高的数据帧
CFI:CanonicalFormatIndicator(标准格式指示位),1bit,表示MAC地址在不同的传输介质中是否以标准格式进行封装,用于兼容以太网和令牌环网。CFI取值为0表示MAC地址以标准格式进行封装,为1表示以非标准格式封装。在以太网中,CFI的值为0
VID:VLANID,12bit,表示该数据帧所属VLAN的编号。VLANID取值范围是0~4095。由于0和4095为协议保留取值,所以VLAN ID的有效取值范围是1~4094
Tcp:传输控制协议,面向连接的协议;通信前需要建立虚拟链路;结束后拆除链路(全双工
tcp 报文头部 在type后面IPTCP 有一个20字节的固定头部
0-65535-源端口0-16|目标端口16-32|序号seq32|确认号ack32|数据偏移4|保留6|6标记位-URG1(紧急指针有效)|ACK|PSH(1不在缓冲放直接发包|RST(重置位1重新链街)|SYN(同步)|FIN(结束)|窗口16|检验和16|紧急指针16|选项|填充(不固定的)
源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个
序列号:表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从 0 开始
确认号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送方:我希望你(指发送方)下次发送的数据的第一个字节数据的编号为此确认号
*2.最后一个起始ip的绝对偏移,4字节。有数据包时,首先将数据全部读取,然后判断数据是从客户端还是远程目标传送过来的(在读取时可以得到是从什么地址和端口读取到数据的,然后比较上面第6步时我们保存了下来的客户端的连接信息),如果数据是从客户端读取过来的,我们要将udp头去掉.例如我们读取到的buffer,buffer[3]是1时,udp头就是10个字节长度,如果buffer[3]是3的话,udp头长度是7+buffer[4].例如我们得到udp头是20位,我们接收到的buffer是50位长度,那么我们发送到目标的数据包长度是30位,前20位不发送,只发送后面的30位.如果数据是。第二个分区的起始偏移是 96637812736 字节,能够被 4096整除,那么也是达到了 4k对齐。当 rtp 通过 tcp 和 rtsp 消息交错传输时, 必须在 rtp 包前加 4 个字节长度的头, 它的结构如下:byte 必须是 “$” or 0x24byte channel id ,在 setup 消息中 transport 头字段中 interleaved 参数指定.word 数据包的长度(从接下来的数据开始算起, 不包括这 4 个字节的头的长度)例如:c->s: setup rtsp://foo.com/bar.file rtsp/1.0 cseq: 2 transport: rtp/avp/tcp。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-93609-2.html
媒体不负责
所以胜之不武