第一章 概述

协议栈

应用层 HTTP,FTP  
运输层 TCP, UDP 段(Segment)
网络层 IP, ICMP, IGMP 数据报(Datagram)
链路层   帧(Frame)
物理层    

应用层关心的是应用程序的细节,而不是数据在网络中的传输活动;下面四层对应用程序一无所知,但它们要处理所有的通信细节。

互联网地址

端口号

周知端口号(Well-Known Ports) 1-255
Unix系统占用端口 256-1023
临时可分配端口 1024-5000
为其他服务预留端口 5001-

大多数TCP/IP分配的端口在1024-5000之间。

第二章 链路层

环回接口

环回接口:127.0.0.1 or localhost,可简单理解为本机的ip地址。

注:IP输出函数的入口是和IP输入函数的出口都是网络层,下图是链路层的环回接口如何处理来自网络层的IP数据报。

注意点1:传给环回接口(127.0.0.1)的任何数据均作为IP输入(即从链路层传给网络层)

注意点2:传给广播和多播的数据复制一份传给环回接口(即广播和多播地址包含主机本身)

注意点3:任何传给该主机IP地址的数据均送到环回接口(比如该主机IP为172.18.156.139,则从网络层传到链路层的以该IP为目的地址的数据报,均送到环回接口再返回给网络层,所以一个传给环回接口的IP数据报不能在任何网络上出现)

最大传输单元MTU

最大传输单元MTU表示链路层数据帧所能传输的最大字节数。

如果IP数据报的长度比链路层的MTU还大,那么IP层就需要分片。

路径MTU:两台主机路径中的最小的MTU。

第三章 IP :网际协议

IP协议提供不可靠,无连接的数据报传送服务。
不可靠:不保证IP数据报成功到达目的地。
无连接:IP不维护后续数据报的状态信息(不一定按序发送和接收)。

IP首部

IP首部一般为20个字节,除非包含选项字段。

版本:IPv4或IPv6

首部长度:首部的长度,以4 byte为单位,包含选项字段。该字段共4 bit,因此IP首部最长为60 Byte,且必须为4 Byte的倍数

服务类型

总长度:整个IP数据报的长度,以byte为单位。该字段共16 bit,所以IP数据报最长为2^16 byte

标识:唯一标识主机发送的每一份数据报

TTL:Time-To-Live,数据报可以经过的最多路由数

协议:识别是哪个协议向IP协议传送数据,包括TCP,UDP,ICMP,IGMP……

首部检验和:根据IP首部计算的检验和码(将该字段置0,对首部中每16bit进行二进制反码求和,结果存在该字段;接收方收到后对首部中没16bit进行二进制反码求和,若结果全为全1,则正确)(注意是对IP首部进行检验,而不是IP首部+IP数据,而UDP的检验和是针对UDP首部+UDP数据)(但是为什么要反码?)

IP地址:32bit,记录格式一般为点分十进制(e.g. 192.168.1.1)

为什么要用反码求和而不是原码求和来检验首部和?

1)首先,我们要明确反码求和和原码求和的区别,反码求和溢出时,即最高位有进位,则将该进位加到最低位上;而原码求和则是丢弃该进位。

2)其次,明确Big Endian字节序和Little Endian字节序:

TCP/IP网络传输时,先传0-7bit,其次8-15bit,然后16-23bit,最后24-31bit(从小到大),这叫网络字节序,也叫Big Endian字节序。

Big Endian字节序:最高字节在地址最低位,最低字节在地址最高位

Little Endian字节序:反之

比如将 0x1234 存入 0x0000 开始的内存

Memery     Big Endian    Little Endian

0x0000     0x12            0x34

0x0001     0x34            0x12

3)那么,使用反码求和就可以不依赖系统是Big Endian字节序还是Little Endian字节序,而原码求和会受到字节序的影响。

4)最后,举个例子就明白了。

原码:

10000000 00000000

+10000010 00000000

=00000010 00000000

原码,使用另一种字节序:

00000000 10000000

+00000000 10000010

=00000001 00000010

反码:

01111111 11111111

+01111101 11111111

=11111101 11111111

反码,使用另一种字节序:

11111111 01111111

+11111111 01111101

=11111111 11111101

可以看到,反码求和,改变了字节序,结果相同,只是字节顺序相应地也交换了;而原码的结果就不同了。

IP路由选择

