【面经】计网面试题小结

什么是计算机网络

计算机网络,是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。

什么是无线网络

无线网络,既包括允许用户建立远距离无线连接的全球语音和数据网络,也包括为近距离无线连接进行优化的红外线技术及射频技术,与有线网络的用途十分类似,最大的不同在于传输媒介的不同,利用无线电技术取代网线,可以和有线网络互为备份。

OSI,TCP/IP,五层协议的体系结构,以及各层协议

OSI分层 (7层): 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
TCP/IP分层(4层): 网络接口层、 网际层、运输层、 应用层。
五层协议 (5层): 物理层、数据链路层、网络层、运输层、 应用层。

每一层的协议如下:
物理层:RJ45、CLOCK、IEEE802.3 (中继器,集线器,网关)
数据链路:PPP、FR、HDLC、VLAN、MAC (网桥,交换机)
网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、(路由器)
传输层:TCP、UDP、SPX
会话层:NFS、SQL、NETBIOS、RPC
表示层:JPEG、MPEG、ASII
应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS

TCP各层作用

物理层: 物理层规定了激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性。在这一层,数据的单位称为比特。

数据链路层: 数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。在这一层,数据的单位称为帧。

网络层: 网络层负责对子网间的数据包进行路由选择。网络层还可以实现拥塞控制、网际互连等功能。在这一层,数据的单位称为数据包。

传输层: 传输层是第一个端到端,即主机到主机的层次。传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。此外,传输层还要处理端到端的差错控制和流量控制问题。

会话层: 会话层管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。

表示层: 表示层对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换等。

应用层: 应用层为操作系统或网络应用程序提供访问网络服务的接口。

TCP与UDP的区别

TCP UDP
面向连接,需要三次握手,4次挥手 不需要建立连接
无差错,不丢失,不重复,且按序到达 不保证数据可靠、按序到达
面向字节流 面向报文
有拥塞控制,不会使源主机的发送速率降低 没有拥塞控制
连接只能是点到点 支持一对一,一对多,多对一和多对多的交互通信
首部开销20字节 首部开销小,只有8个字节
ftp telnet http https SMTP POP3 DNS DHCP tftp IGMP RTP

TCP是传输控制协议,它提供面向连接、可靠的字节流服务。当客户想要和服务器交换数据前,必须建立一个可靠的TCP连接,然后才能传输数据。TCP协议提供了超时重发、丢弃重复数据、检验数据、拥塞控制等功能,能够保证数据从一端传到另一端。

UDP是用户数据报协议,它不是面向连接的,提供的是不可靠的服务。它只是运输层的一个简单传输协议,负责把应用程序传给IP层的数据报发送出去,但是不能保证到达目的地。由于UDP传输数据前不用在客户和服务器之间建立连接,也没有超时重发等机制,因此它的的传输速度比较快。

TCP应用场景

效率要求相对低,但对准确性要求相对高的场景。因为传输中需要对数据确认、重发、排序等操作,相比之下效率没有UDP高。举几个例子:文件传输(准确高要求高、但是速度可以相对慢)、接受邮件、远程登录。

UDP应用场景

效率要求相对高,对准确性要求相对低的场景。举几个例子:QQ聊天、在线视频、网络语音电话(即时通讯,速度要求高,但是出现偶尔断续不是太大问题,并且此处完全不可以使用重发机制)、广播通信(广播、多播)。

TCP对应的协议和UDP对应的协议

TCP对应的协议:
(1) FTP:定义了文件传输协议,使用21端口。常说某某计算机开了FTP服务便是启动了文件传输服务。下载文件,上传主页,都要用到FTP服务。
(2) Telnet:它是一种用于远程登陆的端口,用户可以以自己的身份远程连接到计算机上,通过这种端口可以提供一种基于DOS模式下的通信服务。如以前的BBS是-纯字符界面的,支持BBS的服务器将23端口打开,对外提供服务。
(3) SMTP:定义了简单邮件传送协议,现在很多邮件服务器都用的是这个协议,用于发送邮件。如常见的免费邮件服务中用的就是这个邮件服务端口,所以在电子邮件设置-中常看到有这么SMTP端口设置这个栏,服务器开放的是25号端口。
(4) POP3:它是和SMTP对应,POP3用于接收邮件。通常情况下,POP3协议所用的是110端口。也是说,只要你有相应的使用POP3协议的程序(例如Fo-xmail或Outlook),就可以不以Web方式登陆进邮箱界面,直接用邮件程序就可以收到邮件(如是163邮箱就没有必要先进入网易网站,再进入自己的邮-箱来收信)。
(5)HTTP协议:是从Web服务器传输超文本到本地浏览器的传送协议。

