网络通信

  • 计算机网络

是指将处于不同位置具有独立功能的多台计算机及其外部设备连接起来,在网络操作系统,网络管理软件,网络协议的管理和协调下,实现资源共享和信息传递的系统。

  • OSI模型中五层网络结构?

物理层,利用传输介质为数据链路层提供物理连接,屏蔽设备之间的差异,透明传输比特流。

数据链路层,在两个网络实体之间提供数据链路的创建,维持和释放。在物理层的基础上为网络层提供服务。数据链路层提供了链路控制,封装成帧,透明传输,差错检测,所以可将有差错的物理连接改造无差错的逻辑连接。,并对物理层原始的数据进行封装。

网络层,提供了路由和选址功能,使得处于不同网络的双方能够相互通信。网络层协议主要有ARP协议,RARP协议,IP协议,ICMP协议等。

传输层,承上为应用层提供了可靠的数据传输,启下为网络层提供了可靠度站点信息。为端到端传输,提供了流量控制和差错检测。传输层协议有TCP,UDP。

应用层,是用户和应用程序的接口,也提供网络服务。如DNS,HTTP,FTP,SMTP ,TELNET协议等。

  • OSI模型五层网络结构功能简介

应用层,为各种数据形式指定统一的格式标准,方便用户看懂。

传输层,加入了端口,明确是何应用程序传输。

网络层,加入IP地址,明确是那些网络传输。

数据链路层,加入MAC地址,明确是何物理主机进行帧的传输。

物理层,通过传输介质在两个主机之间传输。

  • 组成网络协议的三个要素?

协议是对等实体之间通信指定的规则集合。硬件和软件必须遵循的共同守则,网络协议并不是一套单独的软件,融合在其它所有的软件系统中。

语法,构成协议元素的含义和解释。语义,数据域控制信息的结构和形式,完成何种动作以及做出何种应答。同步,规定事件的执行顺序。

  • 计算机网络的各层设备

物理层
网卡,局域网传输介质之间的物理连接和电信号匹配。
中继器,局域网上所有节点的中心,放大信号,补偿信号衰减。支持远距离通信。
集成器(HUB),是计算机网络中连接多个主机或设备的连接设备,是对网络进行集中管理的最小单元。英文HUB是中心的意思,它是各分支的汇集点。HUB是一个共享设备,提供信号放大和中转的功能,把一个端口收到的信号向所有端口都发送出去。
中继器与集成器区别在于连接设备的线缆数量,一个中继器通常有两个端口,一个集成器有4至20个端口。中继器与集成器均不能隔离冲突域和广播域

数据链路层
交换机(SWITCH),是一种基于MAC(网卡硬件地址)识别,能完成封装转发数据包功能的网络设备。交换机学习MAC地址,并将其存放在内部地址表,通过在数据帧的始发者和接收者建立临时的交换路径,使数据帧直接由源地址到达目的地址。现在交换机有两层交换机,三层交换机,或更高层的交换机,三层交换机也有路由功能。特点是一次路由,多次转发。
网卡,帧的发送与接收,帧的封装与拆分,介质访问控制,数据的编码与解码,数据缓存。
交换机,网桥,能够隔离冲突域,但不能隔离广播域。

网络层
路由器,连接不同的网络,选择信息传送的线路。
冲突域(物理分段),连接在同一导线上的所有工作站的集合。或者说是同一网段上的所有节点的集合或以太网中竞争同一带宽的节点集合。这个域代表了冲突发生并传播的区域,这个域被认为是共享段。在OSI模型中,冲突域被看做是第一层的概念,连接同一冲突域的有HUB,reporter能简单复制信号的设备。用HUB,reporter设备连接的节点被认为是在同一个冲突域,不会划分冲突域。
广播域,接收同样广播消息的节点集合。在该集合中的一个节点发送一个广播帧,所有能够收到这个广播帧的节点被认为是广播帧的一部分。广播域被认为是OSI的第二层概念,所以像HUB,交换机等第一层,第二层的设备连接的结点被认为是在同一个广播域中。

  • 单工,半双工,全双工?

单工:单方向的交互,只有一个方向的通信没有另一个方向的交互。无线电广播,电视广播。
半双工:双向交替通信,通信双方都可以发送消息,但不能同时发送,也不能同时接受。
全双工:双向同时通信,通信双方可以同时发送消息,也可以同时接受消息。

  • 时延和带宽?

时延是指网络中的一个报文或分组从网络中的一端到另一端所需要的时间。包括发送时延,传播时延,处理时延,排队时延。

带宽又叫频宽,是指在固定的时间传输的资料数量。也是在传输管道中传输数据的能力。通常,数字设备中,带宽以bps为单位,即每秒传输位数。模拟设备中,频宽以每秒传送周期或赫兹来表示。

  • 模拟信号,数字信号,基带信号,宽带信号?

