网络编程(二):TCP段格式中的URG与PSH到底有什么不同?
2016-08-03 21:42
716 查看
学习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首部中只有紧急指针指出紧急数据的位置,它所指的字节为紧急数据,但没有办法指定紧急数据的长度。
(截的图太丑了但这不是重点。。。
)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首部中只有紧急指针指出紧急数据的位置,它所指的字节为紧急数据,但没有办法指定紧急数据的长度。
相关文章推荐
- 互联网CDN和电信的CDN到底有什么不同
- 不同种类的整型比较,到底发生了什么?
- 在R语言中,使用“=”和“<-”到底有什么不同? 就是等号和箭头号有什么区别,是完全一样还是局部不同?
- python网络编程——将IPv4地址转换成不同的格式
- 仔细思考一个接口的不同实现得到的类和一个类的不同对象使用起来到底有什么区别?
- 超线程 双核 双路三者到底有什么不同?
- TCP报头中的URG 与 PSH标志不同之处与作用
- java中的class 与Class , A.class 与 A.getClass() 到底有什么 不同
- 阿尔法围棋与深蓝到底有什么不同
- WAR到底是什么文件格式,比如哪些是WAR文件?
- 使用STL和MFC到底有什么不同?
- 从程序设计角度看B/S C/S到底有什么不同
- 从程序设计角度看B/S C/S到底有什么不同???
- 请问linux 高手们,一个入门级问题,tgz包和tar.gz包有什么区别?是相当与不同的格式吗
- .csv是什么文件格式,什么软件可以打开?xls与csv文件是什么区别?功能和作用上有什么不同?
- 蓝光原版与蓝光Remux格式到底有什么区别?
- 从程序设计角度看B/S C/S到底有什么不同???
- Java的Generics和c++的Template到底有什么不同?
- UTF—8与UTF—8(无bom)格式相比有什么不同
- 我们常用的图片格式到底有什么区别?