互联网公司最常见的面试题总结(计算机网络)
时间:2023-06-17 10:12:02 | 来源:网站运营
时间:2023-06-17 10:12:02 来源:网站运营
互联网公司最常见的面试题总结(计算机网络):
写在前面
本文总结的面试题仅仅是自己当时准备实习以及秋招时的一些总结,希望能给大家一些帮助~
可以使用左侧的目录进行跳转哦~
如有问题,欢迎指出~
如果你也是一名热爱编程的程序猿or程序媛,就关注我吧~
我将会分享身边不同专业、不同工作岗位的小伙伴们的相关专业选择以及求职经验,希望能给你人生中一些重要的决定,一些启发~
(微信号:我是一名程序媛,b站号:我是一名程序媛)
概述
OSI七层协议模型及其协议?
法律上的国际标准
1)物理层:在物理介质上进行比特流的传输,协议:IEEE802协议簇
2)数据链路层:将上层数据封装成帧,基于MAC地址进行传输,协议:CSMA/CD(载波监听多点接入/碰撞检测)协议、PPP点对点协议、ARP协议、RARP协议
3)网络层:根据IP地址确定数据包的转发地址,协议:IP协议、ICMP协议
4)传输层:建立端到端的通信,协议:TCP、UDP协议
5)会话层:不同用户之间建立以及管理会话,协议:RPL协议
6)表示层:信息的语法语义及其关联,协议:GIF、JPEG协议
7)应用层:应用进程之间的通信与交互,协议:HTTP、DNS、FTP协议
TCP/IP的四层网络模型?
事实上的国际标准
1)网络接口层
2)网际层
3)传输层
4)应用层
其中网络接口层没有规定什么具体的内容,其目的是为了互连世界上不同的网络接口
各个层的网络设备?
1)物理层:集线器、中继器
2)数据链路层:交换机、网桥
3)网络层:路由器
计算机网络体系结构为什么要进行分层?
1)可以将庞大复杂的问题,转化为若干较小的局部问题
2)每一层解决不同的问题,方便开发
- 物理层:解决使用何种信号来传输比特的问题
- 数据链路层:解决分组在一个网络(或一段链路)上传输的问题
- 网络层:解决分组在多个网络上传输(路由)的问题
- 运输层:解决进程之间基于网络的通信问题
- 应用层:解决通过应用进程的交互来实现特定网络应用的问题
分层设计的好处是每个层次只负责自己的那部分事情,一层套一层,自己那层的任务完成了就交给下一层处理,各司其职,每层都遵守自己的规则,配合起来完成网络通信的工作,不至于大家都搅在一起,职责不明,看起来混乱。
数据交换的三种方式?
1)电路交换
- 建立连接:分配通信资源
- 通话:一直占用通信资源
- 释放连接:归还通信资源
线路的利用率相对而言比较低
2)分组交换
将较长的报文划分为更小的等长数据段,并在数据段前面加上一些必要的控制信息,就构成了一个个的分组,也叫做包,
- 发送方:构造分组、发送分组
- 路由器:缓存分组、转发分组
- 接收方:接收分组、还原报文
3)报文交换
每次发送完整的报文,需要有较大的缓存。
三种不同的数据交换方式可参考:
计算机网络微课堂(有字幕无背景音乐版)(陆续更新中......)_哔哩哔哩_bilibili
物理层
物理层的主要功能?
解决在各种传输媒体上传输比特0和1的问题,进而为数据链路层提供透明传输比特流的服务;
物理层协议的主要任务:
1)机械特性
2)电气特性
3)功能特性
4)过程特性
物理层的传输媒体?
传输媒体不属于计算机网络体系结构中的任何一层。可分为
1)导引型传输媒体
2)非导引型传输媒体
数据链路层
数据链路层的主要功能?
主要解决数据在链路上以帧为单位传输和处理数据。更加关注的是如何在局域网内传输数据。
数据链路层的三个问题?
1)封装成帧
2)差错检测
3)可靠传输
封装成帧?
给上层交付的协议数据单元添加帧头和帧尾使之成为帧。
帧头和帧尾的作用之一就是帧定界,进而可以从物理层中的比特流中提取出帧,但是不是所有的帧头和帧尾都有帧定界。
透明传输?
数据链路层对上层交付的传输数据没有任何限制,什么数据都可以进行传输,你感受不到数据链路层的存在。
- 面向字节的数据链路使用字节填充(字符填充)的方法实现透明传输
- 面向比特流的数据链路使用比特填充的方法实现透明传输
透明传输其实就是指无论是什么报文都可以传输,非透明传输就是指某些特殊字符不能传输,在计算机网络中,透明传输在数据链路层提到过,在数据链路层将网络层协议封装成帧时,会在首部和尾部分别添加SOH以及EOT这两个特殊字符,接收方是根据这两个字符来确定帧首和帧尾的,如果上层协议发送过来的数据(即链路层的数据部分)包含EOT,那么接收方在解析这个帧的时候就会误以为数据已经结束,所以,如果链路层对这种情况没有特殊处理,那么就可以理解链路层为非透明传输(因为无法传输EOT这个字符),但是数据链路层通过对这个字符添加转移符(如果网络层数据中还存在转移符,就再添加一个转移符)的办法来使数据部分可以传输EOT字符,就实现了透明传输。
差错检测?
比特在传输的过程中可能会出现差错,1可能会变成0,0可能变成1,这叫做比特差错。
可以使用差错检测码来检测数据在传输过程中是否产生了比特差错。
- 奇偶校验:若有奇数个位发生误码,可以检查出误码,反之则无法检测出,漏检率比较高
- 循环冗余校验CRC:漏检率比较低
检测码只能检测是否出现了差错,但无法定位错误,即无法纠正错误。
可靠传输?
数据链路层通常使用差错检测技术检测帧在传输过程中是否产生了误码。此时根据数据链路层向上层提供的服务类型决定处理的方式:
1)不可靠传输服务:仅仅丢弃有误码的帧。
2)可靠传输服务:想办法实现发送端发送什么,接收端就收到什么
可靠传输的实现方式?
1)停止等待协议SW
确认和应答、超时重传
发送方分组编号来避免分组重复,
接收方分组编号来避免发送方收到的确认分组重复
2)回退N帧协议GBN
接收窗口大小为1,一个数据分组的误码会导致其后续多个数据分组不能被接收方按序接收而丢弃。
3)选择重传协议SR
接收窗口大小大于1,接收方先收下失序到达但无误码并且序号落在接收窗口内的那些数据分组。
数据链路层可靠吗?
数据链路层协议只是针对网络内部的数据链路如何通信,只能保证某个网络或某段链路可靠,对于互联各式网络的互联网来说,数据链路层肯定是不可靠的。
数据链路层可以提供可靠传输,为什么还说UDP是不可靠的?
数据链路层可以实现无差错的数据帧的交付,但是并不一定一定要实现,这个实现是需要有代价的,比如HDLC协议等等,HDLC采用CRC校验,并且对所有的帧进行编号,通过序和确认机制,可以防止漏发和重发。事实上,HDLC是互联网初期的时候较常使用的数据链路层的协议,因为那个时候数据链路层的传输不是非常可靠。
现在使用的大部分是PPP协议,ppp协议只提供差错检测但不提供纠错,他同样使用的也是CRC校验,只能够保证无差错接收,但是由于不适用序列号和确认机制,所以无法检测重发和漏发。
如果对于所有的数据帧都使用可靠的数据链路层协议来保证数据链路层的可靠传输的话,那么无疑会极大地增加网络的负担。事实上,网络中许多的数据并不一定都需要保证可靠传输,因此随着网络的发展,数据链路层将保证数据可靠传输交由上层的传输层来控制(UDP和TCP等等)。而数据链路层大部分使用不一定可靠的PPP协议等等。
最最重要的是:传输层是端到端的,数据链路层是点到点的,想要保证端到端的可靠传输就必须在传输层做文章,仅仅在保证数据链路层各个点之间的可靠传输也不能保证上层数据的可靠性,依然会出现丢包等情况的出现。即数据链路层只能保证在某个链路上传输是可靠的
PPP协议?
PPP协议是数据链路层的点对点的协议。
接收方每收到一个PPP帧,就进行CRC检验,若检验正确,则收下,反之则丢弃。使用PPP的数据链路层向上提供面向连接的不可靠的传输服务。
CSMA/CD?
多点接入 载波监听 碰撞检测
MAC地址?
MAC地址也叫做物理地址或者硬件地址,其属于数据链路层。
严格来说,MAC地址是对网络上各接口的唯一标识,而不是各设备的唯一标识。
IP地址?
IP地址是因特网上的主机和路由器所使用的地址,用于标识两部分信息:
- 网络编号:标识因特网上数以百万计的网络
- 主机编号:标识同意网络上不同主机
如果只是一个单独的网络,不接入因特网,可以只用MAC地址
如果主机所在的网络需要接入因特网,则IP地址和MAC地址均需要使用
数据包转发过程中源IP地址和目的IP地址保持不变;
数据包转发过程中源MAC地址和目的MAC地址逐个链路(或逐个网络)改变。
ARP地址解析协议?
ARP协议的目的是将IP地址转化为对应的MAC地址,且ARP协议只能在一个链路或一个网络上使用,不能跨网络使用
1)查看主机的ARP高速缓存表
2)若未找到,则以广播的形式发送ARP请求报文,其格式为我的IP为,我的MAC为,我想知道IP为xxx的MAC地址
3)收到后先将其保存在自己的ARP高速缓存表中,同时给其发送ARP响应报文,其为单播帧
4)收到后保存至自己的ARP高速缓存表中
网络层
网络层的主要功能?
网络层的主要任务是实现网络的互连,进而实现数据包在各网络之间的传输。
广播数据报是隔离路由器的,即路由器收到后并不会进行转发。
网络层的相关协议?
1)IP协议
2)ARP协议
3)ICMP协议:主机或者路由器使用其来发送差错报告报文和询问报文。
4)IGMP协议
网络层的三个问题?
1)向上提供何种服务
- 面向连接的虚电路服务:建立虚电路;发送分组;释放虚电路
- 无连接的数据报服务:尽最大努力交付
2)网络层的寻址问题
3)路由选择问题
路由选择协议?
1)内部网关协议IGP
- 在一个自治系统内部使用的路由选择协议
- 此类协议用的最多,如RIP和OSPF协议
2)外部网关协议EGP
OSPF算法?
1)“开放”表明其不是受某一家厂商控制,而是公开发表的
2)“最短路径优先”是因为使用了Dijkstra提出的最短路径算法
IP协议的特点?
IP协议为上层协议提供无状态、无连接、不可靠的服务。
IP包头部结构?
这里的报头长度为IP报文首部的长度,总长度为头部和数据加起来的长度。
传输层
传输层的主要功能?
实现应用进程之间的通信,也叫做端到端之间的通信。
TCP和UDP的区别?
TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议)是传输层中两个重要的协议。
1)TCP是面向连接的,UDP是无连接的
2)TCP是可靠的传输,通过消息确认以及超时重传等机制保证数据传输的可靠性,UDP是尽最大努力交付,是不可靠的
3)TCP是面向字节流的,会将大块数据分割成以报文为单位的数据包进行传输,适合发送数据比较多的场景,UDP是面向应用报文的,一个数据包会发送全部内容,适合数据量少的
4)TCP建立连接时需要三次握手,断开连接时需要四次挥手,并且在传输过程中需要消息确认以及重传机制来确保可靠性,因而比较慢,UDP比较快,效率高
5)UDP无拥塞控制,网络出现拥塞时不会对数据传输产生影响,而TCP不然
6)TCP是一对一的,UDP支持一对一、一对多、多对一、多对多的场景
TCP和UDP的适用场景?
1)TCP
- HTTP超文本传输协议
- FTP文件传输协议
- SSH远程登录协议
2)UDP
- DNS域名解析协议
- TFTP简单文件传输协议
- SNMP简单网络管理协议
TCP包头部结构?
TCP报文长度是可变的,因为其有可选项&填充项。
其中报头长度为整个TCP报文头部的长度,最小是20字节,即可选项&填充项为空,最长为60字节。
当确认号增加到最后一个后,下一个确认号就又回到0。
UDP包头部结构?
TCP报文长度是固定的。
长度固定,所以没有报文长度这个字段,只有报文总长度的字段。
其中校验和字段只能检测出是否存在误码,但无法进行纠正或其它处理。
TCP的首部中没有长度字段,那怎么知道报文该到哪里结束?
TCP的报文封装在IP内部,在IP头部中,有两个字段,分别是IP头部长和IP总长,因此,总长减去头部长就可以得到数据部分的长度,也就是传输层封装的数据的长度,TCP的首部中包含有头部的长度,因此可以得到TCP报文的数据的部分的长度。
TCP三次握手的过程?
TCP是面向连接的,安全可靠的传输层协议,三次握手是为了建立一个安全可靠的连接。
1)客户端向服务器发起连接请求,其会发送一个请求连接的报文,将SYN设置为1(表明是请求建立连接),同时发送一个sequence number
2)服务器收到后向客户端发送消息确认报文,ACK置为1,SYN为1,同时发送一个ack number以及sequence number,此时客户端知道我能够给服务器发送消息并且服务器也可以收到
3)客户端给服务器做出回应,ACK置为1,同时发送一个ack number,此时服务器知道我能够给客户端发送消息并且客户端也可以收到
TCP为什么是三次握手?
1)首先描述一下三次握手的过程,其确保通信双方都能发送且对方能够收到该数据
2)为了实现可靠的传输,TCP协议的通信双方都必须维护一个序列号,用以标识发送出去的数据中哪些是对方已经接收到的。三次握手是通信双方相互告知序列起始值,并确认对方收到该值的过程。
3)两次不够,四次则过多。
4)如果是两次的话,可能会导致已经失效的TCP连接请求报文段突然又传送到了TCP服务器,因而导致错误。
TCP四次挥手的过程?
1)客户端向服务器发送断开连接请求,在请求报文中将FIN置为1
2)服务器收到后知道客户端想和我断开连接,但此时可能还没有做好准备,服务器可能需要继续发送还未发完的数据,此时服务器先进行消息确认,确认报文中ACK置为1,先告诉客户端我知道了你想和我断开连接
3)服务器等到数据发送完成后,则发送一个断开连接报文,将FIN置为1
4)客户端收到后给服务器发送一个消息确认报文,将ACK置为1
TCP为什么是四次挥手?
1)四次挥手的目的是终止数据传输,必须等到双方都没有数据进行传输时才会断开
2)三次挥手的话,服务器收到断开连接报文后需同时回复ACK与FIN消息,但是此时可能数据还没有传输完
半关闭、半连接、半打开
1)半关闭:TCP四次挥手过程中,A向B发送断开连接请求报文,B收到并进行回复后没有发送FIN给A,此时A处于半关闭状态,它可以接收B发来的数据,但是不能给B发送数据
2)半连接:TCP三次握手过程中,A向B发送请求连接报文,B收到并进行回复后,但是A不进行第三次握手,这就是半连接,如果多次对B采取这样的措施会导致B分配的资源一直这么耗着,直至资源耗尽,无法处理正常的连接请求
3)半打开:连接中一方异常关闭且另外一方并不知情,不通信是不会发现的,通信时A向B发送数据,B收到后发现连接并不存在,则发送RST(reset)包告知并重新建立连接
2MSL是什么,为什么需要它?
MSL:报文最大生存时间,即发送报文直至对方接收到的最长时间
2MSL:服务器在一定时间内未收到客户端的应答报文则进行重传,即客户端(请求断开连接的一方)在第四次挥手的时候不会立刻进入closed状态,而是进入time-wait状态
1)客户端发送的回复报文如果丢失,服务器在2MSL内未收到则会重新发送断开连接请求报文,如果直接closed,客户端则无法收到服务器新发送的断开连接请求报文,服务器无法关闭,造成半关闭
2)等待一段时间是为了让本连接所产生的报文均从网络上消失,下次连接不会出现旧的报文。若客户端关闭了,那么它可以建立一个与刚刚关闭的连接相似的连接(IP地址与端口号相同),新的连接可能会收到原来连接上产生的TCP报文,这显然是不正确的
什么是保活计时器?
TCP的可靠传输是如何实现的?
(1)序列号、确认应答、超时重传: 数据到达接收方,接收方需要发出一个确认应答,表示已经收到该数据段,并且确认序号会说明了它下一次需要接收的数据序列号。如果发送发迟迟未收到确认应答,那么可能是发送的数据丢失,也可能是确认应答丢失,这时发送方在等待一定时间后会进行重传。这个时间一般是2RTT(报文段往返时间)+一个偏差值
。(2)窗口控制与高速重发控制/快速重传(重复确认应答): TCP会利用窗口控制来提高传输速度,意思是在一个窗口大小内,不用一定要等到应答才能发送下一段数据,窗口大小就是无需等待确认而可以继续发送数据的最大值。如果不使用窗口控制,每一个没收到确认应答的数据都要重发。使用窗口控制,如果数据段1001-2000丢失,后面数据每次传输,确认应答都会不停地发送序号为1001的应答,表示我要接收1001开始的数据,发送端如果收到3次相同应答,就会立刻进行重发;但还有种情况有可能是数据都收到了,但是有的应答丢失了,这种情况不会进行重发,因为发送端知道,如果是数据段丢失,接收端不会放过它的,会疯狂向它提醒……
(3)拥塞控制
TCP流量控制?
流量控制是为了控制发送方发送数据的速度从而确保接收方来得及进行接收,否则的话会触发自动重传机制造成网络流量的浪费,采用滑动窗口的方法实现,接收方会通知发送方自己能够接收的数据大小,发送方会发送大小不超过这个数据量的数据,也叫做“窗口”的大小,即rwnd。
可能会产生死锁,即接收端接收窗口为0时,发送端不能继续发送数据。
此时当接收端的窗口大小不为0时,会给发送方发送一个报文进行告知,但是如果该报文丢失了,则会产生死锁,发送端等待接收端窗口不为0,接收端等待发送方发数据。
可以采用持续计时器,所接收端窗口为0,则启动持续计时器,超时发送端则发送零窗口探测报文,若接收窗口仍为0,则重新启动该持续计时器,即可打破死锁的局面。
TCP拥塞控制?
拥塞控制是为了防止过多的数据注入网络,造成网络过载。
1)慢启动:拥塞窗口(发送方动态变化的窗口cwnd)乘法增大
2)拥塞避免:当拥塞窗口和阈值相等是变为加法增大
3)快重传:使发送方尽快进行重传,而不是等超时计时器超时再重传。
当收到三个重复的ACK确认报文时则重传,而不是等待超时计时器超时。
这样可以避免某些个别的报文在传输过程中丢失,从而错误的认为是网络的拥塞导致了重传计时器超时,执行慢启动从而造成较低的效率。
4)快恢复:当满足快重传条件时,说明网络没有问题,并不执行慢开始,而是将阈值设置为原来的1/2,拥塞窗口设置为新的阈值大小,并执行拥塞避免
什么时候会发生报文的重传?
1)重传计时器超时,即在设定时间内没有收到确认报文
2)发送端收到了三个重复的ACK报文时立即重传
TCP粘包/拆包?
需要明确
1)TCP是面向字节流的,本身并没有“包”这个概念
2)只有TCP会发生粘包、拆包的问题,UDP数据是有明确的界限的,不会发生这个问题
什么是粘包问题?
发送方发送的数据到达接收方时粘成一包,从接收缓冲区来看,后一包的数据头紧跟前一包的尾
什么时候需要考虑粘包问题?
1)短连接时不会出现,长连接上一条连接会发送多条数据,需要考虑
2)发送数据无结构,不考虑顺序时只管发送接收即可,不需要考虑,发送数据有顺序则需要考虑
3)数据间没有明确的界限则需要考虑
什么情况下会发生粘包、拆包?
1)发送数据大于TCP发送缓冲区时会发生拆包
2)发送数据大于最大报文长度时,TCP在传输前进行拆包
3)发送数据小于TCP发送缓冲区大小,TCP将多次写入缓冲区的数据一次发送出去,将发生粘包
4)接收端未来得及接收缓冲区中的数据,下次请求到达时接收的是上一次未接收完的内容,将发生粘包
粘包、拆包的解决方法?
1)消息定长:约定数据包的长度
2)设置消息边界:比如说使用分隔符来进行区分,但是无法确保分隔符不会在报文中出现
3)将消息分为消息头和消息体:即在消息头中记录当前数据包的长度
HTTP与TCP的区别?
1)HTTP是应用层的协议,TCP是传输层的协议
2)HTTP建立在TCP之上,当浏览器需要从服务器上获取数据时,会发送HTTP请求,其通过TCP建立连接进而进行数据传输,结束后断开TCP连接
3)TCP建立连接需要三次握手,HTTP则是请求与响应模式
UDP如何实现可靠传输?
使用UDP的传输层无法确保数据的可靠传输,只能通过应用层实现,具体可以参照TCP,如:确认和应答、超时重传等机制
TCP和UDP可以使用相同的端口吗?
可以。TCP和UDP为传输层下的两个协议,IP数据包首部有个叫做协议的字段,指出了上层协议是TCP还是UDP协议,操作系统有能力根据接受的报文的IP字段里面的协议部分判断这个报文是什么报文,就是说,系统读数据的时候还没有读到上层报文(TCP/UDP)的时候已经知道上层是什么报文了,直接交给相关的内核进程或协议栈处理就可以了,而在同一个协议内部端口号唯一。所以可以认为操作系统是以协议、IP以及端口号来绑定端口的。
应用层
HTTP协议是什么?
HTTP是位于应用层的无状态的通信协议
HTTP状态码?
1)1xx:表示信息,即收到请求,需要请求者继续执行操作
2)2xx:表示成功,即成功接收并已经处理
3)3xx:表示重定向
4)4xx:表示客户端发生错误
5)5xx:表示服务器发生错误
200:ok,请求成功处理
204:no content,请求成功处理,但是没有内容返回,浏览器不会刷新页面,也不会导向别的页面
301:永久重定向
302:暂时重定向
404:not found,无法找到该资源
500:internal server error:服务器内部错误
HTTP请求和响应报文的格式?
请求报文:
1)请求行:请求方法+URL+协议及其版本
2)请求头(首部)
3)请求体
响应报文:
1)状态行
2)响应头(首部)
3)响应体
抓取HTTP报文?
可以借助于Wireshark工具
HTTP1.0与HTTP1.1的区别?
1.0是短连接,在一个TCP连接上只能传送一个HTTP请求和响应,1.1是长连接,在一个连接上可以传送多个HTTP请求和响应,减少了建立以及关闭连接的消耗和延迟
HTTP2.0的特性?
1)多路复用:在一个连接中可以并发多个请求与响应,而不必等到上一个接收到了再发送下一个,不会出现队头阻塞的问题
2)头部压缩:双方同时维护一张头信息表,将字段存入该表并生成索引号,每次只发送索引号即可,提高了速度
3)二进制格式:头与数据均为二进制,统称为帧,即头信息帧和数据帧,对计算机比较友好,提高数据传输的效率
4)服务器推送:服务器可以主动给客户端发送消息,如必要的附加资源,不必等到客户端请求
HTTP有哪些问题,如何解决这些问题?
1)窃听:消息是明文传输,可以进行信息加密
2)纂改:发送的内容可能会遭到篡改,可以采用校验机制
3)冒充:可能会被不法分子伪造身份,可以使用身份证书,防止别人伪造身份
如何理解数字签名?
数字签名是为了确保消息没有被篡改
1)服务器将报文hash后生成概要信息,再用私钥对其进行加密,生成“数字签名”,服务器将报文以及该签名一同发送给客户端
2)客户端收到后用公钥进行解密,得到摘要,可以正常解密说明是对方发出的
3)客户端对报文使用相同的hash函数,如果与2)中的摘要相同则表明没有被篡改
如何理解数字证书?
数字证书可以确认对方的身份
服务器将自己的公钥拿去给“证书中心”(CA),为公钥做认证,证书中心使用自己的私钥对服务器的公钥及其相关信息进行加密,得到“数字证书”
HTTPS建立连接的过程?
1)客户端向服务器发起建立连接请求
2)服务器收到后将自己的数字证书以及公钥发送给客户端
3)客户端使用“证书中心”的公钥对证书进行解密,从而确认服务器的身份
4)身份无误后客户端会创建一个随机密钥且用服务器的公钥进行加密
5)服务器使用私钥得到该随机密钥,随后双方均使用该随机密钥进行数据的加密传输
对称加密算法以及非对称加密算法?
1)对称加密算法:加密和解密使用相同的密钥
优点:计算量小,速度快,效率高
缺点:不安全,容易泄漏,为了安全,不同的会话需要使用不同的密钥,管理起来比较费劲
有:IDEA
2)非对称加密:使用公钥进行加密,私钥进行解密
优点:安全,不容易泄漏
缺点:速度慢
有:RSA
HTTP和HTTPS的区别?
1)HTTP不安全,HTTPS采用信息加密、校验机制以及证书认证的方式,因而是安全的
2)HTTP连接的建立比较简单,TCP三次握手后即可进行报文的传输,HTTPS连接的建立相对比较复杂,三次握手之后还需要SSL/TSL握手的过程才可以进行数据的传输
3)HTTP端口号是80,HTTPS是443
4)HTTPS需要向“证书中心”(CA)做认证,来保证服务器身份可信,因而成本会高一些
get和post的区别?
1)get是从服务器上获取资源,post是向服务器上提交资源
2)get是安全且幂等的,即不会更改服务器上的资源且多次请求得到的内容相同,post是不安全且不幂等的
3)get请求的参数会显示在地址栏,因而支持的数据量比较小且不安全,post请求的参数在请求体内,因而支持的数据量比较大且安全
cookie的工作机制是什么样的?
1)浏览器向服务器发送请求
2)服务器收到后会为其建立一个独特的身份标识,在响应时将该标识连同响应信息一起发送给浏览器,浏览器收到后就将其存储起来
3)浏览器再次发送请求时会将cookie连同请求信息发送给服务器
4)服务器收到后进行解析即可确认用户身份
默认情况下关闭浏览器cookie就会失效
session的工作机制是什么样的?
1)浏览器向服务器发送请求
2)服务器收到后会为其生成一个sessionid并将浏览器的信息保存起来,服务器将sessionid连同响应信息一起发送给浏览器,浏览器收到后就将其存储起来
3)浏览器再次发送请求时会将cookie连同请求信息发送给服务器
4)服务器收到后进行解析得到sessionid,根据
sessionid查找相关信息即可确认用户身份
从上面的流程中可以看出,session的使用依赖于cookie的支持,若cookie被禁用,则可以使用url重定向的方式,在每个使用sessionid的页面的链接中加入sessionid
为什么会有cookie和session?它们之间的区别是什么?
因为HTTP是无状态的,不能每次用户请求都需要重新进行登录,需要记录用户的信息
1)cookie存储在浏览器中,session存储在服务器上
2)cookie不安全,session安全
3)cookie可以减轻服务器负担,session会加重服务器负担
如何查看浏览器的cookie?
点击F12打开开发者模式,在Console中输入document.cookie即可
浏览器输入URL到显示页面发生了什么?
1)应用层先进行DNS解析,根据URL得到目标主机的ip地址
2)应用层将请求的信息装入HTTP报文,发送HTTP请求
3)传输层收到后将其分割成以报文段为单位的数据包进行管理,通过TCP三次握手与目标端口建立安全的通信
4)网络层收到后根据ip地址通过ARP协议得到目标主机的mac地址
5)数据链路层进行数据的传输
6)到达服务器后会从下到上层层解包,直至应用层
7)服务器收到请求后,查找相应的资源并作出响应
8)浏览器显示内容
DNS解析的过程?
DNS的目的是将域名转化为ip地址,使得用户能够更加方便的访问互联网,只需要记住域名即可
1)浏览器缓存
2)本机的hosts文件
3)本地域名服务器:如果本地域名服务器缓存中有,则直接返回结果,否则使用迭代查询的方法依次询问根域名服务器、顶级域名服务器以及主域名服务器
搜索栏是如何实现的呢?
1)字典树进行匹配
2)倒排索引:通过关键字找文档,即直接定位到该关键字所在的所有文档,然后进行加载
普通索引:通过文档去查找关键字
网络安全
DDOS攻击了解吗?
分布式拒绝服务攻击,不断给服务器发送请求,占用服务器资源,使得服务器不能正常处理其它用户的请求,使其不能给其他人服务
哈希攻击了解吗?
主要是针对哈希函数的特性,精心构造数据,使得数据的哈希值都相同,将这些数据保存在哈希表中,就会退化成单链表,解决的方法有使用可变的哈希函数。
sql注入是什么,如何解决?
在输入框中输入sql语句,使后台执行该语句,从而达到非法登录系统等目的
1)对特殊字符进行转义
2)预编译
3)严格控制数据类型