C++ 面试 01 :客户端和 服务器之间 最多能建立 多少个 连接 ?

一、TCP / IP 协议 和 什么关联 ?

1、 高并发负载均衡 集群

2、IO 模型: 而 IO 模型 的运行基础是 内核给程序员 暴露的api,这一切都 源自 socket。

3、 分布式,微服务,服务网格,大数据,与计算。

二、 TCP/IP 协议栈

5层参考模型 : 应用层,传输层,网络层,链路层,物理层。

应用层 : 程序员 - 对 软件的定制化操作

内核 : 传输层, 网络层 ,链路层, 物理层

内核 实现 对 共有资源的复用,减少代码的冗余,(多款 通讯软件都想发送消息,但是只有一张网卡)。这部分是开发内核的程序员固定下来的。

 

分层的体现 :

内核建立连接 :内核建立了和百度的连接,但是此时没有任何请求。 

netstart -natp : 呈现出来一张表, nc 代表程序, 8547 代表 进程号, 182:,,,:代表 百度的IP地址,192:,,,:本地地址以及端口号。 Recv-Q / Send-Q 接收以及 发送队列,协议 tcp。

应用层 请求 : 建立连接之后的两端进行通讯,此时需要一种统一的语言(HTTP 协议),也可以是其他协议,关键看服务器类型。

基本格式 : GET /index.html HTTP/1.1

GET - 请求的方法

url - 请求的地址 index.html

HTTP - 协议的名称

1.0 /1.1 - 协议的版本号

 

请求:

请求行 / 请求数据

响应:

html 就是 返回的资源,浏览器拿到后,渲染成我们所见的页面。

 

传输控制层 : TCP 是干什么的?

面向连接的,可靠的 传输控制层协议。

(插入知识点 : 长连接 ,短连接 -》 是相对与 应用层来说的, http 1.1 keep live 之后,可以保持长连接,不用每次发送消息都进行一次短连接)。实际实现 就是 服务器相对与短连接 加了 while 循环,每次有消息出现:抛异常-处理-抛给线程处理。

连接到底是什么 : 三元组 (三次握手 数据传输 四次分手)。

建立连接之后,表格里会出现 一个 四元组(ipA , A端口,ipB , B 端口) - 称为 socket

 

三次握手过程 :

客户端发送 syn 包给 服务器 ,服务器 接收后 返回 syn + ack 确认,客户端回传 ack ;

类似(A:钥匙在哪里 B : 在书架上 A : 找到了)

建立 连接 之后,内核会为 对应的进程开辟资源 : 发送队列 和 接收 队列,(监听状态 :当有消息传递过来时,对应的socket 四元组匹配上,相应的进程接手消息的处理。)

其实两APP 之间的交互并不是直接的,每个APP 都是 对通过 IO 模型 自己 开辟的资源 进行操作。真正的通信由内核负责。 

客户端和 服务器之间 最多能建立 多少个 连接 ?

: 65535 。

服务器的 ip ,端口号 ,客户端的 ip 都是确定的。 能变的只有客户端的端口号。

客户端 和 服务器的另一个程序之间最多能建立多少个连接 ?

: 65536 

服务器的 ip ,端口号 ,客户端的 ip 都是确定的。 能变的只有客户端的端口号。 还是 四元组 socket 必须唯一原则。

 

怎么样使得 客户端  和 服务器之间 建立 10 万以上的连接 ?

: 加 网卡 ,保证 四元组 唯一。

 

四次分手 : 分手分的是什么 ? ,财产 - 开辟的资源

 

如果 建立 连接 以后网断了分手失败会怎么样 ?

服务器 和 客户端 之间 建立了连接,但是中间网断了,此时如果 两者 终身不再联系,那么 永远 都无法检测到连接。

当有再次传输信息的需求时,客户端 尝试 向 服务器发送信息,但是发送失败 ,(keepalive) 心跳机制会再次尝试,多次失败后,连接断开。 

 

验证 三次 握手 ,四次挥手

抓包 指令 : tcpdump -nn  -X -i eth0 port 80

-nn : 不显示 localhost ,显示具体的数值

-i interface ,抓取哪一个接口

port 抓取 eth0 ,以太网上 80 端口的包

请求 : curl www.baidu.com:80 可以抓取 一个 完整的 三次握手 资源传输 四次挥手

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值