模拟信号,连续信号,语音信号和广播信号。数字信号,由离散的二进制0或1组成的信号。基带信号,数字0或1用不同的电压表示,送到电路上传输。宽带信号,将基带信号调制成频分复用的模拟信号,基带信号经过调制,每一路基带信号的频谱移动到不同的频段,合在一起也不会互相干扰,可在一条电缆中传输多路数字信号。

  • 调制解调器?

也称为猫,是一种计算机硬件,能够将计算机数字信号转为在电话线上传播的脉冲信号,在线路另一端可被另一个调制解调器接收,再次转为数字信号。实现两台计算机之间的远程通信。

  • 频分复用,时分复用,波分复用,码分复用?

频分复用,给每个信号分配唯一载波频率并通过单一媒体传输多个独立信号。复用的是传输信道。

时分复用,把多个信号复用到单个硬件传输信道上,允许每个信号在很短时间内使用信道,接着再让下一个信号使用。复用的是传输信道。

波分复用,光的频分复用,使用一根光纤传播多个频率接近的光载波信号。

码分复用,是用一组包含相互正交的码字的码组携带多路信号,每一个用户在同样的时间携带同样的频带进行通信。各用户使用经过特殊挑选的不同码型,各用户之间不会互相干扰,这种系统发送的信号有很强的抗干扰能力。

  • 数据链路层协议?

CSMA/CD(carrier sense multiple access with collision detection,载波监听多点接入/碰撞检测)每一个主机在发送之前都要先检测总线上是否有其它主机在发送数据,如果有,则不发送,如果没有则发送。并且主机在发送数据的同时,要检测信道上是否有冲突发生,如果有,则采用截断二进制指数类型规避算法来等待一段时间再次重发。概括来说就是:先听先发,边听边发,冲突停发,随机重发。
PPP(point to point protocol),串行线路通信面向字节的协议,PPP协议应用在直接连接的两个节点链路上。通过拨号或专线建立点对点的连接传送数据,成为主机,网桥,路由器简单连接的解决方法。
PPP组成。链路控制协议LCP,用来建立,配置,测试,管理数据链路。
网络控制协议NCP,由于PPP可以使用多种网络层协议,每个网络层协议都需要一个NCP来配置,一个将IP数据包封装到串行链路的方法。

  • P2P协议

P2P,对等计算机或对等网络。数据存储在客户本地,通过存储信息的查询,让终端之间直接数据传递。P2P网络让网络流量分散化,同时管理点没有服务容量的压力,只存储数据的索引和链接,不对数据本身负责,避免了版权和管理的问题。

  • 两层交换机和三层交换机区别?

两层交换机属于数据链路层的设备,可以根据数据包的MAC地址来转发,并把这些MAC地址记录在内部的数据表中。

三层交换机具有两层交换机的功能,同时还有一些路由器的功能。传统交换机在OSI模型是在数据链路层进行工作。三层交换技术是在OSI模型的第三层网络层进行分组转发,实现网络路由,也能做到最优网络性能。

  • 电路交换,分组交换区别和联系?分组交换优缺点?

电路交换,传输数据之前,两个节点先建立一条物理通信链路,该链路有许多中间节点,在传输数据过程中,这条链路一直被独占,直到传输结束后,才释放链接。电路交换的三个特点。基于位置,某个位置的比特交换后到达另一个位置。面向连接。通信过程中始终占用端到端的固定带宽。

分组交换,采用存储转发解决了传送大报文的问题。把大报文分成合理的小报文,再加上合理的控制信息,构成分组。网络节点根据控制信息把分组送到下一个节点,下一个节点收到分组后暂存,等待传输,再根据分组控制信息选择下一个节点,直到目的节点。分组交换的三个特点,基于标记,要传输的整个数据段称为报文,分割后的数据段称为分组也称为包。无连接。采用存储转发。

分组交换的优点。高效,动态分配资源;迅速,无需连接,直接发送数据;可靠,完善的网络路由;灵活,每个分组可以独立路由。

分组交换的缺点。时延,各个分组在存储转发中要排队,造成时间延迟;开销大,分组头要携带控制信息,造成网络开销。

  • IPv4地址缺乏的解决方法,IPv4和IPv6如何通信?

IPv4地址日益短缺,为了解决这个问题,引入了NAT。在局域网内部网络中使用内部地址,而在和外部网络通信时,就在路由器上,把内部网络地址替换成外部网络地址,从而在外部网络上正常使用。NAT可以使多台计算机共享internet连接。解决公共IP短缺的问题。

NAT的三种实现方式,静态转换,动态转换,端口多路复用。

静态转换,是指将内部网络的私有IP转为公有IP,IP地址是一对一,是一成不变,某个私有IP只转为某个公有IP。可以实现外网对内网的某个特定设备(服务器)的访问。

