【Linux】Linux经典面试题---网络部分

一、 OSI 七层网络协议模型和 TCP/IP 四层网络协议模型
在这里插入图片描述
二、tcp 三次握手,四次挥手,为什么是三次?为什么是四次?time_wait 出现 在什么时候,它的作用是什么?TIME_WAIT 状态持续多长时间?三次握手,哪一个 阶段会抛出异常
详见博客:TCP的三报文握手和四报文挥手相关面试题
三、 http长连接和短连接的区别
1、短连接
连接->传输数据->关闭连接
HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
也可以这样说:短连接是指SOCKET连接后发送后接收完数据后马上断开连接。
2、长连接
连接->传输数据->保持连接 -> 传输数据-> 。。。 ->关闭连接。
长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。
3、http的长连接
HTTP也可以建立长连接的,使用Connection:keep-alive,HTTP 1.1默认进行持久连接。HTTP1.1和HTTP1.0相比较而言,最大的区别就是增加了持久连接支持(貌似最新的 http1.0 可以显示的指定 keep-alive),但还是无状态的,或者说是不可以信任的。
4、什么时候用长连接,短连接?
(1)长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。
(2)而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。
总之,长连接和短连接的选择要视情况而定。
四、 画出 TCP 和 IP 的报头
在这里插入图片描述
五、心跳包机制作用
网络中的接收和发送数据都是使用SOCKET进行实现。但是如果此套接字已经断开,那发送数据和接收数据的时候就一定会有问题。可是如何判断这个套接字是否还可以使用呢?这个就需要在系统中创建心跳机制。其实TCP中已经为我们实现了一个叫做心跳的机制。如果你设置了心跳,那TCP就会在一定的时间(比如你设置的是3秒钟)内发送你设置的次数的心跳(比如说2次),并且此信息不会影响你自己定义的协议。所谓“心跳”就是定时发送一个自定义的结构体(心跳包或心跳帧),让对方知道自己“在线”。 以确保链接的有效性。
六、epoll,poll,select 区别, ET 和 LT 模式比较
(一)区别:
1、支持一个进程所能打开的最大连接数
(1)select:单个进程所能打开的最大连接数有FD_SETSIZE宏定义,其大小是32个整数的大小。
(2)poll:poll本质上和select没有区别,但是它没有最大连接数的限制,原因是它基于链表存储的。
(3)epoll:虽然连接数有上限,但是很大。
2、IO效率问题
(1)select:因为每次调用时都会对连接进行线性遍历
(2)poll:因为每次调用时都会对连接进行线性遍历
(3)epoll:因为epoll内核中实现是根据每个fd上的callback函数来实现的,只有活跃的socket才会主动调用callback。所以在活跃socket较少的情况下,使用epoll没有前面的线性下降的性能问题,但是所有socket都很活跃的话,就会有性能问题。
3、消息传递方式
(1)select:内核需要将消息传递到用户空间,都需要内核拷贝动作。
(2)poll:内核需要将消息传递到用户空间,都需要内核拷贝动作。
(3)epoll:epoll通过内核和用户空间共享一块内存来实现。
综上,在选择select,poll,epoll时要根据具体的使用场合以及这三种方式的自身特点:
表面上看epoll的性能最好,但是在连接数少并且连接都十分活跃的情况下,select和poll的性能可能比epoll好,毕竟epoll的通知机制需要很多函数回调。
详见博客:I/O复用之select、poll、epoll的使用和区别
(二)比较
1、ET模式 :
当epoll_wait检测到fd上有事件发生并将此事件通知应用程序后,应用程序必须立即处理该事件,因为后续的epoll_wait调用将不再向应用程序通知这一事件。
epoll_wait只有在客户端第一次发数据是才会返回,以后即使缓冲区里还有数据,也不会返回了。epoll_wait是否返回,是看客户端是否发数据,客户端发数据了就会返回,且只返回一次。
eg:客户端发送数据,I/O函数只会提醒一次服务端fd上有数据,以后将不会再提醒所以要求服务端必须一次把数据读完—>循环读数据 (读完数据后,可能会阻塞) —>将描述符设置成非阻塞模式
2、LT模式
当epoll_wait检测到fd上有事件发生并将此事件通知应用程序后,应用程序可以不立即处理该事件,这样,当应用程序下一次调用epoll_wait时,epoll_wait还会再次向应用程序通知此事件,直到此事件被处理。
eg:客户端发送数据,I/O函数会提醒描述符fd有数据---->recv读数据,若一次没有读完,I/O函数会一直提醒服务端fd上有数据,直到recv缓冲区里的数据读完。
七、socket 编程流程,listen 的第二个参数是什么意思
listen共有两个参数

