网络笔试面试
一、Http和https的区别:
http是http协议运行在TCP之上。所有传输内容为明文,客户端和服务器端都无法验证对方的身份。
https是http协议运行在SSL(安全套接层)/TLS(传输层安全)之上,SSL/TLS运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的秘钥用服务器方的证书进行非对称加密。此外客户端可以验证服务器端身份,如果配置了客户端验证,服务器方也可以验证客户端的身份。
https协议需要到ca申请证书,一般免费的证书很少,需要交费。
http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议
http和https使用的是完全不同的连接方式用的端口也不同,前者为80端口,后者为443
http的链接很简单,是无状态的
https协议是由ssl+http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
二、tcp如何保证可靠传输
1、数据包校验 2、超时重传机制 3、应答机制 4、对失序数据包重排序 5、tcp还能提供流量控制
三、tcp三次握手原理
第一次握手:主机A发送位码为syn=1(同步信号),随机产生seqnumber=1234567(序列号)的数据包到服务器,主机B由SYN=1知道,A要求建立联机。
第二次握手:主机B收到请求后要确认联机信息,向A发送acknumber(应答码)=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包
第三次握手:主机A收到后检查acknumber是否正确,即第一次发送的seqnumber+1,以及位码ack是否为1,若正确,主机A会在发送acknumber=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。
三次握手后,主机A与主机B开始传输数据。
(疑问:如果第三次握手中主机A传回的acknumber恰好等于主机C第一次握手传给主机B的seqnumber的话怎么办?)
四、tcp四次分手原理
由于tcp链接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成他的数据发送任务后就能发送一个FIN来终止这个方向的链接。收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
1、客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。
2、服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。
3、服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6).
4、客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7).
五、为什么TCP采用四次挥手关闭连接,而建立连接是三次握手?
这是因为服务器端的LISTEN状态下的SOCKET当收到SYN报文的建立连接请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有数据都发送给对方了,所以你可以未必马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以他这里ACK报文和FIN报文多数情况下都是分开发送的。
六、为什么tcp连接要三次握手两次不可以么?为什么?
为了防止已失效的链接请求报文段突然又传送到了服务端,因而产生错误。
已失效的链接请求报文段的产生在这样的一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络节点长时间的滞留了,以至延误到连接释放以后的某个时间才到达server。本来这事一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样server的很多资源就会白白浪费掉了。采用”三次握手“的方法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。
七、如果客户端不断地发送请求连接会怎样?
服务器端会为每个请求创建一个链接,然后向client端发送创建链接时的回复,然后进行等待客户端发送第三次握手数据包,这样会白白浪费资源。
八、DDos攻击
简单的说就是向服务器发送链接请求,首先进行
第一步:客户端向服务器端发送链接请求数据包(1)
第二步:服务器向客户端回复链接请求数据包(2),然后服务器等待客户端发送tcp/ip链接的第三部数据包(3)
第三步:如果客户端不向服务器端发送最后一个数据包(3),则服务器需等待30s到2min才能将此链接进行关闭。当大量的请求只进行到第二步,而不进行第三步,服务器又大量的资源等待第三个数据包。则造成DDos攻击。
九、DDos预防(没有根治的方法,除非不用TCP/IP链接)
1、确保服务器的系统文件是最新版本,并及时更新系统补丁
2、关闭不必要的服务
3、限制同时打开SYN的半连接数目,缩短SYN半连接的time out时间
4、正确设置防火墙,启用防DDos的属性
5、禁止对主机的非开放服务的访问
6、限制特定IP地址的访问
7、严格限制对外开放的服务器的向外访问
8、运行端口映射程序和端口扫描程序,要认真检查特权端口和非特权端口
9、认真检查网络设备和主机/服务器系统日志,只要日志出现漏洞或是时间变更,那这台机器就可能找到了攻击。
10、限制在防火墙外与网络文件共享。这样会给黑客截取系统文件的机会,主机信息暴露给黑客,给对方入侵机会
十、GET和POST的区别
从语义上说:GET从服务器获取信息;POST提交表单到服务器
GET:
1、GET被强制服务器支持
2、浏览器对URL的长度有限制,所以GET请求不能代替POST请求发送大量数据
3、GET请求发送数据更小
4、GET请求是不安全的
5、GET请求是幂等的
6、书签可收藏
POST:
1、POST请求不能被缓存
2、POST请求相对GET请求是安全的
3、书签不可收藏
在以下条件下,请使用POST请求:
1、无法使用缓存文件(更新服务器上的文件或服务器)
2、向服务器发送大量数据(POST没有数据量限制)
3、发送包含未知字符的用户输入时,POST比GET更稳定也更可靠。
4、post比get安全性更高
十一、TCP和UDP的区别?
区别:
1、UDP是无连接的,即发送数据之前不需要建立连接
2、UDP使用尽最大的努力交付,即不保证可靠交付,同时也不使用拥塞控制。
3、UDP是面向报文的。UDP没有拥塞控制,很适合多媒体通信要求。
4、UDP支持一对一、一对多、多对一和多对多的交互控制
5、UDP的首部开销小,只有8个字节
6、TCP是面向连接的运输层协议
7、每一个TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一的)
8、TCP提供可靠交付的服务
9、TCP提供全双工通信
10、TCP是面向字节流
11、首部最低20个字节。
十二、滑动窗口协议基本原理
滑动窗口协议的基本原理就是在任意时刻,发送方都维持一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。
十三、TCP的拥塞处理
1、慢启动
2、拥塞避免
3、拥塞发生
4、快速恢复
十四、从输入网址到获得页面的过程
首先根据输入的网址根据DNS协议查询DNS,获取域名对应的IP地址
浏览器搜索自身的DNS缓存
搜索操作系统的DNS缓存
读取本地的HOST文件
发起一个DNS的系统调用
宽带运营服务器查看本身缓存
运营商服务器发送一个迭代DNS解析请求
然后利用获得的IP地址,利用tcp协议进行HTTP三次握手
TCP/IP连接建立起来后,浏览器就可以向服务器发送HTTP请求
服务器接收到这个请求后,根据路径参数,经过后端的一些处理生成HTML页面代码返回浏览器
浏览器拿到完整的HTML页面代码开始解析和渲染,如果遇到引用的外部JS,CSS,图片的静态资源,他们同样也是一个个的HTTP请求,都要经过上面的步骤
浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现给用户