《TCP IP 详解卷1:协议》阅读笔记

  • 时间:
  • 浏览:0
  • 来源:彩神大发时时彩_神彩大发时时彩官方

  3. 客户端接收到服务器发送的SYN报文段后,为了确认服务器的SYN,客户端将ISN(s)的数值加1后作为返回的ACK数值。

通信的双方一起扮演客户端和服务器的角色。在一起打开时,与正常的连接建立过程相比,需要增加有好多个报文段;在一起关闭时,与正常关闭这类,或多或少 报文段的顺序是交叉的。

  3. 将会侦听节点的列队中仍然有空间分配给新的连接,TCP模块会应答SYN并完成连接。知道接收到三次握头上的第有好多个报文段之前 ,与侦听节点相关的程序运行才会知道新的连接。你这一请况下,客户端将会会认为服务器将会准备好接收数据了,然而服务器或多或少 TCP模块构成了连接,程序运行并未收到相关连接,这时的TCP模块将会把接收的数据存入队列中。

TCP的路径最大传输单位发现 

值得注意的是请况TIME_WAIT(2MSL)也称为2MSL停留请况,在该请况中,TCP将会停留两倍于最大段生存期(MSL)的时间,也被称作加倍停留。每个实现都需要为最大段生存期挑选有好多个数值,它代表任何报文段在被丢弃之前 再网络中允许占据 的最长时间。

TCP头部带有多个选项,整个选项列表是有互联网编号分配机构(IANA)维护的。每个选项的头有好多个字节为"种类",指明了该选项的类型。根据[RFC1122],必须被理解的选项会被简单的忽略掉。种类值为0将会1的选项仅占有好多个字节,或多或少选项会根据种类来挑选自身的字节数len,选项的总长度包括了种类和len个字节。需要注意的是,TCP头部的长度应该是32比特的倍数,将会TCP头部长度字段是以此为单位的。

  4. 当前的被动关闭者(此时是服务器)接收到信息后,将L加1后作为ACK,将K作为Seq,组阁 给主动关闭者,以确认上有好多个FIN。

  1. 当有好多个连接请求到达,检查系统范围的参数net.ipv4.tcp_max_syn_backlog(默认30)。将会占据 SYN_RCVD请况的连接数目超过你这一阈值,进入的连接将被拒绝。

  5. 至此,连接被关闭。

将会TCP的双工通信型态,TCP支持半关闭。TCP的半关闭操作是指仅关闭数据流的有好多个传输方向,而当时人扔在传输数据直到它被关闭为止。

  4. 至此,连接被建立,以上过程也被称为三次握手。TCP通信可进入数据传输阶段。

如或多或少TCP选项:

SACK信息保存于ASCK选项中,带有了接收方将会成功接收的数据块的序列号范围,每个范围被称为有好多个SACK块,由一对32位的序列号表示,假如有一天,有好多个SACK选项带有了n个SACK块,长度为(8n+2)个字节,增加的有好多个字节用于保存SACK选项的种类与长度。将会TCP头部选项的空间有限,假如有一天有好多个报文段中发送的最大SACK块数目为3。虽然必须SYN报文段都还能否 带有"允许挑选确认"选项,但假如有一天发送方将会发送了该选项,SACK块就都都还能否 通过任何报文段发送出去。

用户超时超时选项是数值指明了TCP发送者在确认对方未能成功接收数据之前 你还能否 停留该数据ACK确认的时间。根据[RFCO793]描述,USER_TIMEOUT是TCP协议本地配置的有好多个参数,用户超时选项允许TCP通信方将自已的USER_TIMEOUT数值告知连接的对方,曾经就方便了TCP接收方调整自已的行为。NAT设备也都都还能否 解释那些信息以帮助设置它们的连接活动计时器。

针对底下的请况图,再看正常的TCP连接建立和关闭过程中客户端和服务器经历的请况变化:

箭头表示因报文段传输、接收以及计时器超时而引发的请况转换;粗箭头表示典型的客户端的行为;虚线箭头表示典型的服务器行为。

相关攻击

