1.介绍一下OSI七层网络模型
应用层:文件传输、电子邮件、文件服务、虚拟终端(http,sftp,ftp,telnet,dnx) 表示层:数据格式化、代码转换 会话层:解除或建立别的接点的联系、内部通信 传输层:提供端对端的接口TCP/UDP 网络层:为数据包选择路由IP,ICMP,RIP 数据链路层:传输有数据的帧ARP,RARP 物理层:以二进制的形式在物理层传输数据ISO
2.介绍一下TCP/IP五层网络模型
应用层 传输层 网络层 数据链路层 物理层
3.TCP/IP的三次握手四次挥手
三次握手
第一次握手:建立连接,客户端发送syn(syn=x)包到服务器,并进入SYN_SENT状态,等待服务器确认,SYN:同步序列编号synchronize squence number
第二次握手:服务器收到syn包,必须确认客户的SYN(ack+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此时包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手
四次挥手
挥手1:当客户端已经没有要发送的数据时,决定释放连接,就会发送一个终止连接的报文,主动关闭TCP连接,其中终止控制位FIN=1,序号seq=u,u的值为之前客户端发送的后一个序号+1。此时客户端进入FIN-WAIT(终止等待1)状态,等待B的确认
挥手2:服务器端收到该终止连接的报文后,发送给客户端一个确认报文,ACK=1,ack=u+1,seq=v, v的值为服务端之前发送的最后一个序号+1。此时客户端进入FIN-WAIT-2(终止等待2)状态,服务器进入到CLOSE-WAIT(关闭等待)状态,但连接并未完全释放,服务端会通知高层应用层结束客户端到服务端这一方向的连接,此时TCP处于半关闭的状态,服务端还可以向客户端发送数据,但是客户端不能向服务端发送数据
挥手3:当服务器发送完数据后,准备释放连接时就向客户端发送连接终止的报文,FIN=1,同时还要重发ACK=1,ack=u+1,seq=w(在半关闭的状态B时可能还发送了一些数据,所以要重复之前已经发送过的确认号ack+1)此时客户端进入LAST-ACK状态
挥手4:客户端收到连接终止报文后还要再进行一次确认,确认报文中ACK=1,ack=w+1,seq=w,发送完之后进入TIME-WAIT状态,等待时间等待计时器设置的时间2MSL之后进入到CLOSE状态,服务端收到后也进入到CLOSED状态
4.TCP怎么保证可靠传输?
首先就是通过三次握手来建立连接,四次挥手来关闭连接; 其次TCP采用了ARQ协议 即自动重传请求来保证数据的正确性; 再者就是通过滑动窗口协议来保证接收方能够即使的进行数据处理,来进行流量控制; 最后TCP通过慢开始、拥塞避免、快重传、快恢复来进行拥塞控制,避免网络堵塞。
5.TCP流量控制
滑动窗口协议QAR
6.TCP拥塞控制
慢开始算法 拥塞避免算法 快重传算法 快恢复算法
7.TCP长短连接,优缺点
长连接:在一个tcp连接上可以连续发送多个数据包,在tcp连接保持期间,如果没有数据包发送时需要双方发送检测包保持此连接。(数据库的连接一般是长连接的,如果用短连接频繁的通信会造成socket错误,而且频繁的socket创建也会造成资源浪费)
短连接:数据发送完之后,即断开连接(http服务一般都用短连接,因为长连接对于服务器来说会耗费一定的资源)
优缺点:长连接可以省去较多TCP建立和关闭的操作,减少浪费,节约时间,对于频繁请求资源的客户端适合使用长连接。在长连接的应用场景下,client一般不会主动关闭连接,当client与server端的连接一直不关闭时,随着客户端连接越来越多,server会保持过多连接。这时候server端需要采取一些策略,避免一些恶意连接导致server服务受损,避免拖垮整体后端服务。 短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段。但是客户端的请求频繁时,会在TCP的建立和关闭操作上浪费较多的时间和带宽。
8.TCP三次握手的必要性,为什么不是两次?
如果只有两次,那么客户端无法确认服务端发送过来的SYN,那么就无法识别服务器发送的数据。
9.如果建立连接,但是客户端突然出现故障了怎么办?
TCP有保活计时器,服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常为2h,超时之后,服务器会收到探测报文,重发10个探测报文后客户端仍然没有反应的话,服务端就会关闭连接。
10.TCP和UDP的区别?
TCP:面向连接,可靠传输、通过tcp传输的数据保证无差错、不重复、不丢失,且按序到达,面向字节流 ,tcp的连接是点对点的,tcp的首部开销20字节。 UDP:udp是无连接的,发送数据之前不需要建立连接,udp尽量保证交付,但是不保证可靠性,udp面向报文,udp没有拥塞控制,因此网络出现拥塞时不会使源主机的发送频率降低(对实时的应用很有用)udp支持一对多 多对多的交互通信,udp首部开销8个字节。
11.UDP的主要应用?
视频会议、ip电话、直播、实时游戏等实时性质的软件。
12.浏览器输入地址后的整个流程
DNS解析,将域名解析成IP地址; TCP建立连接,tcp的三次握手建立连接; 浏览器发送HTTP请求; 服务器处理并响应报文; 浏览器解析并渲染页面; 断开连接,tcp四次挥手结束连接。
浏览器解析并渲染的详细过程?
13.cookie和session的区别?
cookie:保存在客户端,安全不高可以分析本地的cookie进行cookie欺骗,每次cookie的大小不超过4k; session:保存在服务端,安全性高一些,存储的大小没有限制,当服务器端存储的session过多时会影响服务器性能。
14.HTTP和HTTPS的区别?
HTTP是超文本传输协议,无状态(服务器不知道客户端的状态,对事务无记忆),明文传输,安全性差,端口号是80; HTTPS是HTTP+SSL,加密传输协议,构建的加密传输、身份认证的网络协议,需要申请CA证书,安全性比HTTP高,端口号是443;
15.HTTP请求方式、HTTP各版本的区别
1.0:get、post、head 1.1:delete、trace、options、put、connect。新增了保持连接keep-alive默认连接不关闭,需要客户端请求服务器关闭。允许在tcp连接中同时请求多个,增加并发性,提高效率。新增了host字段来指定服务器域名。支持了断点重传。 2.0:多路复用,一个连接处理多个请求,处理的量级大。消息头,数据体都是二进制,1.1是ASCII编码
get和post的区别? get的数据放在url中,安全性不高,get提交的数据是有限制的,url长度有限制,get一般是用于从服务器端拿数据。 post的数据是放在body中的,安全性较高,post一般用于客户端向服务器端发送数据
16.HTTP的报文
请求报文:请求行(请求方法、url、版本等)、请求头(包括各种字段Accept接收的数据类型、referer重定向的url、Accept-Language中英文、User-Agent、Host、connection:keep-alive、cookie)、请求正文(发给服务器的数据) 响应报文:状态行(协议、状态码、响应信息)、响应头(content-encoding、content-length、content-type、content-language)、响应正文
17.cache-control
缓存控制,请求报文和响应报文都会有。 no-cache no-store max-age public private
|