当前位置: 首页 > 编程日记 > 正文

TCP/IP协议分析

一;前言

学习过TCP/IP协议的人多有一种感觉,这东西太抽象了,没有什么数据实例,看完不久就忘了。本文将介绍一种直观的学习方法,利用协议分析工具学习TCP/IP,在学习的过程中能直观的看到数据的具体传输过程。

为了初学者更容易理解,本文将搭建一个最简单的网络环境,不包含子网。 
二、试验环境 

1、网络环境 


如图1所示 



图1



  为了表述方便,下文中208号机即指地址为192.168.113.208的计算机,1号机指地址为192.168.113.1的计算机。 

2、操作系统 

两台机器都为Windows 2000 ,1号机机器作为服务器,安装FTP服务 

3、协议分析工具 

  Windows环境下常用的工具有:Sniffer Pro、 Natxray 、Iris以及windows 2000自带的网络监视器 等。本文选用Iris作为协议分析工具。 

在客户机208号机安装IRIS软件。 

三、测试过程 

1、测试例子:将1号机计算机中的一个文件通过FTP下载到208号机中。 

2、IRIS的设置。 

  由于IRIS具有网络监听的功能,如果网络环境中还有其它的机器将抓很多别的数据包,这样为学习带来诸多不便,为了清楚地看清楚上述例子的传输过程首先将IRIS设置为只抓208号机和1号机之间的数据包。设置过程如下: 

  1)用热键CTRL+B弹出如图所示的地址表,在表中填写机器的IP地址 ,为了对抓的包看得更清楚不要添主机的名字(name),设置好后关闭此窗口。



图2



  2)用热键CTRL+E弹出如图所示过滤设置,选择左栏“IP address”,右栏按下图将address book中的地址拽到下面,设置好后确定,这样就这抓这两台计算机之间的包。



图3 3、抓包 

   按下IRIS工具栏中 开始按钮。在浏览器中输入:FTP://192.168.113.1,找到要下载的文件 ,鼠标右键该文件,在弹出的菜单中选择“复制到文件夹”开始下载,下载完后在IRIS工具栏中按 按钮停止抓包。图4显示的就是FTP的整个过程,下面我们将详细分析这个过程。 

 

图4 

  说明:为了能抓到ARP协议的包,在WINDOWS 2000 中运行arp –d 清除arp缓存。 

四、过程分析 

1、TCP/IP的基本原理 

  本文的重点虽然是根据实例来解析TCP/IP,但要讲明白下面的过程必须简要讲一下TCP/IP的基本原理。 

A.网络是分层的,每一层分别负责不同的通信功能。 

  TCP/IP通常被认为是一个四层协议系统,TCP/IP协议族是一组不同的协议组合在一起构成的协议族。尽管通常称该协议族为TCP/IP,但TCP和IP只是其中的两种协议而已,如表1所示。每一层负责不同的功能: 

 

表1 

  分层的概念说起来非常简单,但在实际的应用中非常的重要,在进行网络设置和排除故障时对网络层次理解得很透,将对工作有很大的帮助。例如:设置路由是网络层IP协议的事,要查找MAC地址是链路层ARP的事,常用的Ping命令由ICMP协议来做的。 

  图5显示了各层协议的关系,理解它们之间的关系对下面的协议分析非常重要。 



图5 b.数据发送时是自上而下,层层加码;数据接收时是自下而上,层层解码。 

   当应用程序用TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息 (有时还要增加尾部信息),该过程如图6所示。TCP传给IP的数据单元称作TCP报文段或简称为TCP段。I P传给网络接口层的数据单元称作IP数据报。 通过以太网传输的比特流称作帧(Frame)。 

  数据发送时是按照图6自上而下,层层加码;数据接收时是自下而上,层层解码。 



图6 

c. 逻辑上通讯是在同级完成的 

   垂直方向的结构层次是当今普遍认可的数据处理的功能流程。每一层都有与其相邻层的接口。为了通信,两个系统必须在各层之间传递数据、指令、地址等信息, 通信的逻辑流程与真正的数据流的不同。虽然通信流程垂直通过各层次,但每一层都在逻辑上能够直接与远程计算机系统的相应层直接通信。 

  从图7可以看出,通讯实际上是按垂直方向进行的,但在逻辑上通信是在同级进行的。 