IP从TCP,UDP,ICMP和IGMP接收数据报(即本地生成的数据)并进行发送,或者从一个网络接口接收数据进行转发或接收。

1)当数据来自TCP,UDP,ICMP和IGMP(从上传递下来的):

传递给链路层

2)当数据报来自网络接口(从下传递上来的):

(1)IP首先判断IP地址是否为本地地址或者广播地址,如果是就送到首部协议段所指定的协议模块进行处理(继续向上传递)

(2)如果不满足这些地址,且IP层设置为了路由功能,那么就对数据报进行转发,否则数据报被丢弃

那么,什么叫IP的路由功能呢?有了路由功能怎么对数据报进行转发呢?

当收到一个IP数据报的时候,IP并不知道该数据报达到最终目的的完整路径,所有的IP路由选择只为数据报提供下一站路由器的IP地址,IP的路由选择功能为:

1)搜索路由表,寻找目的IP地址(网络号+主机号),找到则发给该行记录的下一个路由器

2)若1)失败,则继续搜索路由表,寻找目的IP地址的所在网络号,找到则发给该行记录的下一个路由器

3)若2)失败,则继续搜索路由表,寻找叫做“默认”的那行记录,找到则发给该行记录的下一个路由器

4)若3)失败,则该数据报就不能被传送

子网掩码

IP地址=网络号+子网号+主机号

子网掩码即与IP地址对应的网络号和子网号为1,主机号为0的32个bit

子网的划分缩减了路由表的规模:

为了到达IP地址为140.252.*.*的主机,路由表现在只需记录到达子网络140.252的下一跳,而不需要记录该子网下的所有主机的下一跳。

第四章 ARP:地址解析协议

链路层的以太网地址是48位(如:‎20-6A-8A-4B-E9-2F),而网络层的IP地址是32位(如:172.18.156.36)。

ARP和RARP就是为IP地址与硬件地址之间提供动态转换

当用户输入ftp://www.abc.com(或http://www.baidu.com)的时候,发生的事情如下:

  • 应用层:利用DNS将主机名转换为IP地址
  • 运输层:运输层得到从应用层传下来的IP地址,准备利用得到的IP地址建立TCP连接
  • 网络层:网络层得到从运输层传下来的TCP段,封装为IP数据报(该数据报用于建立TCP连接)
  • 链路层:链路层得到从网络层传下来的IP数据报,在该以太网内进行广播,询问每一台主机哪个包含该IP地址,接着某主机对该广播应答,然后链路层就知道将该帧发到哪台主机去才能正确达到目的地。

第五章 RARP:逆地址解析协议

具有本地磁盘的系统引导时,一般是从磁盘上的配置文件中读取IP地址。但无盘机则需要利用RARP来获得它自己的IP地址。

无盘机可以读取自己的硬件地址,然后广播一份RARP请求(含其硬件地址)给该网内的其他主机,请求某个主机响应该无盘系统的IP地址(在RARP应答中)。

第六章 ICMP:Internet控制报文协议

ICMP时间戳请求与应答

ICMP时间戳请求允许系统向另一个系统查询当前的时间。

请求端填写发起时间戳,然后发送请求报文,应答端收到报文的同时填写接收时间戳和传送时间戳,然后发送应答报文。

其中发起时间戳是指请求端的发送时间,而传送时间戳是指应答端的发送时间。一般设接收时间戳和传送时间戳为相同的值。

假如请求端收到的应答报文如下:

其中,发起时间比接收时间早6ms,而rtt=2ms,所以请求端的时间比应答端的时间早7ms。

为什么,见下图自己理解。

第七章 Ping程序

Ping程序发送ICMP回显报文给目标主机,并等待返回ICMP回显应答。

Ping程序发送的是ICMP报文,是对两个TCP/IP系统连通性进行测试的基本工具。

第八章 Traceroute程序

Traceroute程序可以让我们看到IP数据报从本主机到另一台主机所经过的路由的地址。

Traceroute程序使用ICMP报文和IP数据报中的TTL字段来实现:

(1)发送端发送一个TTL为1的UDP数据报,收到该数据报的路由器将TTL减一,发现TTL为0,于是丢弃该数据报并发回一份ICMP超时报文;

(2)发送端接收到ICMP超时报文的时候就可以提取里面的IP地址,由此得知第一跳的IP,然后发送一个TTL为2的UDP数据报,接受到的路由器将TTL减一,如果TTL不为0则继续转发,如果为0则丢弃该数据报并发回一份ICMP超时报文;