在连接建立超时的之前 ,连接的打开方会产生指数回退行为:客户端TCP为了建立连接而频繁发送SYN报文段,首个报文段发送后3s发送第好多个,第好多个报文段之前 6s发送第有好多个,第有好多个报文段12s后发送第好多个...

关闭过程:

TCP路径MTU发现遵循以下规则:

初始序列号的占据 将会以下有好多个原困:

最大段大小(MSS)是指TCP协议所允许的从对方接收到的最大报文段,也是通信对方在发送数据时都都还能否 使用的最大报文段。根据[RFC0879],该选项只记录TCP数据的字节数而不包括或多或少相关的TCP与IP头部。

  1. 连接的主动关闭者(此例中是客户端)发送有好多个FIN位字段置位的TCP/IP数据包指明希望断开连接及接收者希望看了的当时人当前序列号K。FIN报文段还带有了有好多个ACK段用于确认对方最近一次发来的数据L。

  2. TCP报文段在经过网络路由有将会会占据 延迟抵达和排序混乱的请况。

SYN泛洪,你这一TCP拒绝服务攻击,在你这一攻击带有好多个或多个恶意的客户端产生一系列TCP连接尝试(SYN报文段),并将它们发送给一台服务器,它们通常采用"伪造"的源IP地址。服务器会为每两根连接分配一定数量的连接资源,将会连接尚未全部建立,服务器为了维护少量的半打开连接会在耗尽自身内存后拒绝为后续的合法连接请求服务。

在发送用于建立连接的SYN之前 ,通信双方会挑选有好多个初始序列号。初始序列号会随时间而改变,假如有一天每个连接都拥有不同的初始序列号。[RFC0793]指出初始序列号可被视为有好多个32位的计数器,计数器的值每4微秒加1,以外理再次出现于或多或少连接的序列号重叠的请况。

值得注意的是,两根连接的有好多个方向的路径最大传输单元是不同的。

重置报文段的使用例子

当连接占据 2MSL停留请况时,任何延迟到达的报文段都将被丢弃。为了外理占据 TIME_WAIT请况下的系统奔溃将会重启,[RFC0793]指出在崩溃将会重启后TCP协议应当在创建新的连接之前 停留至少有好多个MSL的时间(静默时间)。

  3. 将会收到PTB消息,TCP就会减少段的大小,假如有一天用修改过的段大小进行重传(在网络传输过程中,将会底下链路的最大传输单元小于两端通信节点的,路径MTU发现机制都都还能否 找出至少的段大小以供传输使用)。

假设将会设定了MSL的数值,按照规则:当TCP执行有好多个主动关闭并发送最终的ACK时,连接需要占据 TIME_WAIT请况并持续两倍于最大生存期的时间,曾经就都都还能否 让TCP重新发送最终的ACK以外理再次出现丢失的请况。曾经影响是,当TCP占据 停留请况时,通信双方将该连接定义为不可重新使用。必须当2MSL停留现在开始了时,才还能否 创建新的连接实例。

连接过程:

TCP段文报以IP数据报的形式传输,IP数据报拥有TTL字段和跳数限制字段,也就限制了IP数据报的有效生存时间。[RFC0793]将最大段生存期设为2分钟,然而在大多数的实现中,该数值可修改。

在队列溢出的请况下,发送重置报文段通常是不可取的,假如有一天默认请况4下该功能是关闭的。客户端在交换SYN期间将会收到有好多个重置报文段,它将会认为服务器是不占据 的,而全部都是占据 繁忙请况。或多或少,正常的操作是应当阻止程序运行再去服务那些进入的连接。

时间停留错误过程如下图:

  4. 时间停留错误:

挑选确认选项(SACK)用于发送方了解接收方的数据接收请况(1.将会采用部分ACK确认,TCP必须正确地确认之前 将会接收的数据;2.将会数据的接收是无序的从而原困接收的数据序列号是不连续的),以在报文段丢失或被接收方遗漏时更换的进行重传工作。

  2. 终止两根连接:发送FIN的终止连接依据有时被称为有序释放;通过发送有好多个RST报文段也还能否 终止两根连接,被称为终止释放。终止连接还能否 为程序运行提供两大型态:1.任何排队的数据都将被被抛弃,有好多个重置报文段会被立即发送出去;2.重置报文段的接收方会说明通信另一端采用了终止的依据而全部都是正常关闭。

  2. 每个占据 侦听请况下的节点都拥有好多个固定长度的连接列队。其中的连接将会被TCP全部接受(即已完成三次握手),但未被程序运行接受。程序运行会对你这一列队做出限制,通常称为未完成连接(backlog),backlog的数目需要在0与系统指定的最大值之间,该最大值为net.core.somaxconn,默认值128(含)。

阅读须知:笔记为阅读《TCP IP 详解卷1:协议》后摘抄的或多或少知识点,其间全部都是加入或多或少根据英文原版的当时人翻译和结合网上知识后的理解,或多或少或多或少段落之间无需都都还能否 串联上将会知识点与书上略有差别(基本差别不大,参考的资料属RFC官方文档)。

将会主机是多宿主主机,还能否 为本地IP地址指定有好多个单一的地址,假如有一天必须被该接口接收到的连接才都都还能否 被接受。而哪有好多个程序运行该外理接收到的报文段则有4元组(目的IP、目的端口号、源IP、源端口号)多路分解后决定。

  1. 路径最大传输单元发现不允许TCP发送方有超过当时人所声明的最大段大小的行为。

  2. 将会对方没办法 指明最大段大小的数值,发送方将采用默认的536字节。

  2. 连接的被动关闭者(此例中是服务器)将K的数值加1作为响应的ACK值,以表明它将会成功接收到主动关闭着发送的FIN。被动发送者将身份转变为主动关闭者,发送当时人的FIN报文段,序列号为L,ACK为K+1。

当建立两根TCP连接时,通信的每一方全部都是在SYN报文段的MSS选项中说明自已允许的最大段大小,在没办法 之前 指明的请况下,最大段大小的默认数值为536字节。其计算:(576/IPv4数据报(最小)-20/IPv4基本头部(最小)-20/TCP基本头部(最小)=536)。根据以太网中最大传输单元与互联网路径最大传输单元的典型数值30来算,最大段大小数值为1430,这也是IPv4协议族的典型值。

假如有一天或多或少系统可配置发送初始SYN的次数,通常挑选有好多个较小的数值5。比如在Linux中,系统配置变量net.ipv4.tcp_syn_retries表示了在一次主动打开申请中尝试重新发送SYN报文段的最大次数;net.ipv4.tcp_synack_retries则表示响应对方的有好多个主动打开请求时尝试重新发送SYN+ACK报文段的最大次数。

TCP选项

  1. 在连接打开时,任何拥有了吗的IP地址、端口号、符合逻辑的序列号以及正确校验和的报文都将被对方接收。

过程如下图:

时间戳选项要求发送方在每个报文段中再加有好多个4字节的时间戳数值。接收方在确认中反映那些数值,允许发送方针对每个收到的ACK估算TCP连接的往返时间。当时有时间戳选项时,发送方将有好多个32位的数值填充到时间戳字段作为时间戳的第有好多个部分;接收方则将收到的时间戳数值原封不动的填充至第二部分的时间戳回显重试字段(TSER或TSecr)。使用时间戳选项的TCP头部会增加10字节(8字节用于保存有好多个时间戳数值,2字节用于指明选项数值和长度)。使用时间戳选项可让接收者外理接收旧报文段和判断报文段正确性,时间戳选项使用扩展的你这一依据被称为防回绕序列号(高速传输的环境中,将会重传时间差小于MSL)。

如上图,当FIN报文被发送且客户端将会进入TIME_WAIT请况时,将会这之前 服务器发送了有好多个如图上的"旧"的报文段(Seq=L-30,ACK=K-30),客户端会响应有好多个ACK(ACK=L,Seq=K)说明最新数据的信息,然而服务器接收到你这一报文后它将会是关闭请况了,或多或少服务器响应有好多个RST报文段,告诉客户机(提前)关闭连接。

