参考资料:
(1)图解TCO/IP图书(第五版)
(2)图解TCP/IP详解(史上最全)
(3)TCP/IP协议 (图解+秒懂+史上最全)
OSI(参考模型)将通信功能划分为7个分层,称作OSI参考模型。OSI协议以OSI参考模型为基础界定了每个阶层的协议和每个阶层之间接口相关的标准。遵循OSI 协议的产品叫OSI产品,而它们所遵循的通信则被称为OSI通信。由于“OSI参考模型”与“OSI 协议”指代意义不同,请勿混淆。

(1)应用层:为应用程序提供服务并规定应用程序中通信的相关细节。包括文件传输、电子邮件、远程登录等协议;
(2)表示层:将应用处理的信息转换为适合网络传输的格式,或将来自下一层的数据转换为上层能够处理的格式。因此它主要负责数据格式的转换;
(3)会话层:负责建立和断开通信连接(数据流动的逻辑通路),以及数据的分割等数据传输相关的管理;
(4)传输层:起着可靠传输的作用。只在通信双方节点上进行处理,而无需在路由器上处理。会话层负责决定建立连接和断开连接的时机,而传输层进行实际的建立和断开处理;
(5)网络层:将数据传输到目标地址。目标地址可以是多个网络通过路由器连接而成的某个地址。因此这一层主要负责寻址和路由选择;
(6)数据链路层:负责物理层上的互联、节点之间的通信传输。例如与1个以太网相连的2个节点之间的通信。将0、1序列划分为具有意义的数据帧传送给对端(数据帧的生成与接收);
(7)物理层:负责0、1比特流(0、1序列)与电压的高低、光的闪灭之间的互换。

面向有连接:发送数据前,需要在收发主机之间连接一条通信线路;
面向无连接型:面向无连接型则不要求建立和断开连接。发送端可于任何时候自由发送数据。反之,接收端也永远不知道自己会在何时从哪里收到数据。因此,在面向无连接的情况下,接收端需要时常确认是否收到了数据。

电路交换:交换机主要负责数据的中转处理。计算机首先被连接到交换机上,而交换机与交换机之间则由众多通信线路再继续连接。因此计算机之间在发送数据时,需要通过交换机与目标主机建立通信电路。我们将连接电路称为建立连接。建立好连接以后,用户就可以一直使用这条电路,直到该连接被断开为止。
分组交换:由分组交换机(路由器)连接通信线路。分组交换的大致处理过程是:发送端计算机将数据分组发送给路由器,路由器收到这些分组数据以后,缓存到自己的缓冲区,然后再转发给目标计算机。因此,分组交换也有另一个名称:蓄积交换。

(1)单播(Unicast):“Uni”表示“1”,“Cast”意为“投掷”。组合起来就是指1对Ⅰ通信。固定电话就是单播通信的一个典型例子。
(2)广播(Broadcast):字面上具有“播放”之意。因此它指是将消息从1台主机发送给与之相连的所有其他主机。一个典型例子就是电视播放,它将电视信号一齐发送给非特定的多个接收对象。
(3)多播(Multicast):广播类似,将消息发给多个接收主机。不同之处在于多播要限定某一组主机作为接收端。多播通信最典型的例子就是电视会议,这是由多组人在不同的地方参加的一种远程会议。在这种形式下,会由一台主机发送消息给特定的多台主机。电视会议通常不能使用广播方式。否则将无从掌握是谁在哪儿参与电视会议。
(4)任播(Anycast):任播是指在特定的多台主机中选出一台作为接收端的一种通信方式。虽然,这种方式与多播有相似之处,都是面向特定的一群主机,但是它的行为却与多播不同。任播通信从目标主机群中选择一台最符合网络条件的主机作为目标主机发送消息。通常,所被选中的那台特定主机将返回一个单播信号,随后发送端主机会只跟这台主机进行通信。



