1、说一下TCP的三次握手过程
参加下图
2、为什么TCP握手需要三次?
TCP是可靠的传输控制协议,三次握手能保证数据可靠传输又能提高传输效率。
如果TCP的握手是两次:
<1>如果client发给server的SYN报文因为网络原因,延迟发送。由于client没有收到server对SYN的确认报文,会重发SYN报文,服务器和回复ACK,连接建立。数据发送完毕,这条连接被正常关闭。这时,延迟的SYN报文发到了server,server误以为这是client重新发送的同步报文,又回复了一个ACK,和client建立了连接。
<2>如果server给client发送的ACK报文因为网络原因,报文被丢弃,此时server认为已经建立好连接,但是client没有收到确认报文,认为没有建立好连接。client会重发SYN报文,此时server已经处于就绪状态,认为已经建立好连接。
如果TCP的握手是四次:
–1.client给server发送SYN同步报文;
–2.server收到SYN后,给client回复ACK确认报文;
–3.server给client发送SYN同步报文;
–4.client给server发送ACK确认报文。
第2.3步之间,server和client没有任何的数据交互,分开发送相当于多发了一次TCP报文段,SYN和ACK标识只是TCP报头的一个标识位。很明显,这两步可以合并,从而提高连接的速度和效率。
3、解释一下TCP的四次挥手
4、为什么要有TIME_WAIT状态?
TIME_WAIT状态存在有两个原因。
<1>可靠终止TCP连接。如果最后一个ACK报文因为网络原因被丢弃,此时server因为没有收到ACK而超时重传FIN报文,处于TIME_WAIT状态的client可以继续对FIN报文做回复,向server发送ACK报文。
5、为什么TCP的挥手需要四次?
TCP是全双工的连接,必须两端同时关闭连接,连接才算真正关闭。
如果一方已经准备关闭写,但是它还可以读另一方发送的数据。发送给FIN结束报文给对方对方收到后,回复ACK报文。当这方也已经写完了准备关闭,发送FIN报文,对方回复ACK。两端都关闭,TCP连接正常关闭。
6、DDOS攻击
DDOS攻击利用合理的服务请求占用过多的服务资源,使正常用户的请求无法得到相应。
常见的DDOS攻击有计算机网络带宽攻击和连通性攻击。
带宽攻击指以极大的通信量冲击网络,使得所有可用网络资源都被消耗殆尽,最后导致合法的用户请求无法通过。
连通性攻击指用大量的连接请求冲击计算机,使得所有可用的操作系统资源都被消耗殆尽,最终计算机无法再处理合法用户的请求。
7、SYN洪水攻击
SYN洪水攻击属于DOS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。
客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送SYN报文,服务器回复ACK确认报文,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN报文被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。
8、哪些应用比较适合用udp实现
多播的信息一定要用udp实现,因为tcp只支持一对一通信。
如果一个应用场景中大多是简短的信息,适合用udp实现,因为udp是基于报文段的,它直接对上层应用的数据封装成报文段,然后丢在网络中,如果信息量太大,会在链路层中被分片,影响传输效率。
如果一个应用场景重性能甚于重完整性和安全性,那么适合于udp,比如多媒体应用,缺一两帧不影响用户体验,但是需要流媒体到达的速度快,因此比较适合用udp
如果要求快速响应,那么udp听起来比较合适
如果又要利用udp的快速响应优点,又想可靠传输,那么只能考上层应用自己制定规则了。
常见的使用udp的例子:ICQ,QQ的聊天模块。
9、如果要你来设计一个QQ,在网络协议上你会考虑如何设计?
登陆采用TCP协议和HTTP协议,你和好友之间发送消息,主要采用UDP协议,内网传文件采用了P2P技术。总来的说:
1.登陆过程,客户端client 采用TCP协议向服务器server发送信息,HTTP协议下载信息。登陆之后,会有一个TCP连接来保持在线状态。
2.和好友发消息,客户端client采用UDP协议,但是需要通过服务器转发。腾讯为了确保传输消息的可靠,采用上层协议来保证可靠传输。如果消息发送失败,客户端会提示消息发送失败,并可重新发送。
3.如果是在内网里面的两个客户端传文件,QQ采用的是P2P技术,不需要服务器中转。