计算机网络面试题整理
咱们来回顾一下上次分享到的mongodb 的安装和使用
mongodb 的介绍mongodb 如何安装mongodb 如何简单使用- GO 如何操作
mongodb
要是对于mongodb 还有点兴趣的话,可以查看文章 一文便知 GO 中mongodb 的安装与使用
今天咱们来看点面试题
计算机网络面试题
网络字节序:
大端模式,低地址存高字节
本地字节序:
小端模式,低地址存低字节
三次握手
- 主动发起连接端,发送SYN标志为,请求建立连接。携带序号,数据字节大小(0),滑动窗口大小
- 被动接受端,发送
ACK 应答,SYN标志。携带序号,数据字节大小(0),确认序号,滑动窗口大小 - 主动发起连接端,发送
ACK 应答,携带确认序号
四次挥手
- 主动关闭连接端,发送FIN,
- 被动关闭端,发送
ACK 。 – 半关闭 - 被动关闭端,发送FIN
- 主动关闭端,发送
ACK 应答 – 连接全部关闭
TCP第三次握手失败会出现什么
如果此时ACK 在网络中丢失,过了超时计时器后,那么Server端会重新发送SYN+ACK 包
重传次数根据/proc/sys/net/ipv4/tcp_synack_retries 来指定,默认是 5 次
如果重传指定次数到了后,仍然未收到ACK 应答,那么一段时间后,Server自动关闭这个连接
但是Client认为这个连接已经建立,如果Client 端向Server 写数据,Server端将以RST 包响应,方能感知到Server 的错误。
当失败时服务器并不会重传ack 报文,而是直接发送RTS 报文段,进入CLOSED 状态
这样做的目的是为了防止SYN 洪泛攻击
长连接和短连接区别和优缺点
长连接:连接->传输数据->保持连接 -> 传输数据-> …………->直到一方关闭连接,多是客户端关闭连接
长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。
长连接可以省去较多的tcp建立/关闭 的操作,减少浪费,节省时间,对于频繁请求资源的客户,较适用于长连接;
随着客户的越来越多,server早晚会有扛不住的一天,这时需要采取一些策略,如关闭一些长时间不读写操作的连接,这样可以避免一些恶意连接导致server端服务受损,如果条件再允许,就可以以客户端为颗粒度,限制每个客户端的最大连接数
短连接
连接->传输数据->关闭连接
比如HTTP是无状态的的短链接,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
短连接对于服务器来说较为简单,存在的连接都是有用的连接,不需要额外的控制
客户端连接频繁,会在tcp 的建立和关闭上浪费时间。
滑动窗口
发送给对端连接,本段的缓冲区实时大小,保证数据不会丢失。
网络通信中 read 函数的返回值:
表明对端已经关闭连接
判断errno 的情况
- errno == EAGAIN|EWOULDBLOCK
设置了非阻塞的方式,读的时候,数据还没有到达
被信号中断
异常
查看端口号
netstat -antp
端口复用设置
int opt = 1;
setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,(void *)&opt,sizeof(opt));
半关闭(FIN_WAIT_2)
终止一个连接要经过 4次 握手
这由TCP的半关闭(half-close) 造成的
CLOSE_WAIT 状态的问题情况
父进程打开了socket ,然后用派生子进程来处理业务,父进程继续对网络请求进行监听,永远不会终止
客户端发FIN 过来的时候,处理业务的子进程的read返回0,子进程发现对端已经关闭了,直接调用close()对本端进行关闭
实际上,仅仅使socket 的引用计数减1,socket 并没关闭。从而导致系统中又多了一个CLOSE_WAIT 的socket。。。
如何避免上述情况?
子进程的关闭处理应该是这样的:
shutdown(sockfd, SHUT_RDWR);
close(sockfd);
这样处理,服务器的FIN会被发出,socket进入LAST_ACK 状态,等待最后的ACK 到来,就能进入初始状态CLOSED
shutdown()的函数说明
linux 系统下使用 shutdown 系统调用来控制socket的关闭方式
int shutdown(int sockfd,int how);
参数 how 允许为shutdown 操作选择以下几种方式:
关闭连接的读端。也就是该套接字不再接受数据,任何当前在套接字接受缓冲区的数据将被丢弃。进程将不能对该套接字发出任何读操作。对TCP套接字该调用之后接受到的任何数据将被确认然后被丢弃。
关闭连接的写端。
相当于调用shutdown 两次:首先是以SHUT_RD,然后以SHUT_WR
注意:
在多进程中如果一个进程中shutdown(sfd, SHUT_RDWR) 后其它的进程将无法进行通信,如果一个进程close(sfd) 将不会影响到其它进程
2MSL 时长 TIME_WAIT
一定出现在主动关闭的一端,保证最后一个ACK 对端能够收到。
1.TTL 是什么?
TTL是 Time To Live的缩写
该字段指定**IP 包被路由器丢弃之前允许通过的最大网段数量**。
TTL是IPv4 包头的一个8 bit 字段。
2. TTL的作用
TTL的作用是限制IP 数据包在计算机网络中的存在的时间。
TTL的最大值是255,TTL的一个推荐值是64
3.TTL 原理
虽然TTL 从字面上翻译,是可以存活的时间,但实际上TTL是IP 数据包在计算机网络中可以转发的最大跳数。
TTL 字段由IP 数据包的发送者设置,在IP 数据包从源到目的的整个转发路径上
每经过一个路由器,路由器都会修改这个TTL 字段值,具体的做法是把该TTL的值减1,然后再将IP 包转发出去。
如果在IP 包到达目的IP 之前,TTL减少为0,路由器将会丢弃收到的TTL=0的IP``包 并向IP 包的发送者发送ICMP 发送超时报文。
c/s 模型和 b/s 模型的优缺点
c/s模型
优点:
C/S的最大优点是能够实现复杂的应用构造,安全性高,数据传输速度快。
- 结构简单。
- 支持分布式、并发环境。有效提高资源的利用率和共享程度。
- 服务器集中管理资源,有利于权限控制和系统安全。
- 可扩展性较好。客户和服务器均可单独地升级
缺点:
- 不易部署(客户端逐一安装、挑平台)
- 维护困难(客户端需注意更新)
- 开发工作量大
工作过程
- 打开一个通信通道,告知服务器进程所在主机将在某一端口上接受客户请求
- 等待客户的请求到达该端口
- 服务器接收到服务请求,处理该请求并发送应答
- 返回至第2步,等待并处理另一个客户的请求
- 关闭服务器
b/s 模型
优点:
B/S 最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件,只要有一台能上网的电脑就能使用
客户端零安装、零维护。系统的扩展非常容易。
分布式、易扩展、共享性强
相比较传统的C/S 的优势:
- 1.易部署(各平台自带通用浏览器)
- 2.容易维护(服务器端改变网页内容可实现所有用户同步更新)
- 3.页面动态刷新,响应速度明显降低。
- 开发工作量小
缺点:
工作过程
- 用户通过浏览器向
Web 服务器提出HTTP 请求。 Web 服务器根据浏览器请求调出相应文件,对相应文件不做处理或加以解释执行后,将纯客户端HTML 代码结果返回给浏览器。- 浏览器接收到
Web 服务器发回的页面内容(纯HTML 代码),显示给用户。
ping的过程和ICMP 协议
过程例子
- A电脑(192.168.2.135)发起ping请求,ping 192.168.2.179
- A电脑广播发起
ARP 请求,查询 192.168.2.179的MAC地址。 - B电脑应答
ARP 请求,向A电脑发起单向应答,告诉A电脑自己的MAC地址为90:A4:DE:C2:DF:FE - 知道了MAC地址后,开始进行真正的ping请求,由于B电脑可以根据A电脑发送的请求知道源MAC地址,所有就可以根据源MAC地址进行响应了。
ping命令是依托于ICMP 协议的,ICMP 协议的存在就是为了更高效的转发IP 数据报和提高交付成功的机会。
ping命令除了依托于ICMP ,在局域网下还要借助于ARP 协议,ARP 协议能根据IP 地址查出计算机MAC地址。
ARP 是有缓存的,为了保证ARP 的准确性,计算机会更新ARP 缓存。
ICMP
ICMP 是(Internet Control Message Protocol)Internet控制报文协议。
ICMP协议 是一种面向无连接的协议,它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。ICMP是一个网络层协议。
主要功能主要有:
- 确认
IP 包是否成功到达目标地址 - 通知在发送过程中
IP 包被丢弃的原因
总结
- 计算机网络的三次握手,四次挥手
- TCP 第三次握手失败会出现什么
- 长连接和短连接的优缺点
- 滑动创后
- 网络通信中的
read 函数 - 什么是半关闭
- C/S 模型 和 B/S 模型
ICMP
朋友们,写作不易
你的支持和鼓励,是我坚持分享,提高质量的动力
好了,本次就到这里
技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。
我是小魔童哪吒,欢迎点赞关注收藏,下次见~
|