动态转换,是指将内部网络的私有IP转为公有IP时,IP地址是变化的,不是一成不变的。只要指定某些内网私有IP和某些外网的公有IP,就可以动态转换。

端口多路复用,改变外出数据包的源端口,并进行端口转换。内网中的所有主机都可使用外网中的一个共享IP,实现对互联网的访问,节约IP资源。

IPv4和IPv6的区别

  1. IPv4有4个字节,32位。IPv6有16个字节,128位。
  2. 数据报格式不同。IPv6数据报在IPv4基础上做了优化,提高了处理效率。
  3. 分段策略不同。IPv4数据报传输中可以随时分段。IPv6只能有源主机分段,不能由路由器分段。IPv6规定主机和路由器都支持576字节的数据,所以产生分段的概率就小很多。
  4. 安全性提高,IPv6支持主机鉴别机制,还有交换机密信息的保密机制。
  5. 自动配置,IPv4用户或管理员手动配置IPv4结点地址。IPv6主机自动配置一个或多个地址。

IPv4和IPv6之间的通信。

  1. 双IP层技术,适用于Internet中IPv4向IPv6过渡的前期。具有双协议的结点成为IPv4/IPv6结点。它具有两个协议的完整实现。
  2. 隧道技术,适用于IPv4向IPv6过渡的中期。两个IPv6网络中的中间网络多协议路由器收到源地址的IP数据包后,进入中间网络的域,到达中间网络另一端多协议路由器,再恢复源IP包转发至目的主机。中间网络就像一个隧道。
  3. 报头翻译技术,适用于过渡的后期。可以实现IPv4和IPv6之间的通信。向IPv4结点发送消息,路径上的一个路由器发现是IPv4的映射地址,则进行报头翻译,将IPv6报头转为IPv4报头,并发送至IPv4结点。

物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。

  • 路由协议有哪些?

RIP(路由信息协议),距离矢量协议;适用于小规模网络;实现简单,开销小;传输层使用UDP协议;RIP报文为512字节;仅和邻居交换信息,且交换的是整个路由表,固定时间周期性交换;
OSPF(开放式最短路径优先),链路状态协议;基于IP层;向自治域所有路由器发送链路状态表;更新快;选择最佳路由;支持多路负载均衡。
BGP(border gateway protocol),不同AS之间的路由器交换路由信息的协议。

  • ARP协议,工作流程?

ARP协议是一种把IP地址转为MAC地址的机制。在同一子网中的两个主机,ARP协议发送一个数据包,该数据包为广播消息,子网中的所有主机都会收到这个数据包,从中取出IP,与自身IP比较,如果相同,告诉对方MAC地址,如果不同,丢弃数据包。

  • ICMP协议,原理?

ICMP,internet控制报文协议。是一个在IP主机和路由器之间传递控制消息。控制消息是网络通不通,主机是否可达,路由是否可用等网络消息。ICMP面向无连接,用于传输出错报告控制消息。ping指令检查网络通不通,Tracert指令跟踪路由均使用的是ICMP协议。

  • TCP协议和UDP协议

可靠性,TCP要求通信双方都建立连接,并有差错控制机构,因此是可靠传输。而UDP传输只有源端口,目标端口,校验码。所以相对TCP不可靠。

安全性,由于UDP没有TCP复杂的可靠性和差错控制机构,所以安全性也比较弱。

传输效率,TCP的每次传输都要建立连接,UDP不需要。所以相对于对网络实时性有要求的连接,优先使用UDP,比如视频会议就使用UDP。

传输数据,TCP有滑动窗口控制机制,每次传输数据都会被TCP分成最适合传输的数据块,称为报文段。UDP协议传输应用程序数据一致保持不变。

总之,对传输的可靠性,安全性,完整性有要求就使用TCP。强调传输性和效率时就使用UDP。

  • 停止等待协议

由于IP层传输不可靠,所以TCP协议需要保证传输层的可靠通信,所以引入了停止等待协议,以流量控制,可靠传输为目的。
工作原理就是发送方发送一个数据包后,等待接收方的确认,直到发送方到确认后,才发下一个数据包。如果发送方没有收到确认,则必须一直等待。
如果发送方一段时间后,没有收到确认,就认为之前发送的数据包已丢失,重传之前发送的数据包。
如果接收方的确认分组丢失或其它原因,收到重传分组。则丢弃这个重传分组,向发送方发送确认

  • 流量控制?网络拥塞?拥塞产生原因?控制拥塞方法?TCP拥塞控制的算法?

流量控制,发送方来控制数据发送,不要超过接收方处理数据的速率。在传输层就是控制端到端的流量,在数据链路层就是控制相邻节点间的流量。

