美文网首页
关于网络的一些知识点

关于网络的一些知识点

作者: zillo | 来源:发表于2019-08-01 15:24 被阅读0次

1.三次握手与四次挥手

三次握手 四次挥手

问题1:为什么建立TCP连接需要三次握手?

回答:是为了连接双方都能确认建立起了有效的连接。设想一种情况,客户端发起SYN请求,该请求在网络中迷路了,没有及时到达服务端,超时之后客户端重新发起了SYN请求,这时连接建立并且完成了数据传输然后正常关闭了连接,这之后第一次的SYN包又来到了服务端,服务端依然进入SYN_RCVD状态并向客户端返回确认,这时客户端收到该确认肯定是不会回应的,如果没有接下来的第三次握手,那么服务端便会以为连接建立成功了,显然这样是与事实不符的。

SYN Flood攻击,便是利用了三次握手的机制,其基本攻击原理就是不与服务端完成第三次握手,服务端会分配TCB资源,而且会多次重试对SYN请求的确认,攻击方通过发送大量这种请求来消耗服务端的有限资源。而且,服务端在收到SYN请求后就会分配TCB资源,客户端是在收到SYN+ACK之后才会分配TCB资源,这样的不对等,也为攻击提供了便利。

针对SYN Flood攻击,有一些检测手段,比如检测一段时间内成功建立连接数与未完成连接数差值,或者检测SYN请求量是否有突增。

还有一些攻击防范手段,比如利用系统参数来调整服务端重试次数,增大SYN连接数,或者拒绝新连接等方法。商业上的防火墙,一般采用连接认证的方式,比如对SYN+ACK回包里的seq或者ack数值进行处理,引入cookie来识别和防御非法连接。

问题2:谈谈对time_wait状态的理解

回答:主动发起断开连接的一端,在收到对端的FIN+ACK请求并回复确认之后,会进入TIME_WAIT状态,该状态会持续至少2MSL(Maximum Segment Lifetime)时间,RFC定义MSL为2分钟,Linux默认为60s。一方面,等待2MSL是为了在确认包丢失的情况下,让对端能够有机会再次发起FIN+ACK请求,从而完成连接关闭的流程;另一方面,在这段时间内,所有本连接发送过的报文,会在网络中陆续全部失效,这样就避免了在新建立连接之后,还收到旧连接的报文。

问题3:如果是服务端主动关闭连接,会有什么问题?

回答:

问题4:为何关闭连接需要四次挥手?

回答:关闭连接要比建立连接多一次握手,主要是考虑到一端发起关闭连接的时候,另一端可能还有部分数据没有发送,这时被动关闭端需要维持一个CLOSE_WAIT状态,在该状态下,被动关闭端可以将未发送完成的数据发送完成,然后再来继续连接关闭的流程。

问题5:如果已经建立了连接,但是客户端突然出现故障了怎么办?

回答:TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75分钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

2.HTTPS

HTTP传输明文容易被窃听,没有做身份认证容易遭遇伪装,无法验证信息完整性容易被篡改。基于这3个缺点,催生了HTTPS解决方案。https=http+ssl/tls=http+加密+认证+完整性保护。

参看这篇文章:我是这样理解HTTP和HTTPS区别的

3.TCP连接池,这里有个搞笑的问题,连接池是维护在客户端还是服务端?

4.长连接与短连接

HTTP/1.0 版的主要缺点是,每个TCP连接只能发送一个请求。发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接。TCP连接的新建成本很高,因为需要客户端和服务器三次握手,并且开始时发送速率较慢(slow start)。所以,HTTP 1.0版本的性能比较差。

HTTP/1.1版允许复用TCP连接,但是同一个TCP连接里面,虽然可以发起多个请求,但是所有的数据通信是按次序进行的,服务器只有处理完一个回应,才会进行下一个回应。要是前面的回应特别慢,后面就会有许多请求排队等着。这称为"队头堵塞"(Head-of-line blocking)。

2015年,HTTP/2 发布,它是在谷歌SPDY协议基础上推出的最新版本。HTTP/2是二进制协议,其支持头信息压缩、多路复用、数据流、服务器推送等,可以大幅提升HTTP协议性能。

2018年,HTTP/3发布,其底层支撑是谷歌 QUIC 协议,该协议基于 UDP。

4.重传机制,超时重传,快速重传,SACK,D-SACK等。

5.流量控制,滑动窗口,Zero Window Probe技术,Silly Window Syndrome(糊涂窗口综合症),Nagle算法

6.拥塞控制,慢启动,拥塞避免,快速重传,快速恢复

7.websocket与HTPP/2的关系

websocket是一种真正全双工通信,服务端可以向客户端推送消息,是一种可控的长连接。

8.H5小游戏

9.子网划分,CIDR

CIDR表示方法:IP地址/网络ID的位数,比如192.168.23.35/21,其中用21位表示网络ID。

10.IPv4与IPv6

RFC1918规定了三个保留地址段落:10.0.0.0-10.255.255.255;172.16.0.0-172.31.255.255;192.168.0.0-192.168.255.255。这三个范围分别处于A,B,C类的地址段,不向特定的用户分配,被IANA作为私有地址保留。这些地址可以在任何组织或企业内部使用,和其他Internet地址的区别就是,仅能在内部使用,不能作为全球路由地址。

IPv4地址只有42亿个,今天仍然能够支撑远远超过这一数量的互联网设备,是NAT(网络地址转换)技术在发挥巨大作用,将大量设备隐藏在NAT网关之后,透过NAT网关的功能实现公网互联。

11.上网的原理,

12.代理的原理,

13.P2P

14.epoll原理

15.DNS原理

16.session

17.大小端

参考文献:

关于TCP,UDP,针对面试。超详细

TCP 的那些事儿

SYN Flood攻击防范技术白皮书

HTTP/3竟然基于UDP HTTP 协议这些年都经历了啥?

在浏览器地址栏输入一个URL后回车,背后会进行哪些技术步骤?

相关文章

网友评论

      本文标题:关于网络的一些知识点

      本文链接:https://www.haomeiwen.com/subject/yhfgrctx.html