图7



2、过程描述 

  为了更好的分析协议,我们先描述一下上述例子数据的传输步骤。如图8所示: 

1)FTP客户端请求TCP用服务器的IP地址建立连接。 

2)TCP发送一个连接请求分段到远端的主机,即用上述IP地址发送一份IP数据报。 

3) 如果目的主机在本地网络上,那么IP数据报可以直接送到目的主机上。如果目的主机在一个远程网络上,那么就通过IP选路函数来确定位于本地网络上的下一站路由器地址,并让它转发IP数据报。在这两种情况下,IP数据报都是被送到位于本地网络上的一台主机或路由器。 

4) 本例是一个以太网,那么发送端主机必须把32位的IP地址变换成48位的以太网地址,该地址也称为MAC地址,它是出厂时写到网卡上的世界唯一的硬件地 址。把IP地址翻译到对应的MAC地址是由ARP协议完成的。 5) 如图的虚线所示,ARP发送一份称作ARP请求的以太网数据帧给以太网上的每个主机,这个过程称作广播。ARP请求数据帧中包含目的主机的IP地址,其意 思是“如果你是这个IP地址的拥有者,请回答你的硬件地址。” 

6) 目的主机的ARP层收到这份广播后,识别出这是发送端在寻问它的IP地址,于是发送一个ARP应答。这个ARP应答包含I P地址及对应的硬件地址。 

7) 收到ARP应答后,使ARP进行请求—应答交换的IP数据包现在就可以传送了。 

8) 发送IP数据报到目的主机。 



图8



3、实例分析 

  下面通过分析用iris捕获的包来分析一下TCP/IP的工作过程,为了更清晰的解释数据传送的过程,我们按传输的不同阶段抓了四组数据,分别是查找服务器、建立连接、数据传输和终止连接。每组数据,按下面三步进行解释。 


显示数据包 


解释该数据包 


按层分析该包的头信息 

第一组 查找服务器 

1)下图显示的是1、2行的数据 


 

图9



2)解释数据包 

  这两行数据就是查找服务器及服务器应答的过程。 

   在第1行中,源端主机的MAC地址是00:50:FC:22:C7:BE。目的端主机的MAC地址是FF:FF:FF:FF:FF:FF,这个地址是十 六进制表示的,F换算为二进制就是1111,全1的地址就是广播地址。所谓广播就是向本网上的每台网络设备发送信息,电缆上的每个以太网接口都要接收这个 数据帧并对它进行处理,这一行反映的是步骤5)的内容,ARP发送一份称作ARP请求的以太网数据帧给以太网上的每个主机。网内的每个网卡都接到这样的信 息“谁是192.168.113.1的IP地址的拥有者,请将你的硬件地址告诉我”。 

  第2行反映的是步骤6)的内容。在同一个以太 网中的每台机器都会"接收"到这个报文,但正常状态下除了1号机外其他主机应该会忽略这个报文,而1号的主机的ARP层收到这份广播报文后,识别出这是发 送端在寻问它的IP地址,于是发送一个ARP应答。告知自己的IP地址和MAC地址。第2行可以清楚的看出1号回答的信息自己的MAC地址 00:90:27:F6:54:53。 

  这两行反映的是数据链路层之间一问一答的通信过程。这个过程就像我要在一个坐满人的教室找一个叫“张三”的人,在门口喊了一声“张三”,这一声大家都听见了,这就叫广播。张三听到后做了回应,别人听到了没做回应,这样就与张三取得了联系。

3)头信息分析 

  如下图左栏所示,第1数据包包含了两个头信息:以太网(Ethernet)和ARP。 

 

图10



   下表2是以太网的头信息,括号内的数均为该字段所占字节数,以太网报头中的前两个字段是以太网的源地址和目的地址。目的地址为全1的特殊地址是广播地 址。电缆上的所有以太网接口都要接收广播的数据帧。两个字节长的以太网帧类型表示后面数据的类型。对于ARP请求或应答来说,该字段的值为0806。 

  第2行中可以看到,尽管ARP请求是广播的,但是ARP应答的目的地址却是1号机的(00 50 FC 22 C7 BE)。ARP应答是直接送到请求端主机的。 

 

