新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论高级C/C++编程、代码重构(Refactoring)、极限编程(XP)、泛型编程等话题
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 C/C++编程思想 』 → TCP/IP学习笔记(一)[转帖] 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 3807 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: TCP/IP学习笔记(一)[转帖] 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     firstway 帅哥哟,离线,有人找我吗?
      
      
      威望:5
      等级:大三暑假(2个月背完了红宝书)(版主)
      文章:92
      积分:947
      门派:Lilybbs.net
      注册:2005/10/31

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给firstway发送一个短消息 把firstway加入好友 查看firstway的个人资料 搜索firstway在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看firstway的博客楼主
    发贴心情 TCP/IP学习笔记(一)[转帖]

    TCP/IP学习笔记(一)


    作者:肖进

    一、 TCP/IP结构:
         TCP/IP是一个四层协议,结构如下:
         1、应用层:各种应用程序和协议,如Http、FTP等。
         2、传输层:TCP和UDP
         TCP提供一种可靠的运输层服务,但UDP是不可靠的,不能保证数据报到正确到达目的地。
         3、网络层:IP、IGMP、ICMP
         IP提供的是一种不可靠的服务,也就是尽可能块地把分组从源节点送到目的节点,但并
    不提供任何可靠性保证。ICMP是IP的附属协议,主要用来交换错误报文,IGMP是组管理协议,用来将UDP数据报多播到多个主机。
         4、链路层:设备驱动程序和网卡等

    二、 IP地址和子网掩码
        要学习TCP/IP协议,首先要提到的是IP地址。每台主机的IP地址是一个32位的二进制数。每个IP地址被分割位两部分:前缀和后缀。前缀用来确定计算机从属的物理网络,后缀用来确定网络上单独的计算机。互联网上每一个物理网络都有一个唯一的值作为网络号,该网络号必须全球一致。


        1、IP地址分类:
        IP地址分位五类:A类、B类、C类、D类、E类,其中A类、B类和C类为基本类,D类用于多播,E类属于保留类,现在不用。它们的格式如下(其中*代表网络号):
        A类:0******* XXXXXXXX XXXXXXXX XXXXXXXX
        B类:10****** ******** XXXXXXXX XXXXXXXX
        C类:110***** ******** ******** XXXXXXXX
        D类:1110**** XXXXXXXX XXXXXXXX XXXXXXXX
        E类:1111**** XXXXXXXX XXXXXXXX XXXXXXXX


        这样,A类地址的范围为:0.0.0.0-127.255.255.255
        B类地址的范围为:128.0.0.0-191.255.255.255
        C类地址的范围为:192.0.0.0-223.255.255.255
        D类地址的范围为:224.0.0.0-239.255.255.255
        E类地址的范围为:240.0.0.0-247.255.255.266
        ◆ 几个特殊IP地址
        网络地址:IP地址中主机地址全为0的地址,如128.211.0.0。
        广播地址:IP地址中主机地址全为1的地址,如128.211.255.255。
        环回地址:127.0.0.1,主要用于测试。

    2、子网掩码:
       现在的主机都要求支持子网掩码,不再把IP地址看成为由单纯的一个网络号和一个主机号组成,而是把主机号再分成一个子网号和一个主机号。例如一个B类地址(140.252),在剩下的16位中,8位用于子网号,8位用于主机号,这样就允许254个子网,每个子网就可以有254台主机。为了确定多少位用于子网号,多少位用于主机号,这就要用到子网掩码了。其中值为1的位留给网络号和子网号,为0的位留给主机号。

    三、 数据包的封装和分用
        1、 封装:
        应用程序→TCP/UDP→IP→以太网
        2、 分用:
        以太网←IP←TCP/UDP←应用程序

      以太网
    首部
    (14) IP首部
    (20) TCP首
    部(20) 应用数据 以太网
    尾部(4)

    四、 IP首部:
        IP协议是TCP/IP协议族中最核心的协议,所有的TCP、UDP、ICMP和IGMP数据都以IP数据报格式传输。IP传输的两个特点:不可靠和无连接。IP协议并不保证数据报能成功地到达目的地,也不维护后续数据报的状态信息。必须由上层协议处理。

      4位
    版本 4位首
    部长度 8位服务类型 16位总长度(字节数)
    16位标识 3位
    标志 13位片偏移
    8位TTL 8位协议 16位首部检验和
    32位源IP地址
    32位目的IP地址

    IP首部定义:

    typedef struct ip_hdr
    {
        unsigned char ip_verlen; // 4-bit 版本号
                                 // 4-bit 首部长度 (in 32-bit words)
        unsigned char ip_tos; // IP 服务类型
        unsigned short ip_totallength; // 总长度(字节数)
        //第一个32位
        unsigned short ip_id; // 标识
        unsigned short ip_offset; //3位标志,13位分片偏移,
        #define IP_DF 0x4000 //0x4000 don''t fragment flag
        #define IP_MF 0x2000 //0x2000 more fragment flag
        #define IP_OFFMASK 0x1fff //0x1fff mask for fragmenting bits
        //第二个32位
        unsigned char ip_ttl; // 生存时间
        unsigned char ip_protocol; // 上层协议
        unsigned short ip_checksum; // 首部检验和
        //第三个32位
        unsigned int ip_srcaddr; // 源IP地址
        //第四个32位
        unsigned int ip_destaddr; // 目的IP地址
        //第五个32位
       } ip,IPV4_HDR, *PIPV4_HDR, FAR * LPIPV4_HDR;
    说明:ip_verlen前4位目前为4,表示为IPv4,后4位为5,表示首部长度为5X4=20个字节。
          ip_tos为服务类型(type of service),aaabbbbc,aaa为优先权子字段,现在已被忽略,bbbb为TOS子字段,代表:最小时延、最大吞吐量、最高可靠性和最小费用,c未使用必须为0。如果bbbb均为0,则表示为一般服务。目前大多数TCP/IP实现都不支持TOS特性。
          ip_totallength为IP数据报的总长度,以字节为单位,因此理论最大值为65535,但实际是不可能的。
          ip_id为唯一标识主机发送的每一个数据报,通常每发一份它的值就会加1。
          ip_off前3位标志abc,a为保留,必须为0,b为不分片标志,c为更多分片标志。
          ip_off后13位为分片位置,以8字节为单位计算。因此,除最后一个分片外,其他每个分片都希望是一个8字节倍数的数据,从而使后面的分片从8字节边界开始。
          ip_ttl为IP报的生存周期,每经过一个路由器就减1,如果该字段为0,则该数据报被丢弃。
          ip_protocol:1=ICMP,2=IGMP,3=TCP,17=UDP
          ip_checksum为数据报的首部检验和。计算方法如下:

    USHORT checksum(ip *ip, int size)
    {
        unsigned long cksum=0;
        while (size > 1)
       {   
         cksum += * ((USHORT*)ip )++;
         size -= sizeof(USHORT);
       }
       if (size)
      {
         cksum +=(USHORT) *(UCHAR*)ip;
      }
      cksum = (cksum >> 16) + (cksum & 0xffff);
      cksum += (cksum >>16);
      return (USHORT)(~cksum);
    }
    ICMP、IGMP、TCP和UDP协议也采用相同的检验和算法。

    五、 端口号:TCP/UDP都使用一个16bit地端口号来表示不同地程序。
        1、 知名端口:一般介于1~255之间,例如:FTP的TCP端口号是21。
        2、 临时端口,由于客户端对端口号一般并不关心,只需保证唯一就可以了,所以系统一般分配临时端口号。

    六、 链路层:(以以太网为例,地址为48bit)
        1、 链路层的功能:
       ◆ 为IP模块发送和接收IP数据报
       ◆ 为ARP模块发送ARP请求和接收ARP应答
       ◆ 为RARP模块发送RARP请求和接收RARP应答
       2、 以太网的封装,以太网IP数据报的封装在RFC 894中定义的:

     

    目的地址
    (6) 源地址
    (6) 类型
    (2) 数据(46-1500),包括IP、ARP、RARP CRC
    (4)


        对于ARP和RARP请求/应答数据报大小只有28字节,为了达到46字节的最小长度,必须在后面添加18字节的填充字节。

    七、 环回地址:
        一般把127.0.0.1分配给这个接口,并命名为localhost,一个发给环回接口的IP数据报不能在任何网络上出现。
       1、 传给环回地址的任何数据均作为IP输入。
       2、 传给广播地址和多播地址的数据报复制一份传给环回接口,然后送到以太网上。
       3、 任何传给该主机IP地址的数据均送到环回接口。
    八、 最大传输单元MTU:
        以太网对数据帧的长度都有限制,其最大值为1500。链路层的这个特性叫做最大传输单元MTU。如果一个IP数据报比MTU大,那IP层就必须进行分片,把数据报分为若干片。如果两台主机间的通信要通过多个网络时,那么每个网络的链路层可能有不同的MTU。重要的不是两台主机所在网络的MTU,重要的是两台主机路径中的最小MTU,它被成为路径MTU。

    九、 IP路由选择
        如果目的主机与源主机直接相连或都在一个共享网络上,那么IP数据报就直接送到目的主机上。否则主机就会把数据报发送到一个默认的路由器上,由该路由器来转发该数据报。IP层在内存中有一个路由表,当收到一份数据报并进行发送时,它都要对该表搜索一次。当数据报来自某个网络接口时,IP首先检查目的IP地址是否为本机的IP地址之一或者IP广播地址。如果是这样,数据报就被送到由IP首部协议字段所指定的协议模块进行处理,否则如果IP层被设置为路由器的功能,那么就对数据报进行转发,否则丢弃数据报。
    我们来看看路由表是什么:

    C:\WINNT\system32>route PRINT
    ==========================================================================
    Interface List
    0x1 ........................... MS TCP Loopback interface
    0x1000003 ...00 08 02 ca 2d 11 ...... Intel 8255x-based Integrated Fast Ethernet

    ==========================================================================
    Active Routes:
    Network Destination   Netmask       Gateway     Interface    Metric
    目的地            掩码                网关            主机
    0.0.0.0         0.0.0.0            192.1.8.26      192.1.8.84    1
    127.0.0.0       255.0.0.0          127.0.0.1       127.0.0.1     1
    192.1.8.0       255.255.255.0      192.1.8.84      192.1.8.84    1
    192.1.8.84      255.255.255.255    127.0.0.1       127.0.0.1     1
    192.1.8.255     255.255.255.255    192.1.8.84      192.1.8.84    1
    224.0.0.0       224.0.0.0          192.1.8.84      192.1.8.84    1
    255.255.255.255 255.255.255.255    192.1.8.84      192.1.8.84 1
    Default Gateway: 192.1.8.26
    ==================================================================

    IP路由的主要功能:
        1、 搜索路由表,寻找与目的IP地址完全匹配的表目,如果找到,则将数据报发给该表目指定的下一站路由器或直接连接的网络接口。
        2、 搜索路由表,寻找能与目的网络号相匹配的表目,如果找到,则将数据报发给该表目指定的下一站路由器或直接连接的网络接口。


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/2/25 19:43:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 C/C++编程思想 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/10 2:59:11

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    1,935.547ms