(3)以此类推,直到目的主机接收到该UDP数据报,发现自己是目的主机,则丢弃该数据报并发回一份ICMP端口不可达的报文。

(4)发送端根据收到的是ICMP超时报文还是ICMP端口不可达报文来确定是否成功达到目的主机。

第九章 IP选路

路由表标志

U 该路由可用

G 该路由是一个网关,如果没有此标志,说明下一跳就是目的地

H 该路由的目的地址为主机地址,无此标志表示目的地址为网络地址(网络地址的主机号全为0)

D 该路由由重定向报文创建

M 该路由被重定向报文修改

  • G区别了间接路由和直接路由,有G即为间接路由

    • 发往直接路由的分组包含目的地址的IP和链路层地址
    • 发往间接路由的分组包含目的地址的IP,链路层地址为间接路由的地址(即目的IP地址是一致的,但链路层地址永远为下一跳的地址)
  • H标志区别了主机地址和网络地址,有H即为主机地址(Host)
    • 下一跳的地址是一个主机地址,一个IP地址过来,查找路由表的时候,该IP地址必须跟该行的目的IP地址完全匹配才是对的
    • 下一跳的地址是一个网络地址,一个IP地址过来,查找路由表的时候,只要该IP地址的网络部分与该行的目的IP地址的网络部分匹配即可,不必管主机部分(注意:路由表的每一行都隐藏了目的IP地址的子网掩码,所以它可以确定目的IP地址的网络部分)

IP路由选择例子(详见第三章)

如上图,假如目的地址是140.252.13.33。

查找路由表,发现第一第二行是主机地址,均不完全匹配;第三行是default,暂时跳过;第四行的网络部分与该IP地址的网络部分相同,所以使用第四行的数据,将IP数据报经接口emd0发给140.252.13.34。

疑问:虽然方法正确,但是IP数据报并没有发送给正确的目的地(140.252.13.33),这只是路由表的问题吗?

不知何去何从的IP数据报

假如路由表中没有找到合适的行(路由表中也没有default项),那么路由会如何处理呢?当然是丢弃该IP数据报,然后……

(1)如果该IP数据报是本机产生的,那么就给发送该数据报的应用程序返回一个差错

(2)如果该IP数据报不是本机产生的,那么就给原始发送端发送一份ICMP主机不可达的差错报文

ICMP重定向报文

ICMP重定向报文是ICMP控制报文中的一种。

在特定的情况下,当路由器检测到一台主机使用非优化路由的时候,它会向主机发送一个ICMP重定向报文,请求主机改变路由表。

同时,负责任的路由器也会把初始数据报向它的目的地转发。

什么情况下路由器会发送ICMP重定向报文呢?

如图,当路由器发现源IP地址与下一跳属于同一网段时。

第十章 动态选路协议

选路协议的分类

静态选路:配置接口时,以默认方式生成路由表项(路由表项就是表的每一行数据)或使用route命令来手工添加表项,或通过ICMP重定向生成表项

动态选路:

  • 内部网关协议IGP(Interior Gateway Protocol)

    • 选路信息协议RIP(Routing Information Protocol)
    • 开放最短路径优先OSPF(Open Shortest Path First)
  • 外部网关协议EGP(Exterier Gateway Protocol)
    • 边界网关协议BGP(Border Gateway Protocol)

动态选路的工作原理

路由表中有一个常驻内存的程序,叫路由守护程序(routing daemon)。该程序与其相邻的路由表进行通信,根据得到的信息更新路由表。

RIP(Routing Information Protocol)选路信息协议

工作过程

(1)初始化

  在启动一个路由守护程序时,它先判断启动了哪些接口,并在每个接口上发送一个请求报文,要求其他路由器发送完整路由表

  • 在点对点链路中,该请求是发送给其他终点的
  • 如果网络支持广播的话,这种请求是以广播形式发送的

(2)接收到请求

  • 如果这个请求是特殊请求(报文中设置了某字段),那么路由器就将完整的路由表发送给请求者
  • 否则,就处理请求中的每一个表项,如果有连接到指明地址的路由,则将与其的距离设置成请求中的值,否则置为16(16表示"无穷大"),然后发回响应

  例如,有4个路由ABCD,B和AC相连,不与D相连。某时,A通知B,C和D与B的距离为1。B收到后,更新了与C的距离为1,但是它与D不相连,于是更新了与D的距离为16