UDP对应的协议:
(1) DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
(2) SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
(3) TFTP(Trival File Transfer Protocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。

TCP的三次握手与四次挥手过程,各个状态名称与含义

三次握手

  第一次握手:客户机首先向服务器的TCP发送一个连接请求报文段,这个特殊的报文段不含应用层数据,其首部中同步位SYN被设置为1。另外,客户机会随机选择一个起始序号seq=x(连接请求报文不携带数据,但要消耗一个序号).
  第二次握手:服务器的TCP收到连接请求报文段后,如果同意建立连接,就向客户机发回确认,并为该TCP连接分配TCP缓存和变量。在确认报文段中,SYN和ACK位都被设置为1,确认号字段值为ack=x+1,并且服务器随机产生起始序号seq=y. 确认包同样不包含应用层数据。
  第三次握手:当客户机收到确认报文段后,还要向服务器给出确认,并且也要给该连接分配缓存和变量。这个报文段的确认为ACK被设置为1,序号段被设置为seq=x+1,确认号字段ack=y+1. 该报文段可以携带数据,如果不携带数据则不消耗序号。 理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。因为TCP提供全双工通信,因此双方任何时候都可以发送数据。

四次挥手

  第一次挥手:客户机打算关闭连接,就向其TCP发送一个连接释放报文,并停止再发送数据,主动关闭TCP连接。该报文段的FIN标志位被设置为1,seq=u,它等于前面已经发送过的数据的最后一个字节的序号加1。
  第二次挥手:服务器收到连接释放报文段后即发出确认,确认号是ack=u+1,序号为v,等于它前面已经发送过的数据的最后一个字节序号加1.此时客户机到服务器这个方向的连接就释放了,TCP处于半关闭状态。ACK=1,seq=v,ack=u+1
  第三次挥手:若服务器已经没有要向客户机发送的数据,就通知TCP释放连接,此时发出FIN=1,确认号ack= u+1,序号seq =w,已经发送过的数据最后一个字节加1。确认为ACK=1. (FIN = 1, ACK=1,seq = w, ack =u+1)
  第四次挥手:客户机收到连接释放报文段后,必须发出确认。在确认报文段中,确认位ACK=1,序号seq=u+1,确认号ack=w+1. 此时连接还没有释放掉,必须经过实践等待计时器设置的时间2MSL(Max Segment Lifetime),后,客户机才进入连接关闭状态。 (ACK=1,seq=u+1,ack=w+1)

为什么会采用三次握手,若采用二次握手可以吗?

  采用三次握手是为了防止失效的连接请求报文段再次传到服务器,因而产生错误。如果由于网络不稳定,虽然客户端以前发送的连接请求以到达服务方,但服务方的同意连接的应答未能到达客户端。则客户方要重新发送连接请求,若采用二次握手,服务方收到客服端重传的请求连接后,会以为是新的请求,就会发送同意连接报文,并新开进程提供服务,这样会造成服务方资源的无谓浪费。 如果只采用一次的话,客户端不知道服务端是否已经收到自己发送的数据,则会不断地发送数据。为了保证服务端能收接受到客户端的信息并能做出正确的应答而进行前两次(第一次和第二次)握手,为了保证客户端能够接收到服务端的信息并能做出正确的应答而进行后两次(第二次和第三次)握手

为什么断开连接要四次。

因为TCP连接是全双工的网络协议,允许同时通信的双方同时进行数据的收发,同样也允许收发两个方向的连接被独立关闭,以避免client数据发送完毕,向server发送FIN关闭连接,而server还有发送到client的数据没有发送完毕的情况。所以关闭TCP连接需要进行四次握手,每次关闭一个方向上的连接需要FIN和ACK两次握手。

TCP拥塞控制

  为了更好对TCP进行拥塞控制,因特网建议标准定义了以下四种算法:慢开始,拥塞避免,快重传,快恢复。
  首先在TCP要求发送端维护两个窗口:
1) 接收窗口rwnd,接收方根据当前缓存大小锁许诺的最新窗口值。
2) 拥塞窗口cwnd ,发送方根据自己估算的网络拥塞程度而设置的窗口值。 发送窗口的上限是取这两者的最小值。
  慢开始: TCP刚连接好时,先令拥塞窗口cwnd =1 ,在每次收到一个对新报文段的确认时将cwnd加倍. Cwnd的大小呈指数增长。
  拥塞避免算法: 当cwnd大于等于慢开始门限ssthresh时,cwnd窗口每次加1而不是加倍。当发送方检测到超时事件的发生时,就将慢开始门限设置为当前cwnd的一半,同时将cwnd设置为1. 这样的目的是迅速减少主机发送到网络的分组数,使得发生拥塞的路由器有足够的时间吧队列中积压的分组处理完毕。
  快重传:当发送方连续收到三个重复的ACK报文时,直接重传对方尚未收到的报文段,而不必等待那个报文段设置的重传计时器超时。
  快恢复:当发送端收到连续三个冗余的ACK时,就执行“乘法减小”算法,把慢开始门限ssthresh减半,cwnd设置为慢开始门限减半后的数值(与慢开始不同)。