(1)硬件(物理层)
TCP/IP的最底层是负责数据传输的硬件。
(2)网络接口层(数据链路层)
网络接口层利用以太网中的数据链路层进行通信,因此属于接口层。驱动程序是在操作系统与硬件之间起桥梁作用的软件。计算机的外围附加设备或扩展卡,不是直接插到电脑上或电脑的扩展槽上就能马上使用的,还需要有相应驱动程序的支持。
(3)互联网层(网络层)
TCP/IP分层中的互联网层与传输层的功能通常由操作系统提供。尤其是路由器,它必须得实现通过互联网层转发分组数据包的功能。
①IP:IP是跨越网络传送数据包,使整个互联网都能收到数据的协议。IP协议使数据能够发送到地球的另一端,这期间它使用IP地址作为主机的标识;IP还隐含着数据链路层的功能。通过IP,相互通信的主机之间不论经过怎样的底层数据链路都能够实现通信;虽然IP也是分组交换的一种协议,但是它不具有重发机制。即使分组数据包未能到达对端主机也不会重发。因此,属于非可靠性传输协议。
②ICMP:IP数据包在发送途中一旦发生异常导致无法到达对端目标地址时,需要给发送端发送一个发生异常的通知。ICMP就是为这一功能而制定的。它有时也被用来诊断网络的健康状况。
③ARP:从分组数据包的IP地址中解析出物理地址(MAC地址)的一种协议。
(4)传输层
传输层最主要的功能就是能够让应用程序之间实现通信。
①TCP:是一种面向有连接的传输层协议。它可以保证两端通信主机之间的通信可达。TCP能够正确处理在传输过程中丢包、传输顺序乱掉等异常情况。此外,TCP还能够有效利用带宽,缓解网络拥堵。
然而,为了建立与断开连接,有时它需要至少7次的发包收包,导致网络流量的浪费。此外,为了提高网络的利用率,TCP协议中定义了各种各样复杂的规范,因此不利于视频会议(音频、视频的数据量既定)等场合使用。
②UDP:
UDP有别于TCP,它是一种面向无连接的传输层协议。UDP不会关注对端是否真的收到了传送过去的数据,如果需要检查对端是否收到分组数据包,或者对端是否连接到网络,则需要在应用程序中实现。
UDP常用于分组数据较少或多播、广播通信以及视频通信等多媒体领域。
(5)应用层(会话层以上的分层)
TCP/IP的应用程序功能会发现,它不仅实现OSI模型中应用层的内容,还要实现会话层与表示层的功能。

MAC地址用于识别数据链路中互连的节点。以太网或FDDI 中,根据IEEE802.3的规范使用MAC地址。其他诸如无线LAN ( IEEE802.11a/b/g等)、蓝牙等设备中也是用相同规格的MAC地址。
MAC地址长48比特。在使用网卡(NIC)的情况下,MAC地址一般会被烧入到ROM中。因此,任何一个网卡的MAC地址都是唯一的,在全世界都不会有重复。

MAC地址中324位(比特位)表示厂商识别码,每个NIC厂商都有特定唯一的识别数字。2548位是厂商内部为识别每个网卡而用。因此,可以保证全世界不会有相同MAC地址的网卡。
例外情况———MAC地址不一定是唯一的
在全世界,MAC地址也并不总是唯一的。实际上,即使MAC地址相同,只要不是同属一个数据链路就不会出现问题。
例如,人们可以在微机板上自由设置自己的MAC地址。再例如,一台主机上如果启动多个虚拟机,由于没有硬件的网卡只能由虚拟软件自己设定MAC地址给多个虚拟网卡,这时就很难保证所生成的MAC地址是独一无二的了。
但是,无论哪个协议成员通信设备,设计前提都是MAC地址的唯一性。这也可以说是网络世界的基本准则。

TCP/IP的心脏是互联网层。这一层主要由IP( Internet Protocol)和ICMP( Internet Control Message Protocol)两个协议组成。
IP大致分为三大作用模块,它们是IP寻址、路由(最终节点为止的转发)以及IP分包与组包。
IP地址(IPv4地址)由32位正整数来表示。TCP/IP通信要求将这样的IP地址分配给每一个参与通信的主机。IP地址在计算机内部以二进制方式被处理。
实际上,IP地址并非是根据主机台数来配置的,而是每一台主机上的每一块网卡(NIC)都得设置IP地址。通常一块网卡只设置一个IP地址,其实一块网卡也可以配置多个IP地址。此外,一台路由器通常都会配置两个以上的网卡,因可以设詈两个以上的IP地址。
IP地址由“网络标识(网络地址)”和“主机标识(主机地址)”两部分组成”。
网络标识在数据链路的每个段配置不同的值。网络标识必须保证相互连接的每个段的地址不相重复。而相同段内相连的主机必须有相同的网络地址。IP地址的“主机标识”则不允许在同一个网段内重复出现。
由此,可以通过设置网络地址和主机地址,在相互连接的整个网络中保证每台主机的IP地址都不会相互重叠。即IP地址具有了唯一性。

IP包被转发到途中某个路由器时,正是利用目标IP地址的网络标识进行路由。因为即使不看主机标识,只要一见到网络标识就能判断出是否为该网段内的主机。

IP地址分为四个级别,分别为A类、B类、C类、D类。它根据IP地址中从第1位到第4位的比特列对其网络标识和主机标识进行区分。
(1)A类地址
A类IP地址是首位以“0”开头的地址。从第1位到第8位是它的网络标识。用十进制表示的话,0.0.0.0~127.0.0.0是A类的网络地址。A类地址的后24位相当于主机标识。因此,一个网段内可容纳的主机地址上限为16,777,214个。
(2)B类地址
B类IP地址是前两位为“10”的地址。从第1位到第16位是它的网络标识。用十进制表示的话,128.0.0.1~191.255.0.0是B类的网络地址。B类地址的后16位相当于主机标识。因此,一个网段内可容纳的主机地址上限为65,534个。
(3)C类地址
C类IP地址是前三位为“110”的地址。从第1位到第24位是它的网络标识。用十进制表示的话,192.168.0.0~239.255.255.0是C类的网络地址。C类地址的后8位相当于主机标识。因此,一个网段内可容纳的主机地址上限为254个。
(4)D类地址
D类IP地址是**前四位为“1110”**的地址。从第1位到第32位是它的网络标识。用十进制表示的话,224.0.0.0~239.255.255.255是D类的网络地址。D类地址没有主机标识,常被用于多播。

