对TCP端口和连接数的一点思考

博客讨论了TCP连接数与端口的关系,指出一个TCP连接由五元组(svr_addr, svr_port, cli_addr, cli_port, protocol)唯一确定,而非仅端口。端口的作用是为不同应用程序提供标识,避免数据包混乱和安全问题。操作系统负责端口与进程的绑定,确保每个端口只能被一个进程监听。TCP层通过(port, pid)二元组记录连接信息,确保数据准确传输。" 53813184,5738653,Redis虚拟内存机制解析,"['Redis', '内存优化', '数据库管理', '数据存储', '缓存']
摘要由CSDN通过智能技术生成

先来看看一些约定俗成的内容。

  • 一个网卡对应一个IP地址
  • 一个IP地址对应65535个端口
  • 一个socket(addr, port)可以接受多个socket连接(accept)
  • 一个端口只能被一个socket监听(listen)

我在面试的时候,被问到过这么一个问题:ipv4协议下,假如主机的资源是无限的,理论上一个网卡能够接受多少个tcp连接?这个问题一开始很容易有个naive的想法,连接数就和端口数一样,65535。但这样显然是错误的,原因可以参考上面。

实际上这道题要文档本质是,一个tcp连接,必定有一个唯一区分这个链接的关键字。这显然不是端口,而是(svr_addr, svr_port, cli_addr, cli_port, protocol)这么一个五元组。理论上只要这五个值不完全一样,就不是一个相同的连接。所以答案的数量级非常庞大。

那什么是端口呢?我引用知乎的一个问题:
http://www.zhihu.com/question/22577025

ip能锁定一台物理机器,对应着一张网卡,外界发来的数据包网卡都会接收。但是问题来了,网卡给程序提供了接口,你监听一下我,要是有消息来了,我就转发给你。这样应用程序就能收到数据了。但是问题来了,程序A和程序B都需要监听网卡接发数据,网卡说那我把接到的数据都发给你两,你们自己看着办吧。好,小A小B都接受了。但是又来了CDEF……,不行了࿰

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值