计算机网络


一、概述 

计算机网络学习的核心内容就是网络协议的学习。网络协议是为计算机网络中进行数据交换而建立的规则、标准或者说是约定的集合。因为不同用户的数据终端可能采取的字符集是不同的,两者需要进行通信,必须要在一定的标准上进行。一个很形象地比喻就是我们的语言,我们大天朝地广人多,地方性语言也非常丰富,而且方言之间差距巨大。A地区的方言可能B地区的人根本无法接受,所以我们要为全国人名进行沟通建立一个语言标准,这就是我们的普通话的作用。同样,放眼全球,我们与外国友人沟通的标准语言是英语,所以我们才要苦逼的学习英语。

计算机网络协议同我们的语言一样,多种多样。而ARPA公司与1977年到1979年推出了一种名为ARPANET的网络协议受到了广泛的热捧,其中最主要的原因就是它推出了人尽皆知的TCP/IP标准网络协议。目前TCP/IP协议已经成为Internet中的“通用语言”,下图为不同计算机群之间利用TCP/IP进行通信的示意图。

二、计算机网络硬件组成

网络是计算机或类似计算机的网络设备的集合,它们之间通过各种传输介质进行连接。无论设备之间如何连接,网络都是将来自于其中一台网络设备上的数据,通过传输介质传输到另外一台网络设备上。

1、网卡

 (1)概念:网卡也被称为网络适配器(Network Adapter),是连接计算机和传输介质的接口。网卡主要用来将计算机数据转换为能够通过传输介质传输的信号。

 (2)种类:网络设备要访问互联网,就需要通过网卡进行连接。

根据上网的方式分类

  • 有线网卡:有线网卡就是通过“线”连接网络的网卡。这里所说的“线”指的是网线。有线网卡常见形式如图所示。

  • 无线网卡:与有线网卡相反,无线网卡是不需要通过网线进行连接的,而是通过无线信号进行连接。无线网卡通常特指 Wi-Fi 网络的无线网卡。无线网卡常见形式如图所示。

  • 蓝牙适配器:蓝牙适配器也是一种无线网卡。蓝牙适配器与无线网卡的区别是数据通信方式不同。蓝牙适配器常见样式如图所示。

按安装方式分类

网卡通常是网络设备的从属设备。根据其安装方式,网卡可以分为内置网卡和外置网卡。

  • 内置网卡:由于网卡已经成为连接网络的必要设备,所以很多网络设备都内置了网卡。因此,内置网卡也被称为集成网卡。例如,现在的主板都集成了有线网卡,如图所示。箭头所指的接口就是内置网卡提供的有线网卡接口。

  • 外置网卡:除了内置网卡外,很多网络设备都允许用户安装额外的网卡。这类网卡被称为外置网卡,有时被称为独立网卡。由于它可以插在主板的各种扩展插槽中,所以可以随意拆卸,具有一定的灵活性。上面所说的有线网卡和无线网卡就属于外置网卡。

2、网络电缆

(1)概念:网络电缆用来连接网络中的各个设备,供设备之间进行数据通信。常见的网络电缆有双绞线、光纤、电话线等。

(2)种类:

  • 双绞线:双绞线也就是网线。它是由两根具有绝缘保护层的铜导线缠绕组成的,如图所示。这样的铜线一共有 8 根。每根都通过对应的颜色进行区分。现实生活中,家庭和企业中的计算机进行上网,一般都是通过双绞线连接网络。这些双绞线在排序上往往采用 EIA/TIA 568B 的线序,依次为橙白、橙、绿白、蓝、蓝白、绿、棕白、棕。

  • 光纤:光纤是一种传输光信号的细而柔软的媒质,多数光纤在使用前必须由几层保护结构包裹,如图所示。光纤的主要作用是把要传送的数据由电信号转换为光信号进行通信。在光纤的两端分别装有“光猫”进行信号转换。

  • 电话线:电话线就是连接电话的线。电话线也是由绝缘保护层的铜导线组成的。与双绞线不同的是,电话线只有 2 根或 4 根线,而且不一定会缠绕在一起,也没有颜色排序,如图所示。

3、网络设备

(1)概念:网络设备指的是网络组成中的设备,如交换机、路由器、调制解调器等。它们是发送或接收数据的终端设备。

(2)种类:

  • 交换机:交换机(Switch)可以将多个网络设备连接起来组成一个局域网。它是一种用于电(光)信号转发的网络设备,用来进行数据交换。交换机外观如图所示。

  • 路由器:路由器(Router)又称网关设备(Gateway),用于连接多个逻辑上分开的网络。所谓逻辑网络是代表一个单独的网络或者一个子网。当数据从一个子网传输到另一个子网中时,可通过路由器的路由功能来完成。它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号。路由器也是用来进行数据转换的。路由器与交换机很容易区分,最大的区别是,路由器上有 WAN 口和 LAN 接口,而交换机没有这些接口。

  • 调制解调器:调制解调器(Modem),俗称“猫”,是一种计算机硬件。它能把计算机的数字信号翻译成可沿普通电话线传送的脉冲信号,而这些脉冲信号又可被线路另一端的另一个调制解调器接收,并翻译为计算机的数字信号语言。调制解调器外观如图所示。

三、网络协议

网络协议是网络运行的基石。在网络中,网络设备、传输介质、网卡又各有不同,数据在传输过程中也会使用不同的规则进行传输,而这些规则是依靠网络协议完成的。网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合,它规定了通信时信息必须采用的格式和这些格式所代表的意义。网络协议使网络上各种设备能够相互交换信息。网络中存在着许多协议,接收方和发送方使用的协议必须一致,否则一方将无法识别另一方发出的信息。而 TCP/IP 协议就是一种常见的协议,Internet 上的计算机使用的就是该协议。

常见的网络协议有标准的OSI七层模型,TCP/IP四层协议以及TCP/IP五层协议,它们之间的对应关系如下图所示:    

四、OSI七层网络模型

OSI7层模型是一个大而全的理论模型,虽然OSI协议的实现太过于复杂,但OSI七层模型的体系结构,概念十分清晰,理论也很完整。如下图,OSI模型的工作流程:数据在两台电脑直接传输,发送方由应用层依次向下将数据通过不同的协议进行包装,接收方接收到数据从物理层依次向上拆分数据包,最终达到数据交互的目的。   下面分别说明7个功能层次的各种协议与各层的功能

1、物理层(Physical Layer)

物理层(Physical Layer)位于OSI参考模型的最底层,它直接面向实际承担数据传输的物理媒体(即通信通道),物理层的传输单位为比特(bit),即一个二进制位(0或1)。实际的比特传输必须依赖于传输设备和物理媒体。但是需要注意的一点是,物理层并不是指具体的物理设备,也不是指用来传输信息的物理媒体,指的是传输原始比特流的物理连接。物理层规定:激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性。该层为上层协议提供了一个传输数据的可靠的物理媒体。简单的说,物理层确保原始的数据可在各种物理媒体上传输。通俗的讲,现有的计算机网络中的硬件设备和传输媒体种类繁多,通信手段也有多种方式。物理层的作用就是尽可能地屏蔽掉传输过程中存在的这些差异(屏蔽指的是减小,而非消除),同时也规范了传输媒体的相关特性,如:

  • 机械特性(接线器的形状、尺寸、引脚数目、排列等)
  • 电气特性(物理媒体的电压范围等)
  • 功能特性(电平变化的意义等)