简述DNS进行域名解析的过程

首先,客户端发出DNS请求翻译IP地址或主机名。DNS服务器在收到客户机的请求后:
(1)检查DNS服务器的缓存,若查到请求的地址或名字,即向客户机发出应答信息;
(2)若没有查到,则在数据库中查找,若查到请求的地址或名字,即向客户机发出应答信息;
(3)若没有查到,则将请求发给根域DNS服务器,并依序从根域查找顶级域,由顶级查找二级域,二级域查找三级,直至找到要解析的地址或名字,即向客户机所在网络的DNS服务器发出应答信息,DNS服务器收到应答后现在缓存中存储,然后,将解析结果发给客户机。
(4)若没有找到,则返回错误信息。
当然它有递归查询与迭代查询两种方式,但是大概流程和我刚刚讲的一样

简单解释一些ARP地址解析协议的工作过程

广播发送ARP请求,单播发送ARP响应。
1:首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。
2:当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机 IP地址,源主机MAC地址,目的主机的IP 地址。
3:当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。
4:源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。

IP地址分为哪几类?简单说一下各个分类

对于ipv4:
图片说明
对于ipv6:
采用128bit,首部固定部分为40字节。

一次完整的HTTP请求过程

域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户

说明一下从http协议发送的客户端请求到达服务器端的整个传输过程。

1、客户端浏览器通过DNS解析到www.baidu.com的IP地址220.181.27.48,通过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.161.27.48,然后通过TCP进行封装数据包,输入到网络层。
2、在客户端的传输层,把HTTP会话请求分成报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。然后使用IP层的IP地址查找目的端。
3、客户端的网络层不用关心应用层或者传输层的东西,主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器。
4、客户端的链路层,包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包现在就可以传输了,然后发送IP数据包到达服务器的地址。

如何编写socket套接字

服务器端程序的编写步骤:
第一步:调用socket()函数创建一个用于通信的套接字。
第二步:给已经创建的套接字绑定一个端口号,这一般通过设置网络套接口地址和调用bind()函数来实现。
第三步:调用listen()函数使套接字成为一个监听套接字。
第四步:调用accept()函数来接受客户端的连接,这是就可以和客户端通信了。
第五步:处理客户端的连接请求。
第六步:终止连接。

客户端程序编写步骤:
第一步:调用socket()函数创建一个用于通信的套接字。
第二步:通过设置套接字地址结构,说明客户端与之通信的服务器的IP地址和端口号。
第三步:调用connect()函数来建立与服务器的连接。
第四步:调用读写函数发送或者接收数据。
第五步:终止连接。

路由器工作原理——网络层

路由器是一种三层设备,是使用IP地址寻址:

  1. 路由器接收到数据包,提取目标IP地址及子网掩码计算目标网络地址;
  2. 根据目标网络地址查找路由表,如果找到目标网络地址就按照相应的出口发送到下一个路由器;
  3. 如果没有找到,就看一下有没有默认路由,如果有就按照默认路由的出口发送给下一个路由器;
  4. 如果没有找到就给源IP发送一个出错ICMP数据包表明没法传递该数据包;
  5. 如果是直连路由就按照第二层MAC地址发送给目标站点。

请问交换机的实现原理是什么——数据链路层

1.交换机根据收到数据帧中的源MAC地址建立该地址同交换机端口的映射,并将其写入MAC地址表中。
2.交换机将数据帧中的目的MAC地址同已建立的MAC地址表进行比较,以决定由哪个端口进行转发。
3.如数据帧中的目的MAC地址不在MAC地址表中,则向所有端口转发。这一过程称为泛洪(flood)。
4.广播帧和组播帧向所有的端口转发。

路由器和交换机区别

(1)外形上:
交换机通常端口比较多,而路由器的端口比较少

(2)工作层次不同:
交换机一般工作在数据链路层,而路由器则工作在网络层

(3)数据的转发对象不同:
交换机是根据MAC地址转发数据帧,而路由器则是根据IP地址来转发IP数据报/分组。

(4)”分工“不同
交换机主要是用于组建局域网,而路由器则是负责让主机连接外网。

