计算机网络相关面经整理

计算机网络

1.为什么使用对称密钥而不是使用非对称密钥?
(1)非对称密钥在整个交互流程实际是由CA进行控制的,在这个过程中我们完全是使用认证中心的私钥和公钥进行加密和解密,如果这个一旦被破解了,那么我们的对话将没有安全可言;但是对称密钥实际是一个会话密钥,短期的,只有在当前会话内有效,那么即使出了问题也是短时间内的。
(2)非对称密钥的只能加密一些短的数据,并且比较繁琐,效率不高。
2.为什么需要有2MSL的Time_Wait的时间?
(1)首先解释一下四次挥手的过程?
-第一次:客户端先发送一个FIN以及一个SEQ表示自己要关闭了,并进入一个FIN_WATI1的状态。
-第二次:服务端接受到之后,发送一个ACK=客户端的SEQ+1,并且发送自己的一个SEQ,之后进入CLOSE_WAIT状态。
-第三次:服务端发送FIN和ACK以及SEQ。
-第四次:客户端发送ACK以及SEQ并且进入Time_Wait状态。
(2)这样的四个步骤缺一不可,最后的状态是保证服务器收到了自己的ACK,要是没收到的话服务器就会重新发送关闭报文,如果没有这个等待时间的话,可能新创建的连接和这个连接混乱,数据错乱。
(3)这个2MSL(报文段的最大生存时间),就是保证包一定接受了,最坏的状况:第四次ACK包的最大生存史长MSL+服务端重传的FIN包的最大生存时长。
3.邮件相关的协议?
(1)SMTP:简单邮件传输协议,就是邮件发送的协议。
(2)POP3/IMAP:邮件接受的协议。
4.第二次握手结束后为什么还需要发送一个SYN?
第二次握手传回ACK只能代表被动开启TCP的机器确认接收到了主动开启的机器的消息,但是同时还需要开启一条由服务器到客户端的传输链路才可以。
5.TCP是如何保证可靠传输的?
(1)TCP为每一个包进行编号(保证有序)。
(2)ACK确认机制,保证所有的包都确认收货(序列号和应答机制)。
(3)数据校验和,检测数据有没有变化,有的话就不要了。
(4)流量控制,也就是滑动窗口。
(5)超时重传,TCP发出一个段之后,就启动定时器,之后如果不能及时收到确认就重新发送。
(6)拥塞控制:为了防止过多的数据注入到网络中,使网络的负载过大,就采用了拥塞控制。
-慢开始:先探测一下窗口的大小,一般取1,之后每次进行加倍,看看是不是发生拥塞了,一旦发生了拥塞,就将阈值设定为发生拥塞的值的一半,并重新将其设置为1。当大小到达阈值的时候,就不再指数递增了,转而线性增长,
-拥塞避免:当我们丢包到达了3个的时候,就继续将窗口大小减半,并且初始值设置为1MSS或者是窗口的值+3,根据版本不同确定。
6.URL和URI的区别?
(1)URI是统一资源标志符,可以表示一个资源;URL是统一资源定位符,可以提供该资源的路径,是一种具体的URI。
(2)URI是可以认为是身份证,标识一个人;但是URL是一个地址,能直接找到这个人。
7.一个URL从输入到展示到浏览器上面的过程?
(1)解析,将URL分成协议(http/https/ftp)ip+端口号和资源路径三和部分
(2)通过DNS解析获取网址对应的IP地址。
(3)拿到IP地址之后,浏览器以一个随机的端口和服务器之间建立一个TCP连接。
(4)浏览器想web服务器发送http请求。
(5)服务器收到请求并响应。
(6)浏览器收到相应并进行渲染。
8.HTTP状态码以及场景?
(1)200:表示请求正常响应,处理完成。
(2)206:表示客户端进行了范围请求,就类似于一个大文件,拆分了多个小文件,进行部分返回。
(3)301:永久重定向,请求的资源被分配了新的URL。
(4)302:临时重定向,请求的资源被临时分配了新的URL,可能之后还会分配别的临时URL。
(5)304:表示当前资源本地有缓存,加快返回速率,发送请求之前看到缓存文件中有LastModify,那么请求中就会包含if modify since,服务器接受之后就会判断需要返回什么,可以只返回一个304.
原理:Etag,对应的是资源的可以认为是一个Hash值,服务端返回之后会返回一个Etag,下一次请求的时候会表示自己有一个Etag为的报文,服务端收到之后就会看看和自己手里的ETag一样不一样,一样的话304,不一样就重新返回新的。
(6)400:表示请求报文中存在语法错误。
(7)401:表示未经许可,一般是权限方面的问题,就是header Authorization里面没有放东西导致的,一般称为没有经过HTTP验证。
(8)403:服务器拒绝本次访问,理解请求,但是拒绝执行,并且暗示客户端不要再弄了。
(9)404:表示服务器找不到对应的资源。
(10)405:表示请求的方式和服务器需要的方式不相同。
(11)500:最简单的,服务端发生了错误。
(12)501:尚未实施,服务器不具有完成这个请求的功能。
(13)502:服务器作为网关或者代理,从上游服务器收到无效响应。
(14)503:服务器目前无法使用,停机或者维护。
(15)504:服务器作为网关或者代理没有及时从上游接受到结果。
9.HTTP1.0和HTTP1.1的区别?
(1)长连接,1.1是默认开启长连接的,但是1.0需要手动开启,长连接减少了频繁创建和销毁连接的过程。
(2)节约带宽,1.1允许去发送只有header的请求,之后服务端返回100,这样如果是401的话,就可以不用发送body了。
(3)Host域,1.0中默认一台机器只有一个ip,但是现在的状况是一台机器可以挂载多个虚拟机,导致了需要指定与那一台机器互通。1.1不带host域就会报错。
(4)提供更多的缓存。
10.HTTP1.1和HTTP2.0的区别?
(1)多路复用,同一个连接并发处理多个请求。
(2)头部数据压缩,传输速度更快。
(3)服务器推送,server push;比如我们请求一个页面html,同时这个html需要用到很多的js,css等资源,正常的流程是我们请求到了html之后再去请求这些东西,很慢。2.0就允许我们在返回html之前检查资源,把引用到的css和js等相关资源一起推送到客户即可。
11.传输控制协议TCP?
(1)在IP层,数据包非常容易丢失,被复制或者以错误的次序排序,TCP用于为客户提供可靠的链路。
(2)TCP将排序混乱的数据包进行重排,将损坏的数据包也可以重新传送。
13.用户数据报文协议UDP?
(1)与TCP处于同一层次
(2)没有纠错和重传机制
(3)没有对数据包进行丢包,复制和排序检测
(4)用于交换信息的开销比TCP小得多
14.如何实现UDP的可靠传输?
(1)增加超时重传机制。
(2)增加序列号和ack确认机制。
(3)添加发送和接受缓冲区,主要是用户超时重传。
15.ping是如何实现的,有哪些协议?
(1)首先是DNS协议,解析域名到ip地址(DNS传输层协议用的是UDP)
(2)ARP地址解析协议,由ip地址解析出MAC地址方便再链路层传输
(3)ICMP协议,发送一份ICMP回显请求给目标主机,等待其回显(ICMP测试路由器间网络是否可达)
16.短网址到长网址的映射过程?
(1)系统将长网址根据短网址算法得到短网址,之后将短网址返回给用户
(2)用户请求短网址
(3)客户收到请求,返回映射的长网址
(4)客户端重定向。
17.如何设计短网址?
(1)首先建立一个码表,最简单的就是A-Z,a-z,0-9共62,就可以创建一个62进制的码表。六个字符长度足够用了。
(2)生成短网址之前首先要将长网址去表中查询看看存在不存在,不存在就插入之后取出id,将id转化成我们的进制。这个进制就是我们的关键词。
(3)来了短网址之后,我们就把这个关键字按照62进制转换回去,就是我们的id,再按照id找出我们的网址就完事了。
18.HTTP请求报文里面都有什么?
(1)请求头里面
请求方法字段;get,post,delete,put
URL字段;
HTTP协议版本字段;
(2)请求头部
User-agent:产生请求得浏览器类型;
Accept:客户端可识别的内容类型列表;
Host:请求的主机名;
(3)请求数据
19.HTTP响应报文里面都有啥?
(1)协议版本
(2)状态码
(3)内容
20.TCP为什么是三次握手和四次挥手?
(1)主要为了防止已失效的连接请求报文段突然又传送到了B,因而产生错误.如A发出连接请求,但因连接请求报文丢失而未收到确认,于是A再重传一次连接请求。后来收到了确认,建立了连接。数据传输完毕后,就释放了连接,A工发出了两个连接请求报文段,其中第一个丢失,第二个到达了B,但是第一个丢失的报文段只是在某些网络结点长时间滞留了,延误到连接释放以后的某个时间才到达B,此时B误认为A又发出一次新的连接请求,于是就向A发出确认报文段,同意建立连接,不采用三次握手,只要B发出确认,就建立新的连接了,此时A不理睬B的确认且不发送数据,则B一致等待A发送数据,浪费资源。
(2)由于TCP是双向传输的,所以当双方都想结束连接的时候,都需要请求确认,一共四次。A如果想结束连接,则发送FIN报文通知,但是只是表示A不在向B发送数据了,但是B有可能还要向A发送数据,所以这个时候不能马上关闭socket连接。所以需要双方都请求关闭并且都确认了之后才能关闭。
21.滑动窗口指的是什么?
实现了TCP流量控制,双工的协议,TCP双方各自维护一个发送窗口和一个接受窗口。窗口的大小取决于应用,系统和硬件的限制。
发送方发送的数据有四个状态:
(1)已发送,已收到ACK
(2)已发送,未收到ACK
(3)未发送,但是允许发送
(4)未发送,但是不允许发送
其中2,3代表的是滑动窗口。
接收方的数据分为三类:
(1)已接受
(2)未接受但是准备接受
(3)未接受倒是不准备接受
其中2代表的是滑动窗口。
(1)发送窗口只有接收到发送窗口内字节的ACK确认,才能移动发送窗口的左边界。
(2)接收窗口只有前面所有字段都确认的情况下才会移动左边界,前面字节还没接受到但是后面还有字节的话,窗口不移动,并不对后序字节进行确认。
(后退N帧协议,选择重传协议,停止等待协议)
22.计算机网络的七层网络模型?
(1)物理层:主要是一些IEEE802.2这种协议。传输的为比特流,定义接口标准,传输速度标准等。
(2)数据链路层:PPP,第二层转发L2F,L2TP第二层隧道协议,ARP。传输的为帧,定义了如何让格式化数据进行传输。
(3)网络层:AH认证头协议,ESP封装安全载荷,ICMP,IP,OSPF,RIP。传输的为数据报,为机器进行路径选择,源ip地址和目的ip地址。
(4)传输层:TCP/UDP。传输的是用户数据报/报文段,定义了数据传输协议和端口号。
(5)会话层:SSL安全套接字协议。通过运输层发起会话或者接受会话请求。
(6)表示层:不太清楚。字符
(7)应用层:HTTP,HTTPS,FTP,TFTP,TELNET,POP3,IMAP,SMTP。传输报文。
23.Cookie和Session的区别?
(1)存储位置不同,一个客户端,一个服务器。
(2)存储容量不同,单个cookie保存的数据小,一个站点保存最多20个cookie,session没有上限。
(3)存储方式不同,cookie只能保存字符串,session都可以。
(4)隐私方式不同,cookie对客户端可见,session对客户端透明。
(5)存储时间不同,cookie可以长期保存,session依赖于JSESSIONID的cookie,过期时间是-1,关闭窗口就失效。
(6)跨域支持不同,cookie支持,session不支持。
24.已经建立的TCP连接突然发生故障会怎么办?
(1)会触发一个保活机制,他有一个计数器,每次收到客户端请求都会重置这个计数器。
(2)当2小时左右还是没有发送来消息的时候,就直接会每75s发送一次探测报文,10次没有恢复就把这个挂掉。
25.什么是DDOS,XSS,DNS污染?
(1)DDOS:分布式拒绝服务攻击。常采用得方式是SYN-FLOOD攻击,不断发送第一次握手请求,进入半连接得状态,之后占用资源,这样后续得正常连接就链接不上了。
(2)XSS:跨站脚本攻击,向JS中插入较笨,之后达到恶意攻击得目的。
(3)DNS污染:由于刻意或者无意的制造域名服务器分组,将域名指向错误的IP地址,解决污染的方法就是选择合适的域名服务器。
26.如何防止网页上的爬取?
(1)限制user-agent,版本信息CPU等等,但是现在爬虫可以设置成假的。
(2)限制ip,由于爬虫访问频率高。
(3)添加验证码。
(4)限制登录之后才可以访问。
27.nginx中的负载均衡?
(1)轮循:轮流承接服务。
(2)IpHash/urlHash
(3)加权轮循。
(4)服务器响应时间分配。
28.socket的基本步骤?
(1)创建socket。
(2)打开连接socket的输入流
(3)按照一定的协议进行sockey的读或者写。
(4)关闭打开的输入流
(5)关闭socket。
29.HTTP请求报文和响应报文?
–HTTP请求报文?
(1)请求行:方法(put,get等),请求地址,协议版本。
(2)请求头:发出请求的浏览器类型;希望对方接受的报文类型;自己实际发出的报文类型;请求的主机名。
(3)请求数据内容了(Post采用,get没有)
–HTTP响应报文?
(1)状态行:协议版本;状态码;状态短语。
(2)消息报头:时间,类型,长度。
(3)响应内容。
30.HTTP请求如何知道传输完毕了?
(1)对于没有启用keepalive的情况,只要服务端将数据返回完成了,就相当于链接断开了,这个时候客户端读取到的东西会有一个返回结果-1,就表示结束了。
(2)启用了keepalive就表示是一个长连接,我们需要判断。
-静态资源的话,服务器可以直接判定长度,我们只需要关心content-length就完事了。
-动态资源的话,服务器可能也不清楚长度大概多少,那么就使用Transfer-Encoding,就在响应头结束之后标记第一段流的长度,读取之后还有就标记第二段,知道读取到了特定的一串信息就表示结束了。
31.CA产生和校验过程?
(1)首先服务端会通过RA向认证中心CA申请注册证书。
(2)证书中包括公钥,IP以及一个杂凑算法,证书过期时间等关键信息,之后用这个杂凑算法将其加密之后一起发送给客户端。
(3)客户端首先使用公钥得到证书,看看里面的东西包括过期时间什么的看看对不对的上。
(4)之后进行验签,实际就是使用杂凑算法对数据进行加密看看和数字签名能不能对的上。
(5)对的上就验签成功,之后生成一个会话密钥,使用服务器发来的公钥进行加密,发送给服务器。
(6)服务器接受之后用私钥解密,就用这个东西和我们通信就可以了。
32.TCP的keepAlive和HTTP的keepAlive有什么区别?
(1)TCP的keepAlive是保证连接过程中某一方掉线另一方迅速感知,实际就是定时发送心跳包,如果一直没有回应,就gg。
(2)HTTP的keep-alive是复用HTTP链接。
33.TCP和IP的分片?
(1)IP分片主要是在网络层的MTU,但是TCP的分片是在传输层的MSS。
(2)IP分片在网络层分片,在网络层重组;TCP在传输层分片,在传输层重组。
34.TCP报文组成?
(1)源端口号,目的端口号各占两个字节;
(2)序号和确认号各占四个字节;
(3)偏移量(TCP数据报后多少个字节是数据部分)
(4)六个标志位
-URG:紧急标志位1表示可以插队,优先发
-ACK:确认号是否有效
-PSH:优先缓存
-RST:TCP出现错误,要求重新连接
-SYN:请求建立一个链接;
-FIN:请求关闭一个链接;
(5)窗口
(6)校验和:就是辅助循环冗余校验的
(7)紧急指针:数字代表多少个字节需要紧急处理
35.IP数据包的组成?
(1)版本号/头长度/服务类型/总长度(第一行)
(2)标识字段(帮助数据报分片以及重组的)
(3)标志:DF1为分片,DF0为部分片;MF1为后面有很多片,MF0为此是最后一片。
(4)偏移量:分片重组的时候的偏移量;
(5)生存时间/上层协议标识/头部校验和
(6)源IP地址/目的IP地址
36.什么是JSESSIONID?
(1)JSESSIONID就是唯一标识一台服务器的id,当你这个请求来了,他是需要确定这个请求是你发送来的,每一个会话对应自己唯一的jsessionid。
(2)在你的这个会话里面再去看你究竟有没有登录之类的。
37.POST请求和Put请求的区别?
(1)首先Post请求不是幂等的,Put请求是幂等的,当我们进行创建的时候,POST实际上是创建十次,但是PUT是创建一次,更新九次。
(2)405表示的就是请求对不上,要post给的get
38.差错校验方法在哪一层,有哪些方法?
(1)在数据链路层。
(2)循环冗余/奇偶校验/海明检验
39.重定向和转发的区别?
(1)转发是服务器的行为,客户端请求到了,服务器内部将请求转发到另一台机器之后将结果返回给用户;重定向是浏览器行为,将重定向的地址返回给用户,并302,用户收到之后,发现状态码,就重新发送请求。
(2)转发客户端发一次请求,重定向发两次。
(3)重定向请求资源的路径会发生变化,转发不会。
40.四次挥手?
(1)首先主动关闭的一方会发送请求关闭的报文。
(2)被动关闭的一方接受到报文之后,会恢复ack确认,之后自己就进入close_wait。
(3)被动关闭的一方数据传送完了,就可以发送请求关闭了。
(4)主动关闭的一方接受到请求关闭,就返回一个ack报文,之后自己进入一个time_wait状态。
(5)等待2MSL(一个发送和一个恢复)之后还是没有接受到消息,那么就直接关闭连接。
41.SSL证书的验证过程?
(1)首先服务端会有自己的公钥和私钥,之后将自己的公钥,域名,申请信息等等发送给注册技工RA,之后申请注册证书。
(2)RA将信息封装好了会将整体发送给认证机构CA。
(3)CA验证信息的真实性,如果都通过了,就将发布日期,申请者的公钥,CA机构信息,有效日期等信息作为明文,同时选择一个单项杂凑算法作为摘要算法对其进行加密,将这些东西一起用CA的私钥加密后作为证书发给服务器。
(4)证书的申请过程就完成了。
(5)这时候客户端有请求到来,服务器就将这个数字证书发送给用户,用户用CA的公钥将其打开,之后检查过期与否等相关信息。之后用里面的明文的杂凑算法对明文信息加密,要是能和数字签名对的上,说明没问题。
(6)没问题了就生成一个对称密钥,用对称密钥对交换信息加密,之后用服务器的公钥对对称密钥加密,一起发过去。
(7)服务器收到之后就可以解密并双方使用私钥进行沟通。
42.SSL认证失败的原因?
(1)证书过期了。
(2)申请的证书的类型和域名不匹配。
(3)发行数字证书的机构不受信任。
43.如何重置密码?
(1)首先可以设计一张表,关键字就是用户id,token,过期时间这些。
(2)用户请求修改密码,这个时候会让其验证邮箱信息。
(3)邮箱信息对上了,就根据时间,用户名等信息生成一个单向的token加入到url里面发送给用户。
(4)用户接收到了之后点击连接进去,对一下token是不是一样的,是的话就可以修改,不是的话就不行,过期了也不行。
44.cookie禁用了,还能使用session吗?
(1)可以放在url里面,有一个encodingurl方法能把JSESSIONID带上。
(2)要是还是要存很多东西,那么就需要使用localstorge了。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值