TCP/IP建立连接的时候ISN序号分配问题

初始建立TCP连接的时候的系列号(ISN)是随机选择的,那么这个系列号为什么不采用一个固定的值呢?主要有两方面的原因

  1. 防止同一个连接的不同实例(different instantiations/incarnations of the same connection)的数据包混淆。
    同一个连接的不同实例是怎么回事呢?之前我们说过(源IP、源端口号、目的地址、目的端口号)这个四元组唯一标识一个TCP连接,当一个TCP连接在经历四次挥手关闭时,假如有一个数据包延迟特别大,而这个连接在关闭后又马上以相同的四元组建立起来,那么先前这个连接的TCP数据包到达的时候,如果系列号还落在接收窗内,那么这个数据包就可能会被错误接收。因此RFC0793指出ISN应该每4μs自增1,从而防止同一个连接的不同实例的数据包混淆。另外对数据完整性要求比较高的应该同时在应用层添加校验。
  2. 防止TCP系列号欺骗
    假设A是服务器,B是拥有特殊权限的客户端,C是攻击者,第一条消息C冒充B来向服务器A请求建立连接,此时C发出的数据包的IP地址会填写成B的;第二条消息假设A没有其他手段来验证B,而仅仅根据IP地址判断C发过来的建立连接的请求是B发过来的,因此向B发送SYN+ACK,此时假设B被C进行了DOS攻击或者处于其他异常状态而不能响应第二条消息(如果B处于正常状态会响应一个RST包来重启TCP连接,后面我们讲解RST数据包);第三条消息假如C能正确的猜测出A在第二条消息中的ISN,就可以冒充B和A完成三次握手的过程,让A误以为和B建立了连接。接下来C就可以冒充B给A发送一些危险数据或者指令而实现攻击。

原文地址:https://www.cnblogs.com/gaoshaonian/p/12607032.html

时间: 2024-08-29 13:43:02

TCP/IP建立连接的时候ISN序号分配问题的相关文章

tcp/udp建立连接并通信的过程

基于TCP的socket编程的服务器程序流程如下: 1.创建套接字 SOCKETsockSrv = socket(AF_INET, SOCK_STREAM, 0) ; 2.将套接字绑定到本地地址和端口上 SOCKADDR_INaddrSrv ; addrSrv.sin_addr.S_un.S_addr =htonl(INADDR_ANY) ;                   //把一个u_long类型的值转化为网络字节顺序 addrSrv.sin_family = AF_INET ; add

TCP协议建立连接与释放连接

TCP建立连接三次握手 1. 客户端发出段1,SYN位表连接请求.序号是1000,这个序号在络通讯中作临时的地 址,每发个数据字节,这个序号要加1,这样在接收端可以根据序号排出数据包的正确顺 序,也可以发现丢包的情况,另外,规定SYN位和FIN位也要占个序号,这次虽然没发数 据,但是由于发了SYN位,因此下次再发送应该序号1001. mss表最段尺,如果 个段太,封装成帧后超过了链路层的最帧长度,就必须在IP 层分,为了避免这种情 况,客户端声明的最段尺,建议服务器端发来的段不要超过这个长度.

tcp/ip 建立过程

1. tcp /ip : 在osi网络参考模型中,它提供着可靠的传输服务/ 定义:传输控制协议 a:   tcp/ip 的建立过程,通过三次握手,和四次挥手来完成. 2. 何为三次握手? 首先在这假设,syn="m"   ,syn 就是客户端在向务端发送链接请求,服务端会收到这个syn的链接请求 包,客户端的状态为:syn_sent 第一次握手:当客户端给服务器发送syn(m)链接请求,等待服务器的确认,然后客户端的状态为 syn_sent 第二次握手:当服务端收到syn(m)的包的链

网络层、传输层、应用层、端口通信协议编程接口 - http,socket,tcp/ip 网络传输与通讯知识总结

引: http://coach.iteye.com/blog/2024511 什么是TCP和UDP,以及二者区别是什么? TCP的全称为传输控制协议.这种协议可以提供面向连接的.可靠的.点到点的通信. UDP全称为用户数据报协议,它可以提供非连接的不可靠的点到多点的通信. 使用TCP还是UDP,那要看你的程序注重哪一个方面,可靠(tcp)还是快速(udp). TCP/IP 建立连接的过程 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.   

TCP/IP 协议工作原理与Linux系统下调优

TCP/IP建立连接的三次握手过程: 建立TCP连接共需要三个packet Client--> syn=1,ack=0,fin=0 -->  Server Client<--  syn=1,ack=1,fin=0 <--  Server Client-->  syn=0,ack=1,fin=0 -->  Server TCP/IP关闭连接的四个过程: 关闭TCP连接需要四个packet: Client-->  FIN  -->  Server Client&

TCP协议详解(TCP建立连接与断开连接)

TCP是面向连接的.可靠的进程到进程通信的协议.它提供的是全双工(双向可传输)的服务,每个TCP都有发送缓存和接受缓存,用来临时存储数据. 1.TCP报文段:TCP把若干个字节构成一个分组,称为报文段(segment).TCP报文段封装在IP数据报中,TCP报文段的首部格式如下图所示: 首部长度为20~60个字节,一下是各个字段的含义:①:源端口号:它是16位字段,为发送发进程对应的端口号:②:目标端口号:它是16位字段,对应的是接收端的进程,接收端收到数据段后,根据这个端口号来确定把数据送给哪

SQL Server 连接问题-TCP/IP

原文:SQL Server 连接问题-TCP/IP 出自:http://blogs.msdn.com/b/apgcdsd/archive/2012/02/24/ms-sql-server-tcp-ip.aspx TCP/IP的基本工作原理这里就不浪费口水了.现在这网络年代,谁不知道TCP/IP啊.不要跟我抬杠说你偏就没听说过TCP/IP阿,真是这样那你得自己去补补课了. TCP/IP协议有两个基本的东西,一个是IP地址, 另一个是端口号. 在SQL Server 上使用TCP/IP协议是非常简单

tcp建立连接过程

TCP协议建立连接的过程:在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认: 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态: 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户

TCP三次握手(建立连接)与四次挥手(释放连接)详解

上图画出了TCP的建立连接的过程.假定主机A运行的是TCP客户程序,而B运行TCP服务程序.最初两端的TCP进程都处于 CLOSED(关闭)状态.图中在主机下面的方框分别是TCP进程所处的状态.请注意,A主动打开连接,而B被动打开连接. B的TCP服务器进程先创建传输控制块TCB(Transmission Control Block),准备接受客户进程的连接请求.然后服务器进程就处于LISTEN(监听)状态,等待客户的连接请求.如有,即做出响应. A的TCP客户进程也是首先创建传输控制块TCB,