(5)冲突域和广播域
交换机分割冲突域,但是不分割广播域,而路由器分割广播域。

请简单说一下你了解的端口及对应的服务?

图片说明

详细的解释一下IP协议的定义,在哪个层上面,主要有什么作用?

Internet 上使用的一个关键的低层协议是网际协议,通常称IP协议。我们利用一个共同遵守的通信协议,从而使 Internet 成为一个允许连接不同类型的计算机和不同操作系统的网络。

IP协议在网络层

IP实现两个基本功能:寻址和分段。IP可以根据数据包包头中包括的目的地址将数据包传送到目的地址,在此过程中IP负责选择传送的道路,这种选择道路称为路由功能。如果有些网络内只能传送小数据包,IP可以将数据包重新组装并在数据报内注明。

#面试题目#
全部评论
打破23收藏0回复
点赞 回复 分享
发布于 2019-09-19 08:06
mark
点赞 回复 分享
发布于 2024-05-17 11:30 广东
感谢分享
点赞 回复 分享
发布于 2020-08-20 14:47
有个问题想问下楼主,TCP和UDP发包应该都没法按序到达吧,中间的传输过程是不可控的,TCP应该是通过序号在传完后排序的,不是按序到达的,感觉表达的不是很准确,学疏才浅,请多指教
点赞 回复 分享
发布于 2020-08-18 21:20
我想问一下楼主,计网是怎么学习的,有没有什么视频推荐。
点赞 回复 分享
发布于 2020-07-23 01:14
谢谢楼主分享 很受用!😋😋😋
点赞 回复 分享
发布于 2019-09-20 09:55
内容有点多啊
点赞 回复 分享
发布于 2019-09-19 19:21
太强了,太感谢了👍
点赞 回复 分享
发布于 2019-09-19 19:05
感谢 顶一个
点赞 回复 分享
发布于 2019-09-19 15:03
感谢!!
点赞 回复 分享
发布于 2019-09-19 14:35
大佬tql
点赞 回复 分享
发布于 2019-09-19 12:25
谢谢谢谢
点赞 回复 分享
发布于 2019-09-19 11:56
感谢分享,顶
点赞 回复 分享
发布于 2019-09-19 11:53
感谢
点赞 回复 分享
发布于 2019-09-19 11:45
强啊
点赞 回复 分享
发布于 2019-09-19 11:30
感谢!哈哈
点赞 回复 分享
发布于 2019-09-19 08:25

相关推荐

秋招结束已经一段时间了 一直在忙着毕业的事情 浅浅总结一下自己的秋招经历吧~本人BG双非硕 后端选手 有一段小厂+腾讯暑期实习腾讯暑期转正loser秋招结束已经结束了有一段时间了总结一下秋招历程最大的感受就是秋招比起暑期更加卡学历秋招总共投了60多家吧一直面 一直挂也投了两家银行科技岗 都走到终面体检了都拒了(总体感觉本地的银行还是挺容易过的)可能本人更想去私企 并且银行也挺卷听说一直到11月就只有一家小厂的offer并签约当保底然后也突然被WXG捞了 本来都不对腾讯抱有希望了可能经过一整个秋招的面试积累吧 以及本人有ACM经历 WXG整体面试以做题偏多(一二面做了5道题 4道hard) 比较合自己胃口 差不多半个月就把五轮面试过了进入录用评估 但也一直没有结果到后面也陆陆续续有几家中厂也终面过泡池子一直到12月初华子给开了base杭州 14a因为华子公积金的原因 和小厂薪资上差距不大 所以也一直犹豫是否毁约签华子 但是内心也还对WXG抱有一丝幻想(虽然一直没有保温也没有任何消息)然后一直到12月中下旬 华子要求去现场签约了 但是WXG还是没有消息 然后就连续发邮件和打电话催了好多次 还是回复耐心等待直到华子签约那天 经过内心挣扎已经决定毁约签华子了 可能还是想平台更大一点吧 然后最戏剧性的一幕来了 就在我发毁约邮件没有5秒 WXG打电话开奖了 并且开奖也十分有诚意 最终还是没有签约成功华子 研究生期间也打了很多次华子的比赛还是对华子有感情的555整个秋招都是伴随着焦虑的 我认为自己也是秋招大部分人的画像 屡屡碰壁后不断怀疑自己 但是可能自己也比较幸运吧 但是也感谢自己在一次次陷入迷茫都没有放弃自己 还是一直努力背八股 刷题也祝各位牛友们共勉 就算暂时没有好的offer 不放弃一定会有好的结果的!!
点赞 评论 收藏
分享
评论
83
717
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务