网络拥塞就是通信子网中某一部分分组数量过多,使得网络来不及处理,导致整个网络性能的下降,严重时会导致死锁状态。

产生拥塞原因,多条流入的线路有分组到达,并且使用同一输出线路,如果路由器没有足够的内存来存放所有分组,那么有的分组就会丢失,产生拥塞。路由器的处理速度太慢,难以完成必要的处理工作(缓冲区排队,更新路由表),即使有多余的线路,分组也要进入队列,产生拥塞。

防止拥塞在传输层,网络层,数据链路层都有解决方法。

传输层采用重传策略,乱序缓存策略,确认策略,流控制策略,确定超时策略。网络层使用分组排队和服务策略,分组丢弃策略,路由算法和分组生存管理。数据链路层采用重传策略,确认策略,流控制策略,乱序缓存策略。

TCP拥塞控制方法,慢开始,拥塞避免,快重传,快恢复。 

  • 入侵检测过程?

信息收集,网络流量的内容,用户连接活动的状态和行为。信号分析,模式匹配,统计分析和完整性分析。实时记录,报警和有限度的反击。

  • 同步通信和异步通信?

同步通信,一种连续串行传送字符数据的通信方式。一次通信只传送一帧信息,并且以同步的时钟节拍发送数据信号。同步通信的优点,传输速率高,传输量大。缺点发送时钟和接收时钟严格保持同步。

异步通信,以字符数据或字节为单位组成字符帧传送,每个字符数据以相同的帧格式传送。异步通信的优点,可远距离传输。缺点,传输速率慢,传输量小。

  • TCP,UDP联系,区别?

TCP协议的特点
1.面向字节流,把应用程序传下来的数据看成是一连串无结构的字节流。
2.全双工通信,发送缓存,准备发送的数据和已发送的数据但没有收到确认的数据。
接收缓存,按序到达的数据但没有被应用程序读取的数据和不按序到达的数据。
3.TCP提供可靠交付的服务,无差错,不丢失,不重复,按序到达。
4.每个TCP连接只能有两个端点,每个TCP连接是点对点。
5.TCP是面向连接的传输层协议。
TCP的三次握手过程
序列号seq,占四字节,用来标记数据段的顺序。TCP把连接中发送的所有数据字节都标上一个序号,第一个字节的序号由本地随机产生。给字节都编上序号,也给每一个报文段都指派一个序号,seq序列号就是这个报文段第一个字节的数据编号。
确认号ack,占四字节,期待收到对方下一个报文段的第一个数据字节序号。序列号指的是报文段第一个数据字节的序号,确认号指的是期望收到下一个数据字节的序号,因此,当前报文段最后一个字节的编号+1即是确认号。
ACK,占一位,当ACK=1时,确认号才有效,ACK=0,确认号无效。
SYN,建立连接时的同步序号。当SYN=1,ACK=0,表示这是一个连接请求报文段,如果同意连接,则响应字段返回SYN=1,ACK=1。SYN这个标志位只有在TCP建立连接时置为1,握手完成时置0。
FIN,释放连接。当FIN=1时,此报文段的发送方数据已经发送完毕,要求释放连接。截屏

第一次握手,客户端发送SYN=1至服务器,请求连接。序列号seq=x。
第二次握手,服务器响应客户端的请求。发送SYN=1,ACK=1同意连接。发送ack=x+1回应客户端seq=1的序列号。再发送服务器的seq=y。
第三次握手,客户端发送ACK=1,ack=y+1,表示对服务器序列号的确认。再发送紧接第一次握手时的序列号的下一个数据字节编号seq=x+1。

TCP的四次挥手
截屏 1

第一次挥手,客户端主动关闭,发送FIN=1,seq=u,发出连接释放报文。客户端进入终止等待1状态。
第二次挥手,服务器收到客户端释放连接,发送ACK=1,ack=u+1的确认释放请求,再发送自己的seq=v。此时服务器向上通知应用程序,客户端已经没有数据要发送了,出于终止等待状态。但是服务器要发送数据,客户端还需要接收。此时,服务器出于关闭等待状态。客户端在收到服务器的确认关闭请求后,就进入终止等待状态2。
第三次挥手,服务器将最后的数据发送完后,就向客户端发送释放请求,FIN=1,ACK=1,ack=u+1。由于在半关闭状态,服务器很可能又发送了一些数据seq=w。此时服务器进入最后确认状态。
第四次挥手,客户端收到服务器连接释放报文后,做出响应,ACK=1,ack=w+1。同时发送自己数据序列号seq=u+1。此时客户端进入时间等待状态,TCP连接还没有撤销,必须等待2MSL。服务器收到客户端的释放确认后,立刻释放TCP连接。

  • 为什么连接需要三次握手,关闭需要四次挥手?

