计算机网络常见面试题
- 1.说一说七层模型,各层都是干什么的?有哪些协议?
- 2.TCP和UDP区别,各自的组成部分,基于TCP和UDP的应用层协议?各自应用场景?
- 3.TCP三次握手、四次挥手、为什么三次握手?四次挥手?,三次挥手行不行,连接后客户端出现故障怎么办?
- 4.TCP如何保证可靠,拥塞控制过程?
- 5.TCP粘包、拆包出现原因场景及如何解决?
- 6.CLOSE-WAIT 和 TIME-WAIT ?
- 7. TIME-WAIT连接过多什么原因?解决?
- 8.浏览器输入URL并回车的过程发生了什么?DNS查询过程?DNS什么时候用TCP,什么时候用UDP?CDN知道吗?
- 9、HTTP1.0、1.1、2.0区别?
- 10.HTTP报文格式?常用字段?强缓存和协商缓存?
- 11.HTTP和HTTPS的区别?HTTPS的建立过程?对称加密和非u对称加密?
- 12.HTTP请求方式?GET和POST区别?
- 13.常见状态码?301和302区别?502和504区别?
- 14.cookie和session区别?
- 15.跨域?怎样解决跨域?
- 16.SYN泛洪攻击?XSS脚本攻击?csrf跨站请求伪造?解决方式?
- 17.ARP欺骗?DNS劫持?傻瓜窗口?等等。。。
1.说一说七层模型,各层都是干什么的?有哪些协议?
OSI分层:(7层) 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层
TCP/IP 分层:(4层) 网络接口层 网际层 运输层 应用层
五层协议:(5层) 物理层 数据链路层 网络层 运输层 应用层
每一层的协议如下:
物理层:RJ45、CLOCK、IEEE802.3 (中继器,集线器,网关)
数据链路:PPP、FR、HDLC、VLAN、MAC (网桥,交换机)
网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 (路由器)
传输层:TCP、UDP、SPX
会话层:NFS、SQL、NETBIOS、RPC
表示层:JPEG、MPEG、ASII
应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS
每一层的作用如下:
物理层:通过媒介传输比特,确定机械及电气规范(比特Bit)
数据链路层:将比特组装成帧和点到点的传递(帧Frame)
网络层:负责数据包从源到宿的传递和网际互连(包PackeT)
传输层:提供端到端的可靠报文传递和错误恢复(段Segment)
会话层:建立、管理和终止会话(会话协议数据单元SPDU)
表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)
应用层:允许访问OSI环境的手段(应用协议数据单元APDU)
2.TCP和UDP区别,各自的组成部分,基于TCP和UDP的应用层协议?各自应用场景?
TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。
两者的区别大致如下:
- TCP面向连接,UDP面向非连接即发送数据前不需要建立链接
- TCP提供可靠的服务(数据传输),UDP无法保证
- TCP面向字节流,UDP面向报文
- TCP数据传输慢,UDP数据传输快
- TCP提供一种面向连接的、可靠的字节流服务
- 在一个TCP连接中,仅有两方进行彼此通信,因此广播和多播不能用于TCP
- TCP使用校验和,确认和重传机制来保证可靠传输
- TCP使用累积确认
- TCP使用滑动窗口机制来实现流量控制,通过动态改变窗口的大小进行拥塞控制
TCP对应的协议:
- FTP:定义了文件传输协议,使用21端口。
- Telnet:一种用于远程登陆的端口,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。
- SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口。
- HTTP:是从Web服务器传输超文本到本地浏览器的传送协议。
- POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。
UDP对应的协议:
- DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
- SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
- TFTP(Trival File TransferProtocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。
为什么 TCP 叫数据流模式? UDP 叫数据报模式?
所谓的“流模式”,是指TCP发送端发送几次数据和接收端接收几次数据是没有必然联系的
所谓的“数据报模式”,是指UDP发送端调用了几次 write,接收端必须用相同次数的 read 读完。
TCP的组成
源/目的端口号: 表示数据是从哪个进程来, 到哪个进程去;
32位序号/32位确认号: 不一定从0开始(作用:保证确认应答;保证数据按序到达;去重)
4位TCP报头长度: 表示该TCP头部有多少个32位bit(有多少个4字节); 所以TCP报头最大长度是15 * 4 = 60 字节
6位标志位:
1. URG: 紧急指针是否有效
2. ACK: 确认号是否有效
3. PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走
4. RST: 对方要求重新建立连接; 我们把携带RST标识的称为复位报文段
5. SYN: 请求建立连接; 我们把携带SYN标识的称为同步报文段
6. FIN: 通知对方, 本端要关闭了, 我们称携带FIN标识的为结束报文段
16位窗口大小: 接收缓冲区剩余的空间大小
16位校验和: 发送端填充, CRC校验. 接收端校验不通过, 则认为数据有问题. 此处的检验和不光包含TCP 首部, 也包含TCP数据部分.
16位紧急指针: 标识哪部分数据是紧急数据;
UDP 的组成
UDP数据报最大长度64K(包含UDP首部),如果数据长度超过64K就需要在应用层手动分包,UDP无法保证包序,需要在应用层进行编号。
3.TCP三次握手、四次挥手、为什么三次握手?四次挥手?,三次挥手行不行,连接后客户端出现故障怎么办?
https://blog.csdn.net/kyang_823/article/details/79496259
为什么建立连接是三次握手,关闭连接确是四次挥手呢?
建立连接的时候, 服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。
关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送,从而导致多了一次。
如果已经建立了连接,但是客户端突然出现故障了怎么办?
TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
4.TCP如何保证可靠,拥塞控制过程?
https://blog.csdn.net/u010843421/article/details/82026427
5.TCP粘包、拆包出现原因场景及如何解决?
6.CLOSE-WAIT 和 TIME-WAIT ?
LISTEN - 侦听来自远方TCP端口的连接请求;
SYN-SENT -在发送连接请求后等待匹配的连接请求;
SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认;
ESTABLISHED- 代表一个打开的连接,数据可以传送给用户;
FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;
FIN-WAIT-2 - 从远程TCP等待连接中断请求;
CLOSE-WAIT - 等待从本地用户发来的连接中断请求;
CLOSING -等待远程TCP对连接中断的确认;
LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认;
TIME-WAIT -等待足够的时间以确保远程TCP接收到连接中断请求的确认;
CLOSED - 没有任何连接状态;
7. TIME-WAIT连接过多什么原因?解决?
https://blog.csdn.net/u013616945/article/details/77510925
8.浏览器输入URL并回车的过程发生了什么?DNS查询过程?DNS什么时候用TCP,什么时候用UDP?CDN知道吗?
https://blog.csdn.net/zwq68/article/details/97681986?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-1&spm=1001.2101.3001.4242
9、HTTP1.0、1.1、2.0区别?
10.HTTP报文格式?常用字段?强缓存和协商缓存?
11.HTTP和HTTPS的区别?HTTPS的建立过程?对称加密和非u对称加密?
https://blog.csdn.net/wangjun5159/article/details/51510594