listen(
    IN SOCKET s,
    IN int backlog
    );

其中backlog参数是指等待处理的链接请求的最大个数。如果是同时有5个客户端发出链接请求,而backlog值为2,只有其中两个能够进入等待处理队列,其他三个返回连接失败错误。
八、http 和 https 区别,http 状态码及其含义,get 和 Post 区别以及使用场景
1、HTTP与HTTPS的区别
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。
简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
HTTPS和HTTP的区别主要如下:1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
2、http状态码及其含义
详见博客:HTTP协议的相关请求方法和HTTP协议状态码
3、get 和 post 区别以及使用场景
get和post两种方法都是将数据送到服务器。HTTP标准包含这两种方法是为了达到不同的目的。post用于创建资源,资源的内容会被编入HTTP请示的内容中。例如,处理订货表单、在数据库中加入新数据行等。当请求无副作用时(如进行搜索),便可使用GET方法;当请求有副作用时(如添加数据行),则用POST方法。一个比较实际的问题是:GET方法可能会产生很长的URL,或许会超过某些浏览器与服务器对URL长度的限制。
若符合下列任一情况,则用POST方法:

  • 请求的结果有持续性的副作用,例如,数据库内添加新的数据行。
  • 若使用GET方法,则表单上收集的数据可能让URL过长。
  • 要传送的数据不是采用7位的ASCII编码。

若符合下列任一情况,则用GET方法:

  • 请求是为了查找资源,HTML表单数据仅用来帮助搜索。
  • 请求结果无持续性的副作用。
  • 收集的数据及HTML表单内的输入字段名称的总长不超过1024个字符。
    九、怎么解决 send 发送连包问题,遇到大数据传输时,怎么确认数据全部接收完了
    第一种用循环接收,用select模型,select之后recv,select超时了说明数据接受完了;
    第二种就是你把发送包定长,比如一个包就2K,那么接收端用while循环接收到,知道2K数据接收完毕
    第三种就是发送数据包前,先发送数据包的长度,根据长度调用while recv循环接收
    第四种最笨的,你可以在数据结尾处放个标识,通过判断标识来判断数据是否接收完毕。
    十、epoll 底层如何实现的,都涉及哪些数据结构,红黑树为什么快,查找时间复杂度 是多少
    1、首先epoll_create创建一个epoll文件描述符,底层同时创建一个红黑树,和一个就绪链表;红黑树存储所监控的文件描述符的节点数据,就绪链表存储就绪的文件描述符的节点数据;epoll_ctl将会添加新的描述符,首先判断是红黑树上是否有此文件描述符节点,如果有,则立即返回。如果没有, 则在树干上插入新的节点,并且告知内核注册回调函数。当接收到某个文件描述符过来数据时,那么内核将该节点插入到就绪链表里面。epoll_wait将会接收到消息,并且将数据拷贝到用户空间,清空链表。对于LT模式epoll_wait清空就绪链表之后会检查该文件描述符是哪一种模式,如果为LT模式,且必须该节点确实有事件未处理,那么就会把该节点重新放入到刚刚删除掉的且刚准备好的就绪链表,epoll_wait马上返回。ET模式不会检查,只会调用一次。
    2、O(logn)
    十一、recv 和 send 的底层实现方式
    send和recv是利用建立好的TCP连接进行数据据的发送和接收的系统调用。send负责将要发送的数据写入对应套接字文件描述符的发送缓冲区中,send成功并不代表数据就成功的发送到了对端,其实send的返回值是实际写入发送缓冲区的字节数,什么时候发送给对端由底层协议完成。如果缓冲区满则有可能阻塞send.send在内核中最终通过_sock_sendmsg,将数据写入相应的缓冲区中。recv是从文件描述符对应的接收缓冲区,读取数据,读取多少由缓冲区当前数据量和应用程序期望读取的字节数决定,取小者。recv在内核中最终是通过_sock_recvmsg,从缓冲区中读取到数据,再拷贝到用户空间send和recv是对流式数据读写的。
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值