(3)接收到响应

  更新路由表

(4)定期选路更新。每过30秒,所有或部分路由器会将其完整路由表发送给相邻路由器

(5)触发更新

  每当一条路由的距离发生变化时,就对它进行更新。不需要发送完整路由表,而只需要发送那些发生变化的表项。每条路由都有与之相关的定时器。如果发现一条路由在3分钟内未更新,就将该路由的距离设置成无穷大(16),并标注为删除。这意味着已经在6个30秒更新时间里没收到通告该路由的路由器的更新了。再过60秒,将从本地路由表中删除该路由,以保证该路由的失效已被传播开

OSPF(Open Shortest Path First)开放最短路径优先

RIP采用距离向量,而OSPF采用链路状态信息来更新路由表(RIP中,路由表交换的信息是路由与路由的距离)。

OSPF比RIP收敛快(一旦有路由器崩溃,RIP中消息传得太慢),因此规模较小的网络可以采用RIP,规模较大应采用OSPF。

OSPF通过路由器之间通告网络接口的状态来建立链路状态数据库,生成最短路径树,每个OSPF路由器使用这些最短路径构造路由表。

例如,A连B和D,B连C和D。开始,AB通信,B告诉A,BC=1,BD=1。那么A就可以计算得出,AB=1,AC=2,AD=2。然后AD通信,D告诉A,BD=1。然后A权衡,发现通过D到B则AB=2,通过B到B则AB=1,则取AB=1;其次,通过B到D,AD=2,通过D到D,AD=1,则取AD=1。最终A的路由表为,AB=1,AD=1,AC=2。

通过这里例子可以可以看到,RIP只保存到达目标地址的下一跳路由的信息;而OSPF保存了局域网内所有路由的信息。

第十四章 DNS:域名系统

含义:Domain Name System,域名系统

功能:提供域名和IP地址相互映射

为什么需要DNS?

为了避免记住纯数字组成的IP地址,人们发明了域名。为此,域名与IP地址之间要有映射关系。

刚开始,每台主机有一个HOSTS文件(位置:C:\Windows\System32\drivers\etc\hosts),里面存放着世界上所有域名和IP的映射关系,这样域名解析的任务每台计算机都可以独立完成。但是这样HOSTS文件过于分散,不易统一管理;而且IP越来越多,这个文件越来越大。

那么最简单的,如果世界上有一台服务器,存储着世界上所有域名和IP的映射关系,即整个世界只有一份HOSTS文件,那么确实易于管理,所有计算机上网的时候就可以去访问它得到正确的IP,但是这样这台服务器会不堪重负。

所以,DNS应运而生。DNS采用的是分布式的解析方案。见下图。

至今为止,这个世界上有13台根服务器。根服务器的任务就是将域名解析的任务分配给顶级域的服务器。顶级域的服务器也可以像根服务器那样将解析权分配给下属服务器。

例如根服务器会将所有com域名的解析任务全部交给负责com的服务器,负责com的服务器会将所有cnblogs.com域名的解析任务全部交给负责cnblogs.com的服务器。

常见的顶级域名有:

com 商业组织
edu 教育机构
gov 美国政府部门
net 网络
org 其他组织

DNS是怎么工作的

推荐阅读:浅谈DNS体系结构:DNS系列之一

我们在浏览器上输入i.cnblogs.com之后,我们这台主机会向DNS服务器发送一条DNS查询报文以查询该域名对应的IP。

(注意,该报文是UDP报文,不需要与DNS服务器建立TCP连接;我们这台主机本来就知道DNS服务器的IP地址,要么是写好的静态IP,要么是路由器动态分配的IP,不是域名,所以DNS查询这个过程也不需要去解析域名,否则无限循环了……)

DNS服务器若有关该域名的记录,则发送IP回我们的主机,结束。

DNS服务器若不知道,则它向根服务器发送关于该域名的请求。

(注意,每台DNS服务器都必须知道根服务器的IP,这是作为一台DNS服务器的素养)

根服务器收到后发现,这是com结尾的,于是返回负责com域名解析的服务器的IP给DNS服务器。

DNS服务器收到后,就把关于该域名的请求发给负责com域名解析的服务器。

负责com域名解析的服务器收到后发现,这是cnblogs.com结尾的,以cnblogs.com结尾的域名的解析权已经委派给XX服务器了,于是返回负责cnblogs.com域名解析的服务器的IP给DNS服务器。

