现在的位置: 首页 > 综合 > 正文

(原创)TCP/IP协议结构分析及网络LAN规划浅析

2013年10月09日 ⁄ 综合 ⁄ 共 1446字 ⁄ 字号 评论关闭

        话说近来天下大事非网络突飞猛进莫属~~~说到头归功于几十年前APARNET的开发人员们,而OSI模型的建立可以说是固定了一个标准。OSI分为7层,也就是人们常说的7层模型,从上到下分别是应用层,表示层,会话层,传输层,网络层,逻辑链路层和物理层,分别提供不同类型的服务。我们所说的操作系统和应用软件是工作在应用层上的,RPC等类型服务是工作在会话层的,而IP路由则工作在网络层,提供网络IP寻址。各种协议分别位于不同的层面上,IP,ICMP,IGMP等位于网络层,TCP,UDP则位于传输层。
        现在我们进如正题,如何根据协议来设计一个程序网络使其能够通信呢?我们来分析一下IP和ICMP包,至于TCP,UDP和SOCKET我们以后再讲(嘿嘿,等我搞熟了一点再说)
        IP数据报的头长度为20个字节,即32位*5(一个字节8位嘛)。前4位为版本号,接下来4位为头长度,即前面分析的5(因为头长度是根据32的倍数来算的),后8位为服务类型确定QOS,后16位为总长度(包头长度加数据长度),接着是16位的标识符,用来标识从原始报(链路层的数据,如110010101001等)分割出的各个数据片。再接着是16位的片偏移,指向下一IP包的地址。然后是我们比较熟悉的TTL(生存时间),占8位,我们每次PING一台主机都会看到他的返回值,这里可以告诉大家,一般TTL为128的是WIN2000,TTL=57的是FREEBSD,TTL=255的是UNIX/LINUX,WINDOWS的机器可以更改注册表来防止黑客根据ICMP的PING包来分析系统,这里就不再阐述了。然后8位的协议标识,用来指定这个IP包转发的下一个协议。跟上的是16位的头校验和,验证此IP包是否有错,有错则重发。IP包头的最后则是32位的信源地址和32位的信宿地址。当然IP包还要加上数据。这里是他的结构
struct ip
 {
        BYTE ip_verlen;
        BYTE ip_tos;
        WORD ip_len;
        UINT ip_id;
        WORD ip_fragoff;
        BYTE ip_ttl;
        UINT ip_chksum;
        IN_ADDR ip_scr_addr;
        IN_ADDR ip_dst_addr;
        BYTE ip_data[1];
}
(一些默认的则省略掉了)
        接下来是ICMP协议,他的报文格式可是比IP简单多了。我们还是来看他的结构吧。。。
struct icmp
{
        BYTE icmp_type;   8位类型,表示这个报文的具体动作,有ECHO应答0,超时11,目的不可达3等          
        BYTE icmp_code;  8位代码,详细描述ICMP具体类型。即TYPE的值。
        WORD icmp_cksum;16位校验和,这个不用说了吧。
        WORD icmp_id;    ID值。
        WORD icmp_seq;参数(如没有,可省略)
        BYTE icmp_data[1];数据
}
需要注意一点的是:ICMP包是跟在IP包头后面的,也就是说一个独立的ICMP包是:IP报头+ICMP报头+ICMP数据。
好了,先说到这,本来还想说路由器和交换机的配制及安全方面,放到下次吧。。。

抱歉!评论已关闭.