`
vanadiumlin
  • 浏览: 504867 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

总算明白了tcp/ip协议listen函数中backlog参数的含义

 
阅读更多
总算明白了tcp/ip协议listen函数中backlog参数的含义
To understand the backlog argument, we must realize that for a given listening socket, the kernel maintains two queues :
要明白backlog参数的含义,我们必须明白对于一个listening socket,kernel维护者两个队列:

1.An incomplete connection queue, which contains an entry for each SYN that has arrived from a client for which the server is awaiting completion of the TCP three-way handshake. These sockets are in the SYN_RCVD state .
1.一个未完成连接的队列,此队列维护着那些已收到了客户端SYN分节信息,等待完成三路握手的连接,socket的状态是SYN_RCVD

2.A completed connection queue, which contains an entry for each client with whom the TCP three-way handshake has completed. These sockets are in the ESTABLISHED state
2.一个已完成的连接的队列,此队列包含了那些已经完成三路握手的连接,socket的状态是ESTABLISHED

The backlog argument to the listen function has historically specified the maximum value for the sum of both queues.
backlog参数历史上被定义为上面两个队列的大小之和

Berkeley-derived implementations add a fudge factor to the backlog: It is multiplied by 1.5
Berkely实现中的backlog值为上面两队列之和再乘以1.5

When a SYN arrives from a client, TCP creates a new entry on the incomplete queue and then responds with the second segment of the three-way handshake: the server's SYN with an ACK of the client's SYN (Section 2.6). This entry will remain on the incomplete queue until the third segment of the three-way handshake arrives (the client's ACK of the server's SYN), or until the entry times out. (Berkeley-derived implementations have a timeout of 75 seconds for these incomplete entries.)
当客户端的第一个SYN到达的时候,TCP会在未完成队列中增加一个新的记录然后回复给客户端三路握手中的第二个分节(服务端的SYN和针对客户端的ACK),这条记录会在未完成队列中一直存在,直到三路握手中的最后一个分节到达,或者直到超时(Berkeley时间将这个超时定义为75秒)

If the queues are full when a client SYN arrives, TCP ignores the arriving SYN (pp. 930–931 of TCPv2); it does not send an RST. This is because the condition is considered temporary, and the client TCP will retransmit its SYN, hopefully finding room on the queue in the near future. If the server TCP immediately responded with an RST, the client's connect would return an error, forcing the application to handle this condition instead of letting TCP's normal retransmission take over. Also, the client could not differentiate between an RST in response to a SYN meaning "there is no server at this port" versus "there is a server at this port but its queues are full."
如果当客户端SYN到达的时候队列已满,TCP将会忽略后续到达的SYN,但是不会给客户端发送RST信息,因为此时允许客户端重传SYN分节,如果返回错误信息,那么客户端将无法分清到底是服务端对应端口上没有相应应用程序还是服务端对应端口上队列已满这两种情况
分享到:
评论

相关推荐

    tcp/ip 源码分析

    TCP/IP协议栈作为互联网通信的基础,其内部实现机制一直是计算机网络领域的研究热点。本文将深入探讨《TCP/IP源码分析》一书中的关键章节内容,旨在为读者提供一份详尽的指南。 #### 二、从一个练习开始(第4页) ...

    STM32 TCP/IP服务器端 KEILMDK

    要配置TCP/IP服务器端,我们需要在KEIL MDK中创建一个新的工程,并添加必要的库文件,例如STM32 HAL库和lwIP轻量级TCP/IP协议栈。 lwIP是一个开源的TCP/IP协议栈,特别适合资源有限的嵌入式系统。在STM32上使用...

    Introduction to Sockets Programming in C using TCP/IP

    ### 基于TCP/IP协议的C语言套接字编程介绍 #### 一、网络编程概述 在深入了解基于TCP/IP协议的C语言套接字编程之前,我们需要对计算机网络的基本概念有所了解。计算机网络是由主机(hosts)、路由器(routers)...

    基于TCP和IP协议编程

    ### 基于TCP和IP协议编程:C# .net2.0套接字编程实例与UDP/TCP通信 在计算机网络中,TCP/IP(传输控制协议/互联网协议)是两个核心协议,它们定义了数据如何在网络中传输、路由以及接收。本篇将围绕C# .NET 2.0中的...

    TCP三次握手和backlog参数1

    TCP三次握手和backlog参数是TCP/IP协议中的一种可靠的连接服务,三次握手是为了防止已失效的连接请求报文段突然又传送到了服务端因而产生错误,而backlog参数则是用于控制服务器的accept速度和队列大小,以避免...

    追踪LINUX TCP/IP代码运行二

    其中,TCP/IP协议栈是实现可靠数据传输的核心组件。在深入理解Linux内核中的网络通信机制时,对Socket接口及其内部实现的研究显得尤为重要。 #### 二、Socket概述 Socket是一种特殊的编程抽象层,它为应用程序提供...

    TCP IP协议与网络编程 任泰明 TCP网络程序框架与实例PPT学习教案.pptx

    【TCP/IP协议与网络编程】是计算机网络领域的重要主题,主要涉及互联网中数据通信的规范和标准。TCP(传输控制协议)和IP(网际协议)是构成互联网基础的两个核心协议,它们共同构成了TCP/IP协议族。网络编程通常是...

    了解与unix下socket编程相关的各种系统调用,加深对tcp/udp协议的理解

    在Unix系统,特别是Linux环境下,Socket编程是网络通信的基础,涉及多个系统调用来实现TCP/IP协议族中的TCP和UDP协议。以下将详细解释标题和描述中提到的关键知识点,并通过给出的TCP Server和Client示例代码进行...

    listen函数

    `listen`函数是TCP/IP协议栈中用于设置服务器端套接字为监听状态的关键函数,主要应用于服务器端编程。在了解`listen`函数之前,我们需要理解套接字(socket)的基本概念。套接字是网络通信中的一个抽象概念,它是两台...

    lwip的回调函数学习笔记与相关函数释疑

    lwip 是一个轻量级的TCP/IP协议栈,广泛应用于嵌入式系统中。在lwip中,回调函数是一种重要的机制,用于处理网络事件和数据传输。本文将详细介绍lwip的回调函数学习笔记与相关函数释疑。 一、tcp_listen 函数 tcp_...

    TCPIP网络编程函数解析

    在计算机网络编程中,尤其是在基于TCP/IP协议栈的应用开发中,socket编程是实现不同主机间进程通信的重要方式之一。socket不仅支持TCP连接,还支持UDP等其他协议。本文将对socket编程中的几个关键函数进行详细介绍,...

    LwIP_TCPIP学习笔记及常用函数

    tcp_listen_with_backlog 函数用于设置该 TCP 协议控制块为连接监听状态,即作为主机角色来等待客户端申请连接。参数 pcb 协议控制块;backlog 最大连接数限制,8 位无符号整数,最大为 255。 tcp_recved 函数 tcp...

    TCP/UDP数据收发参考代码

    4. listen()(TCP专用):使服务器进入监听状态,准备接受连接,函数原型为int listen(int sockfd, int backlog)。backlog指定最大等待连接队列长度。 5. accept()(TCP专用):接收客户端的连接请求,返回一个新的...

    基于TCP协议的Socket通信编程实现C语言

    而Socket是TCP/IP协议族中的接口,提供了进程间通信的能力,使得应用程序能够发送和接收数据。 在C语言中,我们通常使用`<sys/socket.h>`和`<netinet/in.h>`头文件来实现Socket编程。首先,创建一个Socket需要调用`...

    LwIP_TCPIP常用函数.pdf

    LwIP是一个轻量级的TCP/IP协议栈,它提供了对TCP/IP协议的支持,包括TCP、UDP、ICMP等。TCP协议控制块(TCP PCB)是LwIP中用来管理TCP连接的核心数据结构,它存储了连接的状态、收发数据的相关信息等。下面将详细...

    tcp——ip的基本编程程序实例

    在计算机网络通信中,TCP/IP协议栈是互联网通信的核心,它定义了数据在网络中传输的规则。TCP(Transmission Control Protocol)负责数据的可靠传输,而IP(Internet Protocol)则负责数据的路由。本文将深入探讨...

    TCPIP传输程序 c++

    本压缩包提供的"TCPIP传输程序 c++"是一个针对初学者的优秀资源,它能帮助学习者了解如何在C++中实现TCP/IP协议的客户端和服务器端通信。 TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,...

    Windows Socket编程

    3. **相互作用**:当开发者通过WinSock API调用发送数据的函数时,如`send()`,实际上传输的是TCP/IP协议的数据包。同样地,接收数据也通过类似的机制完成。 #### 三、TCP/IP协议概述 TCP/IP协议族是一组用于互联网...

    socket代码

    本文将详细介绍listen函数的语法、功能及其参数含义。 【知识点】: 1. **Socket接口**:Socket是网络编程的基本接口,它抽象了底层网络协议,使得开发者可以不关心具体协议实现而进行网络通信。在Linux系统中,...

Global site tag (gtag.js) - Google Analytics