表2



   下表3是ARP协议的头信息。硬件类型字段表示硬件地址的类型。它的值为1即表示以太网地址。协议类型字段表示要映射的协议地址类型。它的值为0800 即表示IP地址。它的值与包含I P数据报的以太网数据帧中的类型字段的值相同。接下来的两个1字节的字段,硬件地址长度和协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位。 对于以太网上IP地址的ARP请求或应答来说,它们的值分别为6和4。Op即操作(Opoperation),1是ARP请求、2是ARP应答、3是 RARP请求和4为RARP应答,第二行中该字段值为2表示应答。接下来的四个字段是发送端的硬件地址、发送端的IP地址、目的端的硬件地址和目的端IP 地址。注意,这里有一些重复信息:在以太网的数据帧报头中和ARP请求数据帧中都有发送端的硬件地址。对于一个ARP请求来说,除目的端硬件地址外的所有 其他的字段都有填充值。 

  表3的第2行为应答,当系统收到一份目的端为本机的ARP请求报文后,它就把硬件地址填进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段置为2,最后把它发送回去。 

 

表3



第二组 建立连接
 

1)下图显示的是3-5行的数据 

 

图11



2)解释数据包 

  这三行数据是两机建立连接的过程。 

   这三行的核心意思就是TCP协议的三次握手。TCP的数据包是靠IP协议来传输的。但IP协议是只管把数据送到出去,但不能保证IP数据报能成功地到达 目的地,保证数据的可靠传输是靠TCP协议来完成的。当接收端收到来自发送端的信息时,接受端详发送短发送一条应答信息,意思是:“我已收到你的信息 了。”第三组数据将能看到这个过程。TCP是一个面向连接的协议。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。建立连接的过程就是 三次握手的过程。

  这个过程就像要我找到了张三向他借几本书,第一步:我说:“你好,我是担子”,第二步:张三说:“你好,我是张三”,第三步:我说:“我找你借几本书。”这样通过问答就确认对方身份,建立了联系。

下面来分析一下此例的三次握手过程。 

1))请求端208号机发送一个初始序号(SEQ)987694419给1号机。 

2)) 服务器1号机收到这个序号后,将此序号加1值为987694419作为应答信号(ACK),同时随机产生一个初始序号(SEQ)1773195208,这 两个信号同时发回到请求端208号机,意思为:“消息已收到,让我们的数据流以1773195208这个数开始。” 

3))请求端208号机收到后将确认序号设置为服务器的初始序号(SEQ)1773195208加1为1773195209作为应答信号。 

  以上三步完成了三次握手,双方建立了一条通道,接下来就可以进行数据传输了。 

  下面分析TCP头信息就可以看出,在握手过程中TCP头部的相关字段也发生了变化。 

3)头信息分析 

  如图12所示,第3数据包包含了三头信息:以太网(Ethernet)和IP和TCP。 

  头信息少了ARP多了IP、TCP,下面的过程也没有ARP的参与,可以这样理解,在局域网内,ARP负责的是在众多联网的计算机中找到需要找的计算机,找到工作就完成了。 

  以太网的头信息与第1、2行不同的是帧类型为0800,指明该帧类型为IP。 

 

图12



IP协议头信息 

   IP是TCP/IP协议族中最为核心的协议。从图5可以看出所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输的,有个形象的比喻 IP协议就像运货的卡车,将一车车的货物运向目的地。主要的货物就是TCP或UDP分配给它的。需要特别指出的是IP提供不可靠、无连接的数据报传送,也 就是说I P仅提供最好的传输服务但不保证IP数据报能成功地到达目的地。看到这你会不会担心你的E_MAIL会不会送到朋友那,其实不用担心,上文提过保证数据正 确到达目的地是TCP的工作,稍后我们将详细解释。 

  如表4是IP协议的头信息。 

 