文中还讨论过TCP通信双方一起打开与一起关闭的请况:假设主机A的程序运行通过本地7777端口向主机B的8888端口发送有好多个主动打开请求,一起,主机B的程序运行也通过本地8888端口向主机A的7777端口发送有好多个主动打开请求。

第十三章:TCP连接管理

  1. 针对不占据 端口的连接请求:回忆之前 学习的UDP,当数据报遇到目的地不可达的请况会生成有好多个ICMP目的不可达的消息;而对于TCP则使用重置报文来代替相关工作。

与UDP服务器这类,TCP服务也还能否 限制对本地IP地址的请求,如sock -s 10.0.0.1 8888,限制必须使用到达本地IPv4地址10.0.0.1的8888端口都还能否 收到连接信息。

认证选项目的在于增强与替换较早的TCP-MD5机制[RFC2385],它使用你这一加密散列算法以及TCP连接上分一起维护的有好多个秘密值来认证每有好多个报文段。TCP认证选项不仅提供各种加密算法,还使用“带内”信令来确认密钥是否是改变,假如有一天它与TCP-MD5相比有很大的提高。然而,该选项未提供有好多个全面密钥管理方案...也或多或少 说,通信双方不得不采用你这一依据在TCP认证选项运行之前 建立出一套共享密钥。

TCP相关 

对于服务器的设计而言,TCP也占据 或多或少影响:

有好多个TCP连接通常分为好多个阶段:建立连接、数据传输(连接已建立)、关闭连接。下面描述一次TCP连接的建立和关闭过程。

TCP服务器选项

还有种破坏甚至劫持TCP连接的攻击,该攻击通常带有的第一步是使有好多个之前 正在通信的TCP节点"被抛弃同步"。曾经当当当我们 都就使用了不正确的序列号,称为序列号攻击。至少有你这一依据实现上述攻击:在连接建立过程中引发不正确的请况传输;在ESTABLISHED请况下产生额外的数据。

当TCP发现有好多个到达的报文段对于相关连接而言是不正确的之前 ,TCP就会发送有好多个重置报文段,该报文段将TCP头部的RST位字段置位。书本列出以下场景来证明重置报文段的用途:

  1. 客户端发送有好多个SYN报文段(即有好多个在TCP头部的SYN位字段置位的TCP/IP数据包),并指明当时人你还能否 连接的端口号和它的客户端初始序列号(记为ISN(c))。

欺骗攻击,这类攻击所涉及的TCP报文段由攻击者精心定制,目的在于破坏或改变现有TCP连接的行为。攻击者将会生成有好多个伪造的重置报文段并将其发送给有好多个TCP通信节点,假设与连接相关的4元组以及校验和全部都是正确的,序列号也占据 正确的范围,就会造成连接的任意一端失败。相关的防御技术包括:使用TCP-AO选项;要求重置报文段拥有好多个特殊的序列号以代替占据 某一范围的序列号了要求时间戳选项具有特定的数值;使用或多或少形式的cookie文件,让非关键的数据依赖于更加准确的连接信息或有好多个秘密数值。 

有好多个TCP连接由有好多个4元组构成,它们分别是有好多个IP地址和有好多个端口号。更准确地说,有好多个TCP连接是由一对端点或套接字构成,其中通信的每一端都由一对(IP地址,端口号)所唯一标识。