当服务器收到客户端的SYN连接请求后,会立刻做出SYN,ACK的响应。告诉客户端是否同意连接请求。而当客户端向服务器发送FIN释放请求时,服务器并不会立刻关闭socket,只能发送一个ACK确认报文。告诉客户端,你发送的FIN我收到了,但是要等到我把所有报文都发送完了,才能够发送FIN。因此连接需要三次,关闭需要四次。

  • 为什么不能是两次握手?

三次握手完成两个重要的功能。既要使得双方都做好发送数据的准备,也要双方协商好初始序列号,这个序列号就是在握手阶段发送和确认。
两次握手有可能发生死锁。客户端发送连接请求至服务器,服务器收到请求后,发送确认分组,但是确认分组在传输过程中丢失,造成客户端没有收到确认报文,此时,客户端不知道服务器是否做好准备互发数据,甚至怀疑服务器是否收到连接请求。导致服务器发送的任何分组都被客户端忽略,只等确认报文,而服务器在发出的分组超时后,又会重发同样的分组,这就造成了死锁。 

  • 为什么客户端时间等待需要2MSL?

当客户端发出ACK确认后,并不会立刻关闭TCP连接。有可能ACK会丢失,那么等待时间就是来重发ACK报文。如果ACK丢失,服务器会重发FIN报文。MSL就是一个片段在网络中的最大存活时间。2MSL就是一个发送和一个回复的最大时间,如果直到2MSL,客户端都没有收到FIN,就表示ACK被成功接收,结束TCP连接。 

  • 应用层协议?

DNS(域名解析),计算机域名系统,域名服务器保存有该网络中所有主机的域名和对应的IP地址,并且能够把域名转为IP地址。
DHCP(动态主机设置协议),是一个局域网的协议,使用UDP协议工作。可以给内部网络或网络服务供应商自动分配IP地址。可以给用户或内部网络管理员提供对所有计算机做中央管理的手段。
FTP(文件传输协议),FTP客户机可以发送命令到服务器来下载文件,上传文件,创建或修改服务器上的目录。
TELNET(远程终端协议),可以将用户的击键传到远程主机,也可以将远程主机的输出传到用户屏幕。

  • HTTP协议中的持久连接和非持久连接区别?

非持久连接,客户端请求一个HTML页面和10个JPG图片,就需要11个TCP连接。服务器每发送一个对象时,就断开连接,没有持续到可用于传输其它对象。说明每个TCP连接都只能传输一个响应和一个消息。

持久连接,同一个TCP连接可以接受多个HTTP请求,在响应一个请求消息后,可以继续响应其它请求。、

一 网络五层模型

一 实体层,就是把电脑连接起来的物理手段,规定网络的一些电气特性,主要传送0或1的电信号。

二 链路层

2.1 链路层定义,它在实体层的上方,通过以太网协议在同一个子网里发送数据包。

2.2 以太网协议

以太网规定,一组电信号构成一个数据包,叫做“帧”,每个帧分为两个部分,标头(head),数据(data)。

标头,是数据包的说明项,包括发送者,接收者,数据类型。数据则是数据包的具体内容。

“标头”的长度固定为18个字节,“数据”的长度最短为46个字节,最长为1500个字节。因此,整个“帧”的长度最短为64个字节,最长为1518个字节。如果数据很长,就必须分割成多个包来发送。

2.3 MAC地址

“标头”中发送者和接收者的信息。以太网规定,进入网络的所有设备,必须具有“网卡”的接口。数据包是从一块网卡传送到另一块网卡。网卡的地址就是数据包的发送地址和接收地址,也称为MAC地址。

前6个十六进制位是厂商编号,后六个是网卡流水号。有了MAC地址,就可以网卡和数据包路径。

2.4 广播

以太网必须知道接收方的MAC地址,然后才能发送。

 

上图中,1号计算机向2号计算机发送数据包,同一个子网的3号,4号,5号计算机都能够收到包。它们读取这个包,找到接收者的MAC地址,和自身的MAC地址相比较,如果相同,就接收这个包,做进一步的处理。如果不同,就丢弃这个包。这种发送方式,称为“广播”。

有了数据包,MAC地址,“广播”发送方式,链路层就可以在同一个子网中传递数据包。

三 网络层

3.1 网络层的由来

以太网中发送数据,局限在同一个子网中。互联网是由若干个子网构成的巨型网络。

如果是同一个子网络,我们就采用“广播”方式发送数据包。不是同一个子网,就采用“路由”发送。

网络层使用IP地址,让我们能够区分不同主机是否属于同一个子网。

于是,一台主机就有了两种地址,一个MAC地址,另一个IP地址。两者之间没有任何联系。MAC地址绑定目标网卡,IP地址由管理员分配。