表4 IP数据报格式及首部中的各字段



  图12中所宣布分45 00—71 01为IP的头信息。这些数是十六进制表示的。一个数占4位,例如:4的二进制是0100 

  4位版本:表示目前的协议版本号,数值是4表示版本为4,因此IP有时也称作IPv4; 

  4位首部长度:头部的是长度,它的单位是32位(4个字节),数值为5表示IP头部长度为20字节。 

   8位服务类型(TOS):00,这个8位字段由3位的优先权子字段,现在已经被忽略,4位的TOS子字段以及1 位的未用字段(现在为0)构成。4位的TOS子字段包含:最小延时、最大吞吐量、最高可靠性以及最小费用构成,这四个1位最多只能有一个为1,本例中都为 0,表示是一般服务。 

  16位总长度(字节数):总长度字段是指整个IP数据报的长度,以字节为单位。数值为00 30,换算为十进制为48字节,48字节=20字节 的IP头+28字节的TCP头,这个数据报只是传送的控制信息,还没有传送真正的数据,所以目前看到的总长度就是报头的长度。 

  16位标识:标识字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1,第3行为数值为30 21,第5行为30 22,第7行为30 23。分片时涉及到标志字段和片偏移字段,本文不讨论这两个字段。

8 位生存时间(TTL):TTL(time-to-live)生存时间字段设置了数据报可以经过的最多路由器数。它指定了数据报的生存时间。ttl的初始值 由源主机设置,一旦经过一个处理它的路由器,它的值就减去1。可根据TTL值判断服务器是什么系统和经过的路由器。本例为80,换算成十进制为 128,WINDOWS操作系统TTL初始值一般为128,UNIX操作系统初始值为255,本例表示两个机器在同一网段且操作系统为WINDOWS。 

  8位协议:表示协议类型,6表示传输层是TCP协议。 

   16位首部检验和:当收到一份I P数据报后,同样对首部中每个16 位进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应 该为全1。如果结果不是全1,即检验和错误,那么IP就丢弃收到的数据报。但是不生成差错报文,由上层去发现丢失的数据报并进行重传。 

   32位源IP地址和32位目的IP地址:实际这是IP协议中核心的部分,但介绍这方面的文章非常多,本文搭建的又是一个最简单的网络结构,不涉及路由, 本文对此只做简单介绍,相关知识请参阅其它文章。32位的IP地址由一个网络ID和一个主机ID组成。本例源IP地址为C0 A8 71 D0,转换为十进制为:192.168.113.208; 目的IP地址为C0 A8 71 01,转换为十进制为:192.168.113.1。网络地址为192.168.113,主机地址分别为1和208,它们的网络地址是相同的所以在一个网 段内,这样数据在传送过程中可直接到达。 

TCP协议头信息 

  如表5是ICP协议的头信息。 

 

