zoukankan      html  css  js  c++  java
  • 计算机网络各层数据包的结构(转)

    一、TCP/IP的层次结构

    Tcp/ip协议的四个层次
    TCP、IP协议的分层结构图
    TCP-IP与OSI的对应关系.png
    CP/IP协议与OSI模型的对应关系(五层分法)

     1、应用层为用户的应用程序提供接口,使用户可以访问网络。(IE浏览器就处于应用层)

      HTTP、TFTP、FTP、NFS等属于应用层的协议 。是用户客户端程序或软件之间使用的协议。

      HTTP 超文本传输协议(浏览网页服务)
      TFTP 文件传输协议(较快,但是不可靠)
      FTP 文件传输协议(提供文件上传,文件下载服务,较慢但是可靠)
      NFS 网络文件系统(Unix和Linux系统之间共享文件)
      SMTP 简单邮件传输协议(邮件的发送和转发)
      POP3 接收邮件(由服务器下载到本地)
      Talnet (远程登录功能(配置交换机、路由器))
      SNMP 简单网络管理协议(通过网管软件来管理网络)
      DNS 域名系统,将域名解析为IP地址(将百度的域名转换为服务器的IP地址)

    2、传输层(运输层)提供端到端的通信(两台计算机上的软件间的连接),对信息流具有调节作用。

      TCP、UDP属于运输层的协议。在TCP/IP协议族中,网络层IP提供的是一种不可靠的服务,,它尽可能的把分组从源节点送到目的节点,但是并不提供任何可靠保证。而TCP在不可靠的IP层上提供了一个可靠的运输层(参见TCP三次握手),为了提供这种可靠的服务,TCP采用了超时重传,发送和接收的端到端的确认分组等机制。

      TCP 传输控制协议 面向连接(打电话) 可靠服务
      在通信之前要先建立连接 需要同时在线
      UDP 用户数据报协议 非面向连接(发快递)不可靠 不稳定 但速度更快

    TCP数据格式.png
    传输层-TCP数据包格式

      源端口(Source Port) 目的端口(Desination Port)
      序列号(Sequence Number)【数据包的序号】
      确认号(Acknowledgment Number)(序列号+1)【用于指示下一个数据包序号】

      报头的长度(HLEN):以32字节为单位的报头长度
      保留域(Reserved):设置为0

      编码位(Code Bits):用于控制段的传输(如会话的建立和终止)
      包括:URG、ACK、PSH、RST、SYN、FIN 6个位
      SYN(synchronous):请求建立TCP连接
      FIN:断开TCP连接
      RST:重置TCP连接
      ACK:确认、反馈连接情况
      PSH:将数据立刻送到应用层进行处理的命令
      URG:判断紧急指针是否有效的命令

      窗口大小(Windows):接收方能够继续接收的字节数【控制发送的速度】
      校验和(Checksum):baokuo TCP报头和数据在内的校验和【判断数据传输是否出错】
      紧急指针(Urgent Pointer):当前序列号到紧急位置的偏移量

      选项(Option):厂商根据需要自定义的内容
      MAC地址
      数据(Data):上层协议数据

    TCP端口.png
    传输层-TCP端口号

      HTTP:80
      端口范围是:0-6535(1 --- 255 之间一般是知名的端口号;256 --- 1023的端口号,通常是由Unix系统占用(系统占用);1024 ---5000 是大多数TCP、IP实现的临时分配;大于5000的一般是给其他服务预留的(Internet上并不常用的服务))

    端口的使用.png
    端口的使用
    TCP的三次握手.png
    TCP的三次握手
    顺序号和确认号.png
    顺序号和确认号
    TCP滑动窗口.png
    TCP滑动窗口
    UDP数据结构.png
    UDP数据结构

     3、网络层(Internet层)IP包的封装和路径的选择

      ICMP、IP、IGMP是网络层的协议。ICMP(控制报文协议)是IP协议的附属协议,IP层用它来与其他主机或路由器交换错误报文和其他重要信息;ICMP是Internet组管理协议,它用来把一个UDP数据多播到多个主机上。

      网络层的协议
      IP
    数据包的封装,定义IP地址
      ICMP错误诊断(用ping测试网络连通性)
      ARPIP地址解析为MAC地址
      RARPMAC地址转换为IP地址

      IP地址分类:IPV4长32位共4个字节(用点分十进制记法表示),由网络地址和主机地址组成。网络地址表示其属于互联网的哪一个网络,主机地址表示其属于该网络中的哪一台主机。二者是主从关系;又按字节分成4段,每个字段是一个字节,8位,最大值是255。

      IP地址根据网络号和主机号分为A、B、C三类及特殊地址D、E。 全0和全1的都保留不用。
      A类:(1.0.0.0-126.0.0.0)(默认子网掩码:255.0.0.0或 0xFF000000)第一个字节为网络号,后三个字节为主机号。该类IP地址的最前面为“0”,所以地址的网络号取值于1~126之间。一般用于大型网络。
      B类:(128.0.0.0-191.255.0.0)(默认子网掩码:255.255.0.0或0xFFFF0000)前两个字节为网络号,后两个字节为主机号。该类IP地址的最前面为“10”,所以地址的网络号取值于128~191之间。一般用于中等规模网络。
      C类:(192.0.0.0-223.255.255.0)(子网掩码:255.255.255.0或 0xFFFFFF00)前三个字节为网络号,最后一个字节为主机号。该类IP地址的最前面为“110”,所以地址的网络号取值于192~223之间。一般用于小型网络。
      D类:是多播地址。该类IP地址的最前面为“1110”,所以地址的网络号取值于224~239之间。一般用于多路广播用户[1]  。
      E类:是保留地址。该类IP地址的最前面为“1111”,所以地址的网络号取值于240~255之间。

      在IP地址3种主要类型里,各保留了3个区域作为私有地址,其地址范围如下: 
      A类地址:10.0.0.0~10.255.255.255 
      B类地址:172.16.0.0~172.31.255.255 
      C类地址:192.168.0.0~192.168.255.255

      回送地址:127.0.0.1。 也是本机地址,等效于localhost或本机IP。一般用于测试使用。例如:ping 127.0.0.1来测试本机TCP/IP是否正常。

    4、数据链路层为上层提供可靠的数据帧透明传输

      链路管理、帧同步、寻址、流量控制、差错控制  
      MAC地址(网卡编号):48位的二进制数。表示为12位的16进制数。分为两部分:前24位为厂商编号,后24位为网卡的编号(由专门的机构分配)

    二、TCP/IP各层数据封装过程 

    TCP/IP的层次结构以及各层数据封装的过程
    封装流程图

      UDP数据与TCP数据基本一致,唯一不同的是,UDP传给IP的信息单元称为UDP数据包,并且UDP的首部长为8字节。

      在上面的TCP、IP的分层结构图中我们可以看见,用户程序、TCP、UDP、ICMP等都会向IP传送数据,因此在IP的首部加入了长度为8bit的标识;1表示ICMP协议,2表示IGMP协议,6表示TCP,17表示UDP协议。

      TCP、和UDP在传送数据的过程中都会用到一个16bit的端口号来表示不同的应用程序TCP和UDP把源端口号和目的端口号分别存入报文首部中。(216= 65536)

      网络接口通常要发送和接收IP、ARP、RARP数据,因此在以太网的首部(及帧的首部)也有一个16bit的标识。

                                                                             数据封装过程

     三、各层数据包的结构

      1、(链路层)以太帧结构http://c.biancheng.net/view/6391.html

    以太帧结构(格式)

    字段 含义
    前同步码 用来使接收端的适配器在接收 MAC 帧时能够迅速调整时钟频率,使它和发送端的频率相同。前同步码为 7 个字节,1 和 0 交替。
    帧开始定界符 帧的起始符,为 1 个字节。前 6 位 1 和 0 交替,最后的两个连续的 1 表示告诉接收端适配器:“帧信息要来了,准备接收”。
    目的地址 接收帧的网络适配器的物理地址(MAC 地址),为 6 个字节(48 比特)。作用是当网卡接收到一个数据帧时,首先会检查该帧的目的地址,是否与当前适配器的物理地址相同,如果相同,就会进一步处理;如果不同,则直接丢弃。
    源地址 发送帧的网络适配器的物理地址(MAC 地址),为 6 个字节(48 比特)。
    类型 上层协议的类型。由于上层协议众多,所以在处理数据的时候必须设置该字段,标识数据交付哪个协议处理。例如,字段为 0x0800 时,表示将数据交付给 IP 协议。
    数据 也称为效载荷,表示交付给上层的数据。以太网帧数据长度最小为 46 字节,最大为 1500 字节。如果不足 46 字节时,会填充到最小长度。最大值也叫最大传输单元(MTU)。

    在 Linux 中,使用 ifconfig 命令可以查看该值,通常为 1500。
    帧检验序列 FCS 检测该帧是否出现差错,占 4 个字节(32 比特)。发送方计算帧的循环冗余码校验(CRC)值,把这个值写到帧里。接收方计算机重新计算 CRC,与 FCS 字段的值进行比较。如果两个值不相同,则表示传输过程中发生了数据丢失或改变。这时,就需要重新传输这一帧。

      

      2、(网络层)IP数据报结构https://blog.csdn.net/prsniper/article/details/6762145

      如图,一个刻度表示1个二进制位(比特)。

      1-1.版本4位,表示版本号,目前最广泛的是4=B1000,即常说的IPv4;相信IPv6以后会广泛应用,它能给世界上每个纽扣都分配一个IP地址。

      1-2.头长4位,数据包头部长度。它表示数据包头部包括多少个32位长整型,也就是多少个4字节的数据。无选项则为5(红色部分)。

      1-3.服务类型,包括8个二进制位,每个位的意义如下:
           过程字段:3位,设置了数据包的重要性,取值越大数据越重要,取值范围为:0(正常)~ 7(网络控制)
           延迟字段:1位,取值:0(正常)、1(期特低的延迟)
           流量字段:1位,取值:0(正常)、1(期特高的流量)
           可靠性字段:1位,取值:0(正常)、1(期特高的可靠性)
           成本字段:1位,取值:0(正常)、1(期特最小成本)
           保留字段:1位 ,未使用

      1-4.包裹总长16位,当前数据包的总长度,单位是字节。当然最大只能是65535,及64KB。

      2-1.重组标识16位,发送主机赋予的标识,以便接收方进行分片重组。

      2-2.标志3位,他们各自的意义如下:
           保留段位(2):1位,未使用
           不分段位(1):1位,取值:0(允许数据报分段)、1(数据报不能分段)
           更多段位(0):1位,取值:0(数据包后面没有包,该包为最后的包)、1(数据包后面有更多的包)

      2-3.段偏移量13位,与更多段位组合,帮助接收方组合分段的报文,以字节为单位。

      3-1.生存时间8位,经常ping命令看到的TTL(Time To Live)就是这个,每经过一个路由器,该值就减一,到零丢弃。

      3-2.协议代码8位,表明使用该包裹的上层协议,如TCP=6,ICMP=1,UDP=17等。

      3-3.头检验和16位,是IPv4数据包头部的校验和。

      4-1.源始地址,32位4字节,我们常看到的IP是将每个字节用点(.)分开,如此而已。

      5-1.目的地址,32位,同上。

      6-1.可选选项,主要是给一些特殊的情况使用,往往安全路由会当作攻击而过滤掉,普联(TP_LINK)的TL-ER5110路由就能这么做。

      7-1.用户数据。

      3、(传输层)tcp数据包结构https://blog.csdn.net/prsniper/article/details/6762145

      1-1.源始端口16位,范围当然是0-65535啦。

      1-2.目的端口,同上。

      2-1.数据序号32位,TCP为发送的每个字节都编一个号码,这里存储当前数据包数据第一个字节的序号。

      3-1.确认序号32位,为了安全,TCP告诉接受者希望他下次接到数据包的第一个字节的序号。

      4-1.偏移4位,类似IP,表明数据距包头有多少个32位。

      4-2.保留6位,未使用,应置零。

      4-3.紧急比特URG—当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。

      4-3.确认比特ACK—只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。参考TCP三次握手

      4-4.复位比特RST(Reset) —当RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。参考TCP三次握手

      4-5.同步比特SYN—同步比特SYN置为1,就表示这是一个连接请求或连接接受报文。参考TCP三次握手

      4-6.终止比特FIN(FINal)—用来释放一个连接。当FIN=1时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。

      4-7.窗口字段16位,窗口字段用来控制对方发送的数据量,单位为字节。TCP连接的一端根据设置的缓存空间大小确定自己的接收窗口 大小,然后通知对方以确定对方的发送窗口的上限。

      5-1.包校验和16位,包括首部和数据这两部分。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。

      5-2.紧急指针16位,紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。

      6-1.可选选项24位,类似IP,是可选选项。

      6-2.填充8位,使选项凑足32位。

      7-1.用户数据

    知足上进且温柔
  • 相关阅读:
    版本控制工具SVN与CVS两者间的比较
    smarty中文乱码解决
    Windows下的Memcache安装
    近期会将视频在线课堂移植ios,欢迎大家关注
    wzplayer for android mms流播放
    msys console下 建一组典型的linux环境 存放用户库文件的目录
    [置顶] wzplayer for windows 0.2
    wzplayer for windows 0.2
    Visual Studio 编译 clang
    近期会将视频在线课堂移植ios,欢迎大家关注
  • 原文地址:https://www.cnblogs.com/nn-y/p/13256648.html
Copyright © 2011-2022 走看看