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

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

它们的含义是:网络

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

SYN: 表示创建链接spa

FIN: 表示关闭链接指针

ACK: 表示响应orm

PSH: 表示有 DATA数据传输ip

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数据包内容被传递。get

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

       四次握手不是关闭 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的错误,因此就返回错误(话说回来,第一次发送的数据实际上根本就没有发送成功,对方根本就没接受它)

相关文章
相关标签/搜索