表5 TCP包首部



  第三行TCP的头信息是:04 28 00 15 3A DF 05 53 00 00 00 00 70 02 40 00 9A 8D 00 00 02 04 05 B4 01 01 04 02 

   端口号:常说FTP占21端口、HTTP占80端口、TELNET占23端口等,这里指的端口就是TCP或UDP的端口,端口就像通道两端的门一样,当 两机进行通讯时门必须是打开的。源端口和目的端口各占16位,2的16次方等于65536,这就是每台电脑与其它电脑联系所能开的“门”。一般作为服务一 方每项服务的端口号是固定的。本例目的端口号为00 15,换算成十进制为21,这正是FTP的默认端口,需要指出的是这是FTP的控制端口,数据传送时用另一端口,第三组的分析能看到这一点。客户端与服务 器联系时随机开一个大于1024的端口,本例为04 28,换算成十进制为1064。你的电脑中了木马也会开一个服务端口。观察端口非常重要,不但能看出本机提供的正常服务,还能看出不正常的连接。 Windows察看端口的命令时netstat。 

  32位序号:也称为顺序号(Sequence Number),简写为SEQ,从上面三次握手的分析可以看出,当一方要与另一方联系时就发送一个初始序号给对方,意思是:“让我们建立联系吧?”,服务 方收到后要发个独立的序号给发送方,意思是“消息收到,数据流将以这个数开始。”由此可看出,TCP连接完全是双向的,即双方的数据流可同时传输。在传输 过程中双方数据是独立的,因此每个TCP连接必须有两个顺序号分别对应不同方向的数据流。 

  32位确认序号:也称为应答号 (Acknowledgment Number),简写为ACK。在握手阶段,确认序号将发送方的序号加1作为回答,在数据传输阶段,确认序号将发送方的序号加发送的数据大小作为回答,表 示确实收到这些数据。在第三组的分析中将看到这一过程。 

  4位首部长度:。这个字段占4位,它的单位时32位(4个字节)。本例值为7,TCP的头长度为28字节,等于正常的长度2 0字节加上可选项8个字节。,TCP的头长度最长可为60字节(二进制1111换算为十进制为15,15*4字节=60字节)。 

  6个标志位。 

  URG 紧急指针,告诉接收TCP模块紧要指针域指着紧要数据 

  ACK 置1时表示确认号(为合法,为0的时候表示数据段不包含确认信息,确认号被忽略。 

  PSH 置1时请求的数据段在接收方得到后就可直接送到应用程序,而不必等到缓冲区满时才传送。 

  RST 置1时重建连接。如果接收到RST位时候,通常发生了某些错误。 

  SYN 置1时用来发起一个连接。 

  FIN 置1时表示发端完成发送任务。用来释放连接,表明发送方已经没有数据发送了.

图13的3个图分别为3-5行TCP协议的头信息,这三行是三次握手的过程,我们看看握手的过程标志位发生了什么? 

  如图13-1请求端208号机发送一个初始序号(SEQ)987694419给1号机。标志位SYN置为1。 

  如图13-2服务器1号机收到这个序号后,将应答信号(ACK)和随机产生一个初始序号(SEQ)1773195208发回到请求端208号机,因为有应答信号和初始序号,所以标志位ACK和SYN都置为1。 

  如图13-3请求端208号机收到1号机的信号后,发回信息给1号机。标志位ACK置为1,其它标志为都为0。注意此时SYN值为0,SYN是标示发起连接的,上两部连接已经完成。 

 

  16位窗口大小:TCP的流量控制由连接的每一端通过声明的窗口大小来提供。窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接收的字节。窗口大小是一个16字节字段,因而窗口大小最大为65535字节。 

  16位检验和:检验和覆盖了整个的TCP报文段: TCP首部和TCP数据。这是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。 

  16位紧急指针:只有当U R G标志置1时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。 

   选项:图13-1和图13-2有8个字节选项,图13-3没有选项。最常见的可选字段是最长报文大小,又称为MSS (Maximum Segment Size)。每个连接方通常都在握手的第一步中指明这个选项。它指明本端所能接收的最大长度的报文段。图13-1可以看出208号机可以接受的最大字节数 为1460字节,1460也是以太网默认的大小,在第三组的数据分析中可以看到数据传送正是以1460字节传送的。 

握手小结 

  上面我们分开讲了三次握手,看着有点散,现在小结一下。 

 

第三组 数据传输 

1)下图显示的是57-60行的数据

 

图14



2)解释数据包 

  这四行数据是数据传输过程中一个发送一个接收的过程。 

   前文说过,TCP提供一种面向连接的、可靠的字节流服务。当接收端收到来自发送端的信息时,接受端要发送一条应答信息,表示收到此信息。数据传送时被 TCP分割成认为最适合发送的数据块。一般以太网在传送时TCP将数据分为1460字节。也就是说数据在发送方被分成一块一块的发送,接受端收到这些数据 后再将它们组合在一起。 

  57行显示1号机给208号机发送了大小为1514字节大小的数据,注意我们前文讲过数据发送时是层层加协议头的,1514字节=14字节以太网头 + 20字节IP头 + 20字节TCP头 + 1460字节数据 

  58行显示的应答信号ACK为:1781514222,这个数是57行得SEQ序号1781512762加上传送的数据1460,208号机将这个应答信号发给1号机说明已收到发来的数据。 

  59、60行显示的是继续传送数据的过程。

这个过程就像我向张三借书,借给我几本我要说:“我已借了你几本了。”,他说:“知道了”。 

3)头信息 

  图15-1和图15-2分别是57行和58行的头信息,解释参考第二组。 

 

第四组 终止连接 

1)下图显示的是93-96行的数据

 

图16



2)解释数据包 

93-96是两机通讯完关闭的过程。 

  建立一个连接需要三次握手,而终止一个连接要经过4次握手。这是因为一个TCP连接是全双工(即数据在两个方向上能同时传递),每个方向必须单独地进行关闭。4次握手实际上就是双方单独关闭的过程。 

  本例文件下载完后,关闭浏览器终止了与服务器的连接图16的93-96行显示的就是终止连接所经过4次握手过程。 

  93行数据显示的是关闭浏览器后,如图17-1所示208号机将FIN置1连同序号(SEQ)987695574发给1号机请求终止连接。 

  94行数据和图17-2显示1号机收到FIN关闭请求后,发回一个确认,并将应答信号设置为收到序号加1,这样就终止了这个方向的传输。 

  95行数据和图17-3显示1号机将FIN置1连同序号(SEQ)1773196056发给208号机请求终止连接。 

  96行数据和图17-4显示208号机收到FIN关闭请求后,发回一个确认,并将应答信号设置为收到序号加1,至此TCP连接彻底关闭。 

