一,TCP/IP
标准。TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。TCP/IP协议簇分为四层,IP位于协议簇的第二层(对应OSI的第三层),TCP位于协议簇的第三层(对应OSI的第四层)。TCP和IP是TCP/IP协议簇的中间两层,是整个协议簇的核心,起到了承上启下的作用。
TCP/IP的最低层是接口层,常见的接口层协议有:
Ethernet 802.3、Token Ring 802.5、X.25、Frame reley、HDLC、PPP等。
网络层包括:IP(Internet Protocol)协议、ICMP(Internet Control Message Protocol)
控制报文协议、ARP(Address Resolution Protocol)地址转换协议、RARP(Reverse ARP)反向
地址转换协议。
IP是网络层的核心,通过路由选择将下一跳IP封装后交给接口层。IP数据报是无连接服务
。
ICMP是网络层的补充,可以回送报文。用来检测网络是否通畅。
Ping命令就是发送ICMP的echo包,通过回送的echo relay进行网络测试。
ARP是正向地址解析协议,通过已知的IP,寻找对应主机的MAC地址。
RARP是反向地址解析协议,通过MAC地址确定IP地址。比如无盘工作站和DHCP服务。
传输层协议主要是:传输控制协议TCP(Transmission Control Protocol)和用户数据报协
议UDP(User Datagram rotocol)。
TCP是面向连接的通信协议,通过三次握手建立连接,通讯时完成时要拆除连接,由于TCP
是面向连接的所以只能用于点对点的通讯。
TCP提供的是一种可靠的数据流服务,采用“带重传的肯定确认”技术来实现传输的可靠
性。TCP还采用一种称为“滑动窗口”的方式进行流量控制,所谓窗口实际表示接收能力,用
以限制发送方的发送速度。
连接,所以可以实现广播发送。
UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出丢包现象,实际应用中要求
在程序员编程验证。
应用层一般是面向用户的服务。如FTP、TELNET、DNS、SMTP、POP3。
FTP(File Transmision Protocol)是文件传输协议,一般上传下载用FTP服务,数据端口
是20H,控制端口是21H。
Telnet服务是用户远程登录服务,使用23H端口,使用明码传送,保密性差、简单方便。
DNS(Domain Name Service)是域名解析服务,提供域名到IP地址之间的转换。
SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议,用来控制信件的发送、中
转。
POP3(Post Office Protocol 3)是邮局协议第3版本,用于接收邮件。
数据帧:帧头+IP数据包+帧尾 (帧头包括源和目标主机MAC地址及类型,帧尾是校验字)
IP数据包:IP头部+TCP数据信息 (IP头包括源和目标主机IP地址、类型、生存期等)
IP数据信息:TCP头部+实际数据 (TCP头包括源和目标主机端口号、顺序号、确认号、校
验字等)
client首先请求连接,发一个SYN包;Server收到后回应SYN_ACK包;Client收到后再
发ACK包。即:
SYN ---> 收
<--- SYN+ACK
ACK ---> 收
在TCP/IP连接时,如果两端都是established状态,则握手成功,否则是无连接或半联接状
态。
2、套接字Socket
套接字Socket由协议、IP地址和端口号组成,套接字表示一路通讯,一般是一个服务,如
www服务是TCP的80端口,Telnet是TCP的23端口。
三、IP地址划分 1、IP地址分类
IP地址有四个段,包括网络标识和主机标识两部分:netid+hostid。
IP地址应用分为A、B、C三类,D、E类是保留和专用的。
Class A 0******* xxxxxxxx xxxxxxxx xxxxxxxx
Class B 10****** ******** xxxxxxxx xxxxxxxx
Class C 110***** ******** ******** xxxxxxxx
Class D 1110**** ******** ******** ********
Class E 1111**** ******** ******** ********
址址类 地址区间 网络数 主机数
A 类 1.0.0.1~126.255.255.254 27-2=126 224-2=16777214
B 类 128.0.0.1~191.255.255.254 214-2=16382 216-2=65534
C 类 192.0.0.1~223.255.255.254 221-2=2097150 28-2=254
D 类 224.0.0.1~239.255.255.255 228=268435456 0
E 类 240.0.0.1~255.255.255.255 228=268435456 0
主机地址全0表示为一个网络地址。
主机地址全1表示为对应网络的广播地址。
全0的IP地址:0.0.0.0,表示本机地址,只在启动过程时有效。
全1的IP地址255.255.255.255,表示本地广播(有的软件不支持)。
私有地址:
10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255
127.0.0.0网络是回环网络loopback,用于本机测试。例如:
ping 127.0.0.1 是测试本机网卡是否工作正常。
4、子网掩码
子网掩码用来区分网络地址和主机地址,标准的子网掩码为:
A 类: 1.0.0.1~126.255.255.254 netmask:255.0.0.0
B 类:128.0.0.1~191.255.255.254 netmask:255.255.0.0
C 类:192.0.0.1~223.255.255.254 netmask:255.255.255.0
子网掩码和IP地址的“与”运算得出对应的网络地址。
如果将子网掩码“1”的位数增加则网络地址数增加,形成子网。相当于网络的分隔。
如果将子网掩码“1”的位数减小则网络地址数减少,形成超网。相当于网络的聚合
问题描述:MINI2440开发板可以ping 通网关,可以ping 通win7,但是就是ping 不通虚拟机下的linux,
原因:可能开发板的IP和win7的可能不在同一个路由器下,
解决方法:只需要网线接在同一个路由器下,就可以极大提高挂在的成功率。
最近研究微信调起自己客户端的事情,对于SingleTask和TaskAffinity的理解又多了一些理解。
以前对于Android的四种LaunchMode有一些了解,其中比较有意思的就是SingleTask和SingleInstance 。(四种LaunchMode的了解可以参见这篇文章,对于Activity栈的讲述很详细)。这两种LaunchMode的理解都跟Task有很大关系。
一个Task可以理解成一个Activtiy栈,可以装载一个或者多个Activity,回退和打开的顺序逻辑和基本的数据结构栈是一致的。下面的这段话非常关键:那就是,一个Application如果有N个Activity,这些Activity分布在M个Task中,那么Application的回退栈会遵循这样的原则,首先从当前Acitivty在的Task回退,直到这个Task中再无记录;那么会寻找下一个Task再次回退直到没有Activity(这个Task是怎么寻找的呢,其实Task在Appliction的总栈中也是有记载的,总是TasK中最近使用的Activity相关)。
下面是我对这两种比较难的LaunchMode的理解。
一 . SingleTask这个LaunchMode建议和TaskAffinity一起使用,这样才能发挥这种加载模式的特殊逻辑效果。当一个应用程序加载一个singleTask模式的Activity时,首先该Activity会检查是否存在与它的taskAffinity相同的Task。
1、如果存在,那么检查是否实例化,如果已经实例化,那么销毁在该Activity以上的Activity并调用onNewIntent。如果没有实例化,那么该Activity实例化并入栈。
2、如果不存在,那么就重新创建Task,并入栈。
二. 1、当一个应用程序加载一个singleInstance模式的Activity时,如果该Activity没有被实例化,那么就重新创建一个Task,并入栈,如果已经被实例化,那么就调用该Activity的onNewIntent;
2、singleInstance的Activity所在的Task不允许存在其他Activity,任何从该Activity加载的其它Actiivty(假设为Activity2)都会被放入其它的Task中,如果存在与Activity2相同affinity的Task,则在该Task内创建Activity2。如果不存在,则重新生成新的Task并入栈。
以上这些学习都是因为最近在做一个微信调起客户端的事情。如果自己的客户端处于运行状态,按下Home键后台挂起。此时如果使用微信调起自己的客户端某个页面,不做任何处理的情况下,按下回退或者当前Activity.finish(),页面都会停留在自己的客户端(因为自己的Application回退栈不为空),这明显不符合逻辑的。产品的要求是,回退必须回到微信客户端,而且要保证不杀死自己的Application.我的处理方案就是,设置当前被调起Activity的属性为:
LaunchMode=""SingleTask" taskAffinity="com.tencent.mm"(com.tencent.mm是借助于工具找到的微信包名),就是把自己的Activity放到微信默认的Task栈里面,这样回退时就会遵循“Task只要有Activity一定从本Task剩余Activity回退"的原则,不会回到自己的客户端;而且也不会影响自己客户端本来的Activity和Task逻辑。