计算机网络高频面试问题总结

网络的几种分层体系结构

osi7层模型:
1.物理层:IEEE 802.1A, IEEE 802.2到IEEE 802.11
2.数据链路层:FDDI, Ethernet, Arpanet, PDN, SLIP, PPP
3.网络层:IP, ICMP, ARP, RARP, AKP, UUCP
4.传输层:TCP, UDP
5.会话层:SMTP, DNS
6.表示层:Telnet, Rlogin, SNMP, Gopher
7.应用层 :HTTP、TFTP, FTP, NFS, WAIS、SMTP
TCP/IP四层概念模型 :
1.数据链路层
2.网络层
3.传输层
4.应用层

建立TCP服务器的各个系统调用

计算机网络高频面试问题总结_第1张图片
link

socket网络编程有哪些系统调用?其中close是一次就能直接关闭的吗,半关闭状态是怎么产生的?

半关闭

MTU和MSS

MTU: Maxitum Transmission Unit 最大传输单元
MSS: Maxitum Segment Size 最大分段大小
link

对路由协议的了解与介绍

内部网关协议(IGP)包括RIP,OSPF,和外部网关协议EGP和BGP.

路由协议所使用的算法

link

路由表的项目包括哪些

  1. 目的网络号
  2. 掩码
  3. 出接口
  4. 下一跳地址
  5. 度量值
  6. 管理距离

地址解析协议ARP的过程

透过目标设备的IP地址,查询目标设备的MAC地址

第1步:根据主机A上的ARP缓存内容,IP确定用于访问主机B的转发IP地址是192.168.1.2。然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。

第2步:如果主机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。

第3步:主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。

第4步:主机B将包含其MAC地址的ARP回复消息直接发送回主机A。

第5步:当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了

网际控制报文协议ICMP的过程

ICMP(Internet Control Message Protocol)网际控制报文协议。它是TCP/IP协议族的一个子协议,是一种面向无连接的协议,用于传输出错报告控制信息。用于在IP主机、路由器之间传递控制消息。

分类:有ICMP差错报文和ICMP询问报文两种报文类型

CMP常用于探测网络联通性:
ping命令:通过发送网际控制报文‘回显应答’报文,来验证与另一台计算机的IP级连接。
tarcert命令:通过递增‘生存时间’构造网际控制报文‘回显应答’报文,达到路由追踪的目的。
pathping命令:一个将ping和tracert功能结合起来并用有所增强的网络诊断工具,可以反映出数据包从源主机到目的主机所经过的路径。网络延时及丢包率。
以上命令只是用于理想状况,实际状况是,很多公司和学校等都禁用或者拦截ICMP报文,特别路由追踪时,很难完整的探测出路由的路径。

动态主机配置协议DHCP的过程

DHCP

WAN LAN WLAN VLAN VPN的区别

link

介绍一下VPN(虚拟专用网)

虚拟专用网络的功能是:在公用网络上建立专用网络,进行加密通讯。在企业网络中有广泛应用。VPN网关通过对数据包的加密和数据包目标地址的转换实现远程访问。VPN有多种分类方式,主要是按协议进行分类。
link

TCP和UDP的区别

1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付

Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。

3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。

4.每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

5、TCP对系统资源要求较多,UDP对系统资源要求较少。

link

TCP如何保证数据的正确性

link

TCP和UDP相关的协议与端口号

TCP 21端口:FTP 文件传输服务
TCP 23端口:TELNET 终端仿真服务
TCP 25端口:SMTP 简单邮件传输服务
UDP 53端口:DNS 域名解析服务
TCP 80端口:HTTP 超文本传输服务
TCP 110端口:POP3 “邮局协议版本3”使用的端口
TCP 443端口:HTTPS 加密的超文本传输服务
TCP 1521端口:Oracle数据库服务
TCP 1863端口:MSN Messenger的文件传输功能所使用的端口
TCP 3389端口:Microsoft RDP 微软远程桌面使用的端口
TCP 5631端口:Symantec pcAnywhere 远程控制数据传输时使用的端口
UDP 5632端口:Symantec pcAnywhere 主控端扫描被控端时使用的端口
TCP 5000端口:MS SQL Server使用的端口
UDP 8000端口:腾讯QQ

TCP(UDP,IP)等首部的认识(http请求报文构成)

http头:
http
TCP,UDP,IP首部
TCP,UDP,IP

网络层分片的原因与具体实现

link

TCP的三次握手与四次挥手的详细介绍(TCP连接建立与断开是热门问题)

TCP握手以及每一次握手客户端和服务器端处于哪个状态添加链接描述(11种状态)

为什么使用三次握手,两次握手可不可以?

TIME_WAIT的意义(为什么要等于2MSL)

超时重传机制(不太高频)

link

TCP怎么保证可靠性(面向字节流,超时重传,应答机制,滑动窗口,拥塞控制,校验等)?