3)头信息 


 

六、扫描实例 

   下面我们再举个ping的实例,测试某台计算机是否通,最常用的命令就是ping命令。Ping 一台计算机,出现如图18所示界面就是通,出现如图19所示界面就是不通,不通有两种情况,一是该计算机不存在或没接网线,二是该计算机安装了防火墙并设 置为不允许ping。如何区别这两种情况呢?下面还是利用iris跟踪上述情况。 



图18





图19



  如图20是ping通的情况。 

  如图21是ping不通该计算机不存在的情况。从图可以看出ARP请求没有回应。 

  如图22是ping不通,该计算机存在但安装了防火墙的情况。从图可以看出ARP请求有回应。但ICMP请求没回应。 

  从分析可以看出虽然后两种情况的表面现象是一样的,但实质确是截然相反的。通过头信息可以清楚的看出PING是 

  ICMP协议来完成的,通讯过程是在第三层完成的,没有用到第四层的TCP协议。 

 

图20



 

图21



 

图22




七、后记 

   本文不是个教程,许多问题都没有涉及到,比如TCP重发、IP分解、路由等,只是提出个学习思路,希望能起到抛砖引玉的作用。TCP/IP协议族是非常 复杂的,但只要理解了还是不难学的。最后向感兴趣的朋友提个问题:分别telnet三台机器,一台正常23端口开放,一台网是通的但23端口没开放,另外 一台是不存在的。用我们学过的方法跟踪一下,比较三个的不同。其实这就是用TCP扫描判断对方机器是否在线的一种方式。

转载于:https://www.cnblogs.com/Bonker/p/3174913.html

相关文章:

手动部署OpenStack环境(五:新建网络及部署虚拟机)

任务五、新建网络及部署虚拟机 5.1、配置安全组规则 5.2、新建网络 5.3、创建云主机 任务五、新建网络及部署虚拟机 5.1、配置安全组规则 5.1.1、配置安全组; 5.2、新建网络。 5.2.1、创建外部网络; 5.2.2、网络地址为外部网络连接的子网地址&#xff1b…

C++基础day01 程序设计方法的发展历程

类把属性和方法作了封装! 总结: 面向过程程序设计:数据结构 算法 主要解决科学计算问题,用户需求简单而固定 特点: 分析解决问题所需要的步骤 利用函数实现各个步骤 依次调用函数解决问题 问题: 软件可重用…

【android】android中activity的生命周期

activity生命周期: 实例代码: 1 public class DemoActivity extends Activity {2 3 //1、activity第一次被创建的时候,执行4 Override5 public void onCreate(Bundle savedInstanceState) {6 super.onCreate(savedIn…

Xcode消除编译器警告

Whenever,Xcode警告对于我们来说都相当重要,提醒我们可能存在的错误。但是有时候,我们知道一切都好,everything is in the palm of my hand,我们想要消除那些警告。自己项目的警告 比如我们定义一个designated initial…

手动部署OpenStack环境(六:出现的问题与解决方案总结)

排错一:keystone服务安装中demo用户表单没信息。 排错思路: 组件安装是否有问题;用户创建畲缶有问题;用户认证信息是否合适;原因:用户的认证信息配置错误。 解决方案: a)删除有关demo用户的所有…

一劳永逸,iOS 自定义 ActionSheet 封装流程

原文链接:http://www.jianshu.com/p/cfb87a7db7b1本文为 iOS 自定义视图封装《一劳永逸》系列的第四期,旨在提供封装思路,结果固然重要,但理解过程才最好。授人以鱼不如授人以渔。 —— 由卖报的小画家Sure分享前言 本文为iOS自定…

cocoapods更新

