网络编程(二):TCP段格式中的URG与PSH到底有什么不同?
来源:互联网 发布:c语言数组视频 编辑:程序博客网 时间:2024/05/02 02:07
学习TCP协议的时候,我们看到在TCP的段格式里面有6个标志位,在我们讨论这个问题之前,让我们来看看这个TCP段格式到底长了个什么样子?
(截的图太丑了但这不是重点。。。)URG、ACK、PSH、RST、SYN、FIN是六个控制位,他们的功能如下:
URG:表示本报文段中发送的数据是否包含紧急数据。URG=1,表示有紧急数据。后面的紧急指针字段只有当URG=1时才有效。
ACK:表示是否前面的确认号字段是否有效。ACK=1,表示有效。只有当ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为1。
PSH:告诉对方收到该报文段后是否应该立即把数据推送给上层。如果为1,则表示对方应当立即把数据提交给上层,而不是缓存起来。
RST:只有当RST=1时才有用。如果你收到一个RST=1的报文,说明你与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明你上次发送给主机的数据有问题,主机拒绝响应。
SYN:在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1。
FIN:标记数据是否发送完毕。如果FIN=1,就相当于告诉对方:“我的数据已经发送完毕,你可以释放连接了”
可以看出URG和PSH的区别:虽然URG和PSH都是提高报文段的优先级,使报文段更先推送给上层,但是两者的实现方法是不一样的,URG是通过置1
来让后面的紧急指针字段有效,从而让报文段更先发送,而PSH是通过置1来告诉接收方在接收到报文段后应该立即把数据发给上层而不是缓存起来。
URG=1,紧急指针指向包内数据段的某个字节(数据从第一字节到指针所指字节就是紧急数据,不进入接收缓冲就直接交给上层进程,余下的数据要进入接收缓冲的),PSH=1就是是把接收缓冲中排好序的那一段数据交给上层
URG它是一个正的偏移,与TCP首部中序号字段的值相加表示紧急数据后面的字节,即紧急指针是指向紧急数据最后一个字节的下一字节。这是协议编写上的一个错误,RFC1122中对此给出了更正说明,紧急指针是数据最后一个字节,不是最后字节的下一位置。TCP首部中只有紧急指针指出紧急数据的位置,它所指的字节为紧急数据,但没有办法指定紧急数据的长度。
0 0
- 网络编程(二):TCP段格式中的URG与PSH到底有什么不同?
- TCP中的URG与PSH
- TCP报文段中的URG和PSH
- 浅析TCP协议中的URG与PSH
- TCP中的URG和PSH
- TCP协议中的URG-PSH
- 网络---TCP协议中的urg和psh的区别
- 【网络】TCP报文中的PSH和URG字段的介绍
- TCP报头中的URG 与 PSH标志不同之处与作用
- 网络基础(CRC、NAT、URG、PSH、tcp定时器)
- TCP格式&&可靠性保证&&URG PSH区别
- TCP标志中的URG和PSH位
- TCP标志中的URG和PSH位
- TCP标志中的URG和PSH位
- TCP协议包头中的URG和PSH
- TCP报头中的URG和PSH
- TCP协议中的URG和PSH位
- TCP协议字段中的URG和PSH
- JSON解析学习笔记(json、gson、fastjson)
- POJ--2485
- BZOJ 1968: [Ahoi2005]COMMON 约数研究
- SINGLETON宏定义浅析
- 每个人都能徒手写递归神经网络–手把手教你写一个RNN
- 网络编程(二):TCP段格式中的URG与PSH到底有什么不同?
- SQLserver表字段修改后的保存
- 第4章 例题4-1 古老的密码(UVa1339)
- JAVA集合容器--Vector
- spring四种依赖注入方式
- source.android.com-source-overview
- R语言之朴素贝叶斯算法应用
- [JllServer] CPU:I7_6700 MainBoard: ASUS_Z170_AR 安装时黑屏时的处理
- HDU 3689 (KMP+DP || 暴力+dp)