DNS服务器收到后,就把关于该域名的请求发给负责cnblogs.com域名解析的服务器。

负责cnblogs.com域名解析的服务器收到后发现,这是我负责的域名,查询一下资源记录,OK找到了,于是发回i.cnblgos.com的对应IP给DNS服务器。

DNS服务器千辛万苦终于得到该IP,自己先缓存一下,然后发回给我们的主机,结束。

DNS冗余

某个区域的资源记录通过手动或自动方式更新到主 DNS服务器上,辅 DNS 服务是为了防止主服务器无法访问或宕机。辅 DNS服务器定期与主 DNS 服务器通讯,确保它的信息保持最新。如果不是最新信息,辅 DNS服务器就会从主服务器获取最新信息的副本,称为区域复制。辅 DNS 服务器一般是3个小时查询一次是否主 DNS 服务器更新。

DNS高速缓存

为了减少Internet上DNS的通信量,所有的DNS服务器均使用高速缓存。

Windows上清空DNS缓存的方法:命令行输入ipconfig/flushdns

DNS资源记录类型

A 将域名转为IP
PTR 将IP转为域名
CNAME 一个IP对应多个域名
NS 该区域的DNS服务器
SOA 该区域的主DNS服务器
MX 邮件交换记录
  • A——主机记录,是使用最广泛的DNS记录,A记录的基本作用就是说明一个域名对应的IP是多少
  • PTR——指针记录,与A记录相反
  • CNAME——规范名字(Canonical Name)记录,也称为别名记录,用于说明一个IP对应多个域名
  • NS——名称服务器(Name Server)记录,用于说明这个区域有哪些DNS服务器负责解析
  • SOA——起始授权机构(Start Of Authority)记录,用于说明负责解析的DNS服务器中哪一个是主服务器
  • MX——邮件交换(Mail Exchange)记录

DNS使用TCP还是UDP

区域传送时DNS使用TCP,大多数情况(域名解析)使用UDP。

为什么区域传送使用TCP?

  • 传送的内容多,TCP报文可超过512字节,UDP不能超过512字节
  • TCP可靠

为什么域名解析使用UDP?

  • 查询域名的报文一般不超过512字节,使用UDP更快。
  • 万一失败,重发的损失也不大。

一个例子

假设客户端和服务器都没有DNS缓存,且Rlogin服务器收到IP数据报时需要进行主机名检查(利用IP报文中的IP地址向DNS服务器询问其对应域名,再利用该域名向DNS服务器询问其对应IP,再检查该IP是否跟IP报文中的源IP一致,好麻烦不知道为什么)。

(1)Rlogin客户端中没有关于Rlogin服务器的域名解析,所以只能向根名字服务器查询Rlogin服务器的IP地址(这是一条A记录的查询)

(2)根名字服务器当然不知道怎么解析,只告诉Rlogin客户端谁(图中的服务器的名字服务器)在负责这个域名的解析(这是一条NS记录)

(3)Rlogin客户端收到后知道是服务器的名字服务器在负责,所以向服务器的名字服务器查询Rlogin服务器的IP地址(这是一条A记录的查询)

(4)服务器的名字服务器返回的报文中包含了Rlogin服务器的IP地址(这是一条A记录的应答)

(5)于是Rlogin客户端知道了Rlogin服务器的IP地址,于是与其建立TCP连接

(6)此时我们情景设定Rlogin服务器需要进行主机名检查,于是利用TCP连接中得到的IP地址向根名字服务器(跟(1)中的不一定是同一个)查询Rlogin客户端的域名(这是一条PTR记录的查询)

(7)根名字服务器当然不知道怎么解析,只告诉Rlogin服务器谁(图中的客户的名字服务器)在负责这个域名的逆解析(这是一条NS记录)

(8)Rlogin服务器收到后知道是客户的名字服务器在负责,所以向客户的名字服务器查询Rlogin客户端的域名(这是一条PTR记录的查询)

(9)客户的名字服务器返回的报文中包含了Rlogin客户端的域名(这是一条PTR记录的应答)

(10)Rlogin服务器收到后知道了Rlogin客户端的域名后,向客户的名字服务器查询Rlogin客户端的IP地址(这是一条A记录的查询)

(11)客户的名字服务器返回的报文中包含了Rlogin客户端的IP地址(这是一条A记录的应答)

最后Rlogin服务器将得到的IP地址和TCP连接中的IP地址进行比对(为什么要主机名检查这么麻烦……)

 
 