传输信息的物理媒体不在物理层协议之内,常见的物理媒体如双绞线、同轴电缆、光缆、无线信道等。因此也有一种说法称物理媒体为第0层物理层两个重要的设备如中继器(Repeater,也叫放大器)和集线器。

2、数据链路层(Data Link Layer)

数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。为达到这一目的,数据链路必须具备一系列相应的功能,主要有:如何将数据组合成数据块,在数据链路层中称这种数据块为帧(frame),帧是数据链路层的传送单位;如何控制帧在物理信道上的传输,包括如何处理传输差错,如何调节发送速率以使与接收方相匹配;以及在两个网络实体之间提供数据链路通路的建立、维持和释放的管理。数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。有关数据链路层的重要知识点:

  • 数据链路层为网络层提供可靠的数据传输
  • 基本数据单位为帧
  • 主要的协议:以太网协议
  • 两个重要设备名称:网桥和交换机

3、网络层(Network Layer)

网络层的目的是实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。它提供的服务使传输层不需要了解网络中的数据传输和交换技术。如果您想用尽量少的词来记住网络层,那就是“路径选择、路由及逻辑寻址”。网络层中涉及众多的协议,其中包括最重要的协议,也是TCP/IP的核心协议——IP协议。IP协议非常简单,仅仅提供不可靠、无连接的传送服务。IP协议的主要功能有:无连接数据报传输、数据报路由选择和差错控制。与IP协议配套使用实现其功能的还有地址解析协议ARP、逆地址解析协议RARP、因特网报文协议ICMP、因特网组管理协议IGMP。具体的协议我们会在接下来的部分进行总结,有关网络层的重点为:

  • 网络层负责对子网间的数据包进行路由选择。此外,网络层还可以实现拥塞控制、网际互连等功能;

  • 基本数据单位为IP数据报;

  • 包含的主要协议:

    • IP协议(Internet Protocol,因特网互联协议);
    • ICMP协议(Internet Control Message Protocol,因特网控制报文协议);
    • ARP协议(Address Resolution Protocol,地址解析协议);
    • RARP协议(Reverse Address Resolution Protocol,逆地址解析协议)。
  • 重要的设备:路由器。

4、传输层(Transport Layer)

第一个端到端,即主机到主机的层次。传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。此外,传输层还要处理端到端的差错控制和流量控制问题。传输层的任务是根据通信子网的特性,最佳的利用网络资源,为两个端系统的会话层之间,提供建立、维护和取消传输连接的功能,负责端到端的可靠数据传输。在这一层,信息传送的协议数据单元称为段或报文。网络层只是根据网络地址将源结点发出的数据包传送到目的结点,而传输层则负责将数据可靠地传送到相应的端口。有关网络层的重点:

  • 传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输以及端到端的差错控制和流量控制问题
  • 包含的主要协议:TCP协议(Transmission Control Protocol,传输控制协议)、UDP协议(User Datagram Protocol,用户数据报协议)
  • 重要设备:网关

5、会话层

会话层管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。

6、表示层

表示层对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换等。

7、应用层

为操作系统或网络应用程序提供访问网络服务的接口。

  • 会话层、表示层和应用层重点:
    • 数据传输基本单位为报文
    • 包含的主要协议:FTP(文件传送协议)、Telnet(远程登录协议)、DNS(域名解析协议)、SMTP(邮件传送协议),POP3协议(邮局协议),HTTP协议(Hyper Text Transfer Protocol)

五、TCP/IP四层模型

OSI7层模型大而全,但是比较复杂、而且是先有了理论模型,没有实际应用。TCP/IP四层模型,是由实际应用发展总结出来的。它包含了应用层、运输层、网际层和网络结构层,不过从实质讲,TCP/IP只有最上面三层,最下面一层没有什么具体内容,TCP/IP参考模型没有真正描述这一层的实现,只是要求能够提供给其上层-网络互连层一个访问接口,以便在其上传递IP分组。

1、OSI模型和TCP/IP四层模型的关系

  • OSI定义了服务、接口、分层、协议的概念,TCP/IP借鉴了OSI的这个概念建立了TCP/IP模型。
  • OSI先有模型,后有协议,先有标准,后进行实践,而TCP/IP则相反。
  • OSI是一种理论模型,而TCI/IP已经被广泛使用,成为网络互连实际上的标准。

2、应用层

(1)功能:负责处理应用程序的逻辑,比如文件传输,名称查询和网络管理等

