1、 说一下TCP的三次握手过程;
答:建立一个TCP连接时候,需要客户端和服务端总共发送3个包以确认连接的建立。
(1) 第一次握手:客户端请求建立连接。客户端发送syn包(syn=j)到服务器,并进入syn_send状态,等待服务器确认;syn是同步序列编号,记录当前的请求的一个编码。
(2) 第二次握手:服务端应答客户段,并请求建立连接。服务器在收到第一次握手由客户端发送的syn包之后,确认客户的syn(ack=syn+1),然后自己也发一个syn包(syn=k),并将自己的syn和ack包发送给客户端,然后服务器进入syn_recv状态。
(3) 第三次握手:客户端针对服务端的请求确认应答。客户端收到服务器的syn+ack包之后,弯成包发送,客户端和服务器进入established状态,完成三次握手。
简单地说,就是客户端a要给服务器b发送一个信息,同时带上a的一个标记syn随机数。数据发出去之后,服务端收到这个信息,要告诉a——我服务端b已经收到你的消息了,这个消息原来的标志是你a的syn,那我加多一个数,变更syn+1了,并且将这个syn+1塞到ack里面。另外,我是b啊,这是我的名片,写在b的syn1里面,你收到后计算一下就知道是b针对你之前那个信息。A收到很多的信息,在处理信息的时候把ack拆开计算,发现ack-1=自己之前发的那个信息,于是就知道有一个服务器b收到了自己之前发送的那个编号为syn的信息。于是就确认b已经收到了消息,a的氢气得到了b的回应。
2、为什么TCP握手需要三次?
答:TCP是面向连接的,所有需要确保双方都确认连接的建立,而可靠传输的最小次数就是3,所以只要需要握手3次。(我告诉你一个消息——>你收到了记得回我——>我收到你的回复了,我就当你知道这件事情了哦。)
3、解释一下TCP的四次握手(挥手)
答:在断开一个TCP连接的时候,需要客户端和服务端总共发送4个包以确认连接的断开。
(1) 第一次挥手:客户端发送关闭请求;
(2) 第二次挥手:服务端相应客户端的关闭请求;
(3) 第三次挥手:服务端做好关闭准备后,发送关闭请求;
(4) 第四次挥手:客户端发送关闭确认请求。
那么为什么需要四次挥手呢?因为TCP是全双工的,即客户端和服务器可以项目发送和接受请求,需要双发都确认了才能关闭连接。
简单的说,a和b在谈恋爱的时候约定了,我们就算要分手,那也要和平分手,要双方都确认不合适了,都答应分手了才行。某一天,a感觉到自己不喜欢b了,于是a给b发送了一个分手请求(第一次挥手)。B在收到a的分手请求后理性的思考了一下,发现自己也没那么喜欢a了。于是b告诉a,我也不喜欢你了(第二次挥手)。但是,我们之间还有财产纠纷,我们的猫儿子什么的我都打包送你好了。于是b开始做分手准备,该分的分,该还的还(数据传输)。终于搞定这些事情了,b立马给a发了信息说,所有东西都清分了,我们可以分手了(第三次挥手)。A收到b的分手请求了,信息在a这里算是可以闭环了,于是a就告诉b——分手就分手吧,我们以后不再联系了(第四次挥手)。于是a果断地挂了电话(关闭连接)。
4、为什么TCP的四次挥手要有TIME_WAITE状态?
答:四次挥手主要是在终端TCP连接,可靠中止连接要求保证双方都确认,但是迟来的TCP请求可以被丢弃,所以有一个等待时间,等待时间过后就关闭请求。
若大多数的请求都使得服务器进入TIME_WAIT状态,就会导致CPU使用率上升。
5、概述一下什么是DDOS攻击和SYN洪泛攻击。
答:
(1) DDOS攻击:分布式拒绝服务攻击。指处于不同位置的多个攻击者同时向一个或数个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。由于攻击的发出点是分布在不同地方的,这类攻击称为分布式拒绝服务攻击,其中的攻击者可以有多个。目的就是占用被攻击服务的资源,导致它无法正常工作。
DDOS有个很形象的解析:https://www.zhihu.com/question/22259175
(2) SYN洪泛攻击:TCP3次握手的漏洞。通过网络服务所在的端口发送大量伪造远地址的攻击报文,发送到服务器,造成服务器上的半开连接队列被占满(服务器不停的按照收到的信息给信息上伪造的人回信,并且一直在等待他收到信息,然而它并不知道它一直在给不存在的客户端发消息,就一直没有回信),从而阻止其他用户进行访问(没有资源了)。
6、哪些应用比较适用UDP实现?
答:TCP是面向连接的,也就是说,在连接持续的过程中,socket中收到的数据都是由同一台主机发出的(劫持什么的不考虑),因此,知道保证数据是有序的到达就行了,至于每次读取多少数据自己看着办。流模式下,发送端的每次发送量和接收端每次接收量没有必然关系
而UDP是无连接的协议,也就是说,只要知道接收端的IP和端口,且网络是可达的,任何主机都可以向接收端发送数据。这时候,如果一次能读取超过一 个报文的数据,则会乱套。比如,主机A向发送了报文P1,主机B发送了报文P2,如果能够读取超过一个报文的数据,那么就会将P1和P2的数据合并在了一 起,这样的数据是没有意义的。所以发送端每发送是一个数据报,而接收端每读也是一个数据报,这样发送次数一定等于读次数(不考虑丢失等)
所以,在对数据的完整性和准确性要求较高的情况下则需要使用tcp,如文件传输,邮件等;而对实时性和效率要求较高时则使用udp,如qq,视屏语音通话等。
7、HTTP和HTTPS的区别
答:HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息。安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
HTTPS和HTTP的区别主要如下:
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。