关于分配IP主机地址的注意事项
在分配IP地址时关于主机标识有一点需要注意。即要用比特位表示主机地址时,不可以全部为0或全部为1。因为全部为只有0在表示对应的网络地址或IP地址不可获知的情况下才使用。而全部为1的主机地址通常作为广播地址。
广播分为本地广播和直接广播两种。
在本网络内的广播叫做本地广播。例如网络地址为192.168.0.0/24的情况下,广播地址是192.168.0.255。因为这个广播地址的IP包会被路由器屏蔽,所以不会到达192.168.0.0/24以外的其他链路上。
在不同网络之间的广播叫做直接广播。例如网络地址为192.168.0.0/24的主机向192.168.1.255/24的目标地址发送IP包。收到这个包的路由器,将数据转发给192.168.1.0/24,从而使得所有192.168.1.1 ~192.168.1.254的主机都能收到这个包。
多播用于将包发送给特定组内的所有主机。由于其直接使用IP协议,因此也不存在可靠传输。
IP多播与地址
多播使用D类地址。因此,如果从首位开始到第4位是“1110”,就可以认为是多播地址。而剩下的28位可以成为多播的组编号。
一个IP地址的网络标识和主机标识已不再受限于该地址的类别,而是由一个叫做“子网掩码”的识别码通过子网网络地址细分出比A类、B类、C类更小粒度的网络。这种方式实际上就是将原来A类、B类C类等分类中的主机地址部分用作子网地址,可以将原网络分为多个物理网络的一种机制。
自从引人了子网以后,一个IP地址就有了两种识别码。一是IP地址本身,另一个是表示网络部的子网掩码。子网掩码用二进制方式表示的话,也是一个32位的数字。它对应IP地址网络标识部分的位全部为“1”,对应IP地址主机标识的部分则全部为“0”。由此,一个P地址可以不再受限于自己的类别,而是可以用这样的子网掩码自由地定位自己的网络标识长度。当然,子网掩码必须是IP地址的首位开始连续的“1”。
CIDR,意为“无类型域间选路”。任意长度分割IP地址的网络标识和主机标识。根据CIDR,连续多个C类地址’就可以划分到一个较大的网络内。CIDR更有效地利用了当前IPv4地址,同时通过路由集中降低了路由器的负担。
VLSM(可变长子网掩码):可以随机修改组织内各个部门的子网掩码长度的机制。
随着互联网的迅速普及,IP地址不足的问题日趋显著。于是就出现了一种新技术。它不要求为每一台主机或路由器分配一个固定的IP地址,而是在必要的时候只为相应数量的设备分配唯一的IP地址。尤其对于那些没有连接互联网的独立网络中的主机,只要保证在这个网络内地址唯一,可以不用考虑互联网即可配置相应的IP地址。不过,即使让每个独立的网络各自随意地设置IP地址,也可能会有问题"。于是又出现了私有网络的IP地址。它的地址范围如下所示:

包含在这个范围内的IP地址都属于私有IP,而在此之外的IP地址称为全局IP。

(1)版本( Version)
由4比特构成,表示标识IP首部的版本号。IPv4的版本号即为4,因此在这个字段上的值也是“4”。
IPv4的下一个版本是IPv6。那么为什么要从版本4直接跳到版本6呢?
在互联网中,为了让IP协议更为完善,有众多机构致力于它的规范化。为了让这些机构能够验证相应的IP协议,它们会按照顺序分配具体的版本。
在实验的过程中,选择一个最佳的产物进行标准化。IP version 6 ( IPv6)正是经历了这些过程后才成为IPv4下一代的I协议的。因此,IP协议版本号的大小本身没有什么太大的意义。
(2)首部长度( IHL: Internet Header Length)
由4比特构成,表明IP首部的大小,单位为4字节(32比特)。对于没有可选项的P包,首部长度则设置为“5”。也就是说,当没有可选项时,IP首部的长度为20字节(4x5=20)。
(3)区分服务(TOS: Type Of Service)

这个值通常由应用指定。而且现在也鼓励这种结合应用的特性设定TOS的方法。然而在目前,几乎所有的网络都无视这些字段。这不仅仅是因为在符合质量要求的情况下按其要求发送本身的功能实现起来十分困难,还因为若不符合质量要求就可能会产生不公平的现象。因此,实现TOS控制变得极其复杂。这也导致TOS整个互联网几乎就没有被投人使用。不过已有人提出将TOS字段本身再划分为DSCP和ECN两个字段的建议。