IP地址负责找到目标主机的子网,MAC地址把数据包发送至子网中的目标网卡,先处理IP地址,再处理MAC地址。

3.2 IP协议

规定IP地址的协议称为IP协议。现阶段,使用IP协议的第四个版本,IPv4,由32位二进制表示,分为4段,两部分,前部分表示网络,后部分表示主机。

子网掩码,用来判断两台主机是否属于同一个子网络,由32位二进制数表示,网络部分全为1,主机部分全为0。例如IP地址172.16.254.1,子网络掩码是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。

已知IP地址172.16.254.1和172.16.254.233的子网掩码都是255.255.255.0,可知他们的网络部分是相同的都是172.16.254,因此它们在同一个子网络。

IP地址 = {<网络号>:<主机号>}

IP地址分类

A类地址,只用一组8位二进制数来表示网络号,规定网络号第一位必须是0,地址空间为 0.0.0.0~127.0.0.0   默认子网掩码是255.0.0.0

B类地址,使用两组二进制数表示网络号,规定网络号前两位必须是10,地址空间是 128.0.0.0~191.255.0.0    默认子网掩码为255.255.0.0

C类地址,采用三组二进制数表示网络号,规定网络号前三位必须是110,地址空间为 192.0.0.0~223.255.255.0   默认子网掩码是255.255.255.0

IP协议有两个功能,为每一台主机分配一个IP地址,确定哪些地址在同一个子网。

4.3 IP数据包

根据IP协议发送的数据包,称为IP数据包。不难想象,必定包括IP地址信息。

向下传输过程,直接把IP数据包放置以太网数据包的“数据”部分,完全不用修改以太网的数据规格,这就是互联网分层的好处:上层的变动完全不涉及下层结构。

IP数据包也包括“标头”和“数据”部分。

放入以太网数据包后,以太网数据包就变为这样。

4.4 ARP协议

需要一种机制,将IP地址转为MAC地址。

如果两台主机不在同一个子网中,则无法通过ARP协议得到MAC地址,需要使用“网关”来“路由”处理。

如果两台主机在同一个子网中,ARP协议发送一个数据包,包含要查询主机的IP地址,在对方MAC地址这一栏填的是FF:FF:FF:FF:FF:FF,表示这是一个“广播”地址。同一子网的所有主机,都会收到这个数据包,从中取出IP地址,与自身IP地址相比较,如果相同,则告诉对方自己MAC地址。如果不相同,则丢弃。

有了ARP协议,我们就可以得到同一子网内的所有主机MAC地址,于是就可以把数据包发送到任何一个主机。

四 传输层

4.1 传输层的由来

有了IP地址,MAC地址,互联网上的任何两个主机之间都可以通信。还需要一个参数,用来确定数据包是供主机上哪个程序使用,这个参数就是“端口”。“端口”其实是主机上每一个使用网卡的程序的编号。每个数据包发送到主机的特定端口,所以每个程序都能够获得所需要的数据。

“端口”是一个0到65535之间的一个整数,16个二进制位,0~1023由系统占有,用户只能选择大于1023的端口号。不管是浏览网页还是在线聊天,应用程序都选择一个“端口”,与服务器的“端口”通信。

传输层的功能是定义“端口到端口”之间的通信。网络层的功能是定义“主机到主机”间的通信。有了主机和端口,就能够在程序之间交流。UNIX系统把“主机+端口”称为“套接字”,有了它,就能够进行网络应用程序的开发。

4.2 UDP协议

我们需要在数据包中加入端口信息,就需要新的协议,最简单的实现就是UDP协议。只要在数据包前加入端口号即可。

UDP数据包也由“标头”和“数据”两部分组成。

“标头”包括发送端口和接受端口的信息,“数据”则是具体的内容。UDP数据包放入IP数据包的“数据”部分,IP数据包又放入以太网数据包中,所以以太网数据包变为如下所示。

4.3 TCP协议

面向连接的协议。点对点连接,每个连接有两个端点,端点称为“套接字”。可靠交互。全双工通信。面向字节流。

每发出一个数据包都需要确认,如果丢失数据包,就收不到确认,发送方就知道有必要重发。TCP协议能够确保数据不丢失。缺点就是过程复杂,实现困难,消耗较多资源。

五 应用层

应用程序收到传输层的数据,就要进行解读。由于互联网是开放架构,数据来源五花八门,必须规定好数据格式,否则,根本无法解读。

“应用层”的作用就是规定应用程序的数据格式,常见的应用程序协议有HTTP,FTP,SMTP,DNS。

TCP协议可以为各种各样的程序传递数据,比如Email,WWW,FTP等,那么就必须有不同协议规定电子邮件,网页,FTP数据的格式,这些应用程序的协议就构成了应用层。

这是最高一层,直接面向用户,数据放在TCP数据包的“数据”部分。以太网数据包变成了如下所示。