《TCP/IP详解 卷1:协议》读书笔记的更多相关文章

  1. csapp读书笔记-并发编程

    这是基础,理解不能有偏差 如果线程/进程的逻辑控制流在时间上重叠,那么就是并发的.我们可以将并发看成是一种os内核用来运行多个应用程序的实例,但是并发不仅在内核,在应用程序中的角色也很重要. 在应用级 ...

  2. CSAPP 读书笔记 - 2.31练习题

    根据等式(2-14) 假如w = 4 数值范围在-8 ~ 7之间 2^w = 16 x = 5, y = 4的情况下面 x + y = 9 >=2 ^(w-1)  属于第一种情况 sum = x ...

  3. CSAPP读书笔记--第八章 异常控制流

    第八章 异常控制流 2017-11-14 概述 控制转移序列叫做控制流.目前为止,我们学过两种改变控制流的方式: 1)跳转和分支: 2)调用和返回. 但是上面的方法只能控制程序本身,发生以下系统状态的 ...

  4. CSAPP 并发编程读书笔记

    CSAPP 并发编程笔记 并发和并行 并发:Concurrency,只要时间上重叠就算并发,可以是单处理器交替处理 并行:Parallel,属于并发的一种特殊情况(真子集),多核/多 CPU 同时处理 ...

  5. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  6. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

  7. 《C#本质论》读书笔记(18)多线程处理

    .NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...

  8. C#温故知新:《C#图解教程》读书笔记系列

    一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...

  9. C#刨根究底:《你必须知道的.NET》读书笔记系列

    一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...

  10. Web高级征程:《大型网站技术架构》读书笔记系列

    一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...

随机推荐

  1. oracle dblink的创建方式

    操作语句: create database link zfxtdblink connect to tianhe2014 identified by tianhe2014 using '199.169. ...

  2. Mac Mail PGP Setup 如何在苹果电脑上设置安全邮件 良好隐私密码法(英语:Pretty Good Privacy,缩写为PGP)

    背景知识 良好隐私密码法(英语:Pretty Good Privacy,缩写为PGP),一套用于讯息加密.验证的应用程序,采用IDEA的散列算法作为加密与验证之用. 关联文献:https://en.w ...

  3. JavascriptExecutor

    Why we use it?To enhance the capabilities of the existing scripts by performing javascript injection ...

  4. 游戏对象消失三种方法的区别?(enabled/Destroy/active)

    gameObject.renderer.enabled=fasle是控制一个物体是否在屏幕上渲染或显示  而物体实际还是存在的 只是想当于隐身 而物体本身的碰撞体还依然存在的GameObject.De ...

  5. push_back模式工作

    自己决心今天做一个 xxx项目,写完xxx功能. 早晨9点多张三说:“A项目有一个 bug要修复”,估计十分钟就修复了,然后放弃手头项目去搞.修复这个bug的时候,发现这个A项目有些代码还有可以优化的 ...

  6. DbContext 那些事 —— 数据库初始化

    数据库初始化 上图,这个图解释了,数据库初始化的流程,是基于我们在上下文类中的构造函数中传递的参数. 在上面的图中,context类中的base构造器中,可以填入下面的参数: 无参数(No Param ...

  7. Ext5实现树形下拉框ComboBoxTree

    最近为了实现一个属性下拉框被Ext框架折腾了好几天.. 所以,首先要说的是,不管你要做什么系统.强烈建议你不要选择Ext.据我这几天的搜索,应该这个框架现在用的人也很少了. Ext框架的缺陷:框架沉重 ...

  8. pyqt4学习笔记

    信号与槽机制 信号与槽机制作为Qt最重要的特性,提供了任意两个Qt对象之间的通信机制.其中,信号会在某个特定情况或动作下被触发,槽是用于接收并处理信号的函数.例如,要将一个窗口中的变化情况通知给另一个 ...

  9. Python 安装Twisted 提示python version 2.7 required,which was not found in the registry

    由于我安装Python64位的,下载后没注册,安装Twisted时老提示“python version 2.7 required,which was not found in the registry ...

  10. VR外包 虚拟现实外包 北京软件公司

    我们制作各类型VR全景虚拟现实,增强现实视频制作.录制等项目.品质保证,售后完备,可签合同.contectus: 13911652504(技术经理tommy) 承揽VR外包 虚拟现实外包 U3D外包( ...