聊一聊TCP协议中的tcp push标志位

TCP协议字段中有6个标志位,像ACK,FIN,SYN都是喜闻乐见的标志位。但是PUSH这个标志位表示的是什么含义呢?在什么时候用呢?

PUSH标志位所表达的是发送方通知接收方传输层应该尽快的将这个报文段交给应用层。传输层及以下的数据往往是由系统所带的协议栈进行处理的,客户端在收到一个个报文之后,经由协议栈解封装之后会立马把数据交给应用层去处理吗?如果说在收到报文之后立马就交给上层,这时候应用层由于数据不全,可能也不会进行处理。而且每来一个报文就交一次,效率很低。因此传输层一般会是隔几个报文,统一上交数据。什么时候上交数据呢,就是在发送方将PUSH标志位置1的时候。那么什么时候标志位会置1呢,通常是发送端觉得传输的数据应用层可以进行处理了的时候。

举个例子来说,TLS 协议中的的证书交换部分,通常证书链的大小在3K-4K左右,一般分三个报文来进行传输。只有当这3K-4K的报文传输完毕之后,那么数据形成完整的证书链,这个时候对于接收方才是有意义的(可以进行证书链的验证),单纯的一个报文无异于乱码。因此在TLS连接中,通常会发现证书的第三个报文同上设置了push位,是发送方来告知接收方,可以把数据送往tcp的上层了,因为这些报文已经组成了有意义的内容了。同样接收方在解析了TCP的PUSH字段后,也会清空自己的缓冲区,向上层交数据。图1是使用百度搜索"CSDN 村中少年"关键词同时抓取报文中的一条数据流,表示的就是上述所述的场景:

这里写图片描述

图1
  • 10
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
下面是修改后的代码,增加了断处理函数和一个计数器变量intCount,每次断发生时就将断次数加1并输出: ``` STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DATA SEGMENT intCount DW 0 ; 断次数计数器 DATA ENDS CODE SEGMENT ASSUME CS:CODE START: MOV AX, @DATA ; 初始化数据段寄存器 MOV DS, AX MOV DX, MY8255_MODE ; 初始化8255 工作方式 MOV AL, 86H ; 工作方式1.A口输出,B口输入 OUT DX, AL MOV DX, MY8255_MODE ; C口 PC2置位 MOV AL, 05H OUT DX, AL MOV AX, 0000H MOV DS, AX MOV AX, OFFSET MIR7 ; 取断入口地址 MOV SI, 003CH ; 断矢量地址 ; 填 IRQ7 的偏移矢量 MOV [SI], AX MOV AX, CS ; 段地址 ; 填 IRQ7 的段地址矢量 MOV SI, 003EH MOV [SI], AX CLI ; 关闭断 POP DS ; 初始化主片 8259 MOV AL, 11H ; ICW1 OUT 20H, AL MOV AL, 08H ; ICW2 OUT 21H, AL MOV AL, 04H ; ICW3 OUT 21H, AL MOV AL, 01H ; ICW4 OUT 21H, AL MOV AL, 6FH ; OCW1 OUT 21H, AL ; 断处理函数 MIR7: PUSH AX PUSH BX PUSH CX PUSH DX INC intCount ; 断次数加1 MOV BX, intCount ; 将断次数存入BX寄存器 MOV CX, 10 ; 将计数器转换为十进制 CALL BCD MOV DL, [BX+2] ; 输出十位数字 ADD DL, 30H ; 转换为ASCII码 MOV AH, 02H ; 调用DOS断21H,输出字符 INT 21H MOV DL, [BX+1] ; 输出个位数字 ADD DL, 30H ; 转换为ASCII码 INT 21H MOV DL, [BX] ; 输出次数 ADD DL, 30H ; 转换为ASCII码 INT 21H MOV DL, ' ' INT 21H POP DX POP CX POP BX POP AX IRET ; 断返回 ; BCD转换函数 BCD PROC NEAR PUSH AX PUSH BX MOV BX, SP MOV AX, [BX+4] ; 将计数器存入AX寄存器 MOV BX, 10 DIV BX ; 将计数器除以10 MOV [BX+2], AH ; 余数存入BX+2,即十位数字 MOV [BX+1], AL ; 商存入BX+1,即个位数字 MOV AL, AH ; 将余数存回AX MOV AH, 0 MOV BX, 10 DIV BX ; 将余数除以10,得到次数 MOV [BX], AL POP BX POP AX RET BCD ENDP AA1: STI NOP JMP AA1 ; 读B口 写A口 DELAY: PUSH CX MOV CX, 0FO0H AAO: PUSH AX POP AX LOOP AAO POP CX RET CODE ENDS END START ``` 注意,输出断次数的代码是在断处理函数MIR7编写的,其还包括了一个BCD转换函数,用于将计数器变量转换为十进制数并输出。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

村中少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值