tcp linux 报文内容,【Linux】TCP报文中的PSH和URG字段的介绍

TCP协议

TCP报文格式

0818b9ca8b590ca3270a3433284dd417.png

源端口和目的端口

各自占用两个字节,用来表示主机中的通信进程。端口号和IP组合即为套接字

序号

也叫发送序号,TCP将发送的每一个数据流都进行了编号,整个数据的起始序号在开始连接的时候设置

确认序号

指接受主机期望收到的下一个报文序号是多少

数据内容

又称为首部长度,标明TCP首部数据包的长度,单位是四个字节

六个控制字符

URG

紧急指针有效位

ACK

确认连接,1为有效

PSH

要求对方数据尽快达到应用层

RST

连接出现问题,需要重新建立连接

SYN

进行连接的建立

FIN

断开连接,提出断开连接的一方的FIN为1

窗口

告诉对方自己的窗口大小,用于流量控制

检验和

检验报文内容的正确性

紧急指针

当URG有效时,紧急指针便有效。紧急指针用来在紧急情况下进行数据的传输

选项和填充

可有可无,对数据的额外控制

URG的详细介绍

紧急指针指出了紧急数据的末尾在报文段中的位置。

当所有紧急数据都处理完毕后,TCP就告诉应用程序恢复到正常的操作。

注意:即使窗口为0时,也可以发送紧急数据 。

URG=1告诉系统此报文段中有紧急数据,应当尽快传送(相当于高优先级的数据),而不是按照原先的顺序来传送。

URG运用实例

我们现在在运行一个程序,改程序需要运行很长的时间,但是突然发现程序里面有一个错误,需要及时的去进行修改,所以我们通过键入Ctrl-C给系统发送一个终止信号。

如果我们不使用紧急数据的话,这两个字符将存储在接受TCP的缓存的末尾,只有在所有数据处理完毕之后我们才能将这两个字符交付给接收方的应用程序,这样似乎就失去了提前终止的意义了。

所以,我们通过及时的设置URG=1,告诉发送方此时有紧急数据需要传输,于是发送方TCP就将紧急数据插入到本段报文数据段的最前方,这些数据就叫做“带外数据”,而在紧急数据后面的就是正常的普通数据了。

特性

(1)紧急数据的起始点 = 序号

(2)紧急数据的终止点 = 序号+紧急指针

(3)紧急指针就是记录紧急数据的字节数,紧急指针永远为正数

(4)在紧急数据后面的数据为普通数据,需要按序缓存

(5)可以在窗口为0时发送紧急数据

(6)紧急数据都处理完成后,tcp就告诉进程恢复到正常操作

(7)URG强调的是直接读取数据,不会将该数据复制到缓存中

PSH的详细介绍

推送PSH,PSH叫做急迫位。

当两个应用程序进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应。

在这种情况下,TCP就可以使用推送(push)操作。

这时,发送方TCP把PSH置1,并立即创建一个报文段发送出去。

接受方TCP收到PSH=1的报文,就尽快地(即“推送”向前)交付接受应用程序,而不再等到整个缓存都填满了后在向上交付。

(注:虽然应用程序可以选择推送操作,但是推送操作还很少使用)

PSH的使用实例

在一个交互程序中,当客户发送一个命令给服务器时,它设置PUSH标志并停下来等待服务器的响应。

通过允许客户应用程序通知其TCP设置PUSH标志,客户进程通知TCP在向服务器发送一个报文段时不要因等待额外数据而使已提交数据在缓存中滞留。

类似地,当服务器的TCP接收到一个设置了PUSH标志的报文段时,它需要立即将这些数据(包括以前存中滞留的数据)递交给服务器进程而不能等待判断是否还会有额外的数据到达。

PSH=1,只对接收方的接收缓冲区起作用,发送方通过使用PUSH位来通知接收方将所有收到的数据立即提交给服务器进程,而不需要等待额外数据(将缓存填满)而让数据在缓存中停留!

这里所说的数据包括与此PUSH包一起传输的数据以及之前就为该进程传输过来的数据(滞留在缓存中的数据)。

特性

(1)PSH=1表示该报文希望在到达对端时,将这个报文及缓存区之间缓存尚未交付的数据一并交付给进程。

(2)PSH的数据=本报文数据+缓存区数

(3)PSH的方向--->单方向(接收PSH报文的一端)

(4)PSH强调的是尽快将数据交付给上层(协议),而不需要经过强迫数据交互(默认tcp/ip是将数据缓存到一定的上限,再将数据递交给上层,以提高网络性能).可见,该部分数据是需要复制到缓存中的

总结

相同点

他们都是对数据的一种处理方式,URG和PSH都用于紧急情况的处理

不同点

(1)发送方式不同。URG是前端,PSH是后端。

(2)URG置为1时,对于发送方,“带外数据”与正常情况下应该发送的消息数据一起,封装成数据报发送,省去了在队列中等待的时间。

(3)在接收方,解析报文后,获取数据之后还是要放在缓存区中,等待满了之后在向上往应用层交付。 PSH置为1时,对于发送方,表明这些数据不需要等向下发送的缓存区满,立刻封装成报文,发送,省去了等待发送缓存区到达满的状态的时间。  (4)在接收方,也不需要等接受缓存区满,直接向上交付给应用层

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值