六 过程解析

对互联网的结构模型有了以上的认识,我们通过一个实例来深入了解数据包的传输过程。

某个用户在浏览器地址栏输入 www.google.com后。这意味着浏览器向谷歌发送一个请求网页的数据包。

6.1 DNS解析(域名解析)

根域名服务器:最高层次的域名服务器。

顶级域名服务器:如上www.google.com

权限域名服务器:负责一个区的应用服务器

本地域名服务器:主机发送DNS查询请求就是发送给它。

我们知道,发送数据包,必须要有IP地址,但是现在只有网址,没有IP地址。DNS协议可以帮助我们,将这个网址转为IP地址。

已知DNS服务器的地址为8.8.8.8,我们向这个服务器发送一个DNS数据包,DNS服务器做出响应,告诉我们谷歌IP地址,于是,就能够进行通信。

6.2 子网掩码

拿到谷歌IP地址,我们需要判断这个IP地址和主机地址是不是在同一个子网中,就需要使用子网掩码。

假设某子网掩码为255.255.255.0。使用子网掩码和主机IP地址做一个二进制AND运算,得到一个地址A。再使用子网掩码和谷歌IP地址也做一次运算,得到一个地址B。对比这两个地址,如果相同,就说明在同一个子网中,如果不相同,就说明不在同一个子网,需要使用“网关”来发送数据包。。

6.3 应用层传输

每一次HTTP请求都需要建立一次TCP连接和释放TCP连接。

HTTP是无连接,无状态,每一次请求都作为一次新请求。

HTTP中的GET,POST。

GET用于请求,查询数据。POST请求用于发送数据。

GET请求参数在URL中,POST请求的参数在请求头中,安全性略高于GET请求。

万维网使用cookie跟踪用户,表示HTTP服务器和用户之间传递的状态信息。

cookie工作原理。

1 用户浏览某网站,该网站的服务器为用户产生一个唯一的表示符,为此在服务器后端数据库产生一个项目。

2 返回给用户的HTTP响应报文添加一个set-cookie识别码,用户的浏览器将cookie保存起来,继续浏览该网站时发送的每一个HTTP请求都会有一个cookie,这个网站就知道这个用户都做了什么,为这个用户维护一个独立的列表。

session工作原理。cookie保存在客户端上,session保存在服务器中。当服务器收到用户的cookie时,就会根据cookie找到sessionID,来查找对应的session,如果没有,则生成一个新的sessionID返回给用户。

浏览网页使用HTTP协议,整个数据包的结构如下。

我们假定这个长度为4960个字节,它会被嵌入到TCP的数据包之中。

6.4 传输层传输

TCP协议传输。TCP协议需要设置端口,接受方(Google)HTTP默认端口为80,发送方的端口是1024~65535之间的一个数。

TCP的“标头”有20个字节,加上嵌入的HTTP数据包,有4980个字节。

6.5 网络层传输

TCP数据包再嵌入IP数据包,IP数据包需要设置双方的IP地址。IP数据包“标头”部分长为20字节,加上嵌入TCP数据包长度为5000字节。

6.6 数据链路层传输

以太网协议,IP数据包嵌入以太网数据包之中,以太网需要设置双方的MAC地址,发送方位主机的网卡地址,接收方为网关的MAC地址(根据子网掩码计算出谷歌IP地址和主机IP地址不在同一个子网),此网关的MAC地址通过ARP协议解析出。

由于以太网数据包的最大长度为1500字节,现在IP数据包有5000字节,所以需要分割IP数据包。由于每个IP数据包的标头长度为20字节,所以分割后的四个数据包的长度为1500,1500,1500,560。

6.7 服务器响应

经过多个网关的转发,Google服务器收到这四个以太网数据包。根据IP标头的序号,Google将这四个数据包拼接,取出完整的TCP数据包。读出里面的“HTTP”请求,做出“HTTP”响应,再用TCP协议发回来。本机收到HTTP响应以后,就可以将网页显示出来,完成一次网络通信。

  • Nginx的几种功能

正向代理,用户访问某个网址时,无法正常访问。使用Nginx服务器作为正向代理,实现正常的访问。如用户访问谷歌,国内情况无法正常到达,使用Nginx作为正向代理,就可以正常访问。

反向代理,客户端只需要访问代理服务器,代理服务器就把请求转发至目标服务器。请求后,把访问结果返回给客户端。对用户来说,代理服务器和目标服务器没有区别,只是暴露的是代理服务器地址,隐藏的是真实服务器IP。

正向代理就是代理客户端,服务器不知道发出请求的客户端。反向代理就是代理服务器,客户端不知道提供服务的服务器。

负载均衡,客户端需要访问资源,发送请求到某个服务器,但由于目标服务器无法响应如此多的请求,就需要一种服务器分散请求,这样就解决负载均衡的问题。

