精华内容
下载资源
问答
  • SOME/IP协议详解「总目录」
    千次阅读 热门讨论
    2022-01-15 11:56:35

    SOME/IP协议详解「总目录」


    欢迎大家来到雪云飞星的《SOME/IP协议详解》,开始前博主先列出本专栏学习的大纲,同时这也可以作为大家学习SOME/IP协议知识点的参考。下面蓝字都是传送门,点击进入即可:

    1 概览

    SOME/IP协议详解「总目录」
    SOME/IP协议详解「前言」
    SOME/IP协议详解「1.0·概述」
    SOME/IP协议详解「1.1·面向服务与面向信号」
    SOME/IP协议详解「1.2·可扩展性与服务发现」
    SOME/IP协议详解「1.3·车载以太网与通信中间件」


    2 SOME/IP 服务化通信

    更多相关内容
  • TCP/IP协议详解 完整目录 第一部分 TCP/IP基础 第1章 开放式通信模型简介 1 1.1 开放式网络的发展 1 1.1.1 通信处理层次化 2 1.1.2 OSI参考模型 3 1.1.3 模型的使用 5 1.2 TCP/IP参考模型 7 1.3 小结 7 第2章 TCP/IP...
  • TCP_IP协议详解(全三卷)高清PDF(非扫描版), 文档清晰, 有目录。
  • IP协议详解

    千次阅读 2022-03-23 15:29:25
    详解IP协议工作原理

    系列文章目录

    一、IP协议是什么?

    IP协议是TCP/IP协议族的核心协议,也是socket网络编程的基础之一。

    二、IP服务的特点

    IP协议是TCP/IP协议族的基石,它为上层提供无状态、无连接、不可靠的服务

    无状态:指IP通信双方不同步传输数据的状态信息,因此所有IP数据报的发送,传输,接收都是相互独立的。这种服务最大缺点是无法处理乱序和重复的IP数据报。优点是简单高效,和UDP协议与HTTP协议相同,都是无状态协议。

    无连接:指IP通信双方都不长久的维持对方的任何信息。这表示上层协议每次发送数据,都需要明确指定对方的IP地址。

    不可靠:指IP协议不能IP数据报能准确到达接收端,只是会尽最大努力。一旦发送失败,就通知上层协议,而不会试图重发。

    IPv4头部结构

    在这里插入图片描述

    • 4位版本号:指定IP协议的版本,对于IPv4来说,其值为4,其它IPv4扩展版本则具有不同的版本号(如SIP协议和PIP协议)
    • 4位头部长度:表示IP头部有多少个32bit字(4字节)。因为4位最大15,所以IP头部最长为60字节。
    • 8位服务类型:3位优先级权字段(现已被忽略),4位TOS字段和1位保留字段(必须置0).4位TOS字段分别表示:最小延迟,最大吞吐量、最高可靠性和最小费用,其中最多1个能置为1。
    • 16位总长度:指整个IP数据包的长度,字节为单位。最长65535字节,由于长度超过MTU的数据报将被分片传输,所以实际传输的长度没有达到最大值。
    • 16位标识:唯一标识主机发送的每个数据报。初始值由系统随机生成,每发送一个数据报,其值加一。该值在数据报分片时被复制到每个分片中,因此同一个数据报的所有分片标识值都相同
    • 3位标志:第一位保留,第二位表示禁止分片,如果设置了该位,IP数据报长度超过MTU将被丢弃,返回错误。第三位表示更多分片,除了最后一个分片,其它都要置它为1.
    • 13位分片偏移:该分片相较于原始IP数据报开始处(仅指数据部分)的偏移。实际偏移值是该值左移3位得到。因此除了最后一个分片,每个分片的数据部分长度必须是8的整数倍。
    • 8位生存时间:数据报到达目的地之前允许经过的路由器跳数。每经过一个路由,该值减一,为0时被丢弃。并返回TCMP错误报文。
    • 8位协议:用于区分上层协议。ICMP为1,TCP为6,UDP为17。
    • 16位头部校验和:由发送端填充,接收端对其使用CRC算法检验数据是否被损坏。
    • 32位源端IP地址:标识数据报的发送端。在传输过程中保持不变
    • 32位源目的端IP地址:标识数据报的接收端。在传输过程中保持不变
    • 选项字段:可变长的可选信息,最多40字节。可用的IP选项有:
      • 记录路由:将数据包经由的所有路由器IP填入该段。
      • 时间戳:将数据报在每个路由器被转发时的时间填入该段。
      • 松散源路由选择:指定路由器IP地址列表,数据报发送过程中必须经过其中所有路由器
      • 严格源路由选择:类似上面,数据报只能经过被指定的路由器。

    三、抓取一个TCP协议包

    开启一个Ubuntu终端,通过tcpdump抓取:

    tcpdump -ntx
    

    再开启一个终端执行wget命令:

    wget www.baidu.com
    

    出现以下TCP协议数据包
    在这里插入图片描述
    数据解析:

    • 0x4:Ipv4协议
    • 0x5:头部长度为5个32位,即20字节
    • 0x00:未开启任何服务类型
    • 0x003C:IP数据报总长度为60字节
    • 0x7f16:该数据报标识
    • 0x4:禁止分片
    • 0x000:分片偏移为0
    • 0x40:生存时间为64跳
    • 0x06:指定上层为IP协议
    • 0x68b1:IP头部数据校验和
    • 0xc0a88f00:32位源端IP地址
    • 0xdcb52696:32位目的端IP地址

    IP分片

    当IP数据报的长度超过帧的MTU时,它将被分片传输。分片可能发生在发送端,也可能发生在中转路由器上,而且在传输过程中可能被多次分片,只有在最终目标机器上,这些分片才会在内核中被IP模块重新组装。

    IP头部中的数据报标识、标志、和片偏移为IP的分片和重组提供了足够的信息。

    一个数据报的每个分片都具有自己的IP头部,且具有相同的标识,但具有不同的片偏移,除了最后一个分片之外都设置了MF标志。

    IP路由

    IP模块工作流程:
    在这里插入图片描述
    从右向左看:

    IP模块收到来自数据链路层的IP数据报,首先对数据报的头部做CRC校验,无误后开始分析头部具体信息。

    如果IP数据报头部设置了源站选路选项,则IP模块调用数据报转发子模块来处理该数据报。

    如果该数据报的头部目标IP地址是本机的某个IP地址,或者广播地址,则IP模块根据数据报协议字段来决定发送给哪个上层应用。如果不是本机,则掉用数据报转发子模块来处理该数据报。

    数据报转发模块检查系统是否允许转发,不允许则丢弃。允许则将该数据报执行一些操作,就将它交给IP数据报输出模块。

    IP数据报根据路由表计算下一跳路由。

    IP输出队列存放所有等待发送的IP数据报。

    路由机制

    执行route可查看路由表:
    在这里插入图片描述
    每一项包括8个字段:

    • Destination:目标网络或主机
    • Gateway:网关地址,*表示目标与本机在同一个网络上,不需要路由。
    • Genmask:网络掩码
    • Flags:路由标志,U:该路由活动,H:该路由目标是一个主机,G:该路由目标是网关,D:该路由是重定向产生的,M:该路由被重定向修改过
    • Metric:路由距离,达到目标网络所需的中转数
    • Ref:路由项被引用的次数
    • Use:该路由项被使用的次数
    • Iface:该路由对应的输出网卡接口

    路由机制:

    1. 查找路由表中和数据报的目标IP完全匹配的主机IP地址,如果找到,就直接使用该项,没有就到第二步
    2. 查找路由表中和目标IP具有相同的网路ID的IP地址,如Gateway,有就使用,否则来到第三步
    3. 选择默认路由项,这一般为网关。

    IPv6

    IPv6由40个字节的固定头部和可变长的扩展头部组成。
    在这里插入图片描述

    • 4位版本号:IP协议版本,IPv6值为6
    • 8位通信类型:指示数据通信类型和优先级
    • 20位流标志:用于某些对连接服务质量有特殊要求的通信。
    • 16位净荷长度:指IPv6扩展头部和应用程序数据长度之和,不包含固定头部长度
    • 8位下一个包头:指紧跟IPv6固定头部的包头类型,如扩展头或上层协议。
    • 8位跳数限制:和IPv4的TTL含义相同
    • 后两项IP地址:IPv6地址一般用16进制字符串表示,用‘:’分割为8组,每组两个字节。
    展开全文
  • TCP-IP协议详解

    2018-08-04 06:08:41
    TCPIP协议详解 卷一 卷二 卷三 卷一 讲的是协议 卷二讲的实现 卷三讲的TCP事务协议、HTTP、NNTP和UNIX域协议
  • TCP/IP协议详解

    2017-05-12 21:00:06
    TCP/IP协议详解,通信基础知识。
  • 这是当当网上最畅销的书记:TCP-IP协议详解3卷 有目录 非扫描版 非常清晰,而且可以搜索。是我自己亲自合并的,给需要这本书的人学习提供方便
  • TCP_IP协议详解全三卷高清非扫描PDF

    热门讨论 2013-06-02 14:19:46
     《TCP/IP详解 卷2:实现》完整而详细地介绍了TCP/IP协议是如何实现的。书中给出了约500个图例,15 000行实际操作的C代码,采用举例教学的方法帮助你掌握TCP/IP实现。本书不仅说明了插口API和协议族的关系以及主机...
  • TCP/IP协议详解,共三本,清晰pdf
  • TCP/IP协议(本文源自外部链接)  TCP/IP不是一个协议,而是一个协议族的统称。里面包括IP协议、IMCP协议、TCP协议。  这里有几个需要注意的知识点:  互联网地址:也就是IP地址,一般为网络号+子网号+主机号 ...
  • TCP/IP协议详解三卷套高清PDF
  • tcp-ip协议详解.doc
  • TCP/IP协议详解(干货!)

    万次阅读 多人点赞 2021-09-27 18:30:35
    计算机体系结构 上图展示了计算机结构的OSI七层模型以及TCP/IP概念模型。 应用层:向用户提供一组常用的应用程序,比如电子邮件、文件传输访问、虚拟终端等。 应用层协议:两个主机的两个应用程序...TCP/IP协议实际

    计算机体系结构

    在这里插入图片描述
    上图展示了计算机结构的OSI七层模型以及TCP/IP概念模型

    应用层:向用户提供一组常用的应用程序,比如电子邮件、文件传输访问、虚拟终端等。
    应用层协议:两个主机的两个应用程序之间进行相互交流的数据格式。

    传输层:提供应用程序间的通信。
    其功能包括:格式化信息流 以及 提供可靠传输。

    网络层:标记了互联网上每一台主机的地址,负责相邻计算机之间的通信。

    链路层:底层物理通路(线路)

    在计算机体系结构的基础上,我们来看一下TCP/IP协议。

    TCP/IP协议

    简介

    TCP/IP协议实际上是一个协议族。

    TCP/IP协议主要由网络层的IP协议 和 传输层的TCP协议组成 。

    IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都属于 TCP/IP 协议,他们与 TCP 或 IP 的关系紧密。因此,也称 TCP/IP 为网际协议群。

    TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。

    打个比方:TCP协议就相当于中国邮政快递,用来做运输
    IP协议就相当于邮政编码,用来唯一标记目的地。

    TCP协议

    TCP协议是传输控制协议,工作在传输层。提供面向链接的,可靠的传输服务(三次握手,四次挥手)

    • 面向链接:数据传输之前,客户端与服务器之间要建立连接,才可以传输数据
    • 可靠的:数据传输是有序的,要对数据进行校验,数据不会丢失

    与TCP协议对应的还有一个UDP协议。

    UDP协议

    UDP协议:用户数据报协议,提供的是不可靠的,面向无连接的传输服务(只有数据的发送方和接收方)

    • 面向无连接:传输方和接收方不需要建立连接,在传输数据之前没有明确的连接链路(即不是所有的数据都是通过一条链路传输)
    • 不可靠:因为数据的传输不是通过一条链路完成的,因此接收方接收的数据不一定按照发送数据的顺序接收,这样就可能造成数据包的丢失

    传输方和接收方不需要建立连接,用于对数据实时性和安全性不高的场合。可以用于视频会议。

    在这里插入图片描述

    IP协议

    IP协议是TCP/IP协议的核心,所有的TCP,UDP等数据都以IP数据格式传输。IP协议没有提供一种数据未传达以后的处理机制,这被认为是上层协议:TCP或UDP要做的事情,所以IP不是可靠的协议。

    IP地址的分类

    内网地址:
    10.0.0.0 ~ 10.255.255.255
    172.16.0.0 ~ 172.31.255.255
    192.168.0.0 ~ 192.168.255.255

    内网地址是局域网内给主机分配的IP地址,该地址外网无法直接访问,只能内网主机之间进行访问。

    补充:
    (1)建立TCP连接

    TCP连接就是通过TCP协议在2台主机(的两个程序之间)之间建立起一个数据传输通道,主机就可以通过该通道相互传送数据,TCP连接也称为Socket。
    在这里插入图片描述
    (2)协议://域名:端口号

    域名:因为IP地址不方便记忆,所以通过域名来对应IP,只要记住域名就相当于记住了IP地址。

    端口号:有了TCP和IP以后,就可以实现主机之间的通信。但是一台主机可以同时运行多个应用程序,所以我们需要端口号来区分数据是属于哪一个应用程序的。

    展开全文
  • tcp/ip协议详解

    万次阅读 2021-06-03 15:50:50
    tcp/ip 四层模型,从上到下依次是应用层,传输层,网络层,网络接口层(数据链路层) http协议请求格式: 1. 请求行: 请求行包括请求方法、URL、协议版本,它们之间用空格分隔(所以我们输入的 URL ...

    tcp/ip 四层模型,从上到下依次是应用层,传输层,网络层,网络接口层(数据链路层)

    http协议请求格式:

    1. 请求行:

    请求行包括请求方法、URL、协议版本,它们之间用空格分隔(所以我们输入的 URL 是不允许带有空格),且都不定长度。

    请求方法:常用的 POST (将表单数据存入请求体里面,多数用于上传数据),GET(将请求参数都放置在 URL+? 后,参数之间用 & 连接,用于获取数据),HEAD (服务端只返回响应头,所以处理响应速度快,用于检测请求是否可用)。

    2. 请求头

    每一行以键值对的形式写入,键值间用 :分割,多个值之间以 ;分割,每行以回车符换行符结束。常见的键有:User-Agent:产生请求的浏览器类型;Accept:客户端可识别的内容类型列表;Host:请求的主机名,允许多个域名同处一个 IP 地址;Range:指定请求实体的一个或者多个子范围,采用多线程下载时可以设置该键。要注意请求头与请求体间有一个空行,它表示通知服务端没有更多请求头了,下面的都是请求体。

    3. 请求体

    请求数据不在 GET 方法中使用,而是在 POST 方法中使用,POST 方法适用于需要客户填写表单的场合。

    http协议响应格式:

    1. 状态行:

    状态行包括协议版本,状态码,状态码描述,常见的一个状态行的例子是(HTTP/1.1 200 OK),其中 200 表示请求正常状态码中的第一个数字定义了相应的类别,第一个数字可以取如下所示的 5 个不同的值之一,含义如下。

    1XX:信息响应类,表示接收到请求并且继续处理。

    2XX:请求处理成功的响应类,表示请求被成功接收和处理,如 HTTP 200 (表示一切正常)。

    3XX:重定向响应类,为了完成指定的请求动作,必须接受进一步的请求处理。

    4XX:客户端错误,客户请求包含语法错误或者不能正确执行,如 HTTP 400 (表示请求无效)。

    5XX:服务端错误,服务器不能正常执行一个正确的 HTTP 请求,如 HTTP 500 (服务器内部出现错误)。

    2. 响应头:

    与请求头类似,通过键值对的形式向客户端传递关键消息,常见的有:Content-Type:用于向接收方指示实体的介质类型;Content-Range:用于向接收方指示实体的传送范围;Content-Length:用于向接收方指示实体的传送长度;Date:传送系统的日期与时间。

    3. 响应体:

    服务端真正返回的文本数据,如果客户端请求一个网页的话,该数据段将填充请求的 html 文本。

    tcp数据帧格式:

    TCP(Transmission Control Protocol) 即传输控制协议,是一种面向连接的(需通过三次握手来建立 TCP 连接,在主机间建立会话)、可靠的(TCP 通过确认和按顺序传递来确保数据的传递)、基于字节流的传输层通信协议,但 TCP 传输比较慢,开销略高,并且只支持点对点通信。当应用层向 TCP 层发送用于网间传输的 8 字节表示的数据流,TCP 则把数据流分割成适当长度的报文段,最大传输段大小(MSS)通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)限制,之后 TCP 把数据包传给 IP 层,由它来通过网络将包传送给接收端实体的 TCP 层。

    /*TCP 头定义,共 20 个字节*/
    typedef struct_TCP_HEADER
    {
        short m_sSourPort;                  //源端口号 16 bit
        short m_sDestPort;                  //目的端口号 16 bit
        unsigned int m_uiSeqNum;            //序列号 32 bit
        unsigned int m_uiAcknowledgeNum;    //确认号 32 bit
        short m_sHeaderLenAndFlag;          //前4位:TCP 头长度;中6位:保留;后6位:标志位
        short m_sWindowSize;                //窗口大小 16 bit
        short m_sCheckSum;                  //校验和 16 bit
        short m_surgentPointer;             //紧急数据偏移量 16 bit
    }__attribute__((packed))TCP_HEADER,*PTCP_HEADER;
     源端口:2 个字节,是一个大于 1023 的 16 位数字,由基于 TCP 应用程序的用户进程随机选择。

    目的端口:2 个字节,指明接收者所用的端口号,一般由应用程序来指定。

    顺序号:4 个字节,用来标识从 TCP 源端向 TCP 目的端发送的数据字节流,它表示在这个报文段中的第一个数据字节的顺序号。如果将字节流看作在两个应用程序间的单向流动,则 TCP 用顺序号对每个字节进行计数,序号是 32 bit 的无符号数,序号达到 2^32-1 后又从 0 开始。比如我们收到一个数据报中 sq(顺序号) =0,数据报内容为 20 字节,那么下一个数据报的 sq 就应该是 21。当建立一个新的连接时,SYN 标志变为 1,顺序号字段包含由这个主机选择的该连接的初始顺序号 ISN。

    确认序号:4 个字节,包含发送确认的一端所期待收到的下一个顺序号。因此,确认序号应该是上次已经成功收到数据字节顺序号加 1 。比如我们收到的一个数据报的 sq = 0 ,数据报内容为 20 字节,那么我们的 ack(确认序号) 应该是 21 ,用来表明 sq=0 ,内容为 20 字节的数据报已经收到,接下来期望收到的是 sq=21 的数据报。只有 ACK 标志为 1 时确认序号字段才有效。

    报文长度:4 位,给出报头中 32 bit 字的数目,需要这个值是因为任选字段的长度是可变的,这个字段占 4 bit,即 TCP 最多有 60 (15*4) 字节的首部。

    保留区:6 位,保留给将来使用,目前必须置为 0 。

    控制位:6位,控制位包括

    URG:为 1 表示紧急指针有效,为 0 则忽略紧急指针值。

    ACK:为 1 表示确认号有效,为 0 表示报文中不包含确认信息,忽略确认号字段。

    PSH:为 1 表示是带有 PUSH 标志的数据,表示发送端缓存中已经没有待发送的数据,指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满。

    RST:用于复位由于主机崩溃或其他原因而出现错误的连接。它还可以用于拒绝非法的报文段和拒绝连接请求。一般情况下,如果收到一个 RST 为 1 的报文,那么一定发生了某些问题。

    SYN:同步序号,为 1 表示连接请求,用于建立连接和使顺序号同步。

    FIN:用于释放连接,为 1 表示发送方已经没有数据发送了,即关闭本方数据流。

    窗口大小:2 个字节,表示从确认号开始,本报文的源方可以接收的字节数,即源方接收窗口的大小。窗口大小是一个 16 bit 字段,因而窗口大小最大为  2^16-1 。

    校验和:2 个字节,对整个的 TCP 报文段(包括 TCP 头部和 TCP 数据以及伪报文头)进行校验和计算。这是一个强制性的字段,要求由发送方计算和存储,并由接收端进行验证(接收端要与发送端数值结果完全一样,才能证明数据是有效的)。

    紧急指针:2 个字节,是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式,只有当 URG 标志置为 1 时紧急指针才有效。

    选项:n*4 字节,常见的可选字段是最长报文大小 MSS(Maximum Segment Size)。每个连接方通常都在通信的第一个报文段 (为建立连接而设置 SYN 标志的那个段) 中指明这个选项,它指明本端所能接收的最大长度的报文段。选项长度不一定是 32 位字的整数倍,所以需要添加填充位,使得报文长度为 32 位字的整数倍。

    数据:不定长度,为上层协议封装好的数据。

    TCP滑动窗口

    发送窗口内的字节都允许被发送,接收窗口内的字节都允许被接收。如果发送窗口左部的字节已经发送并且收到了确认,那么就将发送窗口向右滑动一定距离,直到左部第一个字节不是已发送并且已确认的状态;接收窗口的滑动类似,接收窗口左部字节已经发送确认并交付主机,就向右滑动接收窗口。

    接收窗口只会对窗口内最后一个按序到达的字节进行确认,例如接收窗口已经收到的字节为 {31, 34, 35},其中 {31} 按序到达,而 {34, 35} 就不是,因此只对字节 31 进行确认。发送方得到一个字节的确认之后,就知道这个字节之前的所有字节都已经被接收。

    TCP流量控制与拥塞控制

    TCP的流量控制是利用滑动窗口机制实现的,主要控制发送方的发送速率,保证接收方来得及接收。接收方在返回的数据中会包含自己的接收窗口的大小,以控制发送方的数据发送。拥塞控制:拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。

    接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。

    实际上,为了避免此问题的产生,发送端主机会时不时的发送一个叫做窗口探测的数据段,此数据段仅包含一个字节来获取最新的窗口大小信息。

    两者的区别:流量控制是为了预防拥塞。如:在马路上行车,交警跟红绿灯是流量控制,当发生拥塞时,如何进行疏散,是拥塞控制。流量控制指点对点通信量的控制。而拥塞控制是全局性的,涉及到所有的主机和降低网络性能的因素。

    拥塞解决的两种方法:

    发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。

    发送方需要维护一个叫做拥塞窗口(cwnd)的状态变量,注意拥塞窗口与发送方窗口的区别:拥塞窗口只是一个状态变量,实际决定发送方能发送多少数据的是发送方窗口。

    慢开始+拥塞避免

    快重传+快恢复

    udp数据帧格式:

    UDP(User Datagram Protocol) 即用户数据报协议,在网络中它与 TCP 协议一样用于处理数据包,是一种不可靠(服务不用确认、不对报文排序、不进行流量控制,可能会出现丢失、重复、失序现象)、无连接(在主机间不建立会话)的协议,在 OSI 模型中的第四层--传输层,处于 IP 协议的上一层。由于 UDP 传输不是可靠性服务,所以帧结构较为简单,而且处理与发送速率高,开销要求低,支持点对点和一点对多点的通信,经常用作音频、视频和普通数据的传输协议,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。

    /*UDP 头定义,共 8 个字节*/
    typedef struct_UDP_HEADER
    {
        unsigned short m_usSourPort;     //源端口号 16 bit
        unsigned short m_usDestPort;     //目的端口号 16 bit
        unsigned short m_usLength;      //数据包长度 16 bit
        unsigned short m_usCheckSum;    //校验和 16 bit
    }__attribute__((packed))UDP_HEADER,*PUDP_HEADER;
    源端口:16 bit (2 个字节),是一个大于 1023 的 16 位数字,由基于 UDP 应用程序的用户进程随机选择。

    目的端口:16 bit (2 个字节),指明接收者所用的端口号,一般由应用程序来指定。

    数据长度:16 bit (2 个字节),标明 UDP 头部和 UDP 数据的总字节长度。

    校验和字段:16 bit (2 个字节),用来对 UDP 头部和 UDP 数据进行校验。与 TCP 不同的是,此字段是可选项,而 TCP 数据段中必须包含校验和字段。

    数据:不定长度,为上层协议封装好的数据。
     

    IP数据帧格式:

    IP 协议是 TCP/IP 协议族中最为核心的协议,它提供不可靠的、无连接的服务,也即依赖其他层的协议进行差错控制。在局域网中,IP 协议往往被封装在以太网帧中传送,而所有的 TCP、UDP、ICMP、IGMP 数据都被封装在 IP 数据报中传送。

    /*IP 头定义,共 20 个字节*/
    typedef struct _IP_HEADER
    {
        char m_cVersionAndHeaderLen;    //前4位:版本信息;后4位:头长度
        char m_cTypeOfService;          //服务类型 8 位
        short m_sTotalLenOfPacket;      //数据包长度
        short m_sPacketID;              //数据包标识
        short m_sSliceinfo;             //分片使用
        char m_cTTL;                    //存活时间
        char m_cTypeOfProtocol;         //协议类型
        short m_sCheckSum;              //校验和
        unsigned int m_uiSourIp;        //源IP
        unsigned int m_uiDestIp;        //目的IP
    }__attribute__((packed))IP_HEADER,*PIP_HEADER;
    版本:4 位,用来表明 IP 协议实现的版本号,当前一般为 IPv4,即 0100,IPv6 的为 0110,这个字段确保可能运行不同 IP 版本的设备之间的兼容性。

    首部长度:即报头长度,4 位,以 32 bit 的字来定义 IP 首部的长度,包括可选项。若该字段的最小值是 5 (标准头部长度),即 5*32=160 比特 =20 字节,此字段最大值为15 (有扩展部分),即15*32 =480 比特 = 60 字节。

    服务类型:8位,用于携带提供服务质量特征信息的字段,服务类型字段声明了数据报被网络系统传输时可以被怎样处理。其中前 3 比特位优先权子字段(Precedence,现已被忽略,各种终端都不采用)。第 8 比特保留未用。第 4 至第 7 比特分别代表延迟、吞吐量、可靠性和花费,当它们取值为 1 时分别代表要求最小时延、最大吞吐量、最高可靠性和最小花费,这 4 比特的服务类型中只能置其中 1 比特为 1,可以全为 0 ,若全为 0 则表示一般服务,大多数情况下该服务类型会被忽略。

    总长度:16 位,指明整个数据报的长度,按字节计算,最大长度为 2^16 字节。

    标识:16 位,用来唯一标识主机发送的每一份数据报,IP 软件会在存储器中维持一个计数器,每产生一个数据段,计数器就加 1,并将此值赋给标志字段。但这个“标识”并不是序号,因为 IP 是无连接服务,数据报不存在按序接收问题,如数据报由于超过网络的 MTU (最大传送单元) 而必须分片时,这个标志字段的值就会被复制到所有的数据报的标识字段中,相同的标识字段的值使分片后各数据报片能正确的重装成为原来的数据报。

    标志:3 位,分别是 RF、DF、 MF,目前只有 DF,MF 有效,DF(don't fragment),置为 0 时表示可以分段,置为 1 时是不能被分段,MF(more fragment),置为 0 时表示该数据段为最后一个数据段,置为 1 时表示后面还有被分割分段。

    段偏移量:13 位,指出较长的分组在分段后,某段在原分组的相对位置。也就是说相对用户字段的起点,该片从何处开始。段偏移以 8 个字节(有 3 位被 flags 占据)为偏移单位,这就是每个分片的长度一定是 8 字节 (64位) 的整数倍。

    生存期:8 位,用来设置数据报最多可以经过的路由器数,由发送数据的源主机设置,通常为 32、64、128等,每经过一个路由器,其值减 1 ,直到 0 该数据报被丢弃。

    协议:8 位,指明 ip 数据字段中的数据采用上层什么协议封装的,常见的有 ICMP(1)、IGMP(2)、TCP(6)、UDP(17)

    首部校验和:16位,填充根据 ip 头部计算得到的校验和码。计算方法是:对头部中每个 16 比特进行二进制反码求和,但不含涉及头部后的数据字段。

    源 IP 地址:源 ip 地址,32 位。

    目的 IP 地址:目标 ip 地址,32 位。

    选项:n*32 位,用来定义一些可选项:如记录路径、时间戳等,但这些选项很少被使用,同时并不是所有主机和路由器都支持这些选项。可选字段的长度必须是 32 比特的整数倍,如果不足,必须填充 0 以达到此长度要求,根据 IHL(首部长度) 可以得到选项的长度。

    数据:不定长度,但受限于数据报的最大长度 2^16 ,这是在数据报中要传输的数据,它是一个完整的较高层报文或报文的一个分片。

    以太网帧格式:

    在数据链路层中,使用最多的就是以太网,而以太网帧因为历史原因存在多个版本,这里采用 IEEE 802.3 以太帧格式。

    前导码:7 个字节,用于数据传输过程中的双方发送与接收的速率的同步。

    SFD:帧开始符,1 个字节,用于标识一个以太网帧的开始。 

    目的 MAC 地址:6 个字节,指明帧的接收者。

    源 MAC 地址:6 个字节,指明帧的发送者。

    长度:2 个字节,指明该帧数据字段的长度,但不代表数据字段长度能够达到 2^16 字节。

    类型:2 个字节,指明帧中数据的协议类型,比如常见的 IPv4 中的 ip 协议采用 0x0800。

    数据与填充:46~1500 个字节,包含了上层协议传递下来的数据,如果加入数据字段后帧长度不够 64 字节,会在数据字段加入填充字段达到 64 字节。

    校验和:4 个字节,对接收网卡(主要是检测数据与填充字段)提供判断是否传输错误的一种方法,如果发现错误,则丢弃此帧。目前最为流行的用于校验和(FCS)的算法是循环冗余校验(cyclic redundancy check -- CRC)。
     

    CRC计算例子:

    现假设选择的CRC生成多项式为G(x)=x^4+x^3+1,要求出二进制序列10110011的CRC校验码。下面是具体的计算过程:

    ①将多项式转化为二进制序列,由G(x)=x^4+x^3+1可知二进制一种有五位,第4位、第三位和第零位分别为1,则序列为11001

    ②多项式的位数位5,则在数据帧的后面加上5-1位0,数据帧变为101100110000,然后使用模2除法除以除数11001,得到余数。

    ③将计算出来的CRC校验码添加在原始帧的后面,真正的数据帧为101100110100,再把这个数据帧发送到接收端。

    ④接收端收到数据帧后,模2除11001,验证余数是否为0,如果为0,则说明数据帧没有出错。

    展开全文
  •  《TCP/IP详解,卷1:协议》是一本完整而详细的TCP/IP协议指南。描述了属于每一层的各个协议以及它们如何在不同操作系统中运行。作者用Lawrence Berkeley实验室的tcpdump程序来捕获不同操作系统和TCP/IP实现之间...
  • 本书是TCP/IP协议详解卷一,分章节的官方中文版。里面有带有目录.txt,方便查看 官方翻译本来就有一定错误,如果有看不通的地方,可以适当怀疑翻译错误,对照英文版一起看会更好。
  • 此为套装书籍PDF,全套3册,分别如下: 《TCP/IP详解卷1:协议》 《TCP/IP详解卷2:实现》 《TCP/IP详解(卷3):TCP 事务协议、HTTP、NNTP和UNIX域协议
  • 本书是网络构建原型DD4.4BSD的建造者的倾力之作,《TCP/IP解析》中的第1卷,主要讲述TCP/IP协议方面的内容。与其他的TCP/IP书藉的最大不同在于,本书不仅仅讲述了RFCS的标准协议,而且结合大量实例讲述了TCP/IP协议...
  • tcp ip 协议详解三卷全

    2018-09-20 17:48:33
    tcp ip详解全,包含TCP-IP详解卷二:实现_详解,TCP-IP详解卷三:TCP事务协议、HTTP、NNTP和UNIX域协议_详解,TCP-IP详解卷一:协议_内容
  • tcp_ip协议详解

    2011-11-19 17:55:24
    TCP/IP协议详解 这部分简要介绍一下TCP/IP的内部结构,为讨论与互联网有关的安全问题打下基础。TCP/IP协议组之所以流行,部分原因是因为它可以用在各种各样的信道和底层协议(例如T1和X.25、以太网以及RS-232串行...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 106,192
精华内容 42,476
关键字:

ip协议详解