窗口缩放选项都都还能否 有效的将TCP窗口大小字段的范围从16位增加至30位[RFC1323],TCP头部需要改变窗口大小字段的大小,仍维持16位的数值。一起,使用曾经选项作为这16位数值的比例因子,该比例因子都都还能否 使窗口字段值有效地左移,比如:将窗口数值扩大至曾经的2的s次方倍,s为比例因子。窗口的移动数值是由TCP通信方根据接收缓存的大小自动挑选的。有好多个字节的移动还能否 用0至14来计数,计数0表示没办法 任何比例,最大比例数值是14,它都都还能否 提供最大为1073725440字节(65535*2的14次方)的窗口,假如有一天TCP使用有好多个32位的值来维护你这一"真实"的窗口大小。该选项必须再次出现于有好多个SYN报文段中,假如有一天当连接建立之前 比例因子是与方向绑定的。为了保证窗口调整,通信双方都需要在SYN报文段带有高该选项,且每个方向的比例因子可各不相同。主动打开连接的一方利用自已的SYN中发送该选项,但被动打开连接的一方必须在接收到的SYN中指出该选项时都还能否 发送。将会主动打开连接的一方发送了有好多个非0的比例因子但却没办法 接收到来自对方的窗口缩放选项,它会将自已发送与接收的比例因子数值都设为0。

TCP连接的建立和终止过程

[RFC0793]描述,TCP的抽象接口函数允许一台服务器为有好多个指定的内外部节点将会有好多个未被指定的内外部节点执行被动打开。然而套接字API并未提供实现的函数,于是,服务器无需指定客户端的节点,或多或少 停留连接的到来,假如有一天检查客户端的IP地址和端口号。

TCP常规的路径最大传输单元(MTU)发现过程如下:有好多个连接建立时,TCP使用对外接口的最大传输单元的最小值,将会根据通信对方声明的最大段大小来挑选发送方的最大段大小(SMSS)。

有你这一是攻击影响路径MTU发现过程,伪造ICMP PTB消息迫使通信双方采用非常小的数据报进行传输,从而降低通信的性能。

TCP请况

  3. 半开连接:通信一方的主机(这类服务器)奔溃的请况下,假如有一天不尝试通过半开连接传输数据,正常工作的一端(客户端)将无需检测出另一端将会奔溃。服务器重启后,客户端再次连接,将会服务器对收到的报文无法做出外理,会响应有好多个重置报文段,之前 两端之间的连接将被关闭以重新建立。

  2. 服务器接收到客户端发送的SYN报文段后,也发送当时人的SYN报文段作为响应,并带有了服务器的初始序列号ISN(s)。为了确认客户端的SYN,服务器将客户端SYN报文段带有高的ISN(c)数值加1后作为返回的ACK数值。假如有一天,每发送有好多个SYN,序列号就会自动加1。

  3. 当前的主动关闭者(此时是客户端)发送有好多个FINA位字段置位的TCP/IP数据包指明希望断开连接,FIN报文段序列号为L,ACK为K+1。

有好多个并行服务器会为每个客户端分配有好多个新的程序运行或程序,曾经负责侦听的服务器都都还能否 始终准备着外理下有好多个到来的连接请求,在侦听服务器正在创建有好多个新程序运行时,或操作系统忙于运行或多或少高优先级的程序运行时,或服务器将会正在被伪造的连接请求攻击时,多个连接请求还能否 回到达。针对以上请况,操作系统通常会维护连接列队来做请求数量的控制。如Linux中,连接列队遵循以下规则:

  4. 将会队列中没办法 足够的空间分配给新的连接,TCP会延迟对SYN做出响应,从而给程序运行外理的时间。将会系统变量nex.ipv4.tcp_abort_on_将会被设定,新进入的连接会被重置报文段重新置位。

TCP是你这一面向连接的单播协议,在发送数据之前 ,通信双方需要在彼此建立两根连接;这与UDP的无连接不同,UDP无需通信双方发送数据之前 建立连接。所有TCP需要外理多种TCP请况需要要面对的大问題,比如连接的建立、传输、终止,以及无警告的请况下重新启动,这也是TCP与UDP之间的主要区别之一。

针对SYN泛洪,你这一称为SYN cookies的机制做出以下外理:当有好多个SYN到达时,这条连接存储的大部分信息全部都是被编码并保占据 SYN+ACK报文段的序列号字段。采用SYN cookies的目标主机需要为进入的连接请求分配任何存储资源,必须当SYN+ACK报文段你这一被确认后才会分配真正的内存。在你这一请况下,所有重要的连接参数都都都还能否 重新获得,一起连接也都都还能否 被设置位ESTABLISHED请况。