鱼C论坛

 找回密码
 立即注册

憔悴心只为你

https://fishc.com.cn/?107996

第一章 网络和编程的基本知识2(续)

已有 567 次阅读2011-11-6 17:40

“谷大哥,还有什么要介绍的吗?”蓝狐问道。
        “还有一些东西要说,这些东西是以后编写网络程序的基础。如果想编写如icmpdoor这类型的后门,就必须对下面的东西有个了解,那就是有关TCP/IP协议方面的比较详尽的知识。我前面说过,TCP/IP协议叫做传输控制/网际协议,它是internet 国际互联网络的基础。TCP/IP是网络中使用的基本的通信协议!”
        “TCP/IP是不是两个协议呢?”
        “当然不是啦!虽然从名字上看TCP/IP包括两个协议,传输控制协议(TCP)和网际协议(IP),但TCP/IP实际上是一组协议。它包括上百个各种功能的协议,如:远程登录(Telnet )、文件传输(FTP)和电子邮件(E-Mail)等。而TCP协议和IP协议是保证数据完整传输的两个基本的重要协议。通常说TCP/IP是internet 协议簇,而不单单是TCP和IP。”
        “下面再让大家看个图。图1-5简单展示了各协议中的关系。”
        -------------------------------------
          应用程序协议                      HTTP、FTP、TELNET
          传输协议                            TCP   UDP
          网际协议                            IP
          物理层协议                         网卡
        -------------------------------------
                                 图1-5
        “TCP/IP协议的基本传输单元是数据包(datagram),TCP协议负责把数据分成若干个数据包,并给每个数据包加上包头(就像给一封信加上信封),包头上有相应的编号,以保证在数据接收端能将数据还原为原来的格式。IP协议在每个包头再加上接收端主机地址(就像信件的地址),这样数据就能找到自己要去的地方。如果传输过程中出现数据丢失、数据失真等情况,TCP协议会自动要求数据重新传输,并重新组包。”
        “总之,IP协议保证数据的传输,TCP协议保证数据传输的质量。TCP/IP协议数据的传输基于TCP/IP协议的四层结构:应用层、传输层、网络层、接口层,数据在传输时每通过一层就要在数据上加个包头,其中的数据供接收端同一层协议使用,而在接收端,每经过一层就要把用过的包头去掉,这样来保证传输数据格式的完全一致。”
        “下面的东西就比较重要了,大家一定要记住这个图。一个TCP头部结构,如图1-6所示。”
        -------------------------------------
         16位源端口号                       |     16位目的端口号
        -------------------------------------
                                  32位序列号
        -------------------------------------
                                   32位确认号
        -------------------------------------
         4位首部长度+6位保留字 | 6位标志   |      16位窗口大小
        -------------------------------------
           16位校验和                      |      16位紧急数据偏移量
        -------------------------------------
                                        数 据 段
        -------------------------------------
                                     图1-6
     “谷大哥,能将每个选项都介绍一下么?”蓝狐问道。
      “好的。TCP协议最少20个字节,包括一下区域:”
*******************************************************************************
  
 TCP源端口(Source Port):16位的源端口,其中包含初始化通信的端口,源端口和源 IP
地址的作用是标识报文的返回地址。就相当于你写信给朋友时,信封上要写上回信地址                       一样。没有这个地址,别人(目标主机)怎样回信(当然,事先知道你地址的朋友除外)。16位源端口可以表示65535个端口,就是2的16次方。总之,多少位就是2的多少次方,如此类推。
   TCP目的端口(Destination Port):16位目的端口就是报文要发送到目标主机的那个端口。这个端口指明报文接受计算机上的应用程序地址接口。
   TCP序列号(序列码,Sequence Number):32位的序列号由接收端计算机使用,重新分段的报文成最初形式。当SYN出现,序列码实际上是初始序列码(ISN),而第一个数据字节是ISN+1.这个序列号(序列码)可以补偿传输中的不一致。
   TCP确认号(Acknowledge Number):32位的序列号由接收端计算机使用,重新分段的报文成最初形式。如果设置了ACK控制位,这个值表示一个准备接收的包的序列码。
   首部长度(HLEN):4位包括TCP头大小,指示何处数据开始。
   保留(Reserved):6位值域,这些位必须是0。为了将来定义新的用途所保留。
   标志(Code Bits):6位标志域。表示为:紧急标志、有意义的应答标志、推、重置连接标志、同步序列号标志、完成发送数据标志。按照顺序排列是:URG、ACK、PSH、RST、SYN、FIN。
   窗口(window):16位,用来表示想收到的每个TCP数据段的大小。
   校验和(Checksum):16位TCP头。源机器基于数据内容计算一个数值,收信息机要与源机器数值结果完全一样,从而证明数据的有效性。
   紧急数据偏移量(紧急,Urgent Pointer):16位,指向后面是优先数据的字节,在URG标志设置了才有效。如果URG标志没有被设置,紧急域作为填充。加快处理标示为紧急的数据段。

*******************************************************************************
   “下面我们再看一看IP头结构。如图1-7.”
---------------------------------------
4位IP版本号 | 4位首部长度  | 8位服务类型 |    16位总长度
---------------------------------------
           16 位 标 识                    |     3位标志和偏移
---------------------------------------
  8位生存时间TTL | 8位协议(TCP、UDP...) |    16位IP首部校验和
---------------------------------------
                          32位源IP地址
---------------------------------------
                          32位目的IP地址
---------------------------------------
                          TCP头和然后是数据
---------------------------------------
                           图1-7
        “给大家解释一下图1-7中部分选项的意思。”
        **************************************************************************
        图1-7中部分选项的含义:
        
版本号:IP头的版本号,目前是ipv4,最新是ipv6。
        首部长度:IP头的长度,若没有特殊选择,IP头总是20字节长。
        服务类型:服务类型,定义了数据传输的优先级、延迟、吞吐量和可靠性等特性。
        总长度:IP包的长度,若没有特殊选项,一般为20字节长。
        标识:IP包标识,主机使用它唯一确定每个发送的数据报。
        标志:IP数据分割标志。
        偏移:IP数据分割偏移(13位)。
        生存时间:数据报在网络上的存活时间,每通过一个路由,该数值减一。
        协议:TCP/IP协议类型,比如:icmp为1,igmp为2,tcp为6,udp为17等。
        首部校验和:头部检验和

        **************************************************************************
        “上面这个IP头是作什么用的呀?”马蜂窝问道。
        “前面说过了的,你没留心听讲!IP头包含IP地址信息,用来告诉路由器它要到哪里去以及从哪里来;头部的校验和是用来确保数据的完整性;生存时间用来告诉路由器这个数据包在网络上的存活时间;数据包每经过一个路由,这个值减少1,为0时数据包就会被丢弃。”
        “哈哈!我有个想法,把生存时间设置得很大,那么我发的包不就可以在网络上乱窜吗?”我是良民得意洋洋的说道。
        自作聪明的菜鸟!但有这个想法还是不错的。
        “你错了。你没看图1-7上写明的是‘8位’生存时间吗?8位的二进制数最大就是256(这里最大是255,八位二进制数是2的8次方减1等于255而不是256),不能为无穷大的。”
        大家无语······
        “OK!今天就介绍到这里。我们上面介绍了TCP/IP数据包的结构,目的是为后面介绍的有关Socket raw编程作铺垫,因为后面的文章中会涉及到TCP和IP头的构建、接收和分析等。有关TCP/IP的更多细节,请大家参考其他文章。今天的课就上到这里。”
        “老师,再见!”马蜂窝在这句话后跟了一个可爱的小人。

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-30 19:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部