深入浅出TCP之listen

本文详细解析了TCP中的listen函数,包括它如何将socket转换为监听模式,建立未决和已建立连接的socket队列,并讨论了backlog参数的影响。通过实例解释了TCP三次握手过程中listen函数的作用,同时提到了两种可能导致拒绝服务的情况:backlog设置过小和过大。最后,文章提及了Syn Flood攻击以及Linux内核中缓解此类攻击的机制,如tcp_max_syn_backlog和tcp_syncookies。
摘要由CSDN通过智能技术生成

int listen(int fd, int backlog);  

有几个概念需要在开头澄清一下

TCP socket分两种,监听socket和传输socket两种

监听socket:负责处理网络上来的连接请求(客户端的syn包到达便是连接请求来了,如果不知道syn包,请参看一下TCP三次握手);

传输socket:负责在网络上的两个端点之间传输TCP数据。

未决socket:pending socket,就是某客户端的syn包到达,内核为这个syn包对应的tcp请求生成一个socket,但是此时三次握手并没有完成,这样的socket就是pending socket,是未决连接,没有经过三次握手认证的tcp连接。

已建立连接的socket:established socket,tcp服务器利用三次握手完成对客户端的简单认证之后,未决socket就变成已连接socket,后续可以用这个socket传输数据。

内核为每个tcp服务器维护两个socket队列:未决socket队列和已建立连接的socket队列

图 1

 

现在进入主题:)

在TCP服务器端创建socket完毕,调用listen函数的时候,系统下层发生了以下动作:

1. 将刚才创建的(fd所标示的)socket转换为此tcp服务器的监听socket࿰

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值