锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

04 TCP/IP协议详解

时间:2022-11-25 04:00:00 881电线连接器自动组装

目录

    • 章节目标
    • 4.1 概述
      • 1.为什么会有?TCP/IP协议
      • 2.介绍
    • 4.2 TCP/IP协议族
      • 4.2.1 TCP/IP协议栈
        • 1.协议分层
        • 2. 主机与主机之间通信的三要素
        • 3.应用层
        • 4.传输层
        • 5.网络层
        • 6.网络接口层
      • 4.2.2 数据包装与解封装(发送接收过程)
      • 4.2.3 IP
        • 1.概述
        • 2.IP地址
        • 3.IP地址组成(点分十进制)【IPv4】
        • 4.IP地址分类
        • 5.默认网关
        • 6.域名
      • 4.2.4 Ethernet协议 网络接口层 以太网协议
        • 1 概述
        • 1-半 MAC地址(网卡)
        • 2 Ethernet II 的帧格式
        • 3 IEEE 802.3 的帧格式
      • 4.2.5 网络层协议
        • 1 IP协议 (I want to send data to 192.168.0.127)【IP网际协议】
        • 2 ARP协议 (who knows 192.168.0.127's MAC address?)
        • 3 RARP协议 (who knows 21.21.12.21.21.12's IP address?)
        • 4 ICMP协议 (I send or receive queries or error message)
      • 4.2.6 传输层协议
        • 1 UDP协议
        • 2 TCP协议
        • 3 TCP与UDP的比较

参考:TCP//IP协议

章节目标

  • 了解互联网是如何通信的?
  • 掌握TCP/IP协议栈

4.1 概述

1.为什么会有?TCP/IP协议

  • 在世界各地,各种各样的计算机运行不同的操作系统为每个人服务。这些计算机在表达相同信息时使用的方法非常不同。就像圣经中的上帝打乱了来自世界各地的使他们无法合作一样。计算机用户意识到,计算机只是单兵作战,不会起到太大的作用。只有把它们结合起来,电脑才能发挥出它最大的潜力。所以人们试图用电线连接电脑。
  • 但简单地连接在一起还远远不够,就像两个语言不同的人相遇,根本无法交流信息一样。所以他们需要定义一些共同的东西来交流,TCP/IP为此而生。

2.介绍

  • ①20世纪60年代,美国国防部建立的军事网络阿帕网(APRANET ),而TCP/IP协议栈是阿帕网上运行的通信协议家;
  • ②所有需要接入阿帕网络的设备都需要安装TCP/IP协议栈(可见软件或驱动);
  • ③同时代有很多通信协议栈,比如IBM公司开发的SNA网络系统结构,DEC公司开发的DNA网络系统结构 ;不同公司和政府之间的网络兼容性不同;
  • ④1983年,国际标准化委员会(ISO)发布了 OSI采用七层模型统一不同的网络标准(开发系统互联模型);
  • ⑤随着网络的发展,以美军为代表 TCP/IP凭借前期优势,通信机制最终在市场上击败了其他企业标准;现在电脑都安装好了TCP/IP协议栈进行通信
  • ⑥**TCP/IP不是协议,而是协议族的总称。**里面包括了IP协议,IMCP协议,TCP协议,我们更熟悉http、ftp、pop3协议等等。有了这些电脑,就像学习外语一样,你可以自由地与其他计算机终端交流。
  • ⑦从字面意义上说,有些人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议。在现实生活中,有时也指这两种协议。然而,在许多情况下,它只是被使用 IP 通信时必须使用的协议组的总称。具体来说,IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都属于 TCP/IP 协议。

4.2 TCP/IP协议族

4.2.1 TCP/IP协议栈

1.协议分层

  • 网络协议通常在不同层次开发,每层负责不同的通信功能。例如,协议族TCP/IP,它是多个协议在不同层次上的组合。 传统上来说 TCP/IP 被认为是四层协议, 而ISO(国际标准化组织)制定了国际标准OSI七层协议模型,OSI协议以OSI基于参考模型,定义了每个阶层之间的协议和界面。
    在这里插入图片描述
  • tcp/ip 四层模型是应用层、传输层、网络层、网络接口层(数据链路层)

2. 主机与主机之间通信的三要素

  1. IP地址(IP address)
  2. 子网掩码(subnet mask)
  3. IP路由(IP router)

3.应用层

  • 为用户提供一组常用的应用程序,如**电子邮件、文件传输访问、远程登录等。**远程登录TELNET使用TELNET该协议提供在网络其他主机上注册的接口。TELNET会话提供基于字符的虚拟终端。文件传输访问FTP使用FTP协议在网络中提供机器之间的文件复制功能。
  • 功能:为用户提供软件/接口。
  • 软件:
    • 即时通讯=> 微信、QQ、陌陌,脉脉,钉钉
    • 购物软件=>天猫、京东、美丽、唯品会
    • 影音类=>风暴影音,风行,PPS、爱奇艺

4.传输层

  • 功能:用于实现数据的可靠或不可靠传输。
  • 在应用程序之间提供通信。其功能包括:
    • 一、格式化信息流;
    • 第二,提供可靠的传输。为实现后者,传输层协议规定接收端必须发回确认,如果分组丢失,必须重新发送。
  • 协议:TCP、UDP
    • TCP(Transimision Control Protocal) :传输控制协议
      1. 可靠的、面向连接的协议
      1. 传输效率低
    • UDP(User Datagram Protocal):用户数据报告协议
      1. 不可靠、无连接的服务
      1. 传输效率高

5.网络层

  • 作用:提供IP地址和三层通信(路由器)功能。
  • 负责相邻计算机之间的通信。其功能包括三个方面。
    • 1、处理传输层的分组发送请求。收到请求后,将分组装入IP数据报,填充报头,选择到信宿机的路径,然后将数据报送到适当的网络接口。
    • 二、处理输入数据报告:先检查其合法性,再找径–如果数据报告已到达信宿机,则删除报告,并将其余部分交给适当的传输协议;如果数据报告尚未到达信宿,则转发数据报告。
    • 三、处理路径、流量控制、拥堵等问题。
  • 协议:IP协议。

6.网络接口层

  • 作用:提供MAC地址和二层通信(交换机)功能。
  • 这是TCP/IP软件的最低层,负责接收IP数据报并通过网络发送之,或者从网络上接收物理帧,抽出IP数据报,交给IP层。
  • 协议:Ethernet协议

4.2.2 数据封装与解封装(发送接收过程)

  • ①数据封装是一个为数据包加入寻址信息的过程(类似快递)。
  • 端口号用于标志不同的应用程序,面向最终用户(80代表http/浏览器,8000代表oicq/qq)
  • IP地址用于唯一标志通信设备,面向路由器 。
  • MAC地址用于唯一标志局域网设备,面向交换机 。


4.2.3 IP

1.概述

  1. IP 用于计算机之间的通信。
  2. IP 是无连接的通信协议。它不会占用两个正在通信的计算机之间的通信线路。这样,IP 就降低了对网络线路的需求。每条线可以同时满足许多不同的计算机之间的通信需要。
  3. 通过 IP,消息(或者其他数据)被分割为小的独立的包,并通过因特网在计算机之间传送。
  4. IP 负责将每个包路由至它的目的地。
  5. IP是可以被追踪到和定位的,无论是网上发帖造谣生事或通过黑客技术攻击别人,所做的事情都会基于IP和其他ID信息被服务器记录下来,然后"阿sir"就可以追踪并抓到你。

2.IP地址

  1. 用来标识一个网络节点的互联网地址。
  2. 每个计算机必须有一个 IP 地址才能够连入因特网。
  3. 每个 IP 包必须有一个地址才能够发送到另一台计算机。
  4. 网络上每一个节点都必须有一个独立的Internet地址(也叫做IP地址)。

3.IP地址组成(点分十进制)【IPv4】

  1. 一共32个二进制位
  2. 转换为4个十进制数表示,以点隔开
  3. 通常采用 x. x. x. x的格式,每个x为8位。
  4. IP地址的组成
  • IP地址是由两部分组成的,网络部分(网络位)和主机部分(主机位),比如:

4.IP地址分类

  1. IP地址类型分为A、B、C、D、E
    1. A类,1~127.主.主.主 (1.0.0.0–126.255.255.255) ==> 子网掩码 255.0.0.0 或 /8
    2. B类,128~191.网.主.主(128.0.0.0–191.255.255.255) ==> 子网掩码 255.255.0.0 或 /16
    3. C类,192~233.网.网.主(192.0.0.0–233.255.255.255) ==> 子网掩码 255.255.255.0 或 /24
    4. E类,240~254科研
    5. 组播及科研
    1. D类,244~239组播
      1. 预留组播地址
        | 路由协议使用
        | 244.0.0.0~244.0.0.255
      2. 公用组播地址
        | Internet使用
        | 244.0.1.0~244.0.1.255
      3. 用户组播地址
        | 用户临时使用
        | 244.0.2.0.255~238.255.255.255
      4. 本地管理组播地址
        | 本地管理组播地址,特定本地范围
        | 239.0.0.0~239.255.255.255
  2. 子网掩码:用于区分IP地址的网络位和主机位
    1. 默认情况下:网络位用255表示,主机位用0表示
  3. IP地址分类续【根据使用范围区分】
    1. 公有地址:可以在互联网合法使用,需要向NIC付费申请
    2. 私有地址:预留给企业内部使用,无需付费
    3. 回环地址:本机TCP/IP回环测试 (127.0.0.1~127.255.255.254)
      类别 私有地址
      A类 10.0.0.1~10.255.255.254
      B类 172.16.0.1~172.31.255.254
      C类 192.168.0.1~192.168.255.254
  4. IP地址中的特殊地址

5.默认网关

  1. 什么是网关
    1. 从一个网络连接另一个网络的“关口”
    2. 通常是一台路由器,或者是防火墙/接入服务器的地址

6.域名

  1. IP地址(12 个阿拉伯数字)很难记忆。使用一个名称更容易。
  2. 用于 TCP/IP 地址的名字被称为域名。www.baidu.com就是一个域名。
  3. 当你键入一个像https://www.baidu.com/这样的域名,域名会被一种 DNS 程序翻译为IP地址。
  4. 在全世界,数量庞大的 DNS 服务器被连入因特网。DNS 服务器负责将域名翻译为 TCP/IP 地址,同时负责使用新的域名信息更新彼此的系统。
  5. 当一个新的域名连同其 TCP/IP 地址一同注册后,全世界的 DNS 服务器都会对此信息进行更新。

4.2.4 Ethernet协议 【网络接口层 以太网协议】

1 概述

  1. Ethernet 以太网协议,用于实现链路层(网络接口层)的数据传输和地址封装。
  2. 目前主要有两种格式的以太网帧:Ethernet II(DIX 2.0)和IEEE 802.3。
    • IP、ARP、EAP和QICQ协议使用Ethernet II帧结构,而STP协议则使用IEEE** 802.3帧**结构。
  3. Ethernet II是由Xerox与DEC、Intel(DIX)在1982年制定的以太网标准帧格式,后来被定义在RFC894中。
  4. IEEE 802.3是IEEE 802委员会在1985年公布的以太网标准封装结构(可以看出二者时间相差不多,竞争激烈),RFC1042规定了该标准(但终究二者都写进了IAB管理的RFC文档中)。

1-半 MAC地址(网卡)

  • ①所有设备的MAC地址都是全球唯一的;

  • ②MAC全称Medium Access Control,直译为介质访问控制,它通常被固化在每个以太网网卡(NIC,Network Interface Card)。MAC(硬件)地址长48位(6字节),采用十六进制格式。

  • ③MAC地址前半部分被称为**“OUI代码”**厂商唯一标志符,用于唯一标志一个企业/公司,例如思科、TP-LINK、华为;后半部分厂商自行分配。

  • 下图说明了48位的MAC地址及其组成部分。

  • 示例: 00-01-6C-06-A6-29 或 00:01:6C:06:A6:29

    • 组织唯一标识符(OUI)由IEEE(电气和电子工程师协会)分配给厂商,它包含24位。厂商再用剩下的24位(EUI,扩展唯一标识符)为其生产的每个网卡分配一个全球唯一的全局管理地址,一般来说大厂商都会购买多个OUI。
    • I/G(Individual/Group)位,如果I/G=0,则是某台设备的MAC地址,即单播地址;如果I/G=1,则是多播地址(组播+广播=多播)。
    • G/L(Global/Local,也称为U/L位,其中U表示Universal)位,如果G/L=0,则是全局管理地址,由IEEE分配;如果G/L=1,则是本地管理地址,是网络管理员为了加强自己对网络管理而指定的地址。
    • 详细内容浏览该链接

2 Ethernet II 的帧格式

  1. 协议结构
    前导码 目的mac地址(DMac) 源mac地址 (SMac) 类型(Type) 数据(Data) 校验(FCS)
    8 Byte 0 1间隔 6 Byte 目的地址 6 Byte 源地址 2 Byte 46 ~ 1500 Byte 4 Byte CRC检验

  1. 解释
    • 前导码: 占8个字节,0 1 相间隔组成。其作用是用于给基站识别即将到来的数据。
    • 目的mac地址: 接收设备的mac地址。
    • 源mac地址:发送设备的mac地址。
    • 类型: 占2个字节,用于标记数据(Data)的协议类型。
      • 类型(Type) Data中的协议类型
        0x0800 IPv4(Internet Protocol Version 4)
        0x0806 ARP (Address Resulotion Protocol)
        0x0835 RARP (Resever Address Resulotion Protocol)
        0x86DD IPv6 (Internet Protocol Version 6)
    • 数据: 46-1500个字节。
    • 校验: 循环冗余校验字段,4个字节,用于核对数据是否接收正确。
  2. Wireshark接收到的数据包均为网卡校验正确的数据包,所以没有了前导码与校验(FCS)数据。

3 IEEE 802.3 的帧格式

  1. 协议结构
  2. 解释
    • 帧初始同步 :7字节长,每字节由10101010组成,使接收端同步。
    • 开始分隔符 : 1字节长 由10101011组成,指示帧开始。
    • 目的地址 :和Ethernet II 基本相同,不同的是该地址还支持2字节的地址。
    • 源地址 :和Ethernet II 基本相同,不同的是该地址还支持2字节的地址。
    • 长度 :2字节长,指示从LLC头开始字节到有效载荷的最后一个字节的字节数,不包括IEEE 802.3的头和FCS字段 ,最小是46 (0x002E)最大是1500(0x05DC)。
    • DSAP :目的服务访问点(DestinationService Access Point,DSAP)字段,1字节长,指明帧的目的上层协议类型。
    • SSAP :源服务访问点(SourceService Access Point,SSAP)字段,1字节长,指明帧的源上层协议类型。
    • 控制 :1字节或者2字节,确定的长度要看被封装的LLC数据类型,是LLC数据报(类型1)1字节,LLC对话的一部分(类型2)2字节。
      • 类型1 :_表明是无连接的,不可靠的LLC数据报,控制字段用0x03指明。
      • 类型2 :表明是面向连接可靠的LLC会话。
    • 虽然IEEE 802.3是标准,但没有被业界采用。以太网II已成事实标准。于是IEEE 802.3扩展产生 IEEE 802.3 SNAP 来兼容以太网网头部协议,在IEEE 802.2 LLC 头部后插入了SNAP头部。(SNAP头部 如上图所示)
      • 为了标识SNAP帧,DSAP和SSAP在LLC头都被设置成SNAP定义的值0xAA,所有SNAP的封装没有使用可靠的LLC服务,所以控制设置成0x03。
    • 组织代码 :3字节长,指明维护接下来2字节意义的组织,对IP和 ARP,该字段被设置为0x00-00-00。
    • 类型 :占2个字节,以太网类型。
    • 帧校验序列(FCS) 4字节 和Ethernet II 一样。
  3. 总结
    1. 如何区分IEEE 802.3的帧和Ethernet II 的帧?
      • 两种格式的帧源地址后字段含义不同,IEEE 802.3 是长度,长度范围是在区间[46,1500],十六进制[0x002E,0x05DC],以太网II是以太网类型,值最小位0x0600XNS(Xerox的网络系统)协议,大于1500.
    2. Ethernet V2比IEEE802.3更适合于传输大量的数据,但Ethernet V2缺乏数据链路层的控制,不利于传输需要严格传输控制的数据,这也正是IEEE802.3的优势所在,越需要严格传输控制的应用,越需要用 IEEE802.3或SNAP来封装,但IEEE802.3也不可避免的带来数据装载量的损失,因此该格式的封装往往用在较少数据量承载但又需要严格控制传输的应用中。
    3. 在实际应用中,我们会发现,大多数应用的以太网数据包是Ethernet V2的帧(如HTTP、FTP、SMTP、POP3等应用),而交换机之间的BPDU(桥协议数据单元)数据包则是IEEE802.3的帧,VLAN Trunk协议如802.1Q和Cisco的CDP(思科发现协议)等则是采用IEEE802.3 SNAP的帧。
  4. LLC(Logical Link Control)逻辑链路控制,由目的服务访问点DSAP(Destination Service Access Point)、源服务访问点SSAP(Source Service Access Point)和Control字段组成;
  5. SNAP(Sub-network Access Protocol)由机构代码(Org Code)和类型Type字段组成。Org Code三个字节都为0。Type字段的含义与Ethernet II中Type字段相同;
  6. IEEE802.3帧根据DSAP和SSAP字段的取值,又可以分为以下几类:
    • 当DSAP和SSAP都取特定值0xff时,802.3帧就变成了Netware-ETHERNET帧,用来承载NetWare类型的数据;
    • 当DSAP和SSAP都取特定值0xaa时,802.3帧就变成了ETHERNET_SNAP帧。此帧可以用于传输多种协议。
    • DSAP和SSAP其他的取值均为纯IEEE802.3帧

4.2.5 网络层协议

1 IP协议 (I want to send data to 192.168.0.127)【IP网际协议】

  1. 基本概念
    1. IP协议(Internet Protocol,互联网协议),是TCP/IP协议栈中最核心的协议之一,通过IP地址,保证了联网设备的唯一性,它提供无连接的不可靠的连接。所有的 TCP、UDP、ICMP及IGMP数据都以I P数据报格式传输。本文IP指IPv4。
    2. 以PC1访问服务器为例,PC1的地址是12.1.8.66,Server的地址是8.8.4.4,整个通信过程是这样的:
      1. ①PC1在请求数据包里面封装源目IP地址,并将带有IP地址的数据包发送到互联网;
      2. ②互联网有大量的网络通信设备(例如路由器),路由器根据数据包的IP地址查找路由表(地图),然后以接力棒的方式逐跳转发直到目标服务器;
      3. ③服务器收到请求数据后,将源目IP地址翻转,并封装回应数据包发送到互联网。
  2. 【IP协议字段解读】【IP头部】
    1. 每个IP数据报包含两部分,一个头和一个正文,正文部分也称之为有效净荷。
    2. IP协议头是一个20字节的定长部分和一个可选的变长部分。
    3. Version(版本号):标识IP协议的版本,目前V4版本地址已经枯竭,V6慢慢成为主流。
      1. 一般的值为0100(IPv4),0110(IPv6)
    4. Header Length(头部长度):默认为20字节,1个IP包头的长度最长60个字节,IP包头最小长度为20字节。
    5. Type Of Service(服务类型(Tos)):或者称呼它的新名字区别服务字节(differrntiated service byte)(DS 字节),用于为不同的IP数据包定义不同的服务质量,一般应用在QoS技术中,这个字段用来存储反映分组Qos需求的参数。8位 按位被如下定义 PPP DTRC0。
      1. 在Tos中,这个字段被分为两个子字段 PPP和DTRC0。
      2. PPP:优先级(3位)和数据链路层的QoS机制有关,定义了8个服务级别。当Qos选择了某种服务模型后,优先级越高,字段越优先传输。
        1. 000 普通 (Routine)
        2. 001 优先的 (Priority)
        3. 010 立即的发送 (Immediate)
        4. 011 闪电式的 (Flash)
        5. 100 比闪电还闪电式的 (Flash Override)
        6. 101 CRI/TIC/ECP(找不到这个词的翻译)
        7. 110 网间控制 (Internetwork Control)
        8. 111 网络控制 (Network Control)
      3. DTRC0
        1. D 时延: 0:普通 1:延迟尽量小
        2. T 吞吐量: 0:普通 1:流量尽量大
        3. R 可靠性: 0:普通 1:可靠性尽量大
        4. 最后一位被保留,恒定为0
    6. Total Length (总长度):标识IP头部加上上层数据的数据包大小,IP包总长度最大为65535个字节。
    7. Identification (标识符):用来实现IP分片的重组,标识分片属于哪个进程,不同进程通过不同ID区分。
      1. 该字段和Flags和Fragment Offest字段联合使用,对较大的上层数据包进行分段(fragment)操作。路由器将一个包拆分后,所有拆分开的小包被标记相同的值,以便目的端设备能够区分哪个包属于被拆分开的包的一部分。
    8. Flags(标志符):用来确认是否还有IP分片或是否能执行分片。该字段第一位不使用。第二位是DF(Don’t Fragment)位,第三位是MF(More Fragments)位。
      1. DF位,DF位设为1时表明路由器不能对该上层数据包分段。如果一个上层数据包无法在不分段的情况下进行转发,则路由器会丢弃该上层数据包并返回一个错误信息。
      2. MF位,路由器对一个上层数据包分段,则路由器会在除了最后一个分段的IP包的包头中将MF位设为1。
    9. Fragment offset (分片偏移量):用于标识IP分片的位置,实现IP分片的重组。
      1. 表示该IP包在该组分片包中位置,接收端靠此来组装还原IP包。
    10. Time to live (生存时间):标识IP数据包还能生存多久,根据操作系统不同,TTL默认值不同,每经过一个三层设备如路由器的处理,则TTL减去1,当TTL=0时,则此数据包被丢弃。
      1. 当IP包进行传送时,先会对该字段赋予某个特定的值。当IP包经过每一个沿途的路由器的时候,每个沿途的路由器会将IP包的TTL值减少1。如果TTL减少为0,则该IP包会被丢弃。这个字段可以防止由于路由环路而导致IP包在网络中不停被转发。
    11. Protocol (协议号):标识IP协议上层应用。当上层协议为ICMP时,协议号为1,TCP协议号为6,UDP的协议号为17。
      1. 比较常用的协议号:
        1. 1 ICMP
        2. 2 IGMP
        3. 6 TCP
        4. 17 UDP
        5. 88 IGRP
        6. 89 OSPF
    12. Header checksum (头部校验):用于检验IP数据包是否完整或被修改,若校验失败则丢弃数据包。
      1. 用来做IP头部的正确性检测,但不包含数据部分。 因为每个路由器要改变TTL的值,所以路由器会为每个通过的数据包重新计算这个值。
    13. Source(源IP地址):标识发送者IP地址,占用32bit。
    14. Destination (目的IP地址):标识接收者IP地址,占用32bit。
    15. Options (可选项):该字段属于可选项,主要用于测试,由起源设备根据需要改写。可选项目包含以下内容:
      1. 严格源路由(Strict source routing):给出一连串路由器接口的IP地址。IP包必须沿着这些IP地址传送,如果下一跳不在IP地址表中则表示发生错误。
      2. 路由记录(Record route):当IP包离开每个路由器的时候记录路由器的出站接口的IP地址。
      3. 时间戳(Timestamps):当IP包离开每个路由器的时候记录时间。
      4. 填充(Padding):因为IP包头长度(Header Length)部分的单位为32bit,所以IP包头的长度必须为32bit的整数倍。因此,在可选项后面,IP协议会填充若干个0,以达到32bit的整数倍。
  3. 总结:我们可以看到IP头部默认有12个字段(后续会提到特殊字段),为了方便记忆,可以总结为7个核心知识点。
    1. Source和Destination即IP源目地址字段,是IP协议最核心的字段;
    2. Id+Flags+FO三个字段可以实现IP数据分片和重组;
    3. Total Length和Header Length标记IP头部和上层数据的边界;
    4. TTL生存时间字段可以实现通信防环;
    5. DSCP服务区分符可以实现流量控制;
    6. Checksum字段可以数据包完整性校验;
    7. Protocol字段标记上层应用;

2 ARP协议 (who knows 192.168.0.127’s MAC address?)

  1. 基本概念
    1. ARP(Address Resolution Protocol) 即地址解析协议,用于实现从IP地址到MAC地址映射。
  2. ARP工作流程
    1. 同一网段ARP工作流程分析
      1. PC1 要和PC3 通行,首先查看自己的ARP表,查看其中是否包含PC3的MAC地址信息,如果找到对应关系,直接利用ARP表中的MAC地址对IP数据包进行封装。并将数据包发送给PC3。
      2. 如果PC1在ARP表中未找到PC3对应的MAC地址,则先缓存数据报文,然后利用广播方式(目标MAC地址FF:FF:FF:FF:FF:FF)发送一个ARP报文请求,ARP请求中的发送端MAC地址分别是PC1的IP地址和MAC地址,接收端的IP地址为PC3的IP地址,MAC地址全为0,因为ARP请求报文是以广播方式发送,所以该网段上的所有主机都可以接收到该请求包,但只有其IP地址与目的IP地址一致的PC3才会对该请求进行处理。
      3. PC3将ARP请求报文中的发送端(即PC1)的IP地址和MAC地址存入自己的ARP表中。然后以单播方式向PC1发送一个ARP相应报文,应答报文中就包含了自己的MAC地址,也就是原来在请求报文中要请求的目的MAC地址。
      4. PC1收到来自PC3的ARP响应报文之后,将PC3的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将原来缓存的IP数据包再次修改(在目的MAC地址字段填上PC3的MAC地址)后发送出去。
    2. 跨网段的ARP地址解析流程
      1. 如果主机A不知道网关的MAC地址(也就是主机A的ARP表中没有网关对应的MAC地址表项),则主机A先在本网段中发出一个ARP请求广播,ARP请求报文中的目的IP地址为网关的IP地址,代表其目的就是想获得网关的MAC地址。如果主机A已经知道网关的MAC地址,则略过此步。
      2. 网关收到ARP广播包后同样会向主机A发回一个ARP应答包。当主机A收到的应答包中获得网关的MAC地址后,在主机A向主机B发送的原报文的目的MAC地址字段填上网关的MAC地址后发给网关。
      3. 如果网关的ARP表中已有主机B对应的MAC地址,则网关直接将在来自主机A的报文中的目的MAC地址字段填上主机B的MAC地址后转发给B。
      4. 如果网关ARP表中没有主机B的MAC地址,网关会再次向主机B所在的网段发送ARP广播请求,此时目的IP地址为主机B的IP地址,当网关从收到来自主机B的应答报文中获得主机B的MAC地址后,就可以将主机A发来的报文重新再目的MAC地址字段填上主机B的MAC地址后发送给主机B。
  3. 注意:ARP 只用于 IPv4 协议中,IPv6 协议使用的是 Neighbor Discovery Protocol,译为邻居发现协议,它被纳入 ICMPv6 中。
  4. ARP报文格式

  1. 前面 14 个字节构成标准以太网的首部,前两个字段 DST 和 SRC 分别表示 以太网的目的地址以太网的源地址以太网的目的地址如果是 ff:ff:ff:ff:ff:ff 全部为 1 表示广播地址,在同一广播域中的所有以太网接口可以接收这些帧。后面紧跟着的是 ARP 请求的长度/类型,ARP 请求 和 ARP 应答这个值为 0x0806

  2. 硬件类型:表示硬件地址的类型,硬件地址常见的有 MAC 物理或者以太网地址,对于以太网来说,此值为 1。

    • 类型 含义 类型 含义
      0x001 以太网 0x0012 本地网
      0x002 实验性以太网 0x0013 超链路
      0x003 业务无线电 AX.25 0x0014 SMDS
      0x004 Proteon ProNet令牌环 0x0015 帧中继
      0x005 ChaosNET 0x0016 ATM
      0x006 IEEE 802网 0x0017 HDLC(高级数据链路控制)
      0x007 ARCnet 0x0018 未指定
      0x008 超信道 0x0019 异步传输模式
      0x0010 Autone短地址 0x0021 异步传输模式
      0x0011 Local talks
  3. 协议类型:指明了发送方提供的高层协议类型,对于 IPv4 地址,这个值是 0x0800。ARP可用于任何高层协议。

  4. 硬件长度:用来定义物理地址的长度,以字节为单位。例如:对于以太网的值为6。

  5. 协议长度:高层协议地址的长度,以字节为单位。例如:对于IPv4协议的值为4。

  6. 操作码:用来定义报文的类型。已定义的分组类型有两种:ARP请求OP=1,ARP响应OP=2。

  7. 发送方硬件地址(MAC 地址)

  8. 发送方的协议地址(IPv4 地址)

  9. 目的硬件地址:对于ARP请求报文,这个字段为全0,因为发送方并不知道目标的硬件地址。

  10. 目的协议地址

  11. 报文中的padding字段是填充数据,为了保证帧最少有64个字节。

  12. 参考

    1. ARP详解
    2. ARP
    3. ARP协议分析

3 RARP协议 (who knows 21.21.12.21.21.12’s IP address?)

  1. 基本介绍
    1. RARP(Reverse Address Resolution Protocol)逆地址解析协议
    2. 就是和ARP协议做相反的工作,它是将48位的MAC地址转换为32位的IP地址
  2. RARP协议的工作原理
    1. 发送主机发送一个本地的RARP广播,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址。
    2. 本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址。
    3. 如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用。
    4. 如果不存在,RARP服务器对此不做任何的响应。
    5. 源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,表示初始化失败。
  3. 协议解析(它的内容是和ARP协议非常类似的)

  1. 类似于ARP的报文格式主要差别在于帧类型代码为0x8035(ARP为0x0806),操作码为3请求(ARP为1),4应答(ARP为2)。

4 ICMP协议 (I send or receive queries or error message)

  1. 基本介绍
    1. ICMP,全称是 Internet Control Message Protocol,即互联网控制报文协议,所谓控制,就是通过下发指令来感知和控制网络环境,所以它一定是配合一个无法感知网络环境的协议来工作的,这个协议就是 IP(包括 IPv4 和 IPv6)。所以,ICMP 通常被认为是 IP 协议的一部分,它封装在 IP 层中,使用 IP 协议进行传输。因此,严格来说,ICMP 既不是一个网络层协议,也不是一个传输层协议,而是介于两者之间的一个协议。
    2. 它的主要功能是传输网络诊断信息,信息主要包括两类:
      1. 一类是 查询类报文 :主要用于信息的查询和采集,比如采集传输路径上的每个路由器都是谁,本次传输的报文是否达到目的地等等。
      2. 另一类是 差错诊断类报文 :主要用于诊断网络故障,比如传输报文被丢弃的原因是什么等等。
  2. 为什么需要 ICMP
    1. 我们都知道,IP 协议是一个不可靠协议,如果 IP 包在传输过程中出现错误,比如 checksum 对不上,拥塞,超时等等,那么 IP 包是会直接被丢弃的,之后也不会有进一步的努力来修正。这是 IP 协议的一个设计准则决定的,也就是 best effort,尽力而为,这样的好处是让 IP 协议尽量保持简单的形态,只负责有效率的数据传输,而更多的质量控制交给高层的协议去处理(比如 TCP)。但高层能提供质量控制的协议毕竟在少数,所以就需要在下层有协议来辅助 IP 完成必要的网络质量管理。ICMP 协议自然就被提出来了。
    2. 通过 ICMP 协议,当 IP 包发生错误的时候,上层发送 IP 包的主机或路由器并不知道下层发生了错误,这个时候,下层的主机或路由器就可以通过发送 ICMP 包,将错误信息汇报给上层,从而让上层的主机或路由器进行调整。不过需要注意的是,ICMP 仅仅只能提供某些特定类型的错误信息汇报,并不能帮助 IP 协议成为可靠的协议。它能做的事还是有限,但用于基本的网络质量管理是足够了。
  3. ICMP 报文格式
    1. 如下图所示,ICMP 报文是被封装在 IP 数据报中传输的。

    2. IP 报头中的 Protocol 字段为 1 即表示该报文携带的是 ICMP 报文。

    3. 进一步看,ICMP 报头为 4 个字节:

        1. 类型 type:占 1 个字节,表示较大范围类型分类的 ICMP 报文
        2. 代码 code:占 1 个字节,表示较小范围类型分类的 ICMP 报文(type的细分)
        3. 校验和 checksum:占 2 个字节,ICMP checksum 的计算方法类似于 IP checksum,但是不同的是 IP 只校验头部,ICMP 校验头部+数据部分
        4. 后面紧接的 ICMP 数据部分,根据前面的类型和代码字段的不同,具有不同的内容。
      1. 第一张表:常见的一些类型(type)表

        类型 内容 种类 解释
        0 应答 R ping应答
        3 目的不可达 E 很多细分,如主机协议
        4 源端抑制 E 表示拥塞
        5 重定向 E 表示最优的路由路径
        8 请求 R ping请求
        9 路由器通告 R 告知路由器地址
        10 路由器请求 R 请求路由器通告
        11 超时 E TTL=0
        12 参数问题 E 有问题的报文

        R表示查询报文,E表示差错报文

      2. 第二张表:类型细分表

        类型 代码 内容 解释
        3 0 网络不可达 没有路由到目的地
        3 1 主机不可达 已知但不可达的主机
        3 2 协议不可达 未知协议
        3 3 端口不可达 未知端口
        3 4 要分片但设置了不分片位 路由器MTU限制需要分片但无法分片
        3 5 源路由失败 中间跳不可达
        3 13 管理禁止通信 被过滤策略禁止的通信
        3 14 违反主机优先级 src/dst/port不准许的优先级
        3 15 优先级终止生效 在最小Tos之下
        5 1 主机重定向数据报 指示一个可选的路由器/主机
        11 0 在传输期间时间超时 重组计时器超市之前,有分片未到达
        12 0 指针指示差错 字节偏移量指示第一个问题字段
        12 2 错误的长度 数据包有无效的Total Length 字段
    4. 难点讲解

      1. 源端抑制
        1. 属于差错信息。如果某个源主机向目的主机快速地发送数据包,但目的主机来不及处理,就会向源主机发出该类型的 ICMP 包,提醒源主机放慢发送速度。
      2. 重定向
        1. 属于差错信息。如果某个源主机向网络中发送一个 IP 包,路径中某个路由器收到这个 IP 包,对照其路由表,发现自己不应该接收该包(包需要原路返回,或者不是最佳路由路径),就会向源主机发送该类型的 ICMP 包,提醒源主机修改自己的路由表,下次路由到另外一个更好的路由器。
      3. 需要分片但设置了不分片位
        1. 属于差错信息。如果某个源主机在发送一个 IP 包之前,对该 IP 包中的首部字段 DF 位设为 1,也就是“分片禁止位=1”,表示该包在传输的过程中不允许分片,但是中间某个路由器允许传输的最大路径 MTU 小于该包大小,需要分片才能传输,但是由于设置不分片位,路由器会将该包丢弃,并向源主机发送一个携带 MTU 信息的 ICMP 包,提醒源主机下次发包的大小不应超过该 MTU 的值。这种类型的 ICMP 包通常用来发现传输路径上的 MTU 值。
      4. TTL超时
        1. 属于差错信息。超时定义了数据包在网络中存活的最长时间,IPv4 中的 TTL 字段和 IPv6 中的 Hop Limit 字段都表示了这层意思,它们是一个整数值,会随着经过的路由器而递减,当减为 0 时,就认为该 IP 包超时,然后当前减为 0 的路由器会向源主机发送 ICMP 包,通知它发生了超时错误。
  4. 有哪些命令体现了 ICMP
    1. ping 使用查询类型报文
    2. traceroute 使用差错类型报文
  5. Ping 原理分析
    1. ping使用的是 ICMP 的请求回显/回显应答类型的报文,格式如下。它的内容包括标识符、序列号以及回显数据3部分,报文大小默认为 64 字节(header的8字节+body的56字节)。
    2. ICMP回显报文格式
      1.
      1. 请求回显类型是8,回显应答类型是0,他们代码都是 0,校验和是包内容根据算法生成用于校验数据完整性。
      2. 标识符在 Linux/macOS 中用的是进程ID。
      3. 序列号在 Linux/macOS 中是从0递增的,每个进程独立的。
      4. 回显数据包括发送ping请求的时间戳(在macOS占8字节,在Linux占16字节),以及一串填充数据,共48字节。填充数据你也可以通过 -p pattern指定,比如 ping -pff 192.168.33.10,则填充数据全部是 ff。
      5. 默认TTL是64,你可以通过 -t ttl 指定TTL值。
      6. ping请求时间 = 接收到回显应答的时间 - 应答回显数据中的时间
    3. 实例测试
      1. Ping请求

      2. Ping响应

      3. 描述

        Internet Control Message Protocol
        Type: 8 (Echo (ping) request)          // ICMP类型为8,说明这是一个ICMP请求查询报文 
        Code: 0                                //表示是请求
        Checksum: 0xf7e9 [correct]             //校验和
        [Checksum Status: Good]                //校验和状态,good表示校验和正确,bad表示数据报被修改或者发生错误
        Identifier (BE): 1 (0x0001)            //标识,用于区分在linux下抓包,基本上抓的每一个ICMP包都是1
        Identifier (LE): 256 (0x0100)          //标识,用于区分在windows下抓包,基本上抓的每一个ICMP包都是256
        Sequence number (BE): 21 (0x0015)      //用于区分在linux下抓包,每一个ICMP包的都不一样
        Sequence number (LE): 5376 (0x1500)    //用于区分在windows下抓包,每一个ICMP包的都不一样
        [No response seen]               
            Data (48 bytes)                    //数据部分
        
    4. 如何自己写一个ping?可以参考下这位朋友的ping工具的 python实现。 ping Python3实现
  6. Traceroute 原理分析
    1. traceroute 是类 Linux 系统自带的工具,Windows 上类似的工具是 tracert,两者有些许不同,tracert 默认使用 ICMP 报文探测,而 traceroute 默认使用 UDP,但是也可以使用 TCP/ICMP 三种报文探测。
    2. traceroute 利用 ICMP 差错报文,主要用来确定这几件事:
      1. 确定通信双方路径上经过的路由器设备
      2. 确定 UDP 包是否成功达到目的地
      3. 发现路径 MTU
    3. traceroute 用到ICMP协议和TTL字段。TTL字段是数据报的生存周期,初始值通常默认是64,每个处理数据报的路由器都需要把TTL值减去1或者数据报在路由器停留的秒数(因为绝大多数路由器转发数据报时延都小于1秒,因此通常都是减去1,而且很多路由器的实现即便超过1秒也是减去1,因此可以把TTL看做一个跳站计数器)。路由器接收到一份IP数据报时,如果TTL为0或者1,则路由器不转发该数据报,而是丢弃并给源机器发送一份ICMP超时报文,而ICMP信息中的IP报文中源地址正是路由器的IP地址。
    4. traceroute的原理
      1. 先发送一份TTL为1的报文,这样第一个路由器会将TTL减1然后丢弃该报文,并发回一个ICMP超时报文,这样就得到了第一个路由器的IP地址;接着发送一个TTL为2的报文,可以得到第二个路由器的IP地址;继续该过程直到目的主机。但是目的主机即便收到TTL为1的报文,它也不会丢弃该数据报并发回一份ICMP超时报文,因为此时数据报已经到了目的地。为了判断是否到达目的主机,traceroute发送的报文采用了UDP数据报,它选择一个很大的端口值如30000以上的,以保证没有其他应用程序使用该端口,然后目的主机会返回一个端口不可达的ICMP报文,这样就可以知道什么时候结束。
      2. traceroute针对每个TTL会发3次UDP报文,并打印每次的往返时间。如果5秒内没有收到3次报文中任何一个的响应,则打印*号继续下一个TLL的报文发送。3次报文选择的UDP目的端口分别是 33435,33436,33437,UDP报文数据长度为24字节,内容为全0(macOS环境)。

4.2.6 传输层协议

1 UDP协议

  1. 基本介绍
    1. 与IP的区别:UDP在IP数据报服务之上增加了两个最基本的服务:复用和分用 + 差错检测
    2. 常用于一次性传输较少数据的网络应用,如DNS 、SNMP等
      1. 因为对于这些应用,若采用TCP,则将为连接创建、维护、拆除带来不小的开销
    3. 常用于多媒体应用(IP电话、视频会议、流媒体等)
      1. 因为可靠传输对于这些应用来说不是最重要的,TCP的拥塞控制会导致数据出现较大的延迟,这是大忌!
    4. 不保证可靠交付,但并不意味着应用对数据的要求是不可靠的,所有维护可靠性的工作可由用户在应用层完成
    5. 面向报文的,报文不可分割,是UDP数据报处理的最小单位
  2. UDP的优点
    1. 无需建立连接,不会引入建立连接的时延
      1. DNS如果运行在TCP上,速度会慢很多;因此使用UDP
      2. HTTP使用TCP是因为对于基于文本数据的web网页,可靠性是至关重要的
    2. 无连接状态,不维护连接状态,一般能支持更多的活动客户机
      1. TCP需要在端系统中维护连接状态(包括接收和发送缓存、拥塞控制参数和序号与确认号的参数)
    3. 分组首部开销小
      1. TCP有20B的首部开销,UDP有8B的开销
    4. 没有拥塞控制,应用层能更好地控制要发送的数据和发送时间
      1. UDP没有拥塞控制,因此网络中的拥塞不会影响主机的发送效率
    5. 支持一对一、一对多、多对一和多对多的交互通信
  3. UDP报文格式

  1. UDP数据报包含两部分:UDP首部和用户数据
  2. UDP首部(8Byte),由4个字段组成,每个字段长度为2Byte
  3. 源端口号:在需要对方回信时选用,不需要时全0
  4. 目的端口号:这在终点交付报文时必须使用到
  5. UDP长度:UDP数据报的长度(包括首部和数据),其最小值是8(仅有首部)
  6. 校验和:检测UDP数据报中是否有错,有错就丢弃。该字段可选,不使用时全0
  7. 当传输层从IP层收到UDP数据报时,就根据首部中的目的端口,把UDP数据报通过相应的端口上交给应用进程,如下图所示:

  1. 如果接收方UDP发现收到的报文中的目的端口号不正确(即不存在对应于端口号的应用进程),那么就丢弃该报文,并由ICMP发送“端口不可达”差错报文给发送方
  2. UDP校验
    1. 在计算校验和时,要在UDP数据报之前增加12Byte的伪首部,伪首部并不是UDP的真正首部,只是在计算校验和时,临时添加在UDP数据报的前面,得到一个临时的UDP数据报
    2. UDP校验和检查首部和数据部分,而IP校验和只检查数据报的首部
    3. UDP的伪首部
      1. 伪首部的特点
        1. 长度为12Byte
        2. 伪首部不是UDP的真正首部,只在计算校验和时用到
        3. 伪首部既不向下传送也不向上递交,只是为了计算校验和
      2. 伪首部结构


3. UDP校验方法:
1. 发送方首先把全零放入校验和字段并添加伪首部,然后把UDP数据报视为许多16位的字连接起来。
1. 若UDP数据报的数据部分不是偶数个字节,则要在数据部分末尾增加一个全零字节(但此字节不发送)。
1. 接下来按二进制反码计算出这些16位字的和,并将此和的二进制反码写入校验和字段。
1. 接收方把收到的UDP数据报加上伪首部(如果不为偶数个字节,那么还需要补上全零字节)后,按二进制反码计算出这些16位字的和。
1. 当无差错时其结果应全为1,否则表明有差错出现,接收方就应该丢弃这个UDP数据报。

2 TCP协议

  1. 基本介绍

    1. 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
  2. 特点

    1. 基于连接的:数据传输之前需要建立连接
    2. 全双工的:可以双向传输
    3. 字节流:不限制数据大小,打包成报文段,保证有序接收,重复报文自动丢弃
    4. 流量缓冲:解决双方处理能力的不匹配
    5. 可靠的传输服务:保证可达,丢包时通过重发机制实现可靠性
    6. 拥塞控制:防止网络出现恶性拥塞
  3. 为满足TCP协议的这些特点,TCP协议做了以下规定:

    1. ①数据分片:在发送端对用户数据进行分片,在接收端进行重组,由TCP确定分片的大小并控制分片和重组
    2. ②到达确认:接

相关文章