1、IP仅提供最好的传输服务,不保证数据报能否成功到达目的地。任何要求的可靠性必须由上层来做(如TCP)
2、IP首部
普通的IP首部占20字节,除非含有选项字段。下图是IP数据报的格式(图片来自TCP\IP详解卷1)
3、IP首部校验和
先把检验和字段置为0,然后对首部中每个16位进行二进制反码求和(整个首部堪称是一串16bit的字组成),结果存到检验和字段中。收到这份ip数据报后同样再对每个16bit反码求和,结果应该为全1(二进制),否则丢弃数据报。看下面例子
45 00 00 31
89 F5 00 00
6E 06 00 00(校验和字段)
DE B7 45 5D (源IP地址)
C0 A8 00 DC (目的IP地址)
计算:
4500+0031+89F5+0000+6E06+0000+DEB7+455D+C0A8+00DC = 322C4
0003+22C4 = 22C7
~22C7 = DD38
将DD38存入校验和字段
收到后计算:
4500+0031+89F5+0000+6E06+DD38+DEB7+455D+C0A8+00DC = 3FFFC
0003+FFFC = FFFF(校验正确)
4、IP路由选择
IP层在内存中有一个路由表,当从网络接口(此外,也可以从上层收到数据如tcp,udp)收到一个数据包时,会先检查目的IP地址是否为本机的IP地址之一或广播地址,如果是的话,回吧数据报送到IP首部字段所指定的模块进行处理,否则若IP层被设置为路由器功能,那么对数据报进行转发,否则丢弃。
IP路由选择是逐跳进行的,IP路由主要完成以下功能
- 搜索路由表,寻找能与目的IP地址完全匹配的表目,找到则发送(该表目指定的下一站路由器或直接连接的网络接口),否则进行下一步
- 搜索路由表,寻找能与目的网络号相匹配的表目,找到则发送,否则进行下一步
- 搜索路由表,寻找默认表目,找到则发送,否则如果该数据报来自本机,则会向生成该数据报的程序返回主机不可达或网络不可达的错误
5、子网掩码
现在的主机都要求支持子网编址,不是把IP地址单纯的看成一个网络号和一个主机号,而是把主机号再分成一个子网号和一个主机号,如可将一个B类地址(16bit网络号、16bit主机号)划分为16bit的网络号,8bit的子网号,8bit的主机号。子网掩码用来确定一个IP地址中有多少bit用于网络号+子网号,有多少bit用于主机号。其中,值为1的留给网络号和子网号,值为0的留给主机号。在给定一个IP地址后就能确定是A类B类或C类地址,也就能知道网络号和子网号的分界了。如
B类地址子网掩码 255.255.255.0 1111 1111 1111 1111 1111 1111 0000 0000
表示16位网络号,8位子网号,8位主机号
B类地址子网掩码 255.255.255.0 1111 1111 1111 1111 1111 1111 1100 0000
表示16位网络号,10位子网号,6位主机号
6、netstat命令的一些常见参数
- -a(all) 列出所有选项,默认不显示listen相关的
- -t(tcp)
- -u(udp)
- -l(listen)
- -n能显示成数字的都显示成数字,如显示ip地址而不是域名
- -p(program)显示建立了相关链接的程序名
- -r(route)
- -s(statistic)统计
- -c每隔一段时间执行一次该netstat命令