qg_java_17137 Asked: 2019-06-13 19:21:02 +0800 CST2019-06-13 19:21:02 +0800 CST 2019-06-13 19:21:02 +0800 CST TCP Server 和 Client 会在哪个细节步骤消耗资源?[关闭] 772 谁知道three-way handshake: 但是我有一个问题,在3个步骤中,Host A(Client)和Host B(Server)会占用资源吗?我的意思是 CPU 资源和内存资源。 如果需要资源,需要采取哪些详细步骤? 听说会创建变量,具体是哪一步创建的?例如,在主机 B 收到的 SYN 和发送 SYN、ACK 之间是否创建变量? tcp 1 个回答 Voted Best Answer user1686 2019-06-13T20:54:36+08:002019-06-13T20:54:36+08:00 一旦握手开始,两台主机都会消耗一些内存来跟踪半开连接。但是,一旦程序初始化代表连接的“套接字”,客户端就会额外消耗一些内存,甚至在发送任何数据包之前。 同样,一旦服务器收到 SYN 数据包,它就会分配一些内存来跟踪连接参数。 发送大量的 SYN 来耗尽服务器的资源实际上是一种常见的攻击,称为SYN 洪水。作为回应,一些服务器有一个“SYN-cookie”模式,在发送 SYN+ACK 响应后不保持资源分配;它可以丢弃信息,直到客户端的 ACK 到达,此时服务器开始正常跟踪连接。 从编程的角度来看,整个握手过程一步到位。但是,当您编写客户端时,代表该连接的变量会在要求操作系统执行握手之前分配。 conn = socket(AF_INET, SOCK_STREAM) # The variable representing the "socket" is initialized and some memory is # allocated, but no connection is done yet connect(conn, address) # The entire TCP handshake is performed during connect() 编写服务器时,情况正好相反。“侦听”套接字首先设置,但每个接收到的连接首先被操作系统接受(执行握手),然后才提供给程序。 conn = accept(listener)
一旦握手开始,两台主机都会消耗一些内存来跟踪半开连接。但是,一旦程序初始化代表连接的“套接字”,客户端就会额外消耗一些内存,甚至在发送任何数据包之前。
同样,一旦服务器收到 SYN 数据包,它就会分配一些内存来跟踪连接参数。
发送大量的 SYN 来耗尽服务器的资源实际上是一种常见的攻击,称为SYN 洪水。作为回应,一些服务器有一个“SYN-cookie”模式,在发送 SYN+ACK 响应后不保持资源分配;它可以丢弃信息,直到客户端的 ACK 到达,此时服务器开始正常跟踪连接。
从编程的角度来看,整个握手过程一步到位。但是,当您编写客户端时,代表该连接的变量会在要求操作系统执行握手之前分配。
编写服务器时,情况正好相反。“侦听”套接字首先设置,但每个接收到的连接首先被操作系统接受(执行握手),然后才提供给程序。