TCP中有6个标志位,分别为URG、PSH、ACK、RST、SYN、FIN,每个标志位都有其特殊的含义,现重点讨论URG与PSH这两个标志位;
含义:
URG:表示本报文段中发送的数据是否包含紧急数据,当URG=1,表示有紧急数据,后面的紧急指针字段只有当URG=1时才有效;
PSH:告诉对方收到该报文段后是否应该立即把数据推送给上层,如果为1,则表示对方应当立即把数据提交给上层,而不是缓存起来;
区别:
URG与PSH的区别及联系
共同点:URG和PSH都是提高报文段的优先级,使报文段更先推送给上层
不同点:两者将报文段更先推送给上层的实现方法不一样,URG是通过置1来让后面的紧急指针字段有效,从而让报文段更先发送,而PSH是通过置1来告诉接收方在接收到报文段后应该立即把数据发给上层而不是缓存起来。
当URG=1时,紧急指针指向包内数据段的某个字节(数据从第一字节到指针所指字节就是紧急数据,不进入接收缓冲就直接交给上层进程,余下的数据要进入接收缓冲的),PSH=1就是是把接收缓冲中排好序的那一段数据交给上层。
URG它是一个正的偏移,与TCP首部中序号字段的值相加表示紧急数据后面的字节,即紧急指针是数据最后一个字节。TCP首部中只有紧急指针指出紧急数据的位置,它所指的字节为紧急数据,但无法指定紧急数据的长度。