当前所在位置:珠峰网资料 >> 计算机 >> 软件水平 >> 正文
2015年软考程序员考试复习笔试知识点整理(6)
发布时间:2011/4/25 11:51:02 来源:城市学习网 编辑:ziteng
  10、OSI模型7层结构,TCP/IP模型结构?
  osi参考模型
  osi参考模型中的数据封装过程
  下面的图表试图显示不同的TCP/IP和其他的协议在最初OSI模型中的位置:
  7应用层例如HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP
  6表示层例如XDR、ASN.1、SMB、AFP、NCP
  5会话层例如ASAP、TLS、SSH、ISO 8327 / CCITT X.225、RPC、NetBIOS、ASP、Winsock、BSD sockets
  4传输层例如TCP、UDP、RTP、SCTP、SPX、ATP、IL
  3网络层例如IP、ICMP、IGMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP、ARP、RARP、 X.25
  2数据链路层例如Ethernet、Token ring、HDLC、Frame relay、ISDN、ATM、802.11 WiFi、FDDI、PPP
  1物理层例如wire、radio、fiber optic、Carrier pigeon
  tcp/ip参考模型
  tcp/ip参考模型分为四个层次:应用层、传输层、网络互连层和主机到网络层:
  tcp/ip参考模型的层次结构
  通常人们认为OSI模型的最上面三层(应用层、表示层和会话层)在TCP/IP组中是一个应用层。由于TCP/IP有一个相对较弱的会话层,由TCP和RTP下的打开和关闭连接组成,并且在TCP和UDP下的各种应用提供不同的端口号,这些功能能够被单个的应用程序(或者那些应用程序所使用的库)增加。与此相似的是,IP是按照将它下面的网络当作一个黑盒子的思想设计的,这样在讨论TCP/IP的时候就可以把它当作一个独立的层。
  4应用层
  (OSI5 到 7层)例如HTTP、FTP、DNS
  (如BGP和RIP这样的路由协议,尽管由于各种各样的原因它们分别运行在TCP和UDP上,仍然可以将它们看作网络层的一部分)
  3传输层
  (OSI4 和 5层)例如TCP、UDP、RTP、SCTP
  (如OSPF这样的路由协议,尽管运行在IP上也可以看作是网络层的一部分)
  2网络互连层
  (OSI3层)对于TCP/IP来说这是因特网协议(IP)
  (如ICMP和IGMP这样的必须协议尽管运行在IP上,也仍然可以看作是网络互连层的一部分;ARP不运行在IP上)
  1网络接口层
  (OSI1和2层)例如Ethernet、Wi-Fi、MPLS等。
  应用层
  该层包括所有和应用程序协同工作,利用基础网络交换应用程序专用的数据的协议。应用层是大多数普通与网络相关的程序为了通过网络与其他程序通信所使用的层。这个层的处理过程是应用特有的;数据从网络相关的程序以这种应用内部使用的格式进行传送,然后被编码成标准协议的格式。
  一些特定的程序被认为运行在这个层上。它们提供服务直接支持用户应用。这些程序和它们对应的协议包括HTTP(The WorldWide Web)、FTP(文件传输)、SMTP(电子邮件)、SSH(安全远程登陆)、DNS(名称<-> IP 地址寻找)以及许多其他协议。
  一旦从应用程序来的数据被编码成一个标准的应用层协议,它将被传送到IP栈的下一层。
  在传输层,应用程序最常用的是TCP或者UDP,并且服务器应用程序经常与一个公开的端口号相联系。服务器应用程序的端口由InternetAssigned Numbers Authority(IANA)正式地分配,但是现今一些新协议的开发者经常选择它们自己的端口号。由于在同一个系统上很少超过少数几个的服务器应用,端口冲突引起的问题很少。应用软件通常也允许用户强制性地指定端口号作为运行参数。
  连结外部的客户端程序通常使用系统分配的一个随机端口号。监听一个端口并且然后通过服务器将那个端口发送到应用的另外一个副本以建立对等连结(如IRC上的dcc文件传输)的应用也可以使用一个随机端口,但是应用程序通常允许定义一个特定的端口范围的规范以允许端口能够通过实现网络地址转换(NAT)的路由器映射到内部。
  每一个应用层(TCP/IP参考模型 的最高层)协议一般都会使用到两个传输层协议之一:面向连接的TCP传输控制协议和无连接的包传输的UDP用户数据报文协议 。 [NextPage]   常用的应用层协议有:
  运行在TCP协议上的协议:
  HTTP(HypertextTransfer Protocol,超文本传输协议),主要用于普通浏览。
  HTTPS(HypertextTransfer Protocol over Secure Socket Layer, or HTTP over SSL,安全超文本传输协议),HTTP协议的安全版本。
  FTP(File Transfer Protocol,文件传输协议),由名知义,用于文件传输。
  POP3(PostOffice Protocol, version 3,邮局协议),收邮件用。
  SMTP(SimpleMail Transfer Protocol,简单邮件传输协议),用来发送电子邮件 。
  TELNET(Teletypeover the Network,网络电传),通过一个终端(terminal)登陆到网络。
  SSH(Secure Shell,用于替代安全性差的TELNET),用于加密安全登陆。
  运行在UDP协议上的协议:
  BOOTP(BootProtocol,启动协议),应用于无盘设备。
  NTP(Network Time Protocol,网络时间协议),用于网络同步。
  其他:
  DNS(Domain Name Service,域名服务),用于完成地址查找,邮件转发等工作(运行在TCP和UDP协议上)。
  ECHO(EchoProtocol,回绕协议),用于查错及测量应答时间(运行在TCP和UDP协议上)。
  SNMP(SimpleNetwork Management Protocol,简单网络管理协议),用于网络信息的收集和网络管理。
  DHCP(DynamicHost Configuration Protocol,动态主机配置协议),动态配置IP地址。
  ARP(Address Resolution Protocol,地址解析协议),用于动态解析以太网硬件的地址。  传输层
  传输层的协议,能够解决诸如可靠性(“数据是否已经到达目的地?”)和保证数据按照正确的顺序到达这样的问题。在TCP/IP协议组中,传输协议也包括所给数据应该送给哪个应用程序。
  在TCP/IP协议组中技术上位于这个层的动态路由协议通常被认为是网络层的一部分;一个例子就是OSPF(IP协议89)。
  TCP(IP协议6)是一个“可靠的”、面向连结的传输机制,它提供一种可靠的字节流保证数据完整、无损并且按顺序到达。TCP尽量连续不断地测试网络的负载并且控制发送数据的速度以避免网络过载。另外,TCP试图将数据按照规定的顺序发送。这是它与UDP不同之处,这在实时数据流或者路由高网络层丢失率应用的时候可能成为一个缺陷。
  较新的SCTP也是一个“可靠的”、面向连结的传输机制。它是面向纪录而不是面向字节的,它在一个单独的连结上提供了通过多路复用提供的多个子流。它也提供了多路自寻址支持,其中连结终端能够被多个IP地址表示(代表多个物理接口),这样的话即使其中一个连接失败了也不中断。它最初是为电话应用开发的(在IP上传输SS7),但是也可以用于其他的应用。
  UDP(IP协议号17)是一个无连结的数据报协议。它是一个“best effort”或者“不可靠”协议——不是因为它特别不可靠,而是因为它不检查数据包是否已经到达目的地,并且不保证它们按顺序到达。如果一个应用程序需要这些特点,它必须自己提供或者使用TCP。
  UDP的典型性应用是如流媒体(音频和视频等)这样按时到达比可靠性更重要的应用,或者如DNS查找这样的简单查询/响应应用,如果建立可靠的连结所作的额外工作将是不成比例地大。
  DCCP目前正由IEFT开发。它提供TCP流动控制语义,但对于用户来说保留了UDP的数据报服务模型。
  TCP和UDP都用来支持一些高层的应用。任何给定网络地址的应用通过它们的TCP或者UDP端口号区分。根据惯例使一些大众所知的端口与特定的应用相联系。
  RTP是为如音频和视频流这样的实时数据设计的数据报协议。RTP是使用UDP包格式作为基础的会话层,然而据说它位于因特网协议栈的传输层。
  网络互连层
  正如最初所定义的,网络层解决在一个单一网络上传输数据包的问题。类似的协议有X.25和ARPANET的Host/IMP Protocol。
  随着因特网思想的出现,在这个层上添加了附加的功能,也就是将数据从源网络传输到目的网络。这就牵涉到在网络组成的网上选择路径将数据包传输,也就是因特网。
  在因特网协议组中,IP完成数据从源发送到目的基本任务。IP能够承载多种不同的高层协议的数据;这些协议使用一个唯一的IP协议号进行标识。ICMP和IGMP分别是1和2。
  一些IP承载的协议,如ICMP(用来发送关于IP发送的诊断信息)和IGMP(用来管理多播数据),它们位于IP层之上但是完成网络层的功能,这表明了因特网和OSI模型之间的不兼容性。所有的路由协议,如BGP、 OSPF、和RIP实际上也是网络层的一部分,尽管似乎它们应该属于更高的协议栈。  网络接口层
  网络接口层实际上并不是因特网协议组中的一部分,但是它是数据包从一个设备的网络层传输到另外一个设备的网络层的方法。这个过程能够在网卡的软件驱动程序中控制,也可以在韧体或者专用芯片中控制。这将完成如添加报头准备发送、通过物理媒介实际发送这样一些数据链路功能。另一端,链路层将完成数据帧接收、去除报头并且将接收到的包传到网络层。
  然而,链路层并不经常这样简单。它也可能是一个虚拟专有网络(VPN)或者隧道,在这里从网络层来的包使用隧道协议和其他(或者同样的)协议组发送而不是发送到物理的接口上。VPN和隧道通常预先建好,并且它们有一些直接发送到物理接口所没有的特殊特点(例如,它可以加密经过它的数据)。由于现在链路“层”是一个完整的网络,这种协议组的递归使用可能引起混淆。但是它是一个实现常见复杂功能的一个优秀方法。(尽管需要注意预防一个已经封装并且经隧道发送下去的数据包进行再次地封装和发送)。
  1、物理层(physical layer)
  物理层规定了激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性。该层为上层协议提供了一个传输数据的物理媒体。
  在这一层,数据的单位称为比特(bit)。
  属于物理层定义的典型规范代表包括:eia/tia rs-232、eia/tia rs-449、v.35、rj-45等。
  2、数据链路层(data link layer)
  数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。
  在这一层,数据的单位称为帧(frame)。
  数据链路层协议的代表包括:sdlc、hdlc、ppp、stp、帧中继等。
  3、网络层(network layer)
  网络层负责对子网间的数据包进行路由选择。此外,网络层还可以实现拥塞控制、网际互连等功能。
  在这一层,数据的单位称为数据包(packet)。
  网络层协议的代表包括:ip、ipx、rip、ospf等。
  4、传输层(transport layer)
  传输层是第一个端到端,即主机到主机的层次。传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。此外,传输层还要处理端到端的差错控制和流量控制问题。   在这一层,数据的单位称为数据段(segment)。
  传输层协议的代表包括:tcp、udp、spx等。
  5、会话层(session layer)
  会话层管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。
  会话层协议的代表包括:netbios、zip(appletalk区域信息协议)等。
  6、表示层(presentation layer)
  表示层对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换等。
  表示层协议的代表包括:ascii、asn.1、jpeg、mpeg等。
  7、应用层(application layer)
  应用层为操作系统或网络应用程序提供访问网络服务的接口。
  应用层协议的代表包括:telnet、ftp、http、snmp等。
  集线器hub工作在OSI参考模型的(物理)层;
  网卡工作在OSI参考模型的(物理)层;
  路由器router工作在OSI参考模型的(网络)层;
  交换机Switch工作在OSI参考模型的(数据链路)层。
 [NextPage]   (附)10、tcp建立连接为什么要三次握手?
  tcp是一个面向连接的协议,在传送数据以前,必须要首先建立一条连接。连接的建立需要经过三次握手。为什么要经过三次握手呢,每次握手双方都做了些什么?
  1)什么是tcp报文?
  tcp报文就是通过tcp协议发送的数据包,由tcp头和数据段组成。
  tcp头是固定的20个字节,它的格式为:
  2)第一次握手做什么?
  请求端(客户端)会向服务端(被请求端)发送一个tcp报文,申请打开某一个端口。因为没有数据,所以这个报文仅包含一个tcp头。其中:
  SYN=1;当建立一个新的连接时, SYN标志变1。
  序号;序号用来标识从客户端向服务端发送的数据字节流。
  此时客户端进入SYN_SENT状态。
  3)第二次握手做什么?
  服务端收到客户端的SYN包,也会发一个只包含tcp头的报文给客户端。
  ACK=1;服务端确认收到信息
  确认序号;客户端序号+1,作为应答
  SYN=1;因为tcp的连接是双向的,服务端作为应答的同时请求建立连接。
  此时服务端进入SYN_RECV状态
  4)第三次握手做什么?
  ACK=1;客户端确认收到信息
  确认序号;服务端序号+1,作为应答
  此时客户端进入ESTABLISHED状态,服务端收到ACK后也会进入此状态
  可见,客户端和服务端都保留了对方的序号,这三次握手缺少任何一步都无法实现这一目标。在三次握手过程中,出现了一些中间状态。
  5)什么是半连接队列?
  第一次握手完成后,服务端发送ACK+SYN包到客户端,在收到客户端返回前的状态为SYN_RECV,服务端为此状态维护一个半连接队列。当服务端收到客户的确认包时,删除该条目,服务端进入ESTABLISHED状态。Listen中的backlog参数表示这两个状态合的最大值。若客户端完成第一次握手后不再发送ACK包,导致服务端未完成队列溢出,达到Dos攻击的目的。
  6)什么是SYN-ACK 重传?
  Dos攻击可以达到目的的一个重要因素是服务端在发送完SYN+ACK包后会等待客户端的确认包,如果等待时间内未收到,服务端会进行首次重传,等待一段时间仍未收到客户确认包,会进行第二次重传,直到重传次数超过系统规定的最大值,系统将该连接信息从半连接队列中删除。如果系统删除的频率小于半连接状态的增长频率,服务端就无法正常提供服务。
 [NextPage]   7)Tcp关闭连接需要四次握手,这又是为什么呢?
  这是由tcp半关闭(harf-close)造成的。既然一个TCP连接是全双工(即数据在两个方向上能同时传递),因此每个方向必须单独地进行关闭。即一方发送一个FIN,另一方收到后发送一个ACK,这就是所谓的四次握手了。
  8)第一次握手做什么?
  客户端发送一个FIN(这个客户端是主动发起关闭的一端,与建立连接时的客户端不一定是同一主机)
  此时客户端进入FIN_WAIT_1状态。
  9)第二次握手做什么?
  服务端收到FIN,发回客户端一个ACK,确认序号为收到的序号加1(因为FIN和SYN一样,会占用一个序号);客户端收到ACK之后会进入FIN_WAIT_2状态,服务端会进入CLOSE_WAIT状态。
  10)第三次握手做什么?
  服务端发送给客户端一个FIN。服务端进入LAST_ACK状态。
  11)第四次握手做什么?
  客户端收到FIN,发回服务端一个ACK,确认序号为收到的序号加1;客户端会进入TIME_WAIT状态,2MSL超时后进入CLOSE状态。服务端收到ACK后也会进入CLOSE状态。
  其实我们通俗的说每次握手其实就是发一次数据包的过程。建立连接时双方共发送了3个包,关闭连接时发送和确认的两次握手决定了一端数据流的关闭,四次握手可以保证两方都关闭。
  12)为什么建立连接是三次握手,而关闭连接是四次呢?
  建立连接时,服务端可以把应答ACK和同步SYN放在一个报文里进行发送。而关闭连接时,收到FIN通知仅仅表示对方没有数据发送过来了,并不表示自己的数据全部发送给了对方。所以ACK和FIN是分了两次进行发送。如果服务端收到FIN,恰恰自己也没有数据要发,是不是ACK和FIN可以一起发给客户端呢,这样就可以少一次数据流了。世界是美好的,经典的TCP连接状态图中也考虑到了这种情况,tcp关闭连接确实是只有三次数据流动,服务端将ACK和FIN放在一个包里进行发送,但四次握手这个概念却已经根深蒂固无法更改了。
  13)Tcp的各个状态是怎样的?
  客户端的正常tcp状态:
  CLOSED->SYN_SENT(第1次)->ESTABLISHED(第3次)->FIN_WAIT_1(第1次)->FIN_WAIT_2(第2次)->TIME_WAIT(第4次)->CLOSED
  服务端的正常tcp状态:
  CLOSED->LISTEN->SYN_RCVD(第2次)->ESTABLISHED(第3次)->CLOSE_WAIT(第2次)->LAST_ACK(第3次)->CLOSED(第4次)
  tcp还有其他的非正常状态,在此不做讨论。
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved