1.OSI七层协议模型、TCP/IP四层模型与五层协议体系结构的关系1.OSI七层协议模型OSI的七层协议主要包括:物理层数据链路层网络层传输层会话层表示层应用层II.TCP/IP四层协议模型TCP/IP是一个四层体系结构,包括(从下到上):网络接口层、Internet层(Internet层的名称是用来强调这一层是为了解决不同网络的互连问题)、传输层和应用层。但本质上,TCP/IP只有最上面的三层,因为最底层的网络接口层没有具体的内容。三、五层协议体系结构五层体系的协议结构是结合了OSI和TCP/IP优点的协议,包括(从下到上):物理层、数据链路层、网络层、传输层,应用层。(最下面两层可以称为网络接口层)注:五层协议的架构只是为了介绍网络原理而设计的,实际应用依然是TCP/IP四层架构。由于OSI系统复杂,设计先于实现,很多设计过于思想化,不便于计算机软件实现。因此,完全实现OSI参考模型的系统并不多,应用范围有限。TCP/IP协议最先在计算机系统中实现,在Linux和Windows平台上都有稳定的实现,并提供了简单方便的编程接口(API),可以在其上开发丰富的应用程序,因此得到了广泛的应用应用程序。TCP/IP协议已经成为互联网事实上的国际标准和行业标准。4、各层协议如下:物理层:RJ45、CLOCK、IEEE802.3(中继器、集线器)数据链路层:PPP、FR、HDLC、VLAN、MAC(网桥、交换机)网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP(交换机)传输层:TCP、UDP、SPX会话层:NFS、SQL、NETBIOS、RPC表示层:JPEG、MPEG、ASII应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS五、各层作用如下:1、物理层主要定义物理设备标准,如网线的接口类型、光接口类型、各种传输介质的传输速率、ETC。他的主要作用是传入比特流(即把1、0转换成电流强度进行传输,到达目的地后再转换成1、0,也就是我们通常所说的数模转换和模数转换)。这一层的数据称为比特流。.2.数据链路层定义了如何格式化传输数据以及如何控制对物理介质的访问。该层通常还提供错误检测和纠正以确保数据的可靠传输。3.网络层提供位于不同地理位置的网络中的两台主机之间的连通性和路径选择。互联网的发展大大增加了从世界上各个站点访问信息的用户数量,而网络层就是管理这种连接的层。4、传输层定义了一些数据传输协议和端口号(WWW端口80等),如:TCP(TransmissionControlProtocolTCP,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的Data)和UDP(UserDatagramProtocolUDP,与TCP特性正好相反,用于传输可靠性要求不高、数据量小的数据,比如QQ聊天数据就是用这种方式传输的)。主要是对从下层接收到的数据进行分段传输,到达目的地后再传输。这一层数据通常称为段。5、会话层通过传输层(端口号:发送端口和接收端口)建立数据传输路径。主要是在你的系统之间发起一个会话或者接收一个会话请求(设备之间需要互相认识,可以是IP地址或者MAC地址或者主机名)。6、表现层可以保证一个系统的应用层发送的信息可以被另一个系统的应用层读取。例如,PC程序与另一台程序计算机进行通信,其中一台计算机使用扩展二进制十进制交换码(EBCDIC),另一台计算机使用美国信息交换标准码(ASCII)来表示相同的字符。如果需要,表示层使用一种通用格式在多种数据格式之间进行转换。7、应用层是离用户最近的OSI层。该层为电子邮件、文件传输和仿真终端等用户应用程序提供网络服务。传输层1.TCP三向握手字段表示URG紧急指针有效。如果为1,表示需要先处理某位。ACK确认号是否有效一般设置为1。PSH提示接收端应用程序立即从TCP缓冲区中读取数据。RST对端请求重新建立连接并重置。SYN请求建立连接,并在其序列号字段中设置序列号的初始值。建立连接,设置为1FIN希望断开连接。第一次握手:当连接建立后,客户端向服务器发送一个syn包(syn=x),并进入SYN_SENT状态,等待服务器确认;SYN:同步序列号。第二次握手:服务端收到syn包,必须确认客户端的SYN(ack=x+1),同时发送一个SYN包(syn=y),即SYN+ACK包,和server此时进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1)。数据包发出后,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。2.TCP挥手四次。客户端进程发送连接释放消息并停止发送数据。释放数据报文头,FIN=1,其序号为seq=u(等于之前传输的数据最后一个字节的序号加1),此时客户端进入FIN-WAIT-1(停止等待1)状态。TCP规定即使FIN段不携带数据,也仍然要消耗一个序号。服务器收到连接释放报文,发送确认报文,ACK=1,ack=u+1,并带上自己的序列号seq=v,此时服务器进入CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层应用进程,客户端向服务器方向释放。此时处于半关闭状态,即客户端没有数据发送,但是如果服务端发送数据,客户端还是要接受。这个状态会持续一段时间,也就是整个CLOSE-WAIT状态的持续时间。客户端收到服务器的确认请求后,此时,客户端进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放消息(在此之前,需要接受服务器发送的最后数据)。服务器发送完最后一个数据后,给客户端发送连接释放消息,FIN=1,ack=u+1,因为是半关闭状态,服务器可能又发送了一些数据,假设序列号此时对于seq=w,此时服务端进入LAST-ACK(最终确认)状态,等待客户端的确认。客户端收到服务器的连接释放报文后,必须发送确认,ACK=1,ack=w+1,自己的序号为seq=u+1。这时,客户端进入TIME-WAIT(时间等待)状态。注意此时TCP连接还没有被释放,只有经过2??MSL(maximumsegmentlife)的时间,客户端才会进入CLOSED状态,相应的TCB被客户端撤销。服务器只要收到客户端的确认,就立即进入CLOSED状态。同样,TCB被撤销后,这个TCP连接就结束了。可以看出,服务器比客户端更早结束TCP连接。3、为什么连接时有三次握手,关闭时有四次握手?因为服务器端收到客户端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文用于响应,SYN报文用于同步。但是当关闭连接时,当服务器端收到FIN报文后,可能不会立即关闭SOCKET,只能先回复一个ACK报文,告诉客户端,“你发的FIN报文我收到了”。直到我Server端的消息都发送完,我才能发送FIN消息,所以不能一起发送。因此,需要进行四步握手。4、为什么TIME_WAIT状态需要经过2MSL(MaximumSegmentLifetime)才能回到CLOSE状态?虽然逻辑上四个消息都发送完了,我们可以直接进入CLOSE状态,但是我们必须假设网络是不可靠的,最后的ACK可能会丢失。所以TIME_WAIT状态用于重发可能丢失的ACK报文。客户端发出最终的ACK回复,但是ACK可能会丢失。如果Server没有收到ACK,就会不断重复发送FIN分片。所以Client不能马上关闭,它必须确认Server收到了ACK。Client发送ACK后会进入TIME_WAIT状态。客户端将设置一个计时器并等待2MSL。如果在此时间内再次收到FIN,Client将重新发送ACK并再次等待2MSL。所谓2MSL就是MSL(MaximumSegmentLifetime)的两倍。MSL是指分片在网络中的最大生存时间,2MSL是一次发送和一次回复所需要的最长时间。如果Client在2MSL之前没有再次收到FIN,则Client推断ACK已经成功收到,并结束TCP连接。5、为什么不能使用两次握手来连接?3次握手完成了两个重要的功能。它要求双方做好发送数据的准备(双方都知道对方已经准备好了),同时也允许双方协商初始序列号,在握手时发送并确认。现在把三次握手改成只有两次握手,死锁是有可能的。例如,考虑计算机S和C之间的通信。假设C向S发送连接请求数据包。S收到此数据包并发送确认数据包。根据两次握手的约定,S认为连接已经成功建立,可以开始发送数据包了。但是,在S的响应包在传输过程中丢失的情况下,C将不知道S是否准备好,也不知道S建立了什么序号,甚至会怀疑S是否收到了自己的连接请求包。这种情况下,C认为连接没有建立成功,将忽略S发送的任何数据包,只等待连接确认响应包。S在发送包超时后重复发送同一个包。这样就形成了死锁。6、连接已经建立,客户端突然失效怎么办?TCP也有一个保活定时器。显然,如果客户端出现故障,服务端不可能一直等待下去,白白浪费资源。服务器每次收到来自客户端的请求时都会重置计时器。时间通常设置为2小时。如果在两个小时内没有收到来自客户端的任何数据,服务器将发送一个探测段。之后,每75秒发送一次。如果连续发送10次检测报文仍无响应,则服务器认为客户端失败,然后关闭连接。7、TCP和UDP的区别:UDP是无连接的,即发送数据前不需要建立连接。UDP使用尽力传递,即不保证可靠传递,也不使用拥塞控制。UDP是面向消息的,没有拥塞。控制,适合多媒体通信需求UDP支持一对一、一对多、多对一和多对多交互通信UDP头开销小,只有8字节TCP是面向连接的传输layerprotocolTCP只能一对一连接到TCP提供可靠的传递服务,提供全双工通信TCP是面向字节流的,header至少要有20个字节这在一些可靠的应用中经常使用,如HTTP、HTTPS、FTP等文件传输协议,POP、SMTP等邮件传输协议9、http请求中304状态码的含义304(unmodified)请求的页面自上次请求后没有被修改过。服务器返回此响应时,不返回任何网页内容。如果自请求者上次请求以来页面未更改,则应将服务器配置为返回此响应(称为If-Modified-SinceHTTP标头)。服务器可以通过告诉Googlebot该页面自上次被抓取后没有更改来节省带宽和开销。10、http1.1和1.0缓存处理的区别。在HTTP1.0中,Header中的If-Modified-Since和Expires主要作为缓存判断的标准。HTTP1.1引入了更多的缓存控制策略,如Entity标签、If-Unmodified-Since、If-Match、If-None-Match以及更多可选的缓存头来控制缓存策略。带宽优化和网络连接的使用。在HTTP1.0中,存在一些浪费带宽的现象。比如客户端只需要一个对象的一部分,服务器却把整个对象都传过来,不支持续传功能。HTTP1.1在请求头中引入了range头字段,只允许请求资源的某一部分,即返回码为206(PartialContent),方便开发者自由选择制作充分利用带宽和连接。对于错误通知管理,在HTTP1.1中增加了24个错误状态响应码,如409(Conflict)表示请求的资源与当前资源状态冲突;410(Gone)表示服务器上的一个资源被永久性删除。主机头处理,在HTTP1.0中,每个服务器都被认为绑定了一个唯一的IP地址,因此,请求报文中的URL不传递主机名(hostname)。但是随着虚拟主机技术的发展,一台物理服务器上可以存在多个虚拟主机(Multi-homedWebServers),它们共享一个IP地址。HTTP1.1的请求报文和响应报文都应该支持Host头域,如果请求报文中没有Host头域,就会报错(400BadRequest)。长连接,HTTP1.1支持持久连接(PersistentConnection)和请求流水线(Pipelining)处理,可以在一个TCP连接上传输多个HTTP请求和响应,减少建立和关闭连接的消耗和延迟,在HTTP1.1连接启用默认:keep-alive,一定程度上弥补了HTTP1的不足。11、http和https的区别1)https协议需要一定的经济成本才能向CA申请证书;2)http为明文传输,https为加密安全传输;3)连接端口不同,http是80,https是443;4)http连接很简单,没有状态;5)https是ssl加密传输,一种身份认证的网络协议,比http传输安全。12、浏览器从接收到一个URL到最终显示页面经过什么过程DNS解析TCP连接发送HTTP请求服务器处理请求并返回HTTP报文浏览器解析并渲染页面网络层1.arp协议和arp攻击地址解析协议。ARP攻击的第一步是ARP欺骗。ARP协议基本上没有考虑网络的安全性。当时,人们考虑的重点是如何保证网络通信能够正确、快速地完成。每个主机向网络发送回复信号时使用的真实身份。但是后来人们发现ARP响应中的IP地址和MAC地址中的信息是可以伪造的,不一定是自己真实的IP地址和MAC地址,于是ARP欺骗就出现了。2、icmp协议是TCP/IP协议族的一个子协议,用于在IP主机和路由器之间传输控制报文。控制消息是指网络本身的消息,如网络是否不可达、主机是否可达、路由是否可用等。这些控制消息虽然不传输用户数据,但在用户数据的传输中起着重要的作用。3、路由器和交换机交换机用于同一网络内部数据的快速传输和转发决策。在不修改数据帧的情况下,通过检查二层头部完成转发。它工作在TCP/IP协议的第二层——数据链路层,工作简单,可以直接使用硬件处理路由器,用于数据在不同网络之间的跨网络传输和转发决策。通过检查三层包头来完成转发,需要修改TTL,需要重新计算IP包头的校验和,需要重新封装数据帧。在TCP/IP协议层的三层中工作——网络层工作复杂,由软件处理。应用层1.DNS寻址过程在浏览器中输入www.qq.com域名,操作系统会先检查其本地的hosts文件是否有这个URL映射关系。如果是,它会首先调用这个IP地址映射来完成DNS。如果在hosts中没有这个域名的映射,则去本地DNS解析器的缓存中查找是否有这样的URL映射关系。如果是,则直接返回,完成域名解析。如果hosts与本地DNS解析器缓存没有对应的URL映射关系,会先寻找TCP/ip参数中设置的首选DNS服务器。这里我们称之为本地DNS服务器。当本服务器收到查询时,如果查询是域名包含在本地配置区资源中,则将解析结果返回给客户端,完成域名解析,具有权威性。如果查询的域名没有被本地DNS服务器区域解析,但是服务器缓存了URL映射关系,调用这个IP地址映射完成域名解析,不具有权威性。如果本地DNS服务器的本地区域文件和缓存解析均无效,则根据本地DNS服务器的设置(是否设置转发器)进行查询。如果不使用转发方式,本地DNS会把请求发给13根DNS,根DNS服务器收到请求后,会判断谁有权管理这个域名(.com),并会返回一个IP负责顶级域名服务器。本地DNS服务器收到IP信息后,会联系负责.com域的服务器。负责.com域的服务器收到请求后,如果无法解析,就会找一个管理.com域的下级DNS服务器地址(qq.com)到本地DNS服务器。当本地DNS服务器收到这个地址后,会去寻找qq.com域服务器,重复上面的动作,查询直到找到www.qq.com主机。如果采用转发方式,DNS服务器会将请求转发给上级DNS服务器,由上级服务器解析。如果上级服务器无法解析,则要么查找根DNS,要么将请求转发给上级。这个循环。无论本地DNS服务器使用转发还是根提示,最终都会将结果返回给本地DNS服务器,再由DNS服务器返回给客户端。从客户端到本地DNS服务器是递归查询,DNS服务器之间的交互查询是迭代查询。2、负载均衡反向代理模式的优缺点(1)反向代理(ReverseProxy)方式是指使用代理服务器接受Internet上的连接请求,然后将请求转发给内网的服务器,并将服务器上得到的结果返回给互联网上请求连接的客户端,此时代理服务器对外充当服务器。(2)反向代理负载均衡技术是将来自Internet的连接请求,以反向代理的形式动态转发到内网的多台服务器进行处理,从而达到负载均衡的目的。(3)反向代理负载均衡可以在软件中实现,如apachemod_proxy、netscapeproxy等,也可以在硬件设备中实现,如缓存、负载均衡器等。反向代理负载均衡可以将优化后的负载均衡策略与代理服务器的缓存技术相结合,提高静态网页的访问速度,提供有益的性能;因为外部用户不能直接访问真实服务器,所以具有额外的安全性(同样,NAT负载均衡技术也有这个优势)。(4)其不足主要表现在以下两个方面。反向代理应用在OSI参考模型的第七层,因此需要为每个应用服务开发一个反向代理服务器,限制了反向代理。负载均衡技术的应用范围一般用于Web服务器的负载均衡。对于每一个代理,代理服务器都要开启两个连接,一个外部一个内部,这样当并发连接请求数非常大时,代理服务器的负载就会非常大,最后代理服务器本身就变成了一个服务瓶颈。一般来说,它可以用来对连接数不是特别多的站点进行负载均衡,但是每个连接都会消耗大量的处理资源,比如搜索。
