关于网络的高频面试题,整理了了一下大部分网络层,传输层,应用层。因此这里只找面试可能出现的。关于答案相关的不少都来自网上整理的,还有就是谢希仁的计算机网络第七版,在最后面会给上参考资料。java
多了表示层和会话层:git
只有四层,至关于五层协议中数据链路层和物理层合并为网络接口层。github
网络层的设计思路是:“网络层只向上提供简单灵活的、无链接的、尽最大努力交付的服务。”关于网络层的知识点也不少,可是在面试中的高频知识点很少。面试
网络层里网际IP协议是TCP/IP体系中两个最重要的协议之一。与IP协议配套使用的还有三个协议:后端
私有/保留就是在互联网上不使用,而被使用在局域网络中的地址或者作其余特殊用途。好比咱们的联通运营商就是使用的10.开头的保留地址, 局域网组网,而后用户经过拨号的方式进入局域网,而后再经过访问网关访问Internet,这样作最大的好处就是节约了公网IP地址,极大的下降了成本。浏览器
A类:10.0.0.0 ~ 10.255.255.255缓存
B类:172.16.0.0 ~ 172.31.255.255安全
C类:192.168.0.0 ~ 192.168.255.255服务器
网络层的 ARP 协议完成了 IP 地址与物理地址的映射。网络
首先,每台主机都会在本身的 ARP 缓冲区中创建一个 ARP 列表,以表示 IP 地址和 MAC 地址的对应关系。当源主机须要将一个数据包要发送到目的主机时,会首先检查本身 ARP 列表中是否存在该 IP 地址对应的 MAC 地址:若是有,就直接将数据包发送到这个 MAC 地址;若是没有,就向本地网段发起一个 ARP 请求的广播包,查询此目的主机对应的 MAC 地址。此 ARP 请求数据包里包括源主机的 IP 地址、硬件地址、以及目的主机的 IP 地址。网络中全部的主机收到这个 ARP 请求后,会检查数据包中的目的 IP 是否和本身的 IP 地址一致。若是不相同就忽略此数据包;若是相同,该主机首先将发送端的 MAC 地址和 IP 地址添加到本身的 ARP 列表中,若是 ARP 表中已经存在该 IP 的信息,则将其覆盖,而后给源主机发送一个 ARP 响应数据包,告诉对方本身是它须要查找的 MAC 地址;源主机收到这个 ARP 响应数据包后,将获得的目的主机的 IP 地址和 MAC 地址添加到本身的 ARP 列表中,并利用此信息开始数据的传输。若是源主机一直没有收到 ARP 响应数据包,表示 ARP 查询失败。
ARP默认了其所在的网络是一个善良的网络,每台主机在向网络中发送应答信号时都是使用的真实身份。因此人们就发现ARP应答中的IP地址和MAC地址中的信息是能够伪造的,并不必定是本身的真实IP地址和MAC地址,由此,ARP欺骗就产生了。
它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络自己的消息。这些控制消息虽然并不传输用户数据,可是对于用户数据的传递起着重要的做用。
从通讯和信息处理两个角度看,运输层向它上面的应用层提供了通讯服务。其主要的两个协议是UDP协议(用户数据报协议)和TCP协议(传输控制协议),重点在于TCP协议和可靠传输的原理。
UDP的特色:
TCP的特色:
TCP与UDP的区别:
应用 | 应用层协议 | 运输协议 |
---|---|---|
名字转换 | DNS(域名系统) | UDP |
文件传送 | TFTP(简单文件传送协议) | UDP |
路由选择协议 | RIP(路由信息协议) | UDP |
IP地址配置 | DHCP(动态主机配置协议) | UDP |
网络管理 | SNMP(简单网络管理协议) | UDP |
远程文件服务器 | NFS(网络文件系统) | UDP |
IP电话 | 专用协议 | UDP |
流式多媒体通讯 | 专用协议 | UDP |
多播 | IGMP(网际管理协议) | UDP |
电子邮件 | SMTP(简单邮件传送协议) | TCP |
远程终端接入 | TELNET(远程终端协议) | TCP |
万维网 | HTTP(超文本传送协议) | TCP |
文件传送 | FTP(文件传送协议) | TCP |
三次握手
第一次握手,客户端给服务器发送一个SYN包,序号为x,等待服务器的响应。
第二次握手,服务器给客户端发送了有ACK/SYN标志的包,序号为y,确认号为x+1,并等待客户端响应。
第三次握手,客户端收到服务器的确认包后,给服务器发送了一个ACK包,序号为x+1,确认号为y+1。
三次握手完毕后,就能够正式传递数据了。
四次挥手
第一次挥手,客户端给服务器发送一个FIN包,此时客户端不会再向服务器发送数据,但客户端能接收服务器的数据。
第二次挥手,当服务器收到FIN包后,会给客户端发一个确认包,并传递剩下的数据。
第三次挥手,当服务器将剩余数据发送完后,就向发送方发一个FIN包。此时服务器也不会继续向客户端发送数据了。
第四次挥手,客户端收到服务器的FIN包后,就向服务器发送一个确认包。
服务端接收到后,完成四次挥手。服务器断开链接,客户端在等待一段时间后也断开链接。
三次握手的目的是创建可靠的通讯信道,不管是客户端,仍是服务器都须要确保本身和对方的发送/接收功能都是正常的,三次握手的过程就能保证这一点。
第一次握手,服务器收到客户端发来的同步包后,能肯定客户端的发送功能和本身的接收功能是正常的。
第二次握手,客户端收到服务器发来的确认包后,能肯定本身的发送/接收功能,服务器的发送/接收功能是正常的。
第三次握手,服务器收到客户端的确认包后,能肯定本身的发送/接收功能,服务器的发送/接收功能是正常的。
若是不进行挥手操做,好比客户端直接断开与服务器的链接,那么服务器不知情,还会继续向客户端发送数据,这就形成资源浪费。
为了保证客户端发送的最后一个确认,可以达到服务器
这个ACK可能丢失,就会致使服务器在LAST-ACK状态,没办法正常结束,那么服务器收不到就会超时重传能够断开的消息。
那么A就可以在这个2MSL中收到这个重传的消息,而且从新计时2MSL。
并且,客户端持续2MSL时间后断开,就能够保证这个链接的全部报文都会死亡,能够看下MSL的含义,也就是2MSL以后,断开这个链接以后,确定不会还存在这个链接的旧的报文了。
补充:MSL(最大报文段的生成时间)在RFC793中规定hi2分钟,实际应用是30秒,1分钟,2分钟等
二次握手不行,假设客户端的一个SYN包在网络中滞留了好久,这就是个失效的报文段了,若是服务器收到这个报文段,就认为这是一个链接请求,并创建链接。这样,就会浪费服务器资源,采用三次握手就能避免这种状况。
三次挥手不行,若是没有最后一次挥手,即服务器在第三次挥手,即发送完FIN包后就断开链接,若是这个包丢失了,那么客户端就会一直等待,这显然是不行的。
超时重传,若是一个已经发送的报文段在超时时间内没有收到确认,那么就重传这个报文段。
首部校验和,提供了差错检测功能。
确认与序号机制,能保证接收到数据的有序性。
流量控制,能控制端到端之间的数据传递速率,有效避免丢包。
拥塞控制,根据整个网络环境来条件传输速率,有效避免丢包。
URL咱们说是叫统一资源定位符,URI我更愿意叫作统一资源标识符。
举个例子:
一我的,身份证是他的惟一标识,能够做为统一资源标识符,而地址是为了找到他,因此是统一资源定位符。
GET在浏览器回退是无害的,而POST会再次提交请求
GET请求会被浏览器主动cache,而POST不会,除非手动设置
GET请求只能进行URL编码,而POST支持多种编码
GET请求参数会被完整保留在浏览器历史记录中,而POST中的参数不会被保留
GET请求在URL中传送参数是有大小限制的,不能大于2KB,而POST能够说没有
GET只接受ASCII字符,而POST没有限制
GET参数直接暴露在URL上,而POST将数据放在request body中
查询DNS, 获取域名对应的IP地址
浏览器得到域名对应的IP地址后,发起TCP三次握手
TCP/IP创建链接后,浏览器能够向服务器发送HTTP请求了
服务器接收到请求后,根据路径参数,通过后端处理将页面返回给浏览器
浏览器渲染页面,和外部资源,最终将完整的页面呈现给用户
200:请求成功状态码。
301:永久重定向。该资源已经分配了新的 URI,服务器返回301响应时,会自动将请求者转移到新URI。
302:临时重定向。表示请求的资源临时分配了新的 URI,但愿用户(本次)能使用新的 URI 访问。
404:服务器找不到目标资源。
500:服务器内部出错,没法完成请求。
计算机网络第七版-谢希仁