面向字节流,超时重传,应答机制,滑动窗口,拥塞控制,校验等

流量控制的介绍,采用滑动窗口会有什么问题(死锁可能,糊涂窗口综合征)?

死锁:
发送者会根据收到的报文段接收窗口的值调整自己的发送窗口。当接收方接收缓存满时就发送给发送方零窗口,告诉发送方停止发送。假设过一段时间接收方调整接收窗口为100,而此报文段在传送过程中丢失,这就导致发送方等待接收方的非零窗口通知,而接收方在等待发送方的数据。这样就导致了死锁。为了防止这种情况,TCP为每个连接设置一个持续计时器。TCP连接的一方收到零窗口通知后,就启动计时器,设置的时间到期后它会发送一个探测报文段。如果此时返回的仍然是零窗口,则重新设定计时器。如果窗口不是零,那么死锁的僵局就可以被打破了。

糊涂窗口综合征

TCP滑动窗口协议

拥塞控制和流量控制的区别

流量控制是端到端的控制,例如A通过网络给B发数据,A发送的太快导致B没法接收(B缓冲窗口过小或者处理过慢),这时候的控制就是流量控制,原理是通过滑动窗口的大小改变来实现。
拥塞控制是A与B之间的网络发生堵塞导致传输过慢或者丢包,来不及传输。防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不至于过载。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络性能有关的所有因素。

TCP拥塞控制,算法名字?(极其重要)

流量控制和拥塞控制
快速重传

网页解析的过程与实现方法

link

应用层协议常用的端口号

POP3 TCP 110
IMAP TCP 143
SMTP TCP 25
Telnet TCP 23
终端服务 TCP 3389
PPTP TCP 1723
HTTP TCP 80
FTP(控制) TCP 21
FTP(数据) TCP 20
HTTPS TCP 443
NTP UDP 123
RADIUS UDP 1645
DHCP UDP 67
DNS UDP 53
DNS TCP 53
SNMP UDP 161
ipsec UDP 500
TFTP UDP 69
L2TP UDP 1701
link

http协议与TCP联系

TCP协议对应于传输层,而HTTP协议对应于应用层,
从本质上来说,二者没有可比性。
Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。
Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的。
所以Http连接是一种短连接,是一种无状态的连接。
所谓的无状态,是指浏览器每次向服务器发起请求的时候,不是通过一个连接,而是每次都建立一个新的连接。如果是一个连接的话,服务器进程中就能保持住这个连接并且在内存中记住一些信息状态。而每次请求结束后,连接就关闭,相关的内容就释放了,所以记不住任何状态,成为无状态连接。

http/1.0和http/1.1的区别

长连接
Host域
带宽优化
消息传递
缓存
link

http的请求方法有哪些?get和post的区别。

link
post和get区别
get和post的区别:
1.GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如果数据是英文字母或数字,则原样发送;如果是空格,转换为+;如果是中文或其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII码值。而与之对应的,POST把提交的数据放置在HTTP包的包体中,文章最下面将会有代码示例。

