php面试会考计算机网络,计算机网络常见面试题整理
1、TCP三次握手、四次分手。
TCP三次握手:
假设主机A为客户端,主机B为服务器端。三次握手的过程:主机A向主机B发送连接请求,主机B对收到的主机A的报文段进行确认,主机A再次对主机B的确认进行确认。
目的:为了防止已经失效的连接请求报文段突然又传到服务器端,因而产生错误。《计算机网络》例子:A向B发送的连接请求SYN报文段滞留在网络中的某处。于是A超时重传,与B建立了TCP连接,交换了数据,最后也释放了TCP连接。但滞留在网络中某处的陈旧的SYN报文段,现在突然传送到B了。如果不使用三次握手,那么B就以为A现在再次建立TCP连接,于是就分配资源,等待A传送数据。但A并没有想要建立TCP连接,也不会向B传送数据,B就白白等待A发送数据。浪费了资源。
TCP四次握手:四次握手过程:主机A向主机B发送关闭请求,主机B对收到的主机A的报文段进行确认,主机B向主机A发送关闭请求,主机A对收到的主机B的报文段进行确认。
为什么建立连接是三次握手,而关闭连接却是四次挥手?这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。
2、TCP/IP的流量控制?
使用滑动窗口实现流量控制,如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。是一种端到端的控制。
主要方式:返回的ACK中会包含自己的接收窗口的大小,并且利用大小来控制发送方的数据发送。
1) 1比特滑动窗口协议
当发送窗口和接收和接收窗口固定为1时,滑动窗口协议退化为停等协议。该协议规定发送方每发送一帧后就要停下来,等待接收方已正确接收的确认返回后 才能继续发送下一帧。
2)后退n协议
发送方在发完一个数据帧后,不停下来等待应答帧,而是连续发送若干个数据帧,即使在连续发送过程中受到了接收方发来的应答帧,也可以继续发送。且发送方在每发送完一个数据帧时都要设置超时定时器。只要在所设置的超时时间内仍收到确认帧,就要重发相应的数据帧以及之后的所有帧。
接收方若发现错误帧就不再接收后续的帧,即使是正确到达的帧。这显然是一种浪费。
3)选择重传协议
在后退n帧协议基础上改进,当接收方发现某帧出错后,其后继续送来的正确的帧虽然不能立即递交给高层,但接收方仍可接收下来,存放在一个缓冲区中,同时要求发送方重新传送出错的那一帧。一旦收到重新传来的帧后,就可以将缓冲区中其余帧一并按正确的顺序递交高层。
选择重发减少了浪费,但要求接收方有足够大的缓冲区空间。
3、TCP拥塞控制?
防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不止于过载。
主要方式:1)慢开始、拥塞避免 2)快重传、快恢复
发送方维持一个叫做拥塞窗口的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口,另外考虑到接收方的接收能力,发送窗口可能小于拥塞窗口。
慢开始算法就是:先探测一下,由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。通常在刚刚开始发送报文段时,先把拥塞窗口cwnd设置为一个最大报文段MSS数值。而在每收到一个对新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值。用这样的方法逐步增大发送方拥塞窗口cwnd,可以使分组注入到网络的速率更加合理。(指数增长)
拥塞避免算法就是:每经过一个往返时间RTT就把发送方的拥塞窗口+1,即让拥塞窗口缓慢地增大,按照线性规律增长。当出现网络拥塞,比如丢包时,将慢开始门限设为原先的一半,然后将cwnd设为1,执行慢开始算法。
拥塞窗口cwnd和慢开始门限ssthresh状态变量的关系如下:当cwnd
当cwnd>ssthresh时,停止使用慢开始算法而改用拥塞避免算法。
当cwnd=ssthresh时,即可使用慢开始算法,也可使用拥塞控制避免算法。
快重传的机制是:接收方如果发现一个包丢失,则对后续的包继续发送针对该包的重传请求;一旦发送方接收到三个一样的确认,就知道该包之后出现了错误,立刻重传该包;此时发送方开始执行“快恢复”算法:a.慢开始门限减半;b.cwnd设为慢开始门限减半后的数值;c.执行拥塞避免算法(线性增长)
当rwnd
当cwnd
拥塞控制并非可以避免拥塞,而是将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。
php面试会考计算机网络,计算机网络常见面试题整理相关推荐
- 常见面试题整理--操作系统篇(每位开发者必备)
这两日整理了很多编程方面的资料:教学视频.书籍资源以及实战项目全部放在了百度网盘里,资源的目录以及获取方式都放在了文末的图上,你可以直接翻至文末查看. 有过面试经历的人都知道操作系统是面试官必问的几大 ...
- 常见面试题整理--数据库篇(每位开发者必备
常见面试题整理--数据库篇(每位开发者必备) 转载自:https://zhuanlan.zhihu.com/p/23713529 知乎专栏 继续前面有关于的Python面试的两篇内容:P ...
- 面:常见面试题整理(操作系统)
常见面试题整理(操作系统) 常见面试题整理(操作系统) 2018年03月08日 20:47:11 逃离地球的小小呆 阅读数:20782 (一)请分别简单说一说进程和线程以及它们的区别. 进程是具有一定 ...
- Java常见面试题整理(一)
Java常见面试题整理 字符串 抽象类与接口 集合 多线程 锁 IO流 网络编程 字符串 主要包括String.StringBuffer和StringBuilder基本概念 String相关知识 St ...
- 【JAVA秒会技术之秒杀面试官】JavaSE常见面试题(四)
[前言]别人都在你看不到的地方暗自努力,在你看得到的地方,他们也和你一样显得游手好闲,和你一样会抱怨,而只有你自己相信这些都是真的,最后,也只有你一个人继续不思进取 -- [下载]本人刚学习Jav ...
- java多线程常用面试_java的多线程常见面试题
并行和并发有什么区别? (推荐学习:java常见面试题) 并行是指两个或者多个事件在同一时刻发生:而并发是指两个或多个事件在同一时间间隔发生. 并行是在不同实体上的多个事件,并发是在同一实体上的多个事 ...
- 【JAVA秒会技术之秒杀面试官】JavaEE常见面试题(六)
[前言]别人都在你看不到的地方暗自努力,在你看得到的地方,他们也和你一样显得游手好闲,和你一样会抱怨,而只有你自己相信这些都是真的,最后,也只有你一个人继续不思进取 -- [下载]个人结合诸多资料 ...
- java ee笔试题_【JAVA秒会技术之秒杀面试官】JavaEE常见面试题(六)
[前言]别人都在你看不到的地方暗自努力,在你看得到的地方,他们也和你一样显得游手好闲,和你一样会抱怨,而只有你自己相信这些都是真的,最后,也只有你一个人继续不思进取 -- [下载]个人结合诸多资料,总 ...
- 操作系统常见面试题整理
(一)请分别简单说一说进程和线程以及它们的区别. 进程是具有一定功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源调度和分配的一个独立单位. 线程是进程的实体,是CPU调度和分派的基本单位 ...
- (操作系统) 常见面试题整理
(一)请分别简单说一说进程和线程以及它们的区别. 进程是具有一定功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源调度和分配的一个独立单位. 线程是进程的实体,是CPU调度和分派的基本单位 ...
最新文章
- Linux中查看各文件夹大小(扫盘)
- 红外测试操作步骤_红外光谱仪操作规程
- Django之orm补充
- python tensorflow 智能家居_TensorFlow平台下的视频目标跟踪深度学习模型设计
- 小积累-生成固定位数的随机数
- ndk-build官方使用说明
- 使用rundll32.exe绕过应用程序白名单(多种方法)
- 运行QTP测试脚本后,将编译结果写入指定文件(四)
- web项目测试方法总结
- linux字体使用教程,Ubuntu 字体设置:使用Windows 字体
- Opencv系列1_opencv对单张DCM文件的读取并显示
- 《邪不压正》里面究竟谁是真正的隐侠,蓝青峰究竟是正是邪?
- mac 远程连接 Windows 桌面
- [Mark]The problems solutions of vmware vsphere
- java里面case是什么意思_什么是Java中的switch case语句以及如何使用它?
- Thompson Sampling(汤普森采样)
- 安全方向比路由交换难吗_致网络工程师,新网工时代轻松拿下思科全新CCIE EI等各方向认证...
- Unity简单实现老虎机抽奖效果
- 芯盾时代: 开启“智慧身份认证”新时代
- Simcenter Flotherm XT案例练习
热门文章
- surface php老是用不了,surface启动一直进入uefi怎么办
- 在GitHub上建立自己在线简历
- 如何修改anaconda的文件目录_Anaconda安装的常见错误和python的基础知识
- matlab处理矩阵的一些简易操作和画图的一些小技巧
- 华为任命徐直军为华为云董事长,余承东任CEO | 任正非:做事要充满霸气,做人一定要谦卑!...
- 魔兽世界8.0哪个服务器稳定,魔兽世界活得最安逸的BOSS!8.0版本才拿到7.0服务器首杀!...
- 德军总部2新巨人计算机丢失,德军总部2新巨人打不开怎么办 德军总部2新巨像进不去解决方法...
- vs2017部分快捷键
- matlab2016与VS2019混合编程
- mysql日期 select_MySQL_MySql日期查询语句详解,使用DATE_FORMAT方法SELECT * FROM `le - phpStudy...