动静分离,客户端请求资源时,请求静态资源时,访问一个服务器。请求动态资源时,再访问一个服务器。这种动静分离的技术可以保证降低单个服务器的压力。

高可用,为了提高Nginx的适用性和容错能力,设置一个Nginx的副本服务器,当主服务器发生故障时,就可以使用副本服务器代替主服务器,于是不影响工作正常进行。

  • SSL协议

SSL协议,安全套接字协议。使用数字证书验证身份,使用密钥交换算法交换密钥,使用密钥来加密数据,使用散列算法来验证数据完整性。

SSL协议的三个特性。保密,即是所有需要传送的消息需要加密。鉴别,可选的客户端认证和强制的客户端认证。完整性验证,传送的数据使用MAC算法检查消息完整性。

SSL协议包括三个部分,握手协议,记录协议,警报协议。

握手协议,第一阶段建立安全连接,客户机向服务器发送client hello消息,等待服务器回复server hello信息。通过这个连接客户机和服务器双方都知道SSL版本,交换密钥算法,加密算法,完整性验证算法,有关密钥生成的两个随机数,数据压缩方法。

握手协议第二阶段,服务器鉴别和密钥交换。服务器把数字证书和整个根CA链都发给客户端,客户端使用服务器的证书来验证服务器身份。服务器密钥交换,视第一阶段的密钥交换算法而定。服务器要求客户端发送证书验证客户端身份。

握手协议的第三阶段,客户机鉴别和密钥交换。客户端发送证书给服务器证明身份,客户端密钥交换,客户端将预备主密钥发送给服务器,使用服务器的公钥进行加密。客户端发送证书验证,证明拥有服务器的数字证书公钥。

握手协议第四阶段,客户端启动完成阶段,有四个消息进行传输,前两个是客户端发送,后两个是服务器发送。

握手阶段生成主密钥,为了保证信息的完整性和机密性。SSL协议需要6个密钥。客户机,基于加密需要一个密钥,保证数据可信性需要一个密钥,基于分组需要一个密钥。服务器也是如此,基于加密需要一个密钥,保证数据可信性需要一个密钥,基于分组需要一个密钥。SSL需要的密钥是单向的,不同于其它方向的密钥,如果一个密钥收到攻击,其它方向不受影响。

记录协议,客户机和服务器在鉴别双方和确定安全交换使用的算法后,进入SSL的记录协议,使用记录协议向SSL提供两个服务。保密性服务由握手协议定义的密钥实现。完整性由握手协议定义的MAC算法实现。

警报协议,客户机和服务器如果发现一个错误时,就向对方发送一个警报信息,如果是一个致命错误,双方立刻关闭SSL连接,并且删除会话号,数据和密钥。

总之,SSL协议就是使用握手协议来协商密钥交换算法交换密钥,协商密钥来加密数据,协商MAC算法检查数据完整性,散列算法验证完整性,以及一些证书来验证客户机和服务器的身份。

  • openSSL可以创建私钥或证书签名请求。可以实现密钥证书管理,对称加密和非对称加密

OpenSSL是一个开源库,包括三个主要的组件。openssl多用途的命令行工具,libcrypto加密算法库,libssl加密算法应用库。

数字证书就是数字证书颁发机构对使用私钥创建的签名请求文件作出的鉴定,表示数字证书机构对证书的认可,数字证书包含与服务器私钥对应的公钥。

由于密码学中的证书X509标准,一个证书包括如下。

  1. key文件,服务器私钥文件,加密发送至客户端的数据,解密来自客户端的信息。
  2. csr文件,证书签名请求文件,发往CA对证书签名。
  3. crt文件,是CA签名后的证书,或是开发者自签名的证书

本次小程序的开发要生成一个自签名证书,认定服务器的身份。所以需要openSSL来生成一个服务器私钥,自签名证书。

首先,创建一个服务器私钥,这个私钥用来服务器的身份认证。

openssl genrsa -out server.key 1024        这条指令来创建服务器私钥。

然后,openssl对私钥创建者的数字签名请求进行自签名。

openssl req -new -key server.key -out server.csr 可发起签名请求

openssl x.509 -req -days 365 in server.csr -signkey server.key -out server.crt  可完成自签名

这样客户机就有了自签名证书,就有了服务器私钥对应的公钥,可对服务器身份进行鉴定。至此,证书生成完毕。

使用Nginx作为反向代理就是访问Nginx时,就会转发到最终要访问的服务器上。由于是个人开发,所以Nginx位于客户机上,即在localhost。会通过Nginx转发到豆瓣服务器,访问localhost相当于访问豆瓣。

posted @ 2020-03-10 12:03  岐岐卡卡西  阅读(785)  评论(0)    收藏  举报