自己已经做过两个网络通讯的软件了,但是一直也没有静下心来,把TCP/IP完整地看完,总是缺什么看什么,这回一定要保证看完,同时我要记录下来。
由于是自己的心得,所以也不见得正确和系统,主要还是留着自己以后看的。
一、IP路由选择和掩码,比较容易理解,IP包想要发出去,得知道出的包在哪个子网上。
掩码可以完成识别子网这个功能,掩码位置上为1的为网络号和子网号,为0的,就是主机号。大家使用的最多的是255.255.255.0这种掩码,其实掩码还是ffffff00来表示好理解得多, 平常用的24位掩码,有时候也需要使用变长掩码25位、28位的,所以使用255.255.X.X来表示看着还是挺难理解的。
你的包还得发给你的路由器,如果是 自己机器所在的子网,当然直接可以传过去啦,如果不是,那么依赖路由器的路由表和转发呗。这个比较好理解,你的目的地址路由认为可以转发。
我在此处有个问题留在这儿,我们家中的网络,有两三台电脑,都连在一台路由器上,路由器可以把我的包通过N层转发发送给门户网站,门户网站最后能够把包回复给我的路由器,这个比较好理解,但是我的路由器怎么知道这个包是我的台式电脑发的,而还是我的笔记本发的? 我的想像是我的包在经过家中路由器转发时,肯定源地址会被换成路由器上的外网IP地址,但是IP包从公网回来后,依靠的是端口和IP包标记的映射?还是其它什么机制?找到我们电脑?
希望我在这边书读完后能够找到答案。
二、ARP和RARP 简单地说,就是IP包是走在以上网上的,所以发送IP包的时候必须要知道以太网的地址,这里就需要使用ARP去广播询问IP 192.168.0.X在哪个以太网地址上,告诉这个询问的机器。
这里比较特殊的是,有个免费ARP,就是询问自己的IP在哪台机器上,如果有收到回复,那么就是我们经常在操作系统上看到的提示,你的IP和其它的机器冲突啦;
免费ARP还有个作用,就是自己如果换了张网卡,这样可以广播给大家,IP没有变,以太网地址变了。
三、ICMP
最初一直以为ping就是icmp的实现,发现好像ping只是icmp的一部分功能。
3.1: ICMP可以请求各个机器的掩码。
3.2: ICMP可以请求机器的时间,发送方填写发送时间戳(时间是以UTC时间为标准),接送方回复接收时间时间戳和传送时间戳。以毫秒为单位,
大部分实现直接将接受时间和传送时间戳。
3.3: ICMP可以表示端口不可达,我的理解,进程收到一份相关的报文,即可回复ICMP的端口不可达报文。
3.4: ICMP的请求回显报文,通过此报文可以查看是否丢包,以及网络是否延时,ping程序发送的就是ICMP的请求回显报文。
3.5: ping上也支持选项显示报文转发过程中出口IP或者时间戳,不过好像windowsXp上默认的ping都并不支持这个功能。
3.6:ICMP还可以给主机回得重定向的ICMP报文,使主机的路由表能够学习到路由。
3.7:ICMP可以让主机请求路由,同时路由器可以回复通知响应路由器的地址和优先级,用以让主机更新自己的默认路由项
其实TCP/IP看完了都没有找到我之前留给自己的问题:)
问题在这本书中找不到答案中,这个问题是由NAT去实现的。
NAT的介绍。
http://baike.baidu.com/link?url=qy3GgQof07ux5EiEKQJaCRFsskOBdrqscvZxe6dYyH27H_SN2rD1io3pttTq-6m2
家中的电脑传出的包 会在NAT处(在家中就是家用路由器啦)。如
内部ip8(port5) 会被NAT转换成 外部ip1(port1)
内部ip10(port3) 会被NAT转换成 外部ip1(port2)
内部ip1(port12) 会被NAT转换成 外部ip1(port3)
有这了这样的映射,PC和笔记本、手机等等各自上网,互不影响:)