使用sudo gem install cocoapods更新提示: ERROR: While executing gem ... (Errno::EPERM) Operation not permitted 改为:sudo gem install -n /usr/local/bin cocoapods --pre刷刷刷完成更新。但是马上发下更新后使用pod install又发现一个问题 The …

创建对象_工厂方法(Factory Method)模式 与 静态工厂方法

工厂方法模式: 定义:为创建对象定义一个接口,让子类决定实例化哪个类。工厂方法让一个类的实例化延迟至子类。应用场景:客户类不关心使用哪个具体类,只关心该接口所提供的功能;创建过程比较复杂&#xff0c…

数据通信技术(一:IP划分)

一、某公司生产部有50人,销售部有100人,财务部有25人,客服部有12人,没个员工配置一台主机,该公司有192.168.100.1/24的网段可用,应该如何划分子网。 销售部(100)台:/25 …

团队作业—第二阶段06

站立会议: 继续数据库的连接编程。 任务进度: 实现数据的输出。 站立会议照片: 任务看板: 燃尽图: 转载于:https://www.cnblogs.com/cpljlgs/p/5546157.html

Fade 数字切换动效

原文链接:http://www.jianshu.com/p/983674e6f4ef根据原型高度还原的一个动效作品。希望可以通过审核。谢谢。 —— 由Bear1494735376123分享欢迎同样喜爱动效的你加入 iOS动效特攻队–>QQ群:547897182 iOS动效特攻队–>熊熊:64807025…

fieldset 使用小案例

有初学者问到如何做出如下页面: 对应的代码如下: <fieldset><legend>★审核状态</legend><input name"state" type"radio" class"input1" value"1" />已审核<input name"state" type"radio…

数据通信技术(二:交换机配置管理)

交换机配置与管理&#xff08;思科模拟器&#xff09; 1.从用户模式进入特权模式,并进入配置模式设置进入特权模式的密码; 2.进入交换机的端口模式并进行端口状态的设置; 用新密码登录并查看接口状态信息,重启交换机;4.硬件和软件版本查询: 5.设备CPU的利用率: 6.检查设备的MA…

iOS之各种区别

作者 APP叫我取个帅气的昵称 关注 2017.05.15 10:47* 字数 140 阅读 1273评论 7喜欢 51写在前面&#xff1a;本文持续更新&#xff0c;也欢迎简友提供更多的关于iOS&#xff08;包括swift&#xff09;中的区别 1. _ _block和 _ _weak修饰符的区别的&#xff1a; (1). _ _block不…

lightoj 1014

lightoj 1014 Ifter Party 链接&#xff1a;http://www.lightoj.com/volume_showproblem.php?problem1014 题意&#xff1a;给你两个数 p, l&#xff0c;求 cha&#xff08;cha p-l&#xff09;的约数&#xff0c;当约数大于 l 时&#xff0c;按从小到大输出 思路&#xff1a…

poj 2681 字符串

http://poj.org/problem?id2681 给你任意长度的字符串&#xff0c;找出两串字符中不相同的字符个数&#xff08;总数&#xff09; #include<string> #include<cstring> #include<iostream> #include<cstdio> using namespace std; int main() {int n;…

数据通信技术(三:VLAN划分)

VLAN划分 1.配置环境 &#xff1a;创建4台PC机&#xff0c;并为PC机配置IP PC0&#xff1a;192.168.1.1/24 PC1&#xff1a;192.168.1.2/24 PC2&#xff1a;192.168.1.3/24 PC3&#xff1a;192.168.1.4/24 2.修改交换机名称&#xff1a; 创建VLAN1和VLAN2&#xff1a;…

CSS(2 )-- CSS样式大全

常用css样式大全Author&#xff1a;xu_shuyi201504039.CSS颜色代码大全http://www.cnblogs.com/axing/archive/2011/04/09/CSS.html1.CSS文字属性color : #999999; /*文字颜色*/font-family : 宋体,sans-serif; /*文字字体*/font-size : 9pt; /*文字大小*/font-style:itelic; /…

java io读书笔记(6) Writing Arrays of Bytes

显而易见&#xff0c;一次性写出一堆数据&#xff0c;要比一个byte一个byte的写&#xff0c;快多了&#xff0c;因此&#xff0c;outputstream&#xff0c;给出了2个增强型的write&#xff1a; public void write(byte[] data) throws IOException public void write(byte[] da…

