计算机网络之面试常考考点
基础
1. 谈一下你对五层网络协议体系结构的理解
- 应用层 : 所有能与用户交互产生网络流量的程序 - 报文
- 传输层 : 负责主机中两个进程的通信 - 报文段(TCP) 用户数据报(UDP)
- 网络层 : 将分组从源端传到目的端 - 数据报(分组)
- 数据链路层 : 将网络层传下来的数据报组装成帧 - 帧
- 物理层 : 在物理媒体上实现比特流的透明传输 - 比特
2. 简单说一下每一层对应的网络协议
- 应用层 : FTP TELNET SMTP DNS HTTP
- 传输层 : TCP UDP
- 网络层 : IP ICMP(控制报文协议) ARP(地址解析协议) RIP(路由信息协议)
- 数据链路层 : ARQ(自动重传请求协议) PPP(点对点协议) CSMA/CD(停止等待协议)
- 物理层 : IEEE802.3
网络层
1. 谈一下你对网络层地址分类的理解
IP地址是由IP协议提供的一种统一的地址格式 , 它为互联网上的每一个网络和每一台主机分配一个逻辑地址 , 以此屏蔽物理地址的差异 . IP编址方案将IP地址空间分为ABCDE五类 , 其中ABC是基本类 , DE为多播和保留 , 是特殊地址 .
- 主机号全0表示本网络本身
- 主机号全1表示本网络的广播地址
- 127.0.0.0表示任意主机本身 - 环回地址
2. 简单接释ARP的工作过程
- 首先 , 每个主机在自己的ARP缓存中建立ARP列表 , 以表示IP地址和MAC地址之间的对应关系 ;
- 当源主机发送数据时 , 先检查ARP列表中是否有目的主机的MAC地址 , 如果有 , 则直接发送数据 , 如果没有 , 向本网段的所有主机发送ARP数据包 , 该数据包包含 : 源主机IP地址 , 源主机MAC地址 , 目的主机IP地址 ;
当本网段的所有主机收到该ARP数据包时 , 检查该数据包中目的主机的IP地址是否是自己的IP地址 , 如果不是则忽略 , 如果是 , 则从数据包中取出源主机的IP地址和MAC地址写入到ARP列表中 , 并将自己的MAC地址写入到ARP响应包中 ;
源主机收到ARP响应包后 , 将目的主机的IP地址和MAC地址写入到ARP列表中 .
3. 说出一些私有(保留)地址
- 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
- 以上都是本地局域网
传输层
1. TCP的三次握手
- 客户端发送连接请求报文段 , 不含应用层数据 , 客户端随机选择一个起始序号SYN=1 , seq=x ;
- 服务器端收到连接请求报文段后 , 向客户端返回确认报文段 , 不含应用层数据 , SYN=1 , seq=y , ACK=1 , ack=x+1 ;
- 客户端收到连接确认报文段后 , 还要向服务器端返回确认的确认 , SYN=0 , seq=x+1 , ACK=1 , ack=y+1 .
- ack : 确认号字段 , 期望收到的对方的下一个报文段数据的序号 ;
- ACK : 确认位 , 只要有请求 , 所有传送的报文段都须将ACK置为1 ;
- SYN : 同步位 , 表示这是一个连接请求或连接接收报文 ;
- FIN : 终止位 , 释放连接 , FIN=1表示发送方的数据已经发送完毕 .
- 思考 : 为什么三次握手最后一次握手中 , seq=x+1而不是x+2 ?
- 解答 : 因为ACK报文段不携带数据则不消耗序号 .
1.1 为什么不是两次握手
为了实现可靠数据传输 , TCP协议的通信双方 , 都必须维护一个序列号 , 以标识已经发送出去的数据包中 , 哪些是已经被对方收到的 . 三次握手的过程即是通信双方相互告知序列号起始值 , 并确认对方已经收到序列号起始值的过程 ;
如果只是两次握手 , 至多只有客户端的起始序列号被确认 , 服务器的序列号则得不到确认 .
1.2 为什么不是四次握手
因为完全可靠的通信协议是不存在的 , 在三次握手之后, 客户端和服务器已经可以确认之前的通信状况 , 所以即使再增加握手次数也不能保证后面的通信完全可靠 .
2. TCP的四次挥手
- 客户端发送连接释放报文段 , 停止发送数据 , 主动关闭TCP连接 , FIN=1 , seq=u ;
- 服务器端收到连接释放报文段后即发出确认 , 客户端到服务器端这个方向的连接就释放了 , ACK=1 , ack=u+1 , seq=v ;
- 服务器端发完数据 , 就发出连接释放报文段 , 主动关闭TCP连接 , FIN=1 , ACK=1 , ack=u+1 , seq=w ;
- 客户端收到连接释放报文段后即返回确认 , ACK=1 , ack=w+1, seq=u+1 .
2.1 第二次和第三次之间的等待是什么
等待服务器将数据传输完毕之后再发送释放连接请求 .
2.2 为什么TIME-WAIT为2MSL
- 为了保证客户端发送的最后一个ACK报文段能够到达服务器 ;
- 防止已失效的连接请求报文段出现在本连接中 .
3. TCP/UDP的区别
- TCP可靠 , UDP不可靠
- TCP面向连接 , UDP无连接
- TCP报文段 , UDP用户数据报
- TCP面向字节流 , UDP面向报文
- TCP安全传输慢 , UDP不安全传输快
4. 常见端口与服务.
- 21 : FTP - 文件传输协议 - TCP
- 23 : TELNET - 远程登录协议 - TCP
- 25 : SMTP - 简单邮件传输协议 - TCP
- 80 : HTTP - 超文本传输协议 - TCP
- 53 : DNS - 域名系统 - UDP
- 69 : TFTP - 简单文件传输协议 - UDP
- 161 : 简单网络管理协议 - UDP
5. TCP拥塞控制的4种算法
- 慢开始 ;
- 拥塞避免 ;
- 快重传 ;
- 快恢复 .
应用层
1. 在浏览器中输入网址执行之后会发生什么?
- 浏览器分析URL
- 浏览器向DNS请求解析IP地址
- DNS解析出IP地址
- 浏览器与服务器建立TCP连接
- 浏览器发出HTTP请求
- 服务器处理请求并返回HTTP报文
- 释放TCP连接
- 浏览器解析渲染页面
2. 常见的状态码
- 1XX - 请求正在处理
- 2XX - 请求成功
- 3XX - 重定向 需要进行附加操作以完成请求
- 4XX - 客户端错误
- 5XX - 服务器错误
3. HTTP中GET/POST的区别
- GET是请求获取指定的资源 . GET是安全幂等(反复读取对访问的数据没有副作用)可缓存的 , GET方法的报文主体没有任何语义 ;
- POST是根据请求的报文主体对指定资源做出处理 . POST是不安全不幂等不可缓存的 .
- 举个栗子 : 在微博这个场景中 , GET会被用在[看看时间线上最新的10条微博]这样的场景 , 而POST会被用在[发微博 评论 点赞]这样的场景中 .
4. HTTP/HTTPS的区别
- HTTPS需要到CA申请证书 , 一般免费证书较少 , 需要一定费用 ;
- HTTP是超文本传输协议 , 信息是明文传输 , HTTPS则是具有安全性的SSL加密传输协议 , 需要消耗更多的资源 ;
- HTTP-80 , HTTPS-443 ;
- HTTP无状态不安全 , HTTPS可加密传输 , 安全 .
5. URL/URI的区别
URL-统一资源定位符 , URI-统一资源标识符 , URL是URI的子集 .
举个栗子 : URL是定位到某人的具体地址 , URI是某人的身份证 .
6. COOKIE/SESSION的区别
- COOKIE是客户端保存用户信息的一种机制 , 用来记录用户的一些信息 , 也是实现SESSION的一种方式 ;
- SESSION是在服务器端保存的一个数据结构 , 用来跟踪用户的状态 , 这个数据可以保存在文件或数据库中 .
参考资料目录 :