2.POST的安全性要比GET的安全性高。注意:这里所说的安全性和上面GET提到的“安全”不是同个概念。上面“安全”的含义仅仅是不作数据修改,而这里安全的含义是真正的Security的含义。比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为:(1)登录页面有可能被浏览器缓存,(2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用GET提交数据还可能会造成Cross-site request forgery攻击(CSRF,跨站请求伪造,也被称为:one click attack/session riding)。

http的状态码

link
200(“OK”)
一切正常。实体主体中的文档(若存在的话)是某资源的表示。

500(“Bad Request”)
客户端方面的问题。实体主题中的文档(若存在的话)是一个错误消息。希望客户端能够理解此错误消息,并改正问题。

500(“Internal Server Error”)
服务期方面的问题。实体主体中的文档(如果存在的话)是一个错误消息。该错误消息通常无济于事,因为客户端无法修复服务器方面的问题。

301(“Moved Permanently”)
当客户端触发的动作引起了资源URI的变化时发送此响应代码。另外,当客户端向一个资源的旧URI发送请求时,也发送此响应代码。

404(“Not Found”) 和410(“Gone”)
当客户端所请求的URI不对应于任何资源时,发送此响应代码。404用于服务器端不知道客户端要请求哪个资源的情况;410用于服务器端知道客户端所请求的资源曾经存在,但现在已经不存在了的情况。

409(“Conflict”)
当客户端试图执行一个”会导致一个或多个资源处于不一致状态“的操作时,发送此响应代码。

http和https的区别,由http升级为https需要做哪些操作

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

升级:
升级

https的具体实现,怎么确保安全性

https加密算法

在浏览器输入一个URL的流程,这个过程中浏览器做了什么(如www.baidu.com)

→ 1- 输入网址
→ 2- 缓存解析
→ 3- 域名解析
→ 4- tcp连接,三次握手
→ 6- 页面渲染
link

URL包括哪三个部分?

URL由三部分组成:协议类型,主机名和路径及文件名。
link

长连接与短连接的区别以及使用场景

首先介绍下短链接和长连接的区别:
短连接
连接->传输数据->关闭连接
比如HTTP是无状态的的短链接,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
具体就是 浏览器client发起并建立TCP连接 -> client发送HttpRequest报文 -> server接收到报文->server handle并发送HttpResponse报文给前端,发送完毕之后立即调用socket.close方法->client接收response报文->client最终会收到server端断开TCP连接的信号->client 端断开TCP连接,具体就是调用close方法。

也可以这样说:短连接是指SOCKET连接后,发送接收完数据后马上断开连接。
因为连接后接收了数据就断开了,所以每次数据接受处理不会有联系。 这也是HTTP协议无状态的原因之一。

长连接
连接->传输数据->保持连接 -> 传输数据-> …->直到一方关闭连接,多是客户端关闭连接。
长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。

HTTP在短链接和长连接上的选择:

HTTP是无状态的 ,也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话

HTTP1.1和HTTP1.0相比较而言,最大的区别就是增加了持久连接支持(貌似最新的HTTP1.1 可以显示的指定 keep-alive),但还是无状态的,或者说是不可以信任的。
如果浏览器或者服务器在其头信息加入了这行代码 Connection:keep-alive
TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了带宽。
实现长连接要客户端和服务端都支持长连接。

什么时候用长连接,短连接?
长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况,。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。

而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。

总之,长连接和短连接的选择要视情况而定。

具体网络中的应用的话:

http 1.0一般就指短连接,smtp,pop3,telnet这种就可以认为是长连接。一般的网络游戏应用都是长连接

一个机器能够使用的端口号上限是多少,为什么?可以改变吗?那如果想要用的端口超过这个限制怎么办?

这个是由TCP/IP协议栈中的第四层运输层UDP/TCP协议决定的.
在UDP/TCP协议中源端口和目的端口都只有16位,也就是说端口的取值范围为0~65535。
如何超过限制?(自己的想法)修改TCP、UDP的头中的目的端口和源端口的值,或者在选项中补充?

介绍一下ping的过程,分别用到了哪些协议

ping

对称密码和非对称密码体系

数字证书的了解(高频)

客户端为什么信任第三方证书

RSA加密算法(非对称加密,用公匙和私匙实现);

MD5原理(MD5是密码散列函数)=> SHA安全散列算法替代

单条记录高并发访问的优化

数据流和粘包问题

这么说吧,TCP在传输数据的时候,是不区分边界的(数据和数据之间没有边界),因为是基于字节流,所以数据对TCP来说就是一大堆没有结构区别的字节块。那意味着什么?意味着TCP并不能对多个数据的整体的信息进行区分(打个比方:就像是你说一堆话没有标点符号全部连在一起,别人很可能弄错)或者对单个整体信息的错误区分(比如你要发送的整块数据被分成了好几块发送,然后这些数据在传输过程中可能由于网络原因,有的大数据块中被分片后的部分片段到了,可能由于接收端缓冲区满了,开始读取,而它们又没有边界之分,这时候就解释错误了)。那样就会使得我们要传输的信息可能粘连在一起,而被计算机解释错误。

这就叫粘包,而我们要怎么解决这种问题呢?
1.定长包
2.在包的尾部加上\r,\n等字符(ftp使用这种策略,如果包的内容中也包含\r,\n,这时候需要用转义字符 \ 处理)
3.包头加上包体长度(接收时先接收包头根据包头计算出包体的长度来接收包体)
4.更复杂的应用层协议

一台机器最多可以建立多少tcp连接?

理论上一台机器有多少空闲的端口,就能对外发起多少个tcp连接

五种IO模型的过程和比较

阻塞IO、非阻塞IO、IO多路复用、信号驱动IO、异步IO

IO多路复用(select,poll,epoll的区别)

有没有抓过TCP包,描述一下

一个ip配置多个域名,靠什么识别?

TCP端口法,Web站点的默认端口一般为80,如果改变这一端口,就能实现在同一服务器上新增站点的目的。只是采用这种方式设置的多站点无法与DNS结合使用。
主机头法,在不更改TCP端口的情况下,在IIS中使用“主机头名”来区分不同的站点。

服务器攻击(DDos攻击)

重放攻击,IP欺骗

cookie和session

link
cookie和session结合使用:
1、存储在服务端:通过cookie存储一个session_id,然后具体的数据则是保存在session中。如果用户已经登录,则服务器会在cookie中保存一个session_id,下次再次请求的时候,会把该session_id携带上来,服务器根据session_id在session库中获取用户的session数据。就能知道该用户到底是谁,以及之前保存的一些状态信息。这种专业术语叫做server side session。

2、将session数据加密,然后存储在cookie中。这种专业术语叫做client side session。flask采用的就是这种方式,但是也可以替换成其他形式。
link

你可能感兴趣的:(面经)