iOS 自定义双向滑块Slider

ZPSlider 一个双向滑块的Slider 前提 这个是在一次和朋友吃饭的时候&#xff0c;我们唠嗑的时候他说的一个需求。因为系统的Slider是只有一个滑块的&#xff0c;而且没有分段滑动的效果。 这不最近都在研究这么个需求。 How to use it -(instancetype)initWithFrame:(CGRec…

数据通信技术(四:链路聚合)

1、修改交换机名称 2、配置A交换机数据 3、配置B交换机数据 4、创建VLAN 5、互拼验证 6、去掉一条链路再进行验证 数据通信技术&#xff08;一&#xff1a;IP划分&#xff09; https://blog.csdn.net/qq_37823605/article/details/90345408 数据通信技术&#xff08;二&#xf…

iOS图片,视频上传视频内容旋转

#前言 我最近在接手一个智能盒子的iOS应用&#xff0c;上面有一个功能是这样的。把你本地的照片和视频可以甩屏到你绑定的盒子上。 我的上一位前辈做的时候必须要求再同一个局域网&#xff0c;但是当我做的时候要求不同的局域网也要实现这样的一个功能&#xff0c;优化用户的使…

jackson 解析json问题

1、json串中有key为A&#xff0c;但指定转换的mybean中未定义属性A&#xff0c;会抛异常。处理&#xff1a;mapper.configure(Feature.FAIL_ON_UNKNOWN_PROPERTIES, false)&#xff0c;加上这一条&#xff0c;就没问题了&#xff0c;正常转换。 2、 默认的json串&#xff0c;如…

【转】UIColor对颜色的自定义

原文网址&#xff1a;http://blog.sina.com.cn/s/blog_5f19ccb10101bhqh.html 在iOS开发中&#xff0c;我们使用UIColor来对我们的界面进行颜色设置&#xff0c;一般我们通过以下两种方法使用UIColor&#xff1a;1,label.textColor [UIColor blueColor];2,label.textColor [U…

数据通信技术(八:OSPF单区域配置实验)

OSPF单区域配置实验(Cisco) 一&#xff0e;知识准备 1.掌握了OSPF动态路由协议的定义和功能&#xff1b; 2.掌握了OSPF动态路由协议的特征和工作原理。 二&#xff0e;实验目的 掌握OSPF动态路由单区域的基本配置方法和结果验证。 掌握OSPF单区域配置的作用 三&#xff…

redis在php中的使用介绍

redis介绍 redis是一个key-value存储系统。和Memcached类似&#xff0c;它支持存储的value类型相对更多&#xff0c;包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hashs&#xff08;哈希类型&#xff09;。这些数据类型都 支持push/pop、add/remo…

控制发光二极管

一 LED驱动的实现原理 尽管Linux驱动直接与硬件打交道&#xff0c;但并不是Linux驱动直接向硬件中的内存写数据&#xff0c;而是与本机的I/O内存进行交互。每一个连接Linux的硬件在I/O内存中都会有映射首地址&#xff0c;开发板上的LED也有其映射首地址。 二 编写LED驱动 第一…

iOS 跑马灯之 TXScrollLabelView

前言 前段时间在开发一个广播的功能&#xff0c;网上也自己找了一些库&#xff0c;没有发现非常好用的&#xff0c;于是自己抽时间写了一个&#xff0c;在 Github 上发布一天收获六十多个 star&#xff0c;这里首先感谢大家在微博上的转发&#xff0c;使得 TXScrollLabelView 被…

数据通信技术(六:静态路由实验)

数据通信静态路由实验 1、R1路由的端口配置 2、R2路由的端口配置 3、R3路由器端口配置 4、互通性验证 5、拓扑结构 数据通信技术&#xff08;一&#xff1a;IP划分&#xff09; https://blog.csdn.net/qq_37823605/article/details/90345408 数据通信技术&#xff08;二&#…

172. Factorial Trailing Zeroes

/**172. Factorial Trailing Zeroes *2016-6-4 by Mingyang* 首先别忘了什么是factorial&#xff0c;就是阶乘。那么很容易想到需要统计* (2,5)对的个数&#xff0c;因为2510。但是这个条件放松一下就会发现其实只要数5的个数就好了&#xff0c;* 因为2实在是比5要多的多。那么…