TCP连接的建立和终止。

为帮助大家理解connect,accept和close函数并使用netstat 调试TCP应用程序,我们必须了解如何建立和终止TCP连接以及TCP的状态转换图.这是一个通过加深了解底层网络协议以帮助我们编写网络程序的例子。

模拟三路握手:

下述步骤建立一个TCP连接

1.服务器必须准备好接受外来的连接。通过调用socket,bind 和 listen函数来完成,称为被动打开(passive open)。

2.客户通过调用connect进行主动打开(active open)。这引起客户TCP发送一个SYN分节(表示同步),它告诉服务器客户将在(待建立的)连接中发送的数据的初始序列号。一般情况下SYN分节不携带数据。它只含有一个IP头部,一个TCP头部及可能的TCP选项。

就是说 第一次握手 client端发送SYN报文,   syn=1,SEQ也就是说序列号为 J---->4bytes,其他位置为0.

第二次握手  server端回复client端报文ACK报文 SYN=1,ACK=1,SEQ=Y,确认SEQ=J+1.

第三次握手 client端 SYN=1,SEQ=J+1,确认SEQ=Y+1。---->SEQ=第二次握手----> 确认SEQ---->第三次SEQ

=======================================================================================================

TCP机制的缺陷 DOS攻击缺陷,大量虚假IP的SYN报文攻击,服务器耗费大量的cpu与内存。

SYN攻击属于DDoS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。SYN攻击除了能影响主机外,还可以危害路由器防火墙等网络系统,事实上SYN攻击并不管目标是什么系统,只要这些系统打开TCP服务就可以实施。

服务器接收到连接请求(syn= j),将此信息加入未连接队列,并发送请求包给客户(syn=k,ack=j+1),此时进入SYN_RECV状态。当服务器未收到客户端的确认包时,重发请求包,一直到超时,才将此条目从未连接队列删除。

配合IP欺骗,SYN攻击能达到很好的效果,通常,客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送syn包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。

3.服务器必须确认客户的SYN,同时自己也得发送一个SYN分节,它包含服务器将在同一个连接中发送的数据初始序列号。服务器以单个分节向客户发送SYN和对客户SYN的ACK。

4.客户必须确认服务器的SYN。

连接建立过程至少需要交换三个分节--->TCP的三路握手(three-way hand-shake)。我们在图2.2中展示这三个分节。

图2.2.给出的客户的初始序列号为J,而服务器的初始序列号为K。在ACK里确认号为发送这个ACK的一方所期待的对方的下一个序列号。因为SYN只占一个字节的序列号空间,所以每一个SYN的ACK中的确认号都是相应的初始序列号加1.类似的每一个FIN的ACK中的确认号为FIN的序列号加1.

时间: 2024-10-03 23:05:18

TCP连接的建立和终止。的相关文章

TCP连接的建立与终止

我们通过一个例子来说说TCP连接的建立与断开: 在这个例子中,客户端发起连接,发送请求,服务端响应请求,然后客户端主动关闭连接. 建立连接的过程: 1.客户端发出段1,SYN表示连接请求,如图中所示,序号是1000,每发送一个数据字节,这个序号就要加1,这样在接收端可以根据序号排出数据包的正确顺序,也可以发现丢包的情况,SYN和FIN位也要占一个序号,从第一段可以看出,这次发送的数据是0(即没有发送数据),但是由于SYN要占一位,因此下次发送数据要从1001开始.mss表示最大段尺寸,如果一个段

10.TCP连接的建立与终止

1.建立连接协议 (1)请求端发送一个SYN段指明客户打算连接的服务器的端口,移机初始序号ISN.这个SYN段为报文段1. (2)服务器发回包含服务器的初始序号的SYN报文段作为应答.同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认.一个SYN将占用一个序号. (3)客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认. 这三个报文段完成连接的建立,这个过程也称为3次握手. 2.连接终止协议 终止一个连接需要进行4次握手,这是由TCP的半关闭造成的. 当

TCP连接的建立和终止

