精华内容
下载资源
问答
  • TCP是在IP网络层之上的传输层协议,用于提供port到port面向连接的可靠的字节流传输。我来用土语解释下上面的几个关键字:port到port:IP层只管数据包从一个IP到另一个IP的传输,IP层之上的TCP层加上端口后,就是面向...
  •   在某些特殊条件下,TCP连接的一端回向另一端发送携带RST标志的报文段,即复位报文段,以通知对方关闭连接或重新建立连接。 访问不存在的端口   当客户程序访问一个不存在的端口时,目标主机将给他发送一个复位...

      在某些特殊条件下,TCP连接的一端会向另一端发送携带RST标志的报文段,即复位报文段,以通知对方关闭连接或重新建立连接。

    访问不存在的端口

      当客户程序访问一个不存在的端口时,目标主机将给他发送一个复位报文段。收到复位报文段的一端应该关闭连接或者重新连接,而不能回应这个复位报文段。

    异常终止连接

      正常的终止方式:数据交换完成之后,一方给另一方发送结束报文段。
      TCP提供了异常终止连接的方法:即给对方发送一个复位报文段。一旦发送了复位报文段,发送端所有排队等待发送的数据都将被丢弃。
      可以使用socket选项的SO_LINGER来发送复位报文段,以异常终止一个连接。

    处理半打开连接

      如果服务器或客户端关闭或异常终止了连接,而对方没有接收到结束报文段(比如网络故障),此时,客户端或服务器还维持着原来的连接,而服务器或客户端即使重启,也已经没有该连接的任何信息了。我们称这种状态为半打开状态,处于这种状态的连接称为半打开连接。如果客户端或服务器给处于半打开状态的连接写入数据,则对方将回应一个复位报文段。

    展开全文
  • TCP协议--复位报文段

    2017-11-30 19:42:54
    《Linux高性能服务器编程》阅读笔记:  在某些特定的场合,TCP连接的一段会向另一端发送TCP头部信息携带RST标志的报文段,即复位报文段,以通知对方关闭连接或者重新建立连接。1. 访问不存在的端口  对于UDP协议...

    《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协议

    2018-05-14 21:08:25
    TCP协议 tcp协议,传输控制协议,是TCP/IP协议体系中一个复杂的协议 特点: 面向连接的运输层协议 每一个TCP连接只能有两个端点(每一条TCP连接只能是点对点的)。TCP连接的端点叫做套接字或者插口,定义:IP...

    TCP协议

    tcp协议,传输控制协议,是TCP/IP协议体系中一个复杂的协议

    特点:

     

    1. 面向连接的运输层协议
    2. 每一个TCP连接只能有两个端点(每一条TCP连接只能是点对点的)。TCP连接的端点叫做套接字或者插口,定义:IP地址:端口号,例:(127.0.0.1:3306);每一条TCP连接唯一的被通信两端的两个套接字做确定。
    3. TCP提供可靠交付的服务,通过TCP连接传输的数据无差错 不丢失 不重复,并且按序到达
    4. TCP提供全双工通信。允许通信双方的应用进程在任何时候都能发送数据,连接的两端设有发送缓存和接受缓存,用来临时存放双向通信的数据。
    5. 面向字节流,‘流’指流入到进程或从进程流出的字节序列;虽然应用程序和TCP的交互是一次一个数据库块,但TCP把应用程序交付下来的数据看成是一连串的无结构字节流

            注意:套接字可以表示多种不同的意思,例如:

     

    • 允许应用程序访问联网协议的应用编程接口API,即运输层和应用层之间的一种接口,成称为socket API
    • 在socket API中使用的一个函数名也叫做socket
    • 调用socket函数的端点称为socket
    • 调用socket函数时,,其返回值称为socket描述符,简称socket
    • 操作系统内核中联网协议的Berkeley实现,称为socket实现

    可靠传输原理

    实现可靠的理想传输的两个特点:

     

    • 传输信道不产生差错
    • 不不管发送方以多快的速度发送数据,接受方都应该总是来得及处理收到的数据

    实际的网络都不具备以上两个条件,可以通过使用可靠传输协议实现以下两个方面:

     

    • 当出现差错时,发送方重传出现差错的数据
    • 同时,在接收方来不及处理收到的数据时,及时告诉发送方适当降低发送数据的速度

    这样,本身不可靠的传输信道就可以实现可靠传输了。

    停止等待协议:

    将传送的数据单元都称为分组,则‘停止等待’就是每发送完一个分组就停止发送,等待对方确认,在收到确认后再发送下一个分组。

    优点:简单

    缺点:信道利用率低

    过程:

     

    1. 无差错情况:A发送分组M1,发送完暂停发送,等待B的确认。B收到了M1就像A发送确认。A在收到了对M1的确认后发送提供下一个分组M2,以此类推。
    2. 出现差错:B接收M1时检测出了差错,丢弃M1,其他什么都不做;A在超过一段时间时没有收到确认,就认为之前的分组丢失,重新传送,即超时重传。实现时,每发送出去一个分组就设置一个超时计时器,计时器到期之前若受到了确认,就撤销计时器。
    3. 确认丢失和确认迟到:若B所发送的确认丢失了,A在超时崇川时间内没有收到确认,A无法确认是自己发送的分组丢失 出错了,还是B发送的确认丢失了,这是重新传送,B在收到重传的数据后应采取以下动作:

     

     

    • 丢弃重复的分组
    • 向A发送确认。不能认为已经发送过确认就不再发送
    若确认迟到,即传输过程没有差错,但确认包出现了迟到,此时丢弃重复的确认,并重传确认分组

    连续ARQ协议和滑动窗口协议

    目的:解决停止等待协议对于信道利用率低的问题。发送方不采用低效率的停止等待协议,采用流水线传输,就是发送方可连续发送多个分组,不必等待对方的确认,这样,信道上可以一直有数据不间断的在传送。

     

    连续ARQ协议:

     

    原理:

    过程:

    定义一个发送窗口,其中可包含多个分组,位于发送窗口内的分组都可以连续发送出去。而不需要等待对方的确认。

    连续ARQ协议规定,发送方每收到一个确认,就把发送窗口向前华滑动一个分组的位置。

    接收方一般采用累积确认的方式,即接收方在收到几个分组后,对按序到达的最后一个分组发送确认,这就表示:到这个分组为止的所有分组都正确收到了。这种方式的优点是:实现简单;缺点是:不能向发送方反映出接收方已经正确收到的所有分组的信息。

     

    TCP报文段首部格式

     

    TCP报文段的前20个字节的首部是固定的,也是首部的最小长度,后面的选项根据需要可增加 4n 字节,选项和固定首部共同构成TCP报文段的首部。

    部分字段的意义:

     

    1. 源端口和目的端口:各占2个字节,TCP的分用功能通过端口体现
    2. 序列号:4字节,序号范围从0到2的32次减1整个要传送的字节流的起始序号在建立连接时设置,该字段表示本报文段所发送的数据的第一个字节的序号。
    3. 确认号:占4个字节,是期望收到对方下一个报文段的第一个字节数据字节的序号。
    4. 4位首部长度:此处应为数据偏移,占4位,指出TCP报文段的数据起始处距离TCP报文段的起始处有多远,实际上指出TCP报文段的首部长度;数据偏移的单位是32位字(以4字节长的字为计算单位);由于4位二进制数最大可以表示15,所以数据偏移最大值60,即TCP首部的最大长度,选项长度不能超过40.
    5. URG:当URG=1时,表示紧急指针字段有效,会告诉系统,此报文段中有紧急数据应尽快传送。紧急数据会插入到报文段数据的最前面
    6. ACK:确认号标志位,仅当ACK=1时,确认号字段才有效;TCP规定,在建立连接后,所有传送的报文段ACK都必须置1。三次握手和四次挥手时使用。
    7. 推送PSH:两个应用进程进行交互式的通信时,一端的应用进程在键入一个命令希望立即收到对方的回应时使用。
    8. 复位RST:重置位,RST=1时,表示TCP连接出现严重差错,需要释放连接,重新建立运输链接;RST置1还用来拒绝一个非法的报文段或者拒绝打开一个连接。
    9. 同步SYN:连接建立时,用来同步序号,SYN=1且ACK=0时,表示该报文段是一个连接请求报文段;对方同意连接,则在响应报文段中使SYN=1且ACK=1.所以SYN置为1时,表示这是一个连接请求或者连接接受报文段。
    10. 终止FIN:用来释放一个连接,当FIN=1时,表示此报文段的发送方的数据发送完毕,并要求断开TCP连接。
    11. 窗口:指出现在允许对方发送的数据量,窗口值是经常在动态变化的。窗口值作为接收方让发送方设置其发送窗口的依据。

     

     

    展开全文
  • 25-tcp协议——连接复位(RST)

    千次阅读 2018-05-05 14:02:53
    1. 连接复位(RST)   前面我们介绍了tcp连接建立和连接释放过程中的一些细节,那么大家有没有想过一些异常的情况:有时候也会出现无法建立tcp连接或tcp连接异常终止的情况。一般来说,导致这种情况的原因一般有...

    1. 连接复位(RST)

      前面我们介绍了tcp连接建立和连接释放过程中的一些细节,那么大家有没有想过一些异常的情况:有时候也会出现无法建立tcp连接或tcp连接异常终止的情况。一般来说,导致这种情况的原因一般有很多种,比如:

      1.拒绝连接请求,比如:A想和B建立tcp连接,但是A的连接请求中使用了一个不存在的端口(比如:这个端口超出65535的范围),那么B就可以发送RST报文段拒绝这个请求。

      2.异常终止连接,如:A和B的tcp连接出现了异常,然后B希望终止这条异常的连接,于是就可以发送一个RST报文段终止这个连接。

      3.终止空闲的连接,如A和B之间的tcp连接已经很久没有传输数据了,空闲太长时间,可以发送RST报文段来终止这个连接。

      这里我们只针对拒绝连接请求和异常终止连接做详细介绍。

    2. 拒绝连接

    在这里插入图片描述

      拒绝连接一般是由服务器主动发起的,因为客户端发起请求连接携带的目的端口,可能服务器并没有开启LISTEN状态。因此服务器在收到这样的报文段后会发送一个RST报文段,在这个报文里把RST和ACK都置为1,它确认了SYN报文段并同时重置了该tcp连接,然后服务器等待另一个连接。客户端在收到RST+ACK报文段后就会进入CLOSED状态。

    这里以通过20000不存在的端口远程登录为例:

    这里写图片描述


    tcpdump抓取到的数据包如下:

    13:35:08.609549 IP 192.168.98.137.49057 > 192.168.0.102.dnp: Flags [S], seq 2919679902, win 14600, options [mss 1460,sackOK,TS val 39134059 ecr 0,nop,wscale 6], length 0
    13:35:09.610018 IP 192.168.98.137.49057 > 192.168.0.102.dnp: Flags [S], seq 2919679902, win 14600, options [mss 1460,sackOK,TS val 39135059 ecr 0,nop,wscale 6], length 0
    13:35:09.610115 IP 192.168.0.102.dnp > 192.168.98.137.49057: Flags [R.], seq 1766537774, ack 2919679903, win 64240, length 0
    13:35:10.610188 IP 192.168.0.102.dnp > 192.168.98.137.49057: Flags [R.], seq 3482791532, ack 1, win 64240, length 0
    

      通过tcpdump工具抓取的数据报发现,RST报文段不携带数据。

    3. 异常终止连接

    在这里插入图片描述

      出现异常终止连接的原因有很多种,可能是进程出现bug了或者由于数据出现了不一致(不想发送数据了),对于这种情况,tcp有可能终止一条连接。也就是说,在这些情况下,就可以发送RST报文段异常终止连接。

       客户端由于队列中的数据出现了不一致,发送了RST+ACK报文段异常终止连接,注意:在发送RST+ACK报文段的时候会丢弃掉队列中的所有数据,服务器也会把队列中的所有数据都丢弃掉,并通过一个ICMP差错报告报文通知服务器,然后双方都进入CLOSED状态。

      在一些情况下,我们可能想让服务端把数据发送完,然后再关闭tcp连接,而不是马上发送RST报文终止这条连接,那么可以在套接字编程中使用SO_LINGER选项。SO_LINGER选项是用来设置延迟关闭的时间,等待套接字发送缓冲区中的数据发送完成,但是并不保证数据一定会被对方接收,只是等待一段时间后,再正常关闭tcp连接。如果SO_LINGER设置为0,则会清除队列中的所有数据,直接发送RST报文关闭连接(关于这个实验可参考:10-在accept之前中止连接(连接异常))。

      需要注意的是:对于RST报文段,另一端不需要发送任何响应,因为发送完RST报文后,这条tcp连接就关闭了,也就没有必要确认了,收到RST的一方将终止该连接,并通知应用层复位连接。

    展开全文
  • TCP协议的原理来谈谈rst复位攻击

    万次阅读 多人点赞 2012-02-06 13:54:47
    在谈RST攻击前,必须先了解TCP:如何通过三次握手建立TCP连接、四次握手怎样把全双工的连接关闭掉、滑动窗口是...TCP是在IP网络层之上的传输层协议,用于提供port到port面向连接的可靠的字节流传输。我来用土语解释下上
  • TCP协议分析

    2019-10-24 09:50:52
      传输层协议主要有两个:TCP协议和UDP协议。TCP协议相对于UDP协议的特点是:面向连接、字节流和可靠传输。   对于TCP协议而言,发送端执行的写操作次数和接收端执行的读操作次数之间没有任何数量关系,这即字节...
  • LwIP中TCP协议的实现

    千次阅读 2019-09-16 23:58:25
    与其他协议一样,为了描述TCP协议,LwIP定义了一个名字叫tcp_pcb的结构体,可以称之为TCP控制块,其内定义了大量的成员变量,基本定义了整个TCP协议运作过程的所有需要的东西,如发送窗口、接收窗口、数据缓冲区。...
  • TCP协议详解

    2016-07-21 08:25:53
    TCP协议是TCP/IP协议族中一个重要的协议。和IP协议相比,TCP协议更靠近应用层,因此在应用程序中具有更强的可操作性。一些重要的socket选项都和TCP协议相关。
  • 今天先讲讲TCP协议。 本篇文章概要: 正文 我们知道TCP是传输层协议,用于为应用层提供服务,通过端口号可以唯一标识一个应用。 1 什么是TCP? TCP是面向连接的,提供端到端可靠性服务的传输...
  • 文章目录1.TCP协议特点2.TCP报文段的首部格式3.TCP连接管理(1)连接的建立 - - - 三次握手(2)SYN泛洪攻击4.TCP连接释放----四次握手5.TCP连接建立和释放的总结如下 1.TCP协议特点 2.TCP报文段的首部格式 TCP...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,961
精华内容 7,184
关键字:

复位tcp协议