DSCP ( Differential Services Codepoint,差分服务代码点)是TOS ( Type OfService)的一部分。现在统称为DiffServ’.,用来进行质量控制。
ECN (Explicit Congestion Notification,显式拥塞通告)用来报告网络拥堵情况,由两个比特构成。
(4)总长度( Total Length)
表示IP首部与数据部分合起来的总字节数。该字段长16比特。因此IP包的最大长度为65535 ( = 216)字节。
(5)标识(ID:Identification)
由16比特构成,用于分片重组。同一个分片的标识值相同,不同分片的标识值不同。通常,每发送一个IP包,它的值也逐渐递增。此外,即使ID相同,如果目标地址、源地址或协议不同的话,也会被认为是不同的分片。
(6)标志(Flags)
由3比特构成,表示包被分片的相关信息。

(7)片偏移( FO:Fragment Offset)
由13比特构成,用来标识被分片的每一个分段相对于原始数据的位置。第一个分片对应的值为0。由于FO域占13位,因此最多可以表示8192 ( = 213)个相对位置。单位为8字节,因此最大可表示原始数据8×8192=65536字节的位置。
(8)生存时间(TTL:Time To Live)
由8比特构成,它最初的意思是以秒为单位记录当前包在网络上应该生存的期限。然而,在实际中它是指可以中转多少个路由器的意思。每经过一个路由器,TTL会减少1,直到变成0则丢弃该包。
(9)协议(Protocol)
由8比特构成,表示IP首部的下一个首部隶属于哪个协议。
(10)首部校验和( Header Checksum)
由16比特(2个字节)构成,也叫IP首部校验和。该字段只校验数据报的首部,不校验数据部分。它主要用来确保IP数据报不被破坏。校验和的计算过程,首先要将该校验和的所有位置设置为0,然后以16比特为单位划分IP首部,并用1补数’计算所有16位字的和。最后将所得到这个和的1补数赋给首部校验和字段。
(11)源地址(Source Address)
由32比特(4个字节)构成,表示发送端I地址。
(12)目标地址(Destination Address)
由32比特(4个字节)构成,表示接收端IP地址。
(13)可选项(Options)
长度可变,通常只在进行实验或诊断时使用。该字段包含如下几点信息:
安全级别
源路径
路径记录
时间戳
(14)填充(Padding)
也称作填补物。在有可选项的情况下,首部长度可能不是32比特的整数倍。为此,通过向字段填充0,调整为32比特的整数倍。
(15)数据(Data)
存入数据。将IP上层协议的首部也作为数据进行处理。
DNS系统:维护一个用来表示组织内部主机名和IP地址之间对应关系的数据库。
在应用中,当用户输入主机名(域名)时,DNS会自动检索那个注册了主机名和IP地址的数据库,并迅速定位对应的IP地址。而且,如果主机名和IP地址需要进行变更时,也只需要在组织机构内部进行处理即可,而没必要再向其他机构进行申请或报告。
ARP是一种解决地址问题的协议。以目标IP地址为线索,用来定位下一个应该接收数据分包的网络设备对应的MAC地址。如果目标主机不在同一个链路上时,可以通过ARP查找下一跳路由器的MAC地址。
那么ARP又是如何知道MAC地址的呢?简单地说,ARP是借助ARP请求与ARP响应两种类型的包确定MAC地址的。
(1)物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流。
(2)物理层为数据链路层屏蔽了各种传输媒体的差异,使数据链路层只需要考虑如何完成本层的协议和服务,而不必考虑网络具体的传输媒体是什么。

导引型传输媒体:同轴电缆;双绞线;光纤;电力线
非导引型传输媒体:无线电波;微波;红外线;可见光
(1)串行传输和并行传输
(2)同步传输和异步传输
同步传输:时钟同步;
收发双方时钟同步方法:
外同步:在收发双方之间添加一条单独的时钟信号线;
内同步:发送端将时钟同步信号编码到发送数据中一起传输(例如曼彻斯特编码);
(3)单工,半双工,全双工
编码:数字信号转换为另一种数字信号,在数字信道中传输模拟信号转换为数字信号,在数字信道中传输
常用编码:不归零编码;归零编码;曼彻斯特编码;差分曼彻斯特编码;
调制:
数字信号转换为模拟信号,在模拟信道中传输
模拟信号转换为另一种模拟信号,在模拟信道中传输
基本调制(二元制)
混合调制(多元制)
码元
失真因素:码元传输速率;型号传输距离;噪声干扰;传输媒体质量
奈氏准则:在假定的理想条件下,为了避免码间串扰,码元传输速率是有上限的。
理想低通信道的最高码元传输速率=2W Baud = 2W(单位:码元/秒)
理想带通信道的最高码元传输速率= W Baud = W(单位:码元/秒)
香农公式:

**链路(Link)**就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点。
数据链路(Data Link)是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路。
数据链路层以帧为单位传输和处理数据。
三个重要问题
(1)封装成帧;
(2)差错检测;
(3)可靠传输。
使用广播信道的数据链路层:
共享式以太网的媒体接入控制协议CSMA/CD
802.11局域网的媒体接入控制协议CSMA/CA
封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。
透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。
为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大些。
考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元MTU(Maximum Transfer Unit)
实际的通信链路都不是理想的,比特在传输过程中可能会产生差错: 1可能会变成0,而0也可能变成1。这称为比特差错。
在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(Bit Error Rate)。
使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。
在待发送的数据后面添加1位奇偶校验位,使整个数据(包括所添加的校验位在内)中**“1”的个数**为奇数((奇校验)或偶数(偶校验)。
如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码;
如果有偶数个位发生误码,则奇偶性不发生变化,不能检查出误码(漏检);
收发双方约定好一个生成多项式G(x);发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后面一起传输;接收方通过生成多项式来计算收到的数据是否产生了误码;



比特差错

比特差错只是传输差错中的一种。
从整个计算机网络体系结构来看,传输差错还包括分组丢失、分组失序以及分组重复。
分组丢失、分组失序以及分组重复这些传输差错,一般不会出现在数据链路层,而会出现在其上层。
可靠传输服务并不仅局限于数据链路层,其他各层均可选择实现可靠传输。


接收方收不到数据分组,就不会发送ACK或NAK。如果不采取其他措施,发送方就会一直处于等待接收方ACK或NAK的状态。
为解决该问题,可以在发送方发送完一个数据分组时,启动一个超时计时器。若到了超时计时器所设置的重传时间而发送方仍收不到接收方的任何ACK或NAK,则重传原来的数据分组,这就叫做超时重传。
—般可将重传时间选为略大于“从发送方到接收方的平均往返时间”

为避免分组重复这种传输错误,必须给每个分组带上序号。
对于停止-等待协议,由于每发送一个数据分组就停止等待,只要保证每发送一个新的数据分组,其发送序号与上次发送的数据分组的序号不同就可以了,因此用一个比特来编号就够了。

接收端检测到数据分组有误码时,将其丢弃并等待发送方的超时重传。但对于误码率较高的点对点链路,为使发送方尽早重传,也可给发送方发送NAK分组.为了让接收方能够判断所收到的数据分组是否是重复的,需要给数据分组编号。由于停止-等待协议的停等特性,只需1个比特编号就够了,即编号0和1。
为了让发送方能够判断所收到的ACK分组是否是重复的,需要给ACK分组编号,所用比特数量与数据分组编号所用比特数量一样。数据链路层一般不会出现ACK分组迟到的情况,因此在数据链路层实现停止-等待协议可以不用给ACK分组编号。
超时计时器设置的重传时间应仔细选择。一般可将重传时间选为略大于“从发送方到接收方的平均往返时间”。



点对点协议PPP(Point-to-Point Protocol)是目前使用最广泛的点对点数据链路层协议。
PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法,主要由以下三部分构成:
(1)对各种协议数据报的封装方法(封装成帧)
(2)链路控制协议LCP,用于建立、配置以及测试数据链路的连接
(3)一套网络控制协议NCPs,其中的每一个协议支持不同的网络层协议




共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,即媒体接入控制MAC(Medium Access Control)。
信道复用
**复用(Multiplexing)**是通信技术中的一个重要概念。复用就是通过一条物理线路同时传输多路用户的信号。
当网络中传输媒体的传输容量大于多条单一信道传输的总通信量时,可利用复用技术在一条物理线路上建立多条通信信道来充分利用传输媒体的带宽。

频分复用的所有用户同时占用不同的频带资源并行通信。

时分复用的所有用户在不同的时间占用同样的频带宽度。

码分复用CDM是另一种共享信道的方法。实际上,由于该技术主要用于多址接入,人们更常用的名词是码分多址CDMA(Code Division Multiple Access)。
与FDM和TDM不同,CDM的每一个用户可以在同样的时间使用同样的频带进行通信。
由于各用户使用经过特殊挑选的不同码型,因此各用户之间不会造成干扰。
在CDMA中,每一个比特时间再划分为m个短的间隔,称为码片(Chip)。通常m的值是64或128。为了简单起见。在后续的举例中,我们假设m为8.
使用CDMA的每一个站被指派一个唯一的m bit码片序列(Chip Sequence)
一个站如果要发送比特1。则发送它自己的m bit码片序列;
一个站如果要发送比特0,则发送它自己的m bit码片序列的二进制反码;
码片序列的挑选原则如下:
(1)分配给每个站的码片序列必须各不相同。实际常采用伪随机码序列。
(2)分配给每个站的码片序列必须相互正交(规格化内积为0) .





在无线局域网中,不能使用碰撞检测CD,原因如下:
由于无线信道的传输条件特殊,其信号强度的动态范围非常大,无线网卡上接收到的信号强度往往会远远小于发送信号的强度(可能相差百万倍)。如果要在无线网卡上实现碰撞检测CD,对硬件的要求非常高。
即使能够在硬件上实现无线局域网的碰撞检测功能,但由于无线电波传播的特殊性(存在隐蔽站问题),进行碰撞检测的意义也不大。

802.11无线局域网使用CSMA/CA协议,在CSMA的基础上增加了一个碰撞避免CA功能,而不再实现碰撞检测功能。
由于不可能避免所有的碰撞,并且无线信道误码率较高,802.11标准还使用了**数据链路层确认机制(停止-等待协议)**来保证数据被正确接收。
802.11标准规定,所有的站点必须在持续检测到信道空闲一段指定时间后才能发送帧,这段时间称为帧间间隔IFS。

当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯一的标识,即一个数据链路层地址;
在每个主机发送的帧中必须携带标识发送主机和接收主机的地址。由于这类地址是用于媒体接入控制MAC(Media Access Control),因此这类地址被称为MAC地址;
MAC地址一般被固化在网卡(网络适配器)的电可擦可编程只读存储器EEPROM中,因此MAC地址也被称为硬件地址;
MAC地址有时也被称为物理地址。请注意:这并不意味着MAC地址属于网络体系结构中的物理层!
一般情况下,用户主机会包含两个网络适配器:有线局域网适配器(有线网卡)和无线局域网适配器(无线网卡)。每个网络适配器都有一个全球唯一的MAC地址。而交换机和路由器往往拥有更多的网络接口,所以会拥有更多的MAC地址。综上所述,严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。
IP地址是因特网(lnternet)上的主机和路由器所使用的地址,用于标识两部分信息:
(1)网络编号:标识因特网上数以百万计的网络;
(2)主机编号:标识同一网络上不同主机(或路由器各接口)。

源主机在自己的ARP高速缓存表中查找目的主机的IP地址所对应的MAC地址,若找到了,则可以封装MAC帧进行发送;若找不到,则发送ARP请求(封装在广播MAC帧中);
目的主机收到ARP请求后,将源主机的IP地址与MAC地址记录到自己的ARP高速缓存表中,然后给源主机发送ARP响应(封装在单播MAC帧中),ARP响应中包含有目的主机的IP地址和MAC地址;
源主机收到ARP响应后,将目的主机的IP地址与MAC地址记录到自己的ARP高速缓存表中,然后就可以封装之前想发送的MAC帧并发送给目的主机;
ARP的作用范围:逐段链路或逐个网络使用;
除ARP请求和响应外,ARP还有其他类型的报文(例如用于检查IP地址冲突的“无故ARP、免费ARP(Gratuitous ARP))
ARP没有安全验证机制,存在ARP欺骗(攻击)问题。
(1)使用集线器的以太网在逻辑上仍是一个总线网,各站共享总线资源,使用的还是CSMA/CD协议;
(2)集线器只工作在物理层,它的每个接口仅简单地转发比特,不进行碰撞检测(由各站的网卡检测);
(3)集线器一般都有少量的容错能力和网络管理功能。例如,若网络中某个网卡出了故障,不停地发送帧。此时,集线器可以检测到这个问题,在内部断开与出故障网卡的连线,使整个以太网仍然能正常工作。
(1)以太网交换机通常都有多个接口。每个接口都可以直接与一台主机或另一个以太网交换机相连。一般都工作在全双工方式。
(2)以太网交换机具有并行性,能同时连通多对接口,使多对主机能同时通信,无碰撞(不使用CSMA/CD协议)。
(3)以太网交换机一般都具有多种速率的接口,例如:10Mb/s、100Mb/s、1Gb/s、10Gb/s接口的多种组合。
(4)以太网交换机工作在数据链路层(也包括物理层),它收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧。
(5)以太网交换机是一种即插即用设备,其内部的帧交换表是通过自学习算法自动地逐渐建立起来的。
(6)帧的两种转发方式:
1.存储转发
2.直通交换:采用基于硬件的交叉矩阵(交换时延非常小,但不检查帧是否右差错)。

(1)收到帧后进行登记。登记的内容为帧的源MAC地址及进入交换机的接口号;
(2)根据帧的目的MAC地址和交换机的帧交换表对帧进行转发,有以下三种情况:
明确转发:交换机知道应当从哪个(或哪些)接口转发该帧(单播,多播,广播)
盲目转发:交换机不知道应当从哪个端口转发帧,只能将其通过除进入交换机的接口外的其他所有接口转发(也称为泛洪)。
明确丢弃:交换机知道不应该转发该帧,将其丢弃。
(3)帧交换表中的每条记录都有自己的有效时间,到期删除。原因如下:
1、交换机的接口改接了另一台主机;
2、主机更换了网卡。
添加冗余链路可以提高以太网的可靠性。但是,冗余链路也会带来负面效应——形成网络环路
网络环路会带来以下问题:
广播风暴:大量消耗网络资源,使得网络无法正常转发其他数据帧;
主机收到重复的广播帧:大量消耗主机资源
交换机的帧交换表震荡(漂移)
以太网交换机使用生成树协议STP(Spanning Tree Protocol),可以在增加冗余链路来提高网络可靠性的同时又避免网络环路带来的各种问题。
不论交换机之间采用怎样的物理连接,交换机都能够自动计算并构建一个逻辑上没有环路的网络,其逻辑拓扑结构必须是树型的((无逻辑环路);
最终生成的树型逻辑拓扑要确保连通整个网络;
当首次连接交换机或网络物理拓扑发生变化时(有可能是人为改变或故障),交换机都将进行生成树的重新计算。
使用一个或多个以太网交换机互连起来的交换式以太网,其所有站点都属于同一个广播域。随着交换式以太网规模的扩大,广播域相应扩大。
巨大的广播域会带来很多弊端:广播风暴 / 难以管理和维护 / 潜在的安全问题
网络中会频繁出现广播信息(TCP/IP协议栈中很多协议都会使用广播,例如ARP、RIP、DHCP等)
分割广播域的方法:使用路由器可以隔离广播域,但路由器成本较高,虚拟局域网VLAN技术应运而生。
虚拟局域网VLAN(Virtual Local Area Network)是一种将局域网内的设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有某些共同的需求。

网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输。
要实现网络层任务,需要解决以下主要问题:
(1)网络层向运输层提供怎样的服务(“可靠传输”还是“不可靠传输”)
(2)网络层寻址问题
(3)路由选择问题
因特网(lnternet)是目前全世界用户数量最多的互联网,它使用TCP/IP协议栈。
由于TCP/IP协议栈的网络层使用网际协议IP,它是整个协议栈的核心协议,因此在TCP/IP协议栈中网络层常称为网际层。
综上所述,我们通过学习TCP/IP协议栈的网际层来学习网络层的理论知识和实践技术。

IPv4地址就是给因特网(Internet)上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32比特的标识符。


只有A类、B类和C类地址可分配给网络中的主机或路由器的各接口
主机号为“全0”的地址是网络地址。不能分配给主机或路由器的各接口
主机号为“全1"的地址是广播地址。不能分配给主机或路由器的各接口
(1)为新增网络申请新的网络号会带来以下弊端:
需要等待时间和花费更多的费用;
会增加其他路由器中路由表记录的数量;
浪费原有网络号中剩余的大量IP地址。
(2)32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号
子网掩码使用连续的比特1来对应网络号和子网号;
子网掩码使用连续的比特0来对应主机号;
将划分子网的IPv4地址与其相应的子网掩码进行逻辑与运算就可得到IPv4地址所在子网的网络地址。
(3)给定一个分类的IP地址和其相应的子网掩码,就可知道子网划分的细节:
划分出的子网数量
每个子网可分配的IP地址数量
每个子网的网络地址和广播地址
每个子网可分配的最小和最大地址
举例:已知某个网络的地址为218.75.230.0,使用子网掩码255.255.255.128对其进行子网划分,请给出划分细节。

可分成两个子网,分别为218.75.230.1 —— 218.75.230.126, 218.75.230.129 —— 218.75.230.254
因特网工程任务组IETF又提出了采用无分类编址的方法来解决IP地址紧张的问题,同时还专门成立IPv6工作组负责研究新版本IP以彻底解决lP地址耗尽问题。
1993年,IETF发布了无分类域间路由选择CIDR(Classless Inter-Domain Routing)的RFC文档: RFC 1517~1519和1520。
(1)CIDR消除了传统的A类、B类和C类地址,以及划分子网的概念;
(2)CIDR可以更加有效地分配IPv4的地址空间,并且可以在新的IPv6使用之前允许因特网的规模继续增长。
CIDR使用**“斜线记法”,或称CIDR记法**。即在IPv4地址后面加上斜线“/”“,在斜线后面写上网络前缀所占的比特数量。
CIDR实际上是将网络前缀都相同的连续的IP地址组成一个“CIDR地址块””。
我们只要知道CIDR地址块中的任何一个地址,就可以知道该地址块的全部细节:
(1)地址块的最小地址
(2)地址块的最大地址
(3)地址块中的地址数量
(4)地址块聚合某类网络(A类、B类或C类)的数量
(5)地址掩码(也可继续称为子网掩码)
【例1】请给出CIDR地址块128.14.35.7/20的全部细节(最小地址,最大地址,地址数量,聚合C类网数量,地址掩码)。

网络前缀越长,地址块越小,路由越具体;
若路由器查表转发分组时发现有多条路由可选,则选择网络前缀最长的那条,这称为最长前缀匹配,因为这样的路由更具体。

(1)使用同一个子网掩码来划分子网
(2)子网划分方式不灵活:只能划分出2n个子网(n是从主机号部分借用的用来作为子网号的比特数量)
(3)每个子网所分配的IP地址数量相同,容易造成IP地址浪费。
(1)使用不同的子网掩码来划分子网
(2)子网划分方式灵活:可以按需分配
(3)每个子网所分配的IP地址数量可以不同,尽可能减少对IP地址的浪费
判断目的主机是否与自己在同一个网络
(1)检查lP数据报首部是否出错:
(2)根据IP数据报的目的地址在路由表中查找匹配的条目
(1)静态路由配置是指用户或网络管理员使用路由器的相关命令给路由器人工配置路由表。
(2)使用静态路由配置可能出现以下导致产生路由环路的错误
(3)路由条目的类型
(4)特殊的静态路由条目

路由信息协议RIP(Routing Information Protocol)是内部网关协议lGP中最先得到广泛使用的协议之一,其相关标准文档为RFC 1058。
RIP要求自治系统AS内的每一个路由器都要维护从它自己到AS内其他每一个网络的距离记录。这是一组距离,称为“距离向量D-V(Distance-Vector)”。
RIP使用跳数(Hop Count)作为度量(Metric)来衡量到达目的网络的距离。
RIP认为好的路由就是“距离短”的路由,也就是所通过路由器数量最少的路由。
当到达同一目的网络有多条“距离相等”的路由时,可以进行等价负载均衡。
RIP包含以下三个要点:




具体解释见图解TCP/IP,lPv4部分。
为了更有效地转发lP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP(Internet Control Message Protocol)。
当路由器或主机不能交付数据报时,就向源点发送终点不可达报文。具体可再根据ICMP的代码字段细分为目的网络不可达、目的主机不可达、目的协议不可达、目的端口不可达、目的网络未知、目的主机未知等13种错误。
当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。
当路由器收到一个目的IP地址不是自己的IP数据报,会将其生存时间TTL字段的值减1。
若结果不为0,则将该IP数据报转发出去;若结果为0,除丢弃该IP数据报外,还要向源点发送时间超过报文。
当路由器或目的主机收到IP数据报后,根据其首部中的检验和字段发现首部在传输过程中出现了误码,就丢弃该数据报,并向源点发送参数问题报文。
路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)。
利用公用的因特网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网。由于IPv4地址的紧缺,一个机构能够申请到的IPv4地址数量往往远小于本机构所拥有的主机数量。因此,虚拟专用网中的各主机所分配的地址应该是本机构可自由分配的专用地址,而不是需要申请的、在因特网上使用的公有地址。

TCP/IP体系的运输层使用端口号来区分应用层的不同应用进程。











TCP规定:及时接收窗口为零,也必须接受零窗口探测报文段、确认报文段,携带紧急数据报文段。

下面介绍这四种拥塞控制算法的基本原理,假定如下条件:
(1)数据是单方向传送,而另一个方向只传送确认。
(2)接收方总是有足够大的缓存空间,因而发送方发送窗口的大小由网络的拥塞程度来决定。
(3)以最大报文段MSS的个数为讨论问题的单位,而不是以字节为单位。

慢开始和拥塞避免算法是1988年提出的TCP拥塞控制算法(TCP Tahoe版本)。
1990年又增加了两个新的拥塞控制算法(改进TCP的性能),这就是快重传和快恢复((TCP Reno版本)
采用快重传算法可以让发送方尽早知道发生了个别报文段的丢失。
所谓快重传,就是使发送方尽快进行重传,而不是等超时重传计时器超时再重传。

发送方一旦收到3个重复确认,就知道现在只是丢失了个别的报文段。 于是不启动慢开始算法,而执行快恢复算法;






seq的值是主机乙的初始序号,是主机乙随意指定的。

2MSL能够确保TCP服务器进程可以收到最后一个TCP确认报文段而进入关闭状态。

应用层是计算机网络体系结构的最顶层,是设计和建立计算机网络的最终目的,也是计算机网络中发展最快的部分。



动态主机配置协议DHCP(Dynamic Host Configuration Protocol)提供了一种机制,称为即插即用连网。这种机制允许一台计算机加入新网络时可自动获取IP地址等网络配置信息而不用手工参与。
相关具体内容可以参考我之前的博文
DHCP和PPPoE协议以及抓包分析


在每一个网络上都设置一个DHCP服务器会使DHCP服务器的数量太多。因此现在是使每一个网络至少有一个DHCP中继代理(通常是一台路由器),它配置了DHCP服务器的IP地址信息,作为各网络中计算机与DHCP服务器的桥梁。



为了提高DNS的查询效率,并减轻根域名服务器的负荷和减少因特网上的DNS查询报文数量,在域名服务器中广泛地使用了高速缓存。高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录。

由于域名到IP地址的映射关系并不是永久不变,为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器并删除超过合理时间的项(例如,每个项目只存放两天)。
不但在本地域名服务器中需要高速缓存,在用户主机中也很需要。许多用户主机在启动时从本地域名服务器下载域名和IP地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到域名时才向域名服务器查询。同理,主机也需要保持高速缓存中内容的正确性。



为了方便地访问在世界范围的文档,万维网使用统一资源定位符URL来指明因特网上任何种类“资源”的位置。
URL的一般形式由以下四个部分组成:

HTTP定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及万维网服务器怎样把万维网文档传送给浏览器。