(2)常用协议:

  • OSPF(开放最短路径优先)协议:是一种动态路由更新协议,用于路由器之间的通信,以告知对方各自的路由信息。
  • DNS(域名服务)协议:提供机器域名到IP地址的转换。(如将www.baidu.com转化成百度的IP,输入域名就直接可以进入。因为IP地址记的时候太麻烦,就像每个人都是由身份证唯一标识的,但为了好记就起了名字。DNS就是一个将姓名与身份证对应的过程)
  • telnet协议是一种远程登陆协议,使我们能在本地完成远程任务。
  • HTTP协议(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式。

3、传输层

(1)功能:为两台主机上的应用程序提供端到端的通信。与网络层使用的逐跳通信方式不同,传输层只关心通信的起始端和目的端,而不在乎数据包的中转过程。

(2)主要协议:

  • TCP协议(传输控制协议):为应用层提供可靠的、面向连接的和流式服务。
  • UDP协议(用户数据报协议):为应用层提供不可靠的、无连接的和数据报服务。(TCP和UDP协议的详解和区别将在下一篇详讲)
  • SCTP协议(流控制传输协议)它是为在英特网上传输电话信号而设计的

4、网络层

(1)功能:实现数据包的选路和转发。

(2)对应设备:路由器

(3)常用协议:

  • IP协议(英特网协议)根据数据包的目的IP地址来决定如何将它发送给目标主机。如果数据包不能直接发送给目标主机,那么IP协议为它寻找一个合适的下一跳路由器,将数据包交给路由器来转发,多次之后数据包将到达目标主机,或者因发送失败而被丢弃。
  • ICMP协议是网络层的另一个重要协议,它是IP协议的重要补充,主要用于检测网络连接。8位类型:将ICMP报文分为两大类:一类是差错报文,比如目标不可达(类型值为3)和重定向(类型值为5);另一类是查询报文,用来查询网络信息。有的ICMP报文还用8位代码字段细分不同的条件。比如代码值0表示网络重定向,代码值1表示主机重定向。16位校验和:对整个报文(包括头部和内容部分)进行循环冗余校验(CRC)。注意:ICMP协议并非严格意义上的网络层协议,因为它使用了处于同一层的IP协议提供的服务,而一般来说,上层协议使用下层协议提供的服务。

5、数据链路层

(1)功能:实现了网卡接口的网络驱动程序,以处理数据在物理媒介(如以太网、令牌环等)上的传输。

(2)对应设备:网线、网桥、集线器、交换机

(3)常用协议:

  • ARP(地址解析协议):它实现IP地址到物理地址(通常是MAC地址,通俗的理解就是网卡地址)的转换。
  • RARP(逆地址解析协议):顾名思义,它和ARP是相反的,它是实现从物理地址到IP地址的转换。
  • ARP用途:网络层使用IP地址寻找一台机器,而数据链路层则是使用物理地址寻找一台机器,因此网络层必须先将目标机器的IP地址转化成物理地址,才能使用数据链路层提供的服务。
  • RARP用途:RARP协议仅用于网络上的某些无盘工作站,因为缺少储存设备,无盘工作站无法记录自己的IP地址,然而通过RARP就可以看到从物理地址到IP地址的映射。

六、五层模型

五层模型只出现在计算机网络学习教学过程中,他是对七层模型和四层模型的一个折中,及综合了OSI和TCP/IP 体系结构的优点,这样既简洁又能将概念阐述清楚。

1、应用层

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

涉及的协议如下:

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

2、传输层

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

涉及到的协议如下:

  • UDP 用户数据报协议:非面向连接(发快递)不可靠 不稳定 但速度更快
  • TCP协议

3、网络层

IP包的封装和路径的选择

网络层的协议:

  • IP数据包的封装,定义IP地址
  • ICMP错误诊断(用ping测试网络连通性)
  • ARP将IP地址解析为MAC地址
  • RARP将MAC地址转换为IP地址

4、数据链路层

MAC地址(网卡编号):48位的二进制数。表示为12位的16进制数。分为两部分:前24位为厂商编号,后24位为网卡的编号(由专门的机构分配)

5、物理层

6、数据封装

七、网络工具

一个好的辅助工具可以起到事半功倍的效果,这里介绍两个辅助工具——网络工具集工具 netwox 和网络分析工具 Wireshark。

1、netwox

netwox 是由 lauconstantin 开发的一款网络工具集,适用群体为网络管理员和网络黑客,它可以创造任意的 TCP、UDP 和 IP 数据报文,以实现网络欺骗,并且可以在 Linux 和 Windows 系统中运行。netwox 可以在命令模式下使用,也可以在 GUI中 使用 netwag 调用。netwox 包含了超过 200 个不同的功能,这里被称为模块。每个模块都有一个特定的编号,使用不同的编号模块来实现不同的功能。Kali Linux 系统自带 netwox 工具,而 Windows 系统默认没有安装。因此,本节将讲解如何在 Windows 系统中安装 netwox 工具。安装方法如下:

(1)下载和安装

  • 访问网址 https://sourceforge.net/projects/ntwox/,进入 netwox 下载页面,如图所示。图中显示了可下载的版本,从这里可以看到当前的最新版本为 5.39。

  • 下载最新版本,单击 Download Latest Version 按钮进行下载。成功下载后,下载的是一个压缩包,名称为 netw-ib-ox-ag-5.39.0.tgz。
  • 解压 netw-ib-ox-ag-5.39.0.tgz 安装包,在解压的文件夹中找到对应的应用程序文件 installwindows.exe。双击该文件进行安装,会弹出“安装确认”对话框,如图所示。

  • 同意在该系统中安装。输入 y,并回车,将显示其他需要确认的信息。这里,一律输入 y 并回车即可,信息如下:
This program will install netwib, netwox and netwag on your system.
Do you agree ? [y/n] y
Setting global variables.
Version...
Version=539
InstallDir...
InstallDir=C:\Program Files (x86)\netw\netw539
Do you agree to use this installation directory ? [y/n] y   #确认安装的目录
Copying files under C:\Program Files (x86)\netw\netw539
src\netwox-bin_windows\netwib539.dll
src\netwox-bin_windows\netwox539.exe
src\netwag-bin_windows\netwag539.tcl
src\netwib-bin_windows\dll
src\netwib-bin_windows\include
src\netwib-bin_windows\lib
src\netwib-doc_html\*
src\netwox-doc_html\*
src\netwag-doc_html\*
Do you agree to place shortcuts on desktop ? [y/n] y  #确认是否创建桌面快捷键
Do you agree to place shortcuts in start menu ? [y/n] y  #确认是否在开始菜单中创建快捷键
Press any key to terminate
  • 上述代码中的最后一行信息表示按任意键终止,即表示安装完成。此时在“开始”菜单中可以查看到安装的 netwox 工具,如图所示。

  • 成功安装了 netwox 工具以后就可以使用了。由于该工具提供了众多模块,为了方便用户对模块的查找和使用,netwox 对这些模块以分类的方式进行了整理,以层次结构(如主菜单、子菜单)的方式进行显示,供用户查找和使用。使用该工具之前,需要了解分类的这些层次结构。下面将对层次结构进行分析。

(2)层次结构分析

在“开始”菜单中,选择 netwox 命令,运行 netwox 工具,如图所示。

上图中显示了该工具的主菜单。每一行表示一个菜单项,第一个字符为该菜单的快捷键。每个菜单含义如下:

0:退出 netwox 工具。
3:搜索工具,用来搜索与指定信息相关的模块。
4:显示指定模块的帮助信息。
5:在命令行中输入指定模块的参数选项并运行。
6:从键盘输入指定模块的参数选项并运行。
a:显示信息。
b:显示网络协议下相关的模块。
c:显示应用程序协议下相关的模块。
d:显示与嗅探数据包相关的模块。
e:显示与创建和发送数据包相关的模块。
f:显示与进行数据包记录相关的模块。
g:显示与客户端相关的模块。
h:显示与服务器相关的模块。
i:显示与检测主机连通性相关的模块。
j:显示与路由跟踪相关的模块。
k:显示与扫描计算机和端口相关的模块。
l:显示与审计相关的模块。
m:显示与暴力破解相关的模块。
n:显示与远程管理相关的模块。
o:显示其他模块。

以上菜单项是 netwox 工具的总体分类,每个菜单项属于一个大类。而每个菜单项中还会有子菜单,而每个子菜单下又有一个小的分类。

使用快捷键 e,查看创建和发送数据包的相关模块,输出信息如下:

Select a node (key in 03456abcdefghijklmno): e

############# spoof (create and send packets) ##############
#创建和发送数据包模块
0 - leave netwox
1 - go to main menu
2 - go to previous menu
3 - search tools
4 - display help of one tool
5 - run a tool selecting parameters on command line
6 - run a tool selecting parameters from keyboard
a + Ethernet spoof
b + IP spoof
c + UDP spoof
d + TCP spoof
e + ICMP spoof
f + ARP spoof

从输出信息可以了解到,该分类中的子菜单包含了各种创建和发送数据包的模块,如 IP 协议的(快捷键b)、UDP 协议的(快捷键c)、ICMP 协议的(快捷键 e)。通过子菜单的快捷键,可以进一步查看具体的可用模块或更小的分类。

使用快捷键 c,查看创建和发送 UDP 数据包的模块,输出信息如下:

Select a node (key in 0123456abcdef): c

######################## UDP spoof #########################
#创建和发送UDP数据包
0 - leave netwox
1 - go to main menu  #返回主菜单
2 - go to previous menu  #返回上一个菜单
3 - search tools
4 - display help of one tool
5 - run a tool selecting parameters on command line
6 - run a tool selecting parameters from keyboard
a - 35:Spoof EthernetIp4Udp packet
b - 39:Spoof Ip4Udp packet
c - 43:Spoof of packet samples : fragment, ip4opt:noop
d - 44:Spoof of packet samples : fragment, ip4opt:rr
e - 45:Spoof of packet samples : fragment, ip4opt:lsrr
f - 46:Spoof of packet samples : fragment, ip4opt:ts
g - 47:Spoof of packet samples : fragment, ip4opt:ipts
h - 48:Spoof of packet samples : fragment, ip4opt:ippts
i - 141:Spoof EthernetIp6Udp packet
j - 145:Spoof Ip6Udp packet
k - 192:Spoof of packet samples : fragment, ip4opt:ssrr

以上输出信息显示了相关的各种模块及快捷键。例如,加粗部分的信息表示 netwox 的第 39 个模块功能为创建基于 IPv4 地址的 UDP 协议数据包。如果使用该模块,可以使用快捷键 b;如果用户想退出当前分类,可以使用快捷键 1 返回主菜单,或使用快捷键 2 返回上一个菜单;使用快捷键 0 退出 netwox 工具。以类似的方法,可以查看其他分类中的模块。

2、Wireshark

Wireshark(前身 Ethereal)是一个网络包分析工具。该工具主要是用来捕获网络数据包,并自动解析数据包,为用户显示数据包的详细信息,供用户对数据包进行分析。它可以运行在 Windows 和 Linux 操作系统上。Kali Linux 系统自带 Wireshark 工具,而 Windows 系统中默认没有安装该工具。因此,本节讲解如何在 Windows 系统中安装 Wireshark 工具。

(1)下载及安装

  • 打开网址 http://www.wireshark.org,进入 Wireshark 官网,如图所示。

  • 单击图中的下载图标进入下载页面,如图所示。

在 Stable Release 部分可以看到目前 Wireshark 的最新版本是 2.6.5,并提供了 Windows(32 位和 64 位)、Mac OS 和源码包的下载地址。用户可以根据自己的操作系统下载相应的软件包。

  • 这里下载 Windows 64 位的安装包。单击 Windows Installer(64-bit) 链接,进行下载。下载后的文件名为 Wireshark-win64-2.6.5.exe。
  • 双击下载的软件包进行安装。安装比较简单,只要使用默认值,单击 Next 按钮,即可安装成功。
  • 安装好以后,在 Windows 的“开始”菜单中会出现 Wireshark 图标,如图所示。

(2)实施抓包

安装好 Wireshark 以后,就可以运行它来捕获数据包了。方法如下:

  • 在 Windows 的“开始”菜单中,单击 Wireshark 菜单,启动 Wireshark,如图所示。

该图为 Wireshark 的主界面,界面中显示了当前可使用的接口,例如,本地连接 5、本地连接 10 等。要想捕获数据包,必须选择一个接口,表示捕获该接口上的数据包。在上图中,选择捕获“本地连接”接口上的数据包。选择“本地连接”选项,然后单击左上角的“开始捕获分组”按钮,将进行捕获网络数据,如下如所示。

图中没有任何信息,表示没有捕获到任何数据包。这是因为目前“本地连接”上没有任何数据。只有在本地计算机上进行一些操作后才会产生一些数据,如浏览网站。

  • 当本地计算机浏览网站时,“本地连接”接口的数据将会被 Wireshark 捕获到。捕获的数据包如图所示。图中方框中显示了成功捕获到“本地连接”接口上的数据包。

  • Wireshark 将一直捕获“本地连接”上的数据。如果不需要再捕获,可以单击左上角的“停止捕获分组”按钮,停止捕获。

(3)使用显示过滤器

默认情况下,Wireshark 会捕获指定接口上的所有数据,并全部显示,这样会导致在分析这些数据包时,很难找到想要分析的那部分数据包。这时可以借助显示过滤器快速查找数据包。显示过滤器是基于协议、应用程序、字段名或特有值的过滤器,可以帮助用户在众多的数据包中快速地查找数据包,可以大大减少查找数据包时所需的时间。使用显示过滤器,需要在 Wireshark 的数据包界面中输入显示过滤器并执行,如图所示。
图中方框标注的部分为显示过滤器区域。用户可以在里面输入显示过滤器,进行数据查找,也可以根据协议过滤数据包。

显示过滤器及其作用
显示过滤器作用
arp 显示所有 ARP 数据包
bootp 显示所有 BOOTP 数据包
dns 显示所有 DNS 数据包
ftp 显示所有 FTP 数据包
http 显示所有 HTTP 数据包
icmp 显示所有 ICMP 数据包
ip 显示所有 IPv4 数据包
ipv6 显示所有 IPv6 数据包
tcp 显示所有基于 TCP 的数据包
tftp 显示所有 TFTP(简单文件传输协议)数据包

例如,要从捕获到的所有数据包中,过滤出 DNS 协议的数据包,这里使用 dns 显示过滤器,过滤结果如图所示。图中显示的所有数据包的协议都是 DNS 协议。

(4)分析数据包层次结构

任何捕获的数据包都有它自己的层次结构,Wireshark 会自动解析这些数据包,将数据包的层次结构显示出来,供用户进行分析。这些数据包及数据包对应的层次结构分布在 Wireshark 界面中的不同面板中。下面介绍如何查看指定数据包的层次结构。

使用 Wireshark 捕获数据包,界面如图所示。

上图中所显示的信息从上到下分布在 3 个面板中,每个面板包含的信息含义如下:

  • Packet List 面板:上面部分,显示 Wireshark 捕获到的所有数据包,这些数据包从 1 进行顺序编号。
  • Packet Details 面板:中间部分,显示一个数据包的详细内容信息,并且以层次结构进行显示。这些层次结构默认是折叠起来的,用户可以展开查看详细的内容信息。
  • Packet Bytes 面板:下面部分,显示一个数据包未经处理的原始样子,数据是以十六进制和 ASCII 格式进行显示。

以 HTTP 协议数据包为例,了解该数据包的层次结构。在 Packet List 面板中找到一个 HTTP 协议数据包,如图所示。

其中,编号 21 的数据包是一个 HTTP 协议数据包。此时在 Packet Details 面板上显示的信息就是该数据包的层次结构信息。这里显示了 5 个层次,每个层次的含义如下:

  • Frame:该数据包物理层的数据帧概况。
  • Ethernet II:数据链路层以太网帧头部信息。
  • Internet Protocol Version 4:网际层 IP 包头部信息。
  • Transmission Control Protocol:传输层的数据段头部信息。
  • Hypertext Transfer Protocol:应用层的信息,此处是 HTTP 协议。

由此可见,Wireshark 对 HTTP 协议数据包进行解析,显示了 HTTP 协议的层次结构。

用户对数据包分析就是为了查看包的信息,展开每一层,可以查看对应的信息。例如,查看数据链路层信息,展开 Ethernet II 层,显示信息如下:

Ethernet II, Src: Tp-LinkT_46:70:ba (ec:17:2f:46:70:ba), Dst: Giga-Byt_17:cf:21 (50:e5:49:17:cf:21)
Destination: Giga-Byt_17:cf:21 (50:e5:49:17:cf:21)  #目标MAC地址
Source: Tp-LinkT_46:70:ba (ec:17:2f:46:70:ba)  #源MAC地址
Type: IPv4 (0x0800)

显示的信息包括了该数据包的发送者和接收者的 MAC 地址(物理地址)。可以以类似的方法分析其他数据包的层次结构。

八、网络体系构成

网络体系定义了物理网络的构成,以及对应的通信协议。例如,有线网络和无线网络是两种不同的网络体系。由于网络体系不仅定义了网络构成,还规定了通信方式,所以它包括以下 4 个方面。

  • 访问方法:定义了计算机使用传输介质的规则。通过这些规则,可以避免数据传输的各种冲突。
  • 数据帧格式:定义了数据传输的格式。所有要传输的数据必须按照该格式进行传输。
  • 布线类型:定义了网络适配器和其他网络设备的连接方式。例如,每台计算机都通过电缆连接到网络设备,从而形成星型网络。
  • 布线规则:定义网络适配器和网络设备连接规范,如网络适配器接口类型和连线长度等。

由于网络使用的场景和数据传输所使用的终端设备不同,在物理层中识别的网络接口设备也会不同。网络体系主要分为 4 大类型,每种类型及使用范围如下:

  • IEEE 802.3(以太网):在大多数办公室和家庭中使用的基于线缆的网络,就是常见的有线局域网。
  • IEEE 802.11(无线网络):在办公室、家庭和咖啡厅使用的无线网络技术,如 Wi-Fi 网络。
  • IEEE 802.16(WiMAX):用于移动通信长距离无线连接的技术。
  • 点到点协议(PPP):使用 Modem 通过电话线进行连接的技术,如通过拨号方式建立的网络连接。

1、MAC地址

物理地址是一种标识符,用来标记网络中的每个设备。同现实生活中收发快递一样,网络内传输的所有数据包都会包含发送方和接收方的物理地址。由于网络设备对物理地址的处理能力有限,物理地址只在当前局域网内有效。所以,接收方的物理地址都必须存在于当前局域网内,否则会导致发送失败。MAC 地址的英语是 Media Access Control Address,直译为媒体存取控制位址,也称为局域网地址(LAN Address)、以太网地址(Ethernet Address)或物理地址(Physical Address),它是一个用来确认网络设备位置的位址。

(1)MAC 地址是预留的

由于数据包中都会包含发送方和接收方的物理地址,数据包从起始地发送到目的地,为了能够正确地将数据包发送出去,就必须要求 MAC 地址具有唯一性。因此 MAC 地址都是由生产厂家在生产时固化在网络硬件中,是硬件预留的地址。

(2)MAC 地址格式

硬件的 MAC 地址是厂家按照一定的规则,进行设置所产生的,因此,MAC 地址拥有自己的格式。MAC 地址采用十六进制数表示,共 6 个字节(48 位),长度为 48bit(字节)。整个地址可以分为前 24 位和后 24 位,代表不同的含义。

  • 前 24 位称为组织唯一标识符(Organizationally Unique Identifier,OUI),是由 IEEE 的注册管理机构给不同厂家分配的代码,区分了不同的厂家。
  • 后 24 位是由厂家自己分配的,称为扩展标识符。同一个厂家生产的网卡中 MAC 地址后 24 位是不同的。

(3)查询 MAC 厂商

由于 MAC 地址的前 24 位是生产厂商的标识符,因此可以根据前 24 位标识符判断出硬件的生产厂商和生产地址。用户可以在一些网站上查询,如 http://mac.51240.com/。

【示例】查询 MAC 地址 00:0C:29:CA:E4:66 所对应的厂商。

  • 在浏览器中输入网址 http://mac.51240.com/,如图所示。

  • 在“MAC地址”文本框中输入 MAC 地址 00-0C-29-CA-E4-66。然后单击“查询”按钮,查询结果如图所示。

从上图显示的信息中,可以看到 MAC 地址 00-0C-29-CA-E4-66 的厂商是 VMware,Inc,由此可以推断出这是一台虚拟机设备,并且可以看到厂家对应的省份、街道、邮编等信息。

(4)查看网络主机 MAC 地址信息

一个局域网或公司中往往存在多台计算机,这些计算机都有自己的 MAC 地址和 IP 地址。其中,IP 地址是可变的,而 MAC 地址一般是不可变的。为了准确地识别主机,用户可以获取计算机对应的 MAC 地址。

【示例】显示网络主机 MAC 地址信息。本示例是在Windows系统上,通过cmd命令行,采用arp命令。先来看下arp的命令:

  • 显示局域网中指定主机的 MAC 地址信息。例如,显示主机 192.168.6.62 的 MAC 地址。执行CMD命令如下:
arp -a 192.168.6.62

  • 显示局域网中所有主机的 MAC 地址,执行命令如下:
arp -a

  • 在显示局域网中所有主机的 MAC 地址信息时,有时由于暂时没有发现主机,等待较长的时间,也不会有任何输出信息。为了能够更好地了解当前的进度,可以使用-v选项,显示未发现主机的 MAC 地址的信息,进而可以查看扫描进度。执行命令如下:
arp -a -v

从输出信息可以看到,程序对局域网中的所有主机进行了扫描。如果扫描的主机存在,则给出对应的 MAC 地址;如果主机不存在,则显示为 00-00-00-00-00无效。

2、以太网

以太网是现有局域网最常用的通信协议标准,其网络结构通常为星型结构。在网络中,计算机使用传输介质(例如网线)进行连接,网络数据通过传输介质进行传输来完成整个通信。以太网是目前最为广泛的局域网技术,下面具体讲解网络设备之间连接和数据传输的方法,以及以太网中的两个网络设备进行连接的方法。

(1)以太网拓扑结构

计算机网络的拓扑结构是引用拓扑学中研究与大小、形状无关的点、线关系的方法。它把网络中的计算机和通信设备抽象为一个点,把传输介质抽象为一条线,而由点和线组成的几何图形就是计算机网络的拓扑结构。以太网结构主要分为总线型和星型两种。

  • 总线型:是指所有计算机通过一条同轴电缆进行连接。
  • 星型:是指所有计算机都连接到一个中央网络设备上(如交换机)。

(2)以太网传输介质

不论是总线型还是星型,计算机和通信设备之间进行数据传输都需要有传输介质。以太网采用了多种连接介质,如同轴缆、双绞线和光纤等,其中:

  • 双绞线多用于从主机到集线器或交换机的连接;
  • 光纤则主要用于交换机间的级联和交换机到路由器间的点到点链路上;
  • 同轴缆作为早期的主要连接介质,现在已经逐渐被淘汰。

(3)以太网工作机制

有了传输介质以后,以太网中的数据就可以借助传输介质进行传输了。以太网采用附加冲突检测的载波帧听多路访问(CSMA/CD)机制,以太网中所有节点都可以看到在网络中发送的所有信息。因此,以太网是一种广播网络。以太网需要判断计算机何时可以把数据发送到访问介质。通过使用 CSMA/CD,所有计算机都可以监视传输介质的状态,在传输之前等待线路空闲。如果两台计算机尝试同时发送数据,就会发生冲突,计算机会停止发送,等待一个随机的时间间隔,然后再次尝试发送。当以太网中的一台主机要传输数据时,工作过程如下:

  • 监听信道上是否有信号在传输。如果有,表示信道处于忙状态,则继续帧听,直到信道空闲为止。
  • 若没有监听到任何信号,就传输数据。
  • 传输数据的时候继续监听。如果发现冲突,则执行退避算法。随机等待一段时间后,重新执行步骤(1)。当冲突发生时,涉及冲突的计算机会返回监听信道状态。若未发现冲突,则表示发送成功。

(4)以太帧 

 太网链路传输的数据包称做以太帧,或者以太网数据帧。在以太网中,网络访问层的软件必须把数据转换成能够通过网络适配器硬件进行传输的格式。当以太网软件从网络层接收到数据报之后,需要完成如下操作:

    根据需要把网际层的数据分解为较小的块,以符合以太网帧数据段的要求。以太网帧的整体大小必须在 64~1518 字节之间(不包含前导码)。有些系统支持更大的帧,最大可以支持 9000 字节。有些系统支持更大的帧,最大可以支持 9000 字节。
    把数据块打包成帧。每一帧都包含数据及其他信息,这些信息是以太网网络适配器处理帧所需要的。
    把数据帧传递给对应于 OSI 模型物理层的底层组件,后者把帧转换为比特流,并且通过传输介质发送出去。
    以太网上的其他网络适配器接收到这个帧,检查其中的目的地址。如果目的地址与网络适配器的地址相匹配,适配器软件就会处理接收到的帧,把数据传递给协议栈中较高的层。 

下面说下以太帧的结构,以太帧起始部分由前同步码和帧开始定界符组成,后面紧跟着一个以太网报头,以 MAC 地址说明目的地址和源地址。以太帧的中部是该帧负载的包含其他协议报头的数据包,如 IP 协议。以太帧由一个 32 位冗余校验码结尾,用于检验数据传输是否出现损坏。以太帧结构如图所示。

 

上图中每个字段的含义如下表所示:

字段含义
前同步码 用来使接收端的适配器在接收 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 字段的值进行比较。如果两个值不相同,则表示传输过程中发生了数据丢失或改变。这时,就需要重新传输这一帧。

3. IP地址

IP 地址(Internet Protocol Address)是互联网协议特有的一种地址,它是 IP 协议提供的一种统一的地址格式。IP 地址为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

(1)为什么要使用 IP 地址?

在单个局域网网段中,计算机与计算机之间可以使用网络访问层提供的 MAC 地址进行通信。如果在路由式网络中,计算机之间进行通信就不能利用 MAC 地址实现数据传输了:因为 MAC 地址不能跨路由接口运行;即使强行实现跨越,使用 MAC 地址传输数据也是非常麻烦的。这是由于内置在网卡里的固定 MAC 地址不能在地址空间上引入逻辑结构,使其无法具备真正的地址来表示国家、省、市、区、街道、路、号这类层次。因此,要进行数据传输,必须使用一种逻辑化、层次化的寻址方案对网络进行组织,这就是 IP 地址。网络中的每个计算机都有对应的 IP 地址。

(2)IP地址的基本构成

在网际层中,利用 IP 地址将数据传输到目的地。为了能够使数据正确地发送到目标主机上,网络上的 IP 地址必须有一定的规则来识别主机的位置。为了便于寻址,了解目标主机的位置,每个 IP 地址包括两个标识码(ID),即网络 ID 和主机 ID。同一个物理网络上的所有主机都使用同一个网络 ID,网络上的一个主机(包括网络上的工作站、服务器和路由器等)有一个主机 ID 与其对应。网络 ID 和主机 ID 含义如下:

  • 网络 ID:用于识别主机所在的网络,网络 ID 的位数直接决定了可以分配的网络数量。
  • 主机 ID:用于识别该网络中的主机,主机 ID 的位数则决定了网络中最大的主机数量。

(3)IP地址的分类和格式

大型网络包含大量的主机,而小型网络包含少量的主机。根据用户需求不同,一个网络包含的主机数量也会不同。为了满足不同场景的需要,网络必须使用一种方式来判断 IP 地址中哪一部分是网络 ID,哪一部分是主机 ID。IP 地址为 32 位地址,被分为 4 个 8 位段。为了方便对 IP 地址的管理,将 IP 地址基本分为三大类,每类地址的分类与含义如下:

  • A 类:前 8 位表示网络 ID,后 24 位表示主机 ID;该地址分配给政府机关单位使用。
  • B 类:前 16 位表示网络 ID,后 16 位表示主机 ID;该地址分配给中等规模的企业使用。
  • C 类:前 24 位表示网络 ID,后 8 位表示主机 ID;该地址分配给任何需要的人使用。

除了上述的 A、B、C 三类地址以外,还有两类隐藏地址,即 D 类地址和E类地址:

  • D 类:不分网络 ID 和主机 ID;该地址用于多播。
  • E 类:不分网络 ID 和主机 ID;该地址用于实验。

(4)如何判断IP地址的分类?

IP 地址被分类以后,如何判断一个 IP 地址是 A 类、B 类还是 C 类地址呢?为了更好地进行区分,将每类地址的开头部分设置为固定数值,如图所示。

从上图中可以看出,每类 IP 地址都是以 32 位的二进制格式显示的,每类地址的区别如下:

  • A类:网络 ID 的第一位以 0 开始的地址。
  • B类:网络 ID 的第一位以 10 开始的地址。
  • C类:网络ID的第一位以 110 开始的地址。
  • D类:地址以 1110 开始的地址。
  • E类:地址以 11110 开始的地址。

(5)特殊 IP 地址

在进行 IP 地址分配时,有一些 IP 地址具有特殊含义,不会分配给互联网的主机。例如,保留了一些 IP 地址范围,用于私有网络,这些地址被称为私有地址。再如,保留一部分地址用于测试,被称为保留地址。A 类、B 类、C 类地址的地址范围及含义如下:

  • A类地址
    • 私有地址范围为 10.0.0.0~10.255.255.255
    • 保留地址范围为 127.0.0.0~127.255.255.255
  • B类地址
    • 私有地址范围为 172.16.0.0~172.31.255.255。
    • 保留地址为 169.254.X.X。
  • C类地址
    • 私有地址范围为 192.168.0.0~192.168.255.255。

(6)子网划分

数据在网络中进行传输是通过识别 IP 地址中的网络 ID,从而将数据发送到正确的网络中,然后再根据主机 ID 将数据发送到目标主机上。如果一个网络中包含了百万台主机,数据通过网关找到对应的网络后,很难快速地发送到目标主机上。为了能够在大型网络中实现更高效的数据传输,需要进行子网划分,将网络划分为更小的网络。子网划分是将 IP 地址的主机 ID 部分划分为子网 ID 和主机 ID。其中,子网 ID 用来寻找网络内的子网,主机 ID 用来寻找子网中的主机。子网掩码则是用来指明地址中多少位用于子网 ID,保留多少位用于实际的主机 ID。

4、IP协议

IP 协议提供了一种分层的、与硬件无关的寻址系统,它可以在复杂的路由式网络中传递数据所需的服务。IP 协议可以将多个交换网络连接起来,在源地址和目的地址之间传送数据包。同时,它还提供数据重新组装功能,以适应不同网络对数据包大小的要求。在一个路由式网络中,源地址主机向目标地址主机发送数据时,IP协议是如何将数据成功发送到目标主机上的呢?由于网络分同网段和不同网段两种情况,工作方式如下:

(1)同网段工作机制

如果源地址主机和目标地址主机在同一网段,目标 IP 地址被 ARP 协议解析为 MAC 地址,然后根据 MAC 地址,源主机直接把数据包发给目标主机。

(2)不同网段工作机制

如果源地址主机和目标地址主机在不同网段,数据包发送过程如下:
  • 网关(一般为路由器)的 IP 地址被 ARP 协议解析为 MAC 地址。根据该 MAC 地址,源主机将数据包发送到网关。
  • 网关根据数据包中的网段 ID 寻找目标网络。如果找到,将数据包发送到目标网段;如果没找到,重复步骤(1)将数据包发送到上一级网关。
  • 数据包经过网关被发送到正确的网段中。目标IP地址被ARP协议解析为 MAC 地址。根据该 MAC 地址,数据包被发送给目标地址的主机。

(3)IP数据包格式

在 TCP/IP 协议中,使用 IP 协议传输数据的包被称为 IP 数据包,每个数据包都包含 IP 协议规定的内容。IP 协议规定的这些内容被称为 IP 数据报文(IP Datagram)或者 IP 数据报。IP 数据报文由首部(称为报头)和数据两部分组成。首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。每个 IP 数据报都以一个 IP 报头开始。源计算机构造这个 IP 报头,而目的计算机利用 IP 报头中封装的信息处理数据。IP 报头中包含大量的信息,如源 IP 地址、目的 IP 地址、数据报长度、IP 版本号等。每个信息都被称为一个字段。IP 数据报头字段如图所示。

IP 报头的最小长度为 20 字节,上图中每个字段的含义如下:

  • 版本(version):占 4 位,表示 IP 协议的版本。通信双方使用的 IP 协议版本必须一致。目前广泛使用的IP协议版本号为 4,即 IPv4。

  • 首部长度(网际报头长度IHL):占 4 位,可表示的最大十进制数值是 15。这个字段所表示数的单位是 32 位字长(1 个 32 位字长是 4 字节)。因此,当 IP 的首部长度为 1111 时(即十进制的 15),首部长度就达到 60 字节。当 IP 分组的首部长度不是 4 字节的整数倍时,必须利用最后的填充字段加以填充。数据部分永远在 4 字节的整数倍开始,这样在实现 IP 协议时较为方便。首部长度限制为 60 字节的缺点是,长度有时可能不够用,之所以限制长度为 60 字节,是希望用户尽量减少开销。最常用的首部长度就是 20 字节(即首部长度为 0101),这时不使用任何选项。

  • 区分服务(tos):也被称为服务类型,占 8 位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998 年 IETF 把这个字段改名为区分服务(Differentiated Services,DS)。只有在使用区分服务时,这个字段才起作用。

  • 总长度(totlen):首部和数据之和,单位为字节。总长度字段为 16 位,因此数据报的最大长度为 2^16-1=65535 字节。

  • 标识(identification):用来标识数据报,占 16 位。IP 协议在存储器中维持一个计数器。每产生一个数据报,计数器就加 1,并将此值赋给标识字段。当数据报的长度超过网络的 MTU,而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。具有相同的标识字段值的分片报文会被重组成原来的数据报。

  • 标志(flag):占 3 位。第一位未使用,其值为 0。第二位称为 DF(不分片),表示是否允许分片。取值为 0 时,表示允许分片;取值为 1 时,表示不允许分片。第三位称为 MF(更多分片),表示是否还有分片正在传输,设置为 0 时,表示没有更多分片需要发送,或数据报没有分片。

  • 片偏移(offsetfrag):占 13 位。当报文被分片后,该字段标记该分片在原报文中的相对位置。片偏移以 8 个字节为偏移单位。所以,除了最后一个分片,其他分片的偏移值都是 8 字节(64 位)的整数倍。

  • 生存时间(TTL):表示数据报在网络中的寿命,占 8 位。该字段由发出数据报的源主机设置。其目的是防止无法交付的数据报无限制地在网络中传输,从而消耗网络资源。路由器在转发数据报之前,先把 TTL 值减 1。若 TTL 值减少到 0,则丢弃这个数据报,不再转发。因此,TTL 指明数据报在网络中最多可经过多少个路由器。TTL 的最大数值为 255。若把 TTL 的初始值设为 1,则表示这个数据报只能在本局域网中传送。 

  • 协议:表示该数据报文所携带的数据所使用的协议类型,占 8 位。该字段可以方便目的主机的 IP 层知道按照什么协议来处理数据部分。不同的协议有专门不同的协议号。例如,TCP 的协议号为 6,UDP 的协议号为 17,ICMP 的协议号为 1。

  • 首部检验和(checksum):用于校验数据报的首部,占 16 位。数据报每经过一个路由器,首部的字段都可能发生变化(如TTL),所以需要重新校验。而数据部分不发生变化,所以不用重新生成校验值。

  • 源地址:表示数据报的源 IP 地址,占 32 位。

  • 目的地址:表示数据报的目的 IP 地址,占 32 位。该字段用于校验发送是否正确。

  • 可选字段:该字段用于一些可选的报头设置,主要用于测试、调试和安全的目的。这些选项包括严格源路由(数据报必须经过指定的路由)、网际时间戳(经过每个路由器时的时间戳记录)和安全限制。

  • 填充:由于可选字段中的长度不是固定的,使用若干个 0 填充该字段,可以保证整个报头的长度是 32 位的整数倍。

  • 数据部分:表示传输层的数据,如保存 TCP、UDP、ICMP 或 IGMP 的数据。数据部分的长度不固定。

5. ARP/RARP协议

ARP 是“Address Resolution Protocol”的缩写,译为“地址解析协议”,它是根据 IP 地址获取物理地址的一个 TCP/IP 协议。ARP 协议通过 IP 地址向 MAC 地址的转换,解决网际层和网络访问层的衔接问题。由于 IP 地址和 MAC 地址定位方式不同,ARP 协议成为数据传输的必备协议。主机发送信息前,必须通过 ARP 协议获取目标 IP 地址对应的 MAC 地址,才能正确地发送数据包。

(1)为什么需要 ARP 协议

在网络访问层中,同一局域网中的一台主机要和另一台主机进行通信,需要通过 MAC 地址进行定位,然后才能进行数据包的发送。而在网络层和传输层中,计算机之间是通过 IP 地址定位目标主机,对应的数据报文只包含目标主机的 IP 地址,而没有 MAC 地址。因此,在发送之前需要根据 IP 地址获取 MAC 地址,然后才能将数据包发送到正确的目标主机,而这个获取过程是通过 ARP 协议完成的。

(2)ARP 工作的基本流程

ARP 工作流程分为两个阶段,一个是 ARP 请求过程,另一个是 ARP 响应过程。工作流程如下所示。


在上面图片中,主机 A 的 IP 地址为 192.168.1.1,主机 B 的 IP 地址为 192.168.1.2。主机 A 与主机 B 进行通信,需要获取其 MAC 地址,基本流程如下:

  • 主机 A 以广播形式向网络中所有主机发送 ARP 请求,请求包中包含了目标 IP 地址 192.168.1.2。
  • 主机 B 接收到请求,发现自己就是主机 A 要找的主机,返回响应,响应包中包含自己的 MAC 地址。

(3)ARP 缓存

在请求目标主机的 MAC 地址时,每次获取目标主机 MAC 地址都需要发送一次 ARP 请求,然后根据响应获取到 MAC 地址。为了避免重复发送 ARP 请求,每台主机都有一个 ARP 高速缓存。当主机得到 ARP 响应后,将目标主机的 IP 地址和物理地址存入本机 ARP 缓存中,并保留一定时间。只要在这个时间范围内,下次请求 MAC 地址时,直接查询 ARP 缓存,而无须再发送 ARP 请求,从而节约了网络资源。当有了 ARP 缓存以后,ARP 的工作流程如下:

  • 主机 A 在本机 ARP 缓存中检查主机 B 的匹配 MAC 地址。
  •  如果在 ARP 缓存中没有找到主机 B 的 IP 地址及对应的 MAC 地址,它将询问主机 B 的 MAC 地址,从而将 ARP 请求帧广播到本地网络上的所有主机。源主机 A 的 IP 地址和 MAC 地址都包括在 ARP 请求中。
  • 本地网络上的每台主机都接收到 ARP 请求,并且检查是否与自己的 IP 地址匹配。如果主机发现请求的 IP 地址与自己的 IP 地址不匹配,它将丢弃 ARP 请求。主机 B 确定 ARP 请求中的 IP 地址与自己的 IP 地址匹配,则将主机 A 的 IP 地址和 MAC 地址映射添加到本地 ARP 缓存中。
  • 主机 B 将包含自身 MAC 地址的 ARP 回复消息直接发送给主机 A。
  • 当主机 A 收到从主机 B 发来的 ARP 回复消息时,会用主机 B 的 IP 地址和 MAC 地址更新 ARP 缓存。
  • 主机 B 的 MAC 地址一旦确定,主机 A 就能向主机 B 发送 IP 数据包。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。

(4)查看 ARP 缓存

每次成功得到 ARP 响应以后,就会将 IP 地址对应的 MAC 地址添加到 ARP 缓存中。用户可以通过 arp 命令查看 ARP 缓存中的信息,并验证是否会将目标 IP 地址和 MAC 地址添加到 ARP 缓存中。【示例】查看 ARP 缓存表并验证添加的 IP 地址和 MAC 地址。

  • 使用 arp 命令查看当前主机缓存信息,执行命令如下:
arp -a

  • 在当前主机上与主机 192.168.59.135 进行通信。例如,可以使用 ping 命令探测该主机。执行命令如下:
ping 192.168.6.62

上述输出信息表示成功向目标主机 发送了 ping 请求并得到了响应。

(5)ARP报文格式

ARP 协议包(ARP 报文)主要分为 ARP 请求包和 ARP 响应包,下面介绍 ARP 协议包的格式,ARP 协议是通过报文进行工作的,ARP 报文格式如图所示。

ARP 报文总长度为 28 字节,MAC 地址长度为 6 字节,IP 地址长度为 4 字节。其中,每个字段的含义如下。

  • 硬件类型:指明了发送方想知道的硬件接口类型,以太网的值为 1。
  • 协议类型:表示要映射的协议地址类型。它的值为 0x0800,表示 IP 地址。
  • 硬件地址长度和协议长度:分别指出硬件地址和协议的长度,以字节为单位。对于以太网上 IP 地址的ARP请求或应答来说,它们的值分别为 6 和 4。
  • 操作类型:用来表示这个报文的类型,ARP 请求为 1,ARP 响应为 2,RARP 请求为 3,RARP 响应为 4。
  • 发送方 MAC 地址:发送方设备的硬件地址。
  • 发送方 IP 地址:发送方设备的 IP 地址。
  • 目标 MAC 地址:接收方设备的硬件地址。
  • 目标 IP 地址:接收方设备的IP地址。

ARP 数据包分为请求包和响应包,对应报文中的某些字段值也有所不同。

  • ARP 请求包报文的操作类型(op)字段的值为 request(1),目标 MAC 地址字段的值为 Target 00:00:00_00:00:00(00:00:00:00:00:00)(广播地址)。
  • ARP 响应包报文中操作类型(op)字段的值为 reply(2),目标 MAC 地址字段的值为目标主机的硬件地址。

6、TCP/IP协议

TCP/IP协议是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是否按顺序发送的或者有没有被破坏,IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。TCP提供的是一种可靠的数据流服务,采用“带重传的肯定确认”技术来实现传输的可靠性。TCP还采用一种称为“滑动窗口”的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。

TCP协议的三次握手和四次挥手:

注:seq:"sequance"序列号;ack:"acknowledge"确认号;SYN:"synchronize"请求同步标志;;ACK:"acknowledge"确认标志"FIN:"Finally"结束标志。

TCP连接建立过程:首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。

TCP连接断开过程:假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,"告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息"。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,"就知道可以断开连接了"。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!

为什么要三次挥手?

在只有两次“握手”的情形下,假设Client想跟Server建立连接,但是却因为中途连接请求的数据报丢失了,故Client端不得不重新发送一遍;这个时候Server端仅收到一个连接请求,因此可以正常的建立连接。但是,有时候Client端重新发送请求不是因为数据报丢失了,而是有可能数据传输过程因为网络并发量很大在某结点被阻塞了,这种情形下Server端将先后收到2次请求,并持续等待两个Client请求向他发送数据...问题就在这里,Cient端实际上只有一次请求,而Server端却有2个响应,极端的情况可能由于Client端多次重新发送请求数据而导致Server端最后建立了N多个响应在等待,因而造成极大的资源浪费!所以,“三次握手”很有必要!

为什么要四次挥手?

试想一下,假如现在你是客户端你想断开跟Server的所有连接该怎么做?第一步,你自己先停止向Server端发送数据,并等待Server的回复。但事情还没有完,虽然你自身不往Server发送数据了,但是因为你们之前已经建立好平等的连接了,所以此时他也有主动权向你发送数据;故Server端还得终止主动向你发送数据,并等待你的确认。其实,说白了就是保证双方的一个合约的完整执行!

使用TCP的协议:FTP(文件传输协议)、Telnet(远程登录协议)、SMTP(简单邮件传输协议)、POP3(和SMTP相对,用于接收邮件)、HTTP协议等。

7、UDP协议 

UDP用户数据报协议,是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出现丢包现象,实际应用中要求程序员编程验证。UDP与TCP位于同一层,但它不管数据包的顺序、错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询---应答的服务,例如NFS。相对于FTP或Telnet,这些服务需要交换的信息量较小。每个UDP报文分UDP报头和UDP数据区两部分。报头由四个16位长(2字节)字段组成,分别说明该报文的源端口、目的端口、报文长度以及校验值。UDP报头由4个域组成,其中每个域各占用2个字节,具体如下:
  • 源端口号;
  • 目标端口号;
  • 数据报长度;
  • 校验值。
使用UDP协议包括:TFTP(简单文件传输协议)、SNMP(简单网络管理协议)、DNS(域名解析协议)、NFS、BOOTP。TCP 与 UDP 的区别:TCP是面向连接的,可靠的字节流服务;UDP是面向无连接的,不可靠的数据报服务。

8、DNS协议

DNS是域名系统(DomainNameSystem)的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务,可以简单地理解为将URL转换为IP地址。域名是由圆点分开一串单词或缩写组成的,每一个域名都对应一个惟一的IP地址,在Internet上域名与IP地址之间是一一对应的,DNS就是进行域名解析的服务器。DNS命名用于Internet等TCP/IP网络中,通过用户友好的名称查找计算机和服务。

9、NAT协议

NAT网络地址转换(Network Address Translation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型Internet接入方式和各种类型的网络中。原因很简单,NAT不仅完美地解决了lP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。

10、DHCP协议

DHCP动态主机设置协议(Dynamic Host Configuration Protocol)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。

11、HTTP协议

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。

(1)HTTP 协议包括哪些请求?

  • GET:请求读取由URL所标志的信息。
  • POST:给服务器添加信息(如注释)。
  • PUT:在给定的URL下存储一个文档。
  • DELETE:删除给定的URL所标志的资源。

(2)HTTP 中, POST 与 GET 的区别

  • Get是从服务器上获取数据,Post是向服务器传送数据。

  • Get是把参数数据队列加到提交表单的Action属性所指向的URL中,值和表单内各个字段一一对应,在URL中可以看到。

  • Get传送的数据量小,不能大于2KB;Post传送的数据量较大,一般被默认为不受限制。

  • 根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。

    • 所谓 安全的 意味着该操作用于获取信息而非修改信息。换句话说,GET请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。

    • 幂等 的意味着对同一URL的多个请求应该返回同样的结果。

九、示例

在浏览器中输入 www.baidu.com  后执行的全部过程

  1. 应用层:客户端浏览器通过DNS解析到www.baidu.com的IP地址220.181.27.48,通过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.161.27.48,然后通过TCP进行封装数据包,输入到网络层。

  2. 传输层:把HTTP会话请求分成报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。然后使用IP层的IP地址查找目的端。

  3. 网络层:网络层不关心应用层或者传输层的东西,主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,通过查找路由表决定通过那个路径到达服务器。

  4. 链路层:包通过链路层发送到路由器,通过ARP协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包现在就可以传输了,然后发送IP数据包到达服务器的地址 

十、推荐资料

TCP/IP协议入门教程