文档章节

TCP控制字段标志:URG、ACK、PSH、RST、SYN、FIN

cnsytem
 cnsytem
发布于 2014/04/30 14:00
字数 1106
阅读 3417
收藏 7

在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.
其中,对于我们日常的分析有用的就是前面的五个字段。

它们的含义是:

URG:Urget pointer is valid (紧急指针字段值有效)

SYN: 表示建立连接

FIN: 表示关闭连接

ACK: 表示响应

PSH: 表示有 DATA数据传输

RST: 表示连接重置。

       其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应,如果只是单个的一个SYN,它表示的只是建立连接。TCP的几次握手就是通过这样的ACK表现出来的。但SYN与FIN是不会同时为1的,因为前者表示的是建立连接,而后者表示的是断开连接。RST一般是在FIN之后才会出现为1的情况,表示的是连接重置。一般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;而当出现SYN和SYN+ACK包时,我们认为客户端与服务器建立了一个连接。PSH为1的情况,一般只出现在 DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递。

      TCP产生 RST响应的情况(属于硬错误):

       四次握手不是关闭 TCP连接的唯一方法. 有时,如果主机需要尽快关闭连接(或连接超时,端口或主机不可达),RST (Reset)包将被发送. 注意在,由于RST包不是TCP连接中的必须部分, 可以只发送RST包(即不带ACK标记). 但在正常的TCP连接中RST包可以带ACK确认标记
      1. syn发送到服务器主机,但是目的端口并未运行。则产生一个ECONRFUSED错误。客户端立即返回。比如telnet 192.168.1.55 8889,条件:55主机在局域网上并且可达(也可以换成可以到达的网络ip地址),但是8889这个端口并未使用(可能服务器已经关闭),则服务器(对方主机tcp内核)发送一个rst相应给客户端,于是客户端立即关闭。 注意一下,如果输入的网络ip不可达的话,客户端将会持续发送syn,最后产生一个etimeout的错误,大概75秒左右。这个时候客户端的默认网关(192.168.1.1 211.2.2.2)因为找不到下一路由,路由器(或者再过几跳的路由器)会产生一个EHOSTUNREACH响应给客户端(注意,ENETUNREACH和EHOSTUNREACH通常被认为是一个错误,因为ENETUNREACH一般当作已过时),由于这是个软错误(有可能是网络暂时不通造成的)。客户端会重发syn直到超时。
        所以会有 telnet 192.168.1.55 8888  主机存在,但是端口未开,ECONRFUSED错误,立刻返回
                 telnet 192.168.1.56 *     主机不存在,UNROUTETOHOST错误,立刻返回
                 telnet 211.1.1.5    *     主机不存在,etimeout错误
 
      2. 最简单的情况,服务器主动发送rst给客户端关闭连接。客户端read write直接返回rst错误。
 
      3. 服务器收到一个不存在的连接返回rst响应。比如,服务器重启之后,先前的一个已连接的客户端毫不之情的情况下,这就是半闭连接(跟半开连接最大的不同是,半闭连接是不能使用的,半开连接可以使用)。
       此时,如果客户端read的话(接收缓冲无数据)产生一个EPEERRST错误
               如果客户端write的话且发送数据小于发送缓冲区剩余容量时,第一次write成功,第二次write或者read的时候就会产生一个EPEERRST的错误。因为write发送数据是直接把要发送的数据拷贝到内核的tcp发送缓冲区就立刻返回成功的。当然拷贝之前会先检查一下tcp连接有无错误。所以第二次发送或者接收的时候,发现连接上已经有了EPEERRST的错误,所以就返回错误(话说回来,第一次发送的数据实际上根本就没有发送成功,对方根本就没接受它)


本文转载自:

共有 人打赏支持
上一篇: signal
下一篇: 字典正则表达式
cnsytem
粉丝 1
博文 44
码字总数 10384
作品 0
浦东
程序员
私信 提问
TCP的几个状态 SYN, FIN, ACK, PSH, RST, URG

TCP的几个状态对于我们分析所起的作用。 在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段。 它们的含义...

疯狂的艺术家
2012/03/15
0
0
TCP的状态 (SYN, FIN, ACK, PSH, RST, URG) (转)

在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段。 它们的含义是: SYN表示建立连接, FIN表示关闭连接...

swon
2016/11/17
6
0
TCP的几种状态: (SYN, FIN, ACK, PSH, RST, URG)

在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段。它们的含义是:SYN表示建立连接,FIN表示关闭连接,A...

souldepth
2014/06/16
0
0
超强的iptables防护脚本

#echo "Starting kerryhu-iptables rules..." #!/bin/bash # BY kerryhu # QQ:263205768 # MAIL:king_819@163.com # BLOG:http://kerry.blog.51cto.com #this is a common firewall created ......

刘赤龙
2010/06/08
0
0
TCP 三次握手和四次挥手详解

TCP 报文格式详解 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 (1). 源端口和目的端口字段——各占 2 字节,标识了发送方和接收方的应用进程,如2210,80端口 (2). 序号字段——占 4 字节,TCP 连接...

五大三粗
2015/03/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

维信小程序button样式重写

一、小程序button默认按钮样式重写 以primary按钮为例: /**重写默认按钮样式**/button[type='primary'] {background: red;padding: 5px 0px;line-height: 30px;font-size: 14px;......

tianma3798
34分钟前
1
0
使用async和await封装vue中的http请求

实际需求中经常会碰到想异步请求代码写的像同步一样简洁,解决回调地狱,这是最近封装的一个。 // import qs from 'qs';import axios from 'axios'import utils from './util'import { To......

chinahufei
41分钟前
1
1
python中类方法和静态方法区别

面相对象程序设计中,类方法和静态方法是经常用到的两个术语。 逻辑上讲:类方法是只能由类名调用;静态方法可以由类名或对象名进行调用。 在C++中,静态方法与类方法逻辑上是等价的,只有一...

Linux就该这么学
46分钟前
2
0
5G是现实的狂欢还是骨感?

“4G改变生活,5G改变社会。” 这一句充满无限遐想的口号,因2019年世界移动大会(MWC2019)召开带来的产业最前沿动态,让观察者、消费者产生梦想照进现实的感觉。OPPO、小米、华为、三星、LG、...

linuxCool
50分钟前
2
0
Codis的dashboard异常退出后,重新启动报异常的处理方法

dashboard是codis的核心组建,所有集群相关的操作都是通过dashboard进行的。如果dashboard出现宕机、服务被杀掉等极端情况,则会导致codis集群无法使用。 1)codis集群维护时,需要关闭dashb...

linxyz
51分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部