TCP协议--复位报文段
来源:互联网 发布:贝克汉姆 帅 知乎 编辑:程序博客网 时间:2024/05/30 23:55
《Linux高性能服务器编程》阅读笔记:
在某些特定的场合,TCP连接的一段会向另一端发送TCP头部信息携带RST标志的报文段,即复位报文段,以通知对方关闭连接或者重新建立连接。
1. 访问不存在的端口
对于UDP协议,当一个数据报到达目的端口时,该端口没被监听使用,它将产生一个ICMP端口不可达的信息;对于TCP,目的主机将会产生一个复位报文段返回。
例如,在一台机器上登录目标机器的telnet服务器,使用的是目标机器不存在的端口54321,用tcpdump抓取过程中两台机器交换的TCP报文段:
$ sudo tcpdump -nt -i eth0 port 54321$ telnet 192.168.239.101 54321 #在另一终端运行
tcpdump抓取的数据包:
IP 192.168.239.101.55116 > 192.168.239.104.54321: Flags [S], seq 2991810862, win 29200, options [mss 1460,sackOK,TS val 42342 ecr 0,nop,wscale 7], length 0IP 192.168.239.104.54321 > 192.168.239.101.55116: Flags [R.], seq 0, ack 2991810863, win 0, length 0
由此可见,目标机器对连接请求(同步报文段)回应了一个复位报文段(tcpdump输出R标志)。因为复位报文段的接收通告窗口大小为0,即收到复位报文段的一段应该关闭连接或者重新连接,而不可回复此复位报文段。另外,当客户端程序向服务端的某个端口发起连接,而该端口仍被处于TIME_WAIT状态的连接所占用,客户端程序也会收到复位报文段。
2. 处理半打开连接
服务端(或客户端)关闭或者异常终止了连接,而对方没有收到结束报文段(可能发生网络故障),此时客户端(或服务器)还维持原来的连接,而服务端(或客户端)即使重启,也已没有该连接的任何信息。这就是半打开连接。如果客户端(或服务器)往处于板打开状态的连接写数据,则对方也会回复一个复位报文段。
模拟半打开连接: 在ubuntu11.04机器上使用nc命令模拟一个服务器程序,使之监听12345端口:
$ nc -l 12345
从ubuntu14.04机器上运行telnet命令登录到该端口,登录前先在另一终端运行tcpdump命令抓取数据报文:
$ sudo tcpdump -nt -i eth0 port 12345$ telnet 192.168.239.151 12345
登录成功后拔掉机器之间的网线,再在服务器机器上强制退出nc程序(ctrl + c)。拔掉网线的目的是强制退出nc程序时发出的结束报文无法到达ubuntu14.04机器,这是ubuntu14.04运行的telnet客户端维持着一个半打开的连接,然后接上上网线,并从客户端往半打开连接写入1字节数据,可见服务器机器也会回复复位报文。
3. 异常终止连接
TCP协议提供了异常终止一个连接的方法,即给对方发送一个复位报文段,一旦发送了该报文,发送端所有排队等待发送的数据都将被丢弃,接收端将关闭或者重新建立连接。应用程序可以设置socket选项SO_LINGER来发送复位报文段,以异常终止一个连接。
- TCP协议--复位报文段
- TCP的复位报文段
- RST复位报文段
- 复位报文段
- RST复位报文段
- RST复位报文段
- 复位报文段
- RST复位报文段
- TCP协议中报文段详解
- TCP报文段结构
- TCP报文段结构
- TCP协议---报文格式
- TCP协议-RST报文
- TCP报文段首部详解
- TCP报文段头部格式
- 计算机网络-TCP报文段格式
- TCP/IP协议:最大报文段长度(MSS)是如何确定的(1)
- TCP/IP协议:最大报文段长度(MSS)是如何确定的(2)
- 洪小文:以科学的方式赤裸裸地剖析AI(四)| 未来是人工智能+人类智能
- adminLTE 教程 -1 基础
- 拓扑排序
- Linux关机时执行指定脚本(亲测有效)
- 关于antd form this.props.form.getFormValue(): undefined.的bug解决
- TCP协议--复位报文段
- BZOJ2257(Jsoi2009)[瓶子和燃料]--最大公因数(裴蜀定理)
- 值传递和引用传递
- Linux nginx+node+supervisor+mysql+redis 环境部署
- NYOJ 部分和问题(入门题)
- 镜像
- 大数据案例一详解
- matlab---之cat,size
- 实用的php增删改查库(包含图片操作)