《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 0
IP 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协议--复位报文段相关推荐

  1. 【学习笔记】传输层:TCP协议(报文段、连接管理{握手}、可靠传输、流量控制、拥塞控制)

    文章目录 一. 协议特点 & 报文段 ① 特点 ② 报文段首部格式 二. TCP连接管理 ① 建立联系(三次握手) SYN洪泛攻击 ② 连接释放(四次挥手) 三. TCP流量控制 ① 序号 ② ...

  2. TCP/IP学习笔记(八)复位报文段

    TCP报文首部中存在一个RST位,如果该位被置1则表示这是个复位报文段.当一个报文段从一端发往一个不存在或者处于异常状态的另一端时,就会以一个复位报文段应答发送端,告知发送端连接出现错误,应当被关闭 ...

  3. TCP协议中报文详解

    TCP协议中报文SYN.ACK.FIN.RST.PSH.URG详解 1. SYN:同步连接序号,TCP SYN报文就是把这个标志设置为1,来请求建立连接: 2. ACK:请求/应答状态.0为请求,1为 ...

  4. 简述tcp协议三报文握手过程_华为原理 | 传输层协议amp;交换转发原理

    Interface GigabitEthernet0/0/0 ip address 12.1.1.2 255.255.255.0 arp-proxy enable \\华为接口下默认没有开启代理ARP ...

  5. 简述tcp协议三报文握手过程_TCP协议中的三次握手和四次挥手(图解)

    建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资 ...

  6. 简述tcp协议三报文握手过程_TCP协议的3次握手与4次挥手过程详解

    前言 尽管TCP和UDP都使用相同的网络层(IP),TCP却向应用层提供与UDP完全不同的服务.TCP提供一种面向连接的.可靠的字节流服务. 面向连接意味着两个使用TCP的应用(通常是一个客户和一个服 ...

  7. TCP协议:报文字段解析

    TCP报文是TCP层传输的数据单元,也叫报文段. 1.端口号:用来标识同一台计算机的不同的应用进程. 1)源端口:源端口和IP地址的作用是标识报文的返回地址. 2)目的端口:端口指明接收方计算机上的应 ...

  8. 简述tcp协议三报文握手过程_简述TCP的三次握手过程

    TCP握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器 ...

  9. 计算机网络sequence number,TCP协议中SequenceNumber和Ack Numbe

    Sequence Number lzyws7393074532892018-04-25 Number Sequence qq_391789932452017-09-21 理解TCP序列号(Sequen ...

最新文章

  1. Fedora 23 将默认使用 Wayland – 多监视器支持
  2. 在相同的后端上重新设计前端是什么效果? | 每日趣闻
  3. android python opencv_使用Python和OpenCV自动化Android游戏
  4. hive 小文件数据合并
  5. python-global全局变量
  6. nginx基本数据结构ngx_module_t,ngx_module_s
  7. MySQL和sql获取当前时间是本月的第几周或本月第一天的问题
  8. 【Caffe-Ubuntu】JSON 标签生成自己的 Caffe-LMDB 数据文件
  9. error C3859: 超过了 PCH 的虚拟内存范围;请使用“-Zm276”或更大的命令行选项重新编译...
  10. 采用C#泛型实现状态(State)模式
  11. Ucinet6 + Netdraw 根据excel文件绘制网络拓扑图
  12. SQL SERVER 2000 自动下载木马病毒 cmd.exe和ftp.exe解决办法
  13. WFD抓包及视频提取
  14. 差分运算放大器的计算
  15. WIN7系统 提示缺少msvcr120.DLL,msvcr110.DLL的 请戳这里。
  16. 作业一:数据软件系统的介绍及spss的操作简介
  17. java堆内存设置_java堆内存设置原理
  18. Spring Cloud 学习笔记(2 3)
  19. 15条秘诀练好英文面试口语
  20. win 2003安装IIS 7

热门文章

  1. excel如何显示多个独立窗口
  2. 电阻的单位字符及读法
  3. 电脑长期未用或深度放电,电池欠压充不上电(充电指示灯不亮)
  4. 数据集大小与模型性能的敏感性分析
  5. 新手做数据分析的5大误区,一定要避开!
  6. ScrollView的android:scrollbarStyle属性详解
  7. 使用Eclipse IDE的技巧
  8. 想通过手机刷视频赚钱?这篇文章你有必要了解一下
  9. PHP开发的93手赚网手机赚钱任务平台源码
  10. css 实现单行、多行文本显示