校招后端面经--计算机网络
1. Nagle算法
背景
TCP传输数据的过程中存在两种类型的TCP报文段,一种包含成块数据(通常是满长度的,携带一个报文段最多能容纳的字节数),另一种则包含交互数据(通常只有携带几个字节数据)
对于成块数据的报文段,TCP采用正常的流程发送即可,因为数据利用率很高。而对于交互数据的报文段,数据利用率久显得很低,在网络环境不好的情况下容易加重网络负担
Nagle算法用于处理小报文段的发送问题
过程
客户端首先发送大小为1个字节的第一个分组,随后其他分组到达发送缓冲区,由于上一个分组的应答还没有收到,所以TCP会先缓存新来的这4个小分组,并将其重新组成一个大分组,当第一个小分组的应答收到后,客户端将这个大分组发送。
缺点
对于需要实时预览的通讯程序来说,客户端可能需要不断发送更新数据并得到服务器的响应,这时就会导致客户端明显的延迟
2. DHCP协议
动态申请IP,属于应用层,使用UDP进行传输
过程
- 客户端生成包含DHCP发现报文的IP数据报,使用广播的方式传输,目的地址为255.255.255.255,源地址为0.0.0.0,将其广播到所有与该子网连接的子网
- DHCP服务器收到DHCP发现报文后,使用IP广播地址发送DHCP提供报文。提供报文中含有收到的发现报文的事务ID,向客户机推荐的IP地址,网络掩码以及IP地址租用期等
- 主机收到一个或多个DHPC报文后,从中选出一个,然后发送一个DHCP请求报文对选中的服务器进行响应,回显配置相关参数
- DHCP服务器响应该请求报文,证实所要求的参数
3. ARP协议
将IP映射到MAC, 在OSI模型中属于数据链路层,在TCP/IP模型中属于网络层
过程
- 每个节点的ARP模型都在它的内存中有一个ARP表,包含了IP地址到MAC地址的映射
- 当所查询的节点在发送方的ARP表中都有相应的表项时,直接查寻即可
- 没有相应的表项时,广播ARP分组,匹配节点给查询节点发送一个带有所希望映射的响应的ARP分组
注意
- 查询ARP报文载广播帧中发送,响应报文在一个标准帧中发送
- ARP是即插即用的,无需配置,节点断开连接时,表项最终会被删除掉
4. DNS协议
域名解析,应用层协议,基于UDP传输
过程
- 客户机向其本地的域名服务器发出DNS请求报文
- 本地域名服务器收到后先到本地缓存中查找,如果没有该记录,则以DNS客户的身份向根域名服务器发出解析请求
- 根域名服务器收到请求后,判断该域名是属于某个顶级域名服务器,将对应的顶级域名服务器的IP地址返回给本地域名服务器
- 本地域名服务器向顶级域名服务器发出请求
- 顶级域名服务器收到请求后,判断该域名属于某个授权域名服务器,将对应的授权域名服务器的IP地址返回给本地域名服务器
- 本地域名服务器向授权域名服务器发送请求
- 授权域名服务器返回解析的IP地址给本地域名服务器
- 本地域名服务器将结果返回给客户机并保存在自己的本地缓存中
5. 滑动窗口协议
发送方为维护一个窗口值来限制自己的发送速率,在没有收到接收方确认的情况下,发送方可以连续把发送窗口的数据发送出去。但是已经发送过的数据在未收到确认之前,不能继续发送下一个窗口的数据,它还需要暂时保留原来数据,以便于超时重传时使用。发送窗口越大,它就可以在收到对方确认之前发送更多的数据,因而获得更高的传输效率。发送窗口的大小一般取接收窗口的大小和拥塞窗口的最小值
6. 电子邮件协议
应用层协议
过程
- 发信人调用用户代理来编辑要发送的邮件,用户代理用SMTP协议把邮件发送给发送方邮件服务器
- 发送方邮件服务器将邮件放入缓存中队列中,等待发送
- 运行在发送方邮件服务器的SMTP进程,发现在邮件缓存中有待发送的邮件,就向运行在接收方邮件服务器的SMTP服务进程发起建立TCP连接
- SMTP客户进程开始向SMTP服务进程发送邮件,当邮件全部发送完毕后,关闭TCP连接
- 运行在接收方邮件服务器中的SMTP服务进程收到邮件后,将邮件放入收件箱中,等待收信人读取
- 收信人调用用户代理,使用POP3协议将自己的邮件从接收方邮件服务器的用户邮箱中取出
7. HTTP协议
过程
- 浏览器分析链接指向页面的URL
- 浏览器向DNS请求解析URL的IP地址
- DNS解析出服务器的IP地址返回给浏览器
- 浏览器与该服务器建立TCP链接
- 浏览器发出HTTP请求
- 服务器通过HTTP响应返回信息给浏览器
- 浏览器将信息进行解析,以网页的形式呈现给用户
8. IP, TCP, UDP的首部
1. IP(20字节)
2. TCP(20字节)
3. UDP(8字节)
9. TCP拥塞控制中的快速恢复
1. 原理
快速恢复的思想是“数据包守恒”原则,即同一个时刻在网络中的数据包数量是恒定的,只有当“老”数据包离开了网络后,才能向网络中发送一个“新”的数据包,如果发送方收到一个重复的ACK,那么根据TCP的ACK机制就表明有一个数据包离开了网络,于是cwnd加1。 跟快速重传同时使用。
2. 过程
- 当收到3个重复ACK时,把阈值设置为cwnd的一半,把cwnd设置为阈值加3,然后重传丢失的报文段,加3的原因是因为收到3个重复的ACK,表明有3个“老”的数据包离开了网络。
- 再收到重复的ACK时,拥塞窗口增加1。
- 当收到新的数据包的ACK时,把cwnd设置为第一步中的阈值的值。原因是因为该ACK确认了新的数据,说明从重复ACK时的数据都已收到,该恢复过程已经结束,可以回到恢复之前的状态了,也即再次进入拥塞避免状态。