计算机网络(2):TCP连接到底是什么意思

您所在的位置:网站首页 safari网络连接丢失是什么意思 计算机网络(2):TCP连接到底是什么意思

计算机网络(2):TCP连接到底是什么意思

2024-02-17 04:36| 来源: 网络整理| 查看: 265

由第一章https://blog.csdn.net/u013978512/article/details/108593972,我们知道了计算机网络分层的概念及由来,这一章我们重点来看下传输层。

传输层主要有TCP协议和UDP协议,我们重点解释TCP 协议的概念。

TCP协议是面向连接的可靠的传输。

什么是链接

那么到底什么叫面向连接呢?

针对什么是连接,我们要首先解释一下什么是套接字。

图中最上面的部分是网络应用程序, 也就是浏览器、 电子邮件客户端、 Web 服务器、 电子邮件服务器等程序, 它们会将收发数据等工作委派给下层的部分来完成。应用程序的下面是 Socket 库, 

而对于在数据收发中扮演关键角色的套接字。在协议栈内部有一块用于存放控制信息的内存空间, 这里记录了用于控制通信操作的控制信息, 例如通信对象的 IP 地址、 端口号、 通信操作的进行状态等。 本来套接字就只是一个概念而已, 并不存在实体, 如果一定要赋予它一个实体, 我们可以说这些控制信息就是套接字的实体, 或者说存放控制信息的内存空间就是套接字的实体。

协议栈在执行操作时需要参阅这些控制信息 。 例如, 在发送数据时需要看一看套接字中的通信对象 IP 地址和端口号, 以便向指定的 IP 地址和端口发送数据。 在发送数据之后, 协议栈需要等待对方返回收到数据的响应信息, 但数据也可能在中途丢失, 永远也等不到对方的响应。 在这样的情况下, 我们不能一直等下去, 需要在等待一定时间之后重新发送丢失的数据, 这就需要协议栈能够知道执行发送数据操作后过了多长时间。 为此, 套接字中必须要记录是否已经收到响应, 以及发送数据后经过了多长时间, 才能根据这些信息按照需要执行重发操作。

      上面说的只是其中一个例子。 套接字中记录了用于控制通信操作的各种控制信息, 协议栈则需要根据这些信息判断下一步的行动, 这就是套接字的作用。TCP连接其实意思就是客户端、服务器双方有创建资源为对方服务,就是连接了。即通信双方交换控制信息, 在套接字中记录这些必要信息并准备数据收发的一连串操作。

下面我们通过命令行的命令看下套接字是的内容

在命令行执行netstat

netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。

每一行tcp的信息可以近似认为是一个套接字的内容,local address代表本地ip和端口,foreign address代表目的机的ip和端口,这个可以成为“四元组”。

为什么要三次握手

        进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备。

第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 ISN。此时客户端处于 SYN_SENT 状态。

首部的同步位SYN=1,初始序号seq=x,SYN=1的报文段不能携带数据,但要消耗掉一个序号。

第二次握手:服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号 ISN(s)。同时会把客户端的 ISN + 1 作为ACK 的值,表示自己已经收到了客户端的 SYN,此时服务器处于 SYN_RCVD 的状态。

在确认报文段中SYN=1,ACK=1,确认号ack=x+1,初始序号seq=y。

第三次握手:客户端收到 SYN 报文之后,会发送一个 ACK 报文,当然,也是一样把服务器的 ISN + 1 作为 ACK 的值,表示已经收到了服务端的 SYN 报文,此时客户端处于 ESTABLISHED 状态。服务器收到 ACK 报文之后,也处于 ESTABLISHED 状态,此时,双方已建立起了连接。

     那为什么需要三次握手呢?两次行不行?

     如果两次握手,会有如下场景无法兑付:

     如客户端发出连接请求,但因连接请求报文丢失而未收到确认,于是客户端再重传一次连接请求。后来收到了确认,建立了连接。数据传输完毕后,就释放了连接,客户端共发出了两个连接请求报文段,其中第一个丢失,第二个到达了服务端,但是第一个丢失的报文段只是在某些网络结点长时间滞留了,延误到连接释放以后的某个时间才到达服务端,此时服务端误认为客户端又发出一次新的连接请求,于是就向客户端发出确认报文段,同意建立连接,不采用三次握手,只要服务端发出确认,就建立新的连接了,此时客户端忽略服务端发来的确认,也不发送数据,则服务端一致等待客户端发送数据,浪费资源。

第三次握手失败怎么办?

       当服务器收到 SYN 报文后,服务器会立刻回复 SYN+ACK报文,既确认了客户端的序列号,也把自己的序列号发给了对方。此时,服务器端出现了新连接,状态是 SYN_RCVD。这个状态下,服务器必须建立一个 SYN 半连接队列来维护未完成的握手信息。服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传。如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。

SYN攻击

        服务器端的资源分配是在二次握手时分配的,而客户端的资源是在完成三次握手时分配的,所以服务器容易受到SYN洪泛攻击。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server则回复确认包,并等待Client确认,由于源地址不存在,因此Server需要不断重发直至超时,这些伪造的SYN包将长时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络拥塞甚至系统瘫痪。SYN 攻击是一种典型的 DoS/DDoS 攻击。

常见的防御 SYN 攻击的方法有如下几种:

缩短超时(SYN Timeout)时间增加最大半连接数过滤网关防护SYN cookies技术

参考:

https://yuanrengu.com/2020/77eef79f.html

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3