一.TCP连接建立(正常情况) 三次握手 (three-way handshake) 请求端发送一个SYN段指明客户端打算建立连接的服务器端口,以及初始序号 (ISN) 服务器发回包含服务器的初始序号的SYN报文段作为应答.同时,将确认序号设置为客户端的ISN加1以对客户的SYN报文段加以确认.一个SYN将占用一个序号. 客户端将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认. 发送第一个SYN字段的一端执行主动打开 (active open).接收SYN并发送下一个SYN的一

TCP/IP详解 卷一(第十八章 TCP连接的建立和终止)

建立连接 建立一个TCP连接时会发生下述情况 1.客户TCP发送一个SYN(同步)分节,它告诉服务器将在(待建立)连接中发送的数据的初始序列号. 2.服务器确认(ACK)客户的SYN,同时自己也得发送一个SYN分节,它含有服务器将在同一连接中发送数据的初始序列号. 3.客户确认服务器的SYN. 终止连接 TCP终止一个连接需要4个分节 1.某个应用进程首先调用close,我们称该端执行主动关闭.该端的TCP于是发送一个FIN分节,表示数据发送完毕. 2.接受到这个FIN的对端执行被动关闭.这个F

TCP/IP详解学习笔记--TCP连接的建立与终止

1.基本概念 由于TCP是一个面向连接的协议,无论在哪一方发送数据之前,都必须先在双方之间建立连接,接下来我们就讨论建立连接的具体过程 2.建立TCP连接 如下图所示: 1.首先请求端发送一个序列号为1(表明该方的起始序列号为1)的SYN段,此时由于连接还未建立成功,所以携带的数据为0,并前发送端还告诉接收端它所能接收的最大报文段mss 2.接收端收到SYN段后,也给对方回一个SYN端,告知对方它的其实序列号为5并携带给对方回的ack,同时也告诉对方它所能接收的最大报文段mss 3.请求端在收到

TCP 连接的建立和终止

三路握手 建立一个TCP连接时会发生下述情形. (1)服务器必须准备好接受外来的连接.这通常通过调用socket.bind和listen这3个函数来完成的,我们称之为被动打开. (2)客户通过调用connect发起主动打开.这导致客户TCP发送一个SYN(同步)分节,它告诉服务器客户将在(待建立的)连接中发送的数据的初始序列号.通常SYN分节不携带数据,其所在IP数据报只含有一个IP首部.一个TCP首部及可能有的TCP选项. (3)服务器必须确认(ACK)客户的SYN,同时自己也得发送一个SYN

【TCP/IP详解 卷1:协议】 第18章TCP连接的建立与终止

img { border: 1px solid black } T C P是一个面向连接的协议.无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接. 发送第一个S Y N的一端将执行主动打开(active open),另一端执行被动打开( passive open), 建立连接超时,经测试为,1,2,4,8,16,32, 四次挥手的时候,两个方向的断开是独立的,每个方向发送一个FIN,对方回复一个ACK,但同时,TCP规定ACK可以捎带在其他数据包当中,所以你看到的主动断开连接一方本

20160402_TCP连接的建立、终止和状态转换

原题: 以下不属于tcp连接断开的状态是? TIME_WAIT FIN_WAIT_1 SYNC_SENT FIN_WAIT_2 答案:SYNC_SENT -------------------------------------------------------------------------------- 本题知识点:计算机网络 TCP连接的建立:     下述步骤建立一个TCP连接:    1.服务器必须准备好接受外来的连接.这通过调用socket.bind和listen函数来完成,称

TCP之连接的建立和终止

1. 连接的建立 TCP 连接建立的三次握手 如上图所示,TCP 连接的建立会发生如下述情形: 服务器必须准备好接受外来的连接.这通常通过调用 socket.bind 和 listen 这 3 个函数来完成,我们称之为被动打开(passive open). 客户通过调用 connect 发起主动打开(active open).这导致客户 TCP 发送一个 SYN(同步)分节,它告诉服务器客户端将在(待建立的)连接中发送的数据的初始序列号.通常 SYN 分节不携带数据,其所在的 IP 数据报只含有