网络原理-多路访问共享传播介质控制协议

一、全双工倾向与介质访问控制的关系

核心总结:只有共享介质的情况下,才会出现下面的问题【干扰和冲突】。

干扰(interference):两个或者两个以上结点同时传输。
冲突(collision):结点同时接收到两个或者多个信号→接收失败!

说明:对于一对一访问的情况下,介质是独占的,不会出现干扰和冲突。至于两边是否会同时发送信息,从而导致碰撞问题。解决办法:

1、只用一个回路(两条线):

(1)采用时分复用,时间片轮流,两端收发状态互换,同一时刻只有一端发另一端只能收。因为时隙都很短,我们用起来感觉上是收发同时进行的。

(2)采用传递模拟电信号(双线电话模拟信号)实现全双工,两端可以同时收发。

2、用两个回路(四条线):

这个一般用在数字电信号里面,一个回路用来发信号,一个回路用来收信号。

关于光纤,一根光纤,可以利用波分复用,实现两端同时收发。

关于无线网,要看无线网卡是两根天线还是一根天线。两根天线相当于两个回路,一个回路收,一个回路发。一个天线,基本用的是时分复用,同一时刻只有一端在发。当然目前有实验室的demo,可以用一根天线实现双方同时发,用的是电磁波混合。在接收端,顺便过滤掉自己的电磁波。这样就只剩下对方的电磁波了。

GSM上网也就是2G上网:采用TDMA,时分双工(即半双工),因为时隙都很短,我们用起来感觉上是收发同时进行的。GSM中采取收发有三个时隙间隔的方式。

然后我们在考虑多路访问情况下,多路访问主要问题就是 占用介质 。

1、采用静态划分信道的办法。时分复用,频分复用,波分复用,码分复用。

2、动态信道划分:(1)随机访问 (2)轮转

这样子,多路访问的  干扰和冲突  就解决了,也就是解决了 占用介质问题。

接下来,该考虑双方是否会同时发送信息,导致碰撞。这就回到了 一对一 两端信号 同时发送 产生碰撞 的问题。

【最典型的例子: 无线网中,采用的TDMA 时分复用技术,时分双工(即半双工),发送和接收不能同时进行,但是对我们上网是不受影响的,发送和接收数据所占用的时隙都很短,我们用起来感觉上是收发同时进行的。当有多个无线设备,接入时,采用CSMA/CA  决定 介质 占用权。 】


二、多路访问控制(MAC)协议:

2.1目的

局域网为一个单位所拥有,且地理范围和站点数目均有限。

局域网按网络拓扑进行分类:

上图和下图中的总线网两端的匹配电阻吸收在总线上传播的电磁波信号能量,避免在总线上产生有害的电磁波反射。

半双工的总线型连接到交换机的半双工端口时,如何处理,如果内部和外部同时发送信号的问题,估计如下,因为是数字电信号,所以采用时分复用比较合理,采用时间片内外两端,轮流发送。暂未发送的可以先放入缓存区。我在网络拓扑文章中也已经提到过。

总线的特点

当一台计算机发送数据的时候,总线上的所有计算机都能检测到这个数据。这就是广播通信方式。当我们需要在总线上进行一对一通信的时候,就需要使每一台计算机的网卡拥有一个与其他网卡都不同的地址。这个时候,我们在发送数据帧时,就需要表明数据帧接收站的地址。只有网卡地址与其相同时,才接受数据帧,否则丢弃帧。

上面的总线型,可以清楚说明 总线型网络存在 干扰和冲突。
干扰(interference):两个或者两个以上结点同时传输。
冲突(collision):结点同时接收到两个或者多个信号→接收失败!

以太网的广播方式发送

  • 总线上其他的的计算机都能检测到 总线上 随机 某台计算机 发送的数据。
  • 然后 总线上 收到 数据的计算机,检查 数据中的目标mac 地址是不是自己的,是就接收数据,不是就丢弃数据。
  • 具有广播特性的总线上实现了一对一的通信。

为了通信的简便 以太网采取了两种重要的措施

  • 采用较为灵活的无连接的工作方式,即不必先建立连接就可以直接发送数据。
  • 以太网对发送的数据帧不进行编号,也不要求对方发回确认。
    • 这样做的理由是局域网信道的质量很好,因信道质量产生差错的概率是很小的。

以太网提供的服务

  • 以太网提供的服务是不可靠的交付,即尽最大努力的交付。
  • 当目的站收到有差错的数据帧时就丢弃此帧,其他什么也不做。差错的纠正由高层来决定。
  • 如果高层发现丢失了一些数据而进行重传,但以太网并不知道这是一个重传的帧,而是当作一个新的数据帧来发送。

1990年,IEEE针对星型以太网制定了10BASE-T标准,即802.3i
其中,10代表10Mb/s,BASE代表基带信号,T代表双绞线。FX代表光纤

集线器的特点:

  • 使用集线器的以太网在逻辑上仍然是一个总线网,各站共享逻辑上的总线,使用的依然是CSMA/CD协议,原理和总线结构时一样。
  • 一个集线器上有许多接口。每个接口通过RJ-45插头与主机相连。
  • 集线器工作在物理层,接口的作用就是简单的转发比特,不进行碰撞检测,碰撞检测是主机的网卡进行的。
  • 集线器采用了专门的芯片,进行自适应串音回波抵消,这样就可以使接口转发出去的较强信号不至于对该接口接收到的较弱信号产生干扰。每个比特在转发之前还要进行再生整型并重新定时。

=======================================================

为了能够使众多用户能够合理而方便地共享通信媒体资源,所以需要考虑共享信道的问题。

在技术上有两种实现方法:

  • 静态划分信道
    • 频分复用
    • 时分复用
    • 波分复用
    • 码分复用
  • 动态媒体接入控制(多点接入)
    • 随机接入:用户可随机发送信息,但是如果多个用户在同一时刻发送信息,那么再共享媒体上就要产生碰撞(冲突),似的这些用户都发送失败,所以必须要有解决碰撞的网络协议。 比如 CSMA/CD 以太网的共享介质方法
    • 受控接入:用户不能随意发送信息,必须服从一定的控制,比如有分散控制的令牌环局域网和集中控制的多点线路探询(轮询)

采用静态划分信道可以解决问题,用户只要分配到了信道就不会和其他用户发生冲突。但是这种划分信道的方法代价高,不适合局域网使用

为了在多路访问的网络拓扑中,解决不同主机同时共享介质产生的问题。
(1)干扰(interference):两个或者两个以上结点同时传输
(2)冲突(collision):结点同时接收到两个或者多个信号→接收失败!

其中,MAC(multiple access control protocol)里面的 信道划分,其实也起到了增大信道传输数据的作用。

2.2设想

(1)采用分布式算法决定结点如何共享信道,即决策结点何时可以传输数据
(2)必须基于信道本身,通信信道共享协调信息!
(3)无带外信道用于协调

给定: 速率为R bps的广播信道
期望:
(1)当只有一个结点希望传输数据时,它可以以速率 R发送.
(2)当有M个结点期望发送数据时,每个节点平均发送数据的平均速率是R/M
(3)完全分散控制:
• 无需特定结点协调
• 无需时钟、时隙同步
(4)简单

三、信道划分MAC协议

3.1 信道划分MAC协议: TDMA

  • TDMA: time division multiple access
    • “周期性”接入信道
    • 每个站点在每个周期,占用固定长度的时隙(e.g.长度=分组传输时间)
    • 未用时隙空闲(idle)
    • 例如: 6-站点LAN, 1,3,4传输分组, 2,5,6空闲

3.2 信道划分MAC协议: FDMA

  • FDMA: frequency division multiple access
    • 信道频谱划分为若干频带(frequency bands)
    • 每个站点分配一个固定的频带
    • 无传输频带空闲
    • 例如: 6站点LAN, 1,3,4频带传输数据, 2,5,6频带空闲。

4 随机访问MAC协议

  • 当结点要发送分组时:
    • 利用信道全部数据速率R发送分组
    • 没有事先的结点间协调
  • 两个或多个结点同时传输: ➜ “冲突”
  • 随机访问MAC协议需要定义:
    • 如何检测冲突
    • 如何从冲突中恢复 (e.g., 通过延迟重传)
  • 典型的随机访问MAC协议:
    • 时隙(sloted)ALOHA
    • ALOHA
    • CSMA、 CSMA/CD、 CSMA/CA

4.1 时隙ALOHA协议

假定:

  • 所有帧大小相同
  • 时间被划分为等长的时隙(每个时隙可以传输1个帧)
  • 结点只能在时隙开始时刻发送帧
  • 结点间时钟同步
  • 如果2个或2个以上结点在同一时隙发送帧,结点即检测到冲突

运行:

  • 当结点有新的帧时,在下一个时隙(slot)发送
    • 如果无冲突:该结点可以在下一个时隙继续发送新的帧
    • 如果冲突:该结点在下一个时隙以概率p重传该帧,直至成功

  • 优点:
    • 单个结点活动时,可以连续以信道全部速率传输数据
    • 高度分散化:只需同步时隙
    • 简单
  • 缺点:
    • 冲突,浪费时隙
    • 空闲时隙
    • 结点也许能以远小于分组传输时间检测到冲突
    • 时钟同步

效率(efficiency): 长期运行时,成功发送帧的时隙所占比例 (很多结点,有很多帧待发送)。

  • 假设: N个结点有很多帧待传输,每个结点在每个时隙均以概率p发送数据
  • 对于给定的一个结点,在一个时隙将帧发送成功的概率= p(1-p)N-1
  • 对于任意结点成功发送帧的概率= Np(1-p)N-1
  • 最大效率: 求得使Np(1-p)N-1最大的p*
  • 对于很多结点,求Np*(1-p*)N-1当N趋近无穷时的极限,可得:
    • 最大效率= 1/e = 0.37

最好情况: 信道被成功利用的时间仅占37%!

4.2 ALOHA协议

  • 非时隙(纯)Aloha:更加简单,无需同步
  • 当有新的帧生成时
    • 立即发送
  • 冲突可能性增大:
    • 在t0时刻发送帧,会与在[t0-1, t0+1]期间其他结点发送的帧冲突

4.3 CSMA协议

载波监听多路访问协议CSMA (carrier sense multiple access)

发送帧之前,监听信道(载波):

  • 信道空闲:发送完整帧
  • 信道忙:推迟发送
    • 1-坚持CSMA
    • 非坚持CSMA
    • P-坚持CSMA
  • 冲突可能仍然发生:
    • 信号传播延迟
  • 继续发送冲突帧:浪费信道资源

4.4 CSMA/CD协议

CSMA/CD: CSMA with Collision Detection

  • 短时间内可以检测到冲突
  • 冲突后传输中止,减少信道浪费
  • 冲突检测:
    • 有线局域网易于实现:测量信号强度,比较发射信号与接收信号
    • 无线局域网很难实现:接收信号强度淹没在本地发射信号强度下

“边发边听,不发不听”

例题

在一个采用CSMA/CD协议的网络中, 传输介质是一根完整的电缆, 传输速率为1 Gbps, 电缆中的信号传播速度是200 000 km/s。 若最小数据帧长度减少800比特, 则最远的两个站点之间的距离至少需要:
A.增加160 m B.增加80 m
C.减少160 m D.减少80 m

CSMA/CD效率

五、 轮转访问MAC协议

  • 信道划分MAC协议:
    • 网络负载重时,共享信道效率高,且公平
    • 网络负载轻时,共享信道效率低!
  • 随机访问MAC协议:
    • 网络负载轻时,共享信道效率高,单个结点可以利用信道的全部带宽
    • 网络负载重时,产生冲突开销
  • 轮转访问MAC协议:
    • 综合两者的优点!

5.1 轮询(polling)

  • 主结点轮流“邀请”从属结点发送数据
  • 典型应用:
    • “哑(dumb)” 从属设备
  • 问题:
    • 轮询开销
    • 等待延迟
    • 单点故障

5.2 令牌传递(token passing)

  • 控制令牌依次从一个结点传递到下一个结点.
  • 令牌:特殊帧
  • 问题:
    • 令牌开销
    • 等待延迟
    • 单点故障

六、 MAC协议总结

  • 信道划分MAC协议:时间、频带、码片划分
    • TDMA、 FDMA、 CDMA
  • 随机访问MAC协议:
    • ALOHA, S-ALOHA, CSMA, CSMA/CD
    • CSMA/CD应用于以太网
    • CSMA/CA应用802.11无线局域网
  • 轮转访问MAC协议:
    • 主结点轮询;令牌传递
    • 蓝牙、 FDDI、令牌环网

 


参考:

https://blog.csdn.net/qq_20233867/article/details/78451799

https://blog.csdn.net/lovecc_orange/article/details/79177129

网络原理-手机为何不能像电脑那样既连WiFi又开热点

无线网络上网可以简单的理解为无线上网,几乎所有智能手机、平板电脑和笔记本电脑都支持无线保真上网,是当今使用最广的一种无线网络传输技术。实际上就是把有线网络信号转换成无线信号,使用无线路由器供支持其技术的相关电脑,手机,平板等接收。手机如果有无线保真功能的话,在有Wi-Fi无线信号的时候就可以不通过移动联通的网络上网,省掉了流量费。

相信很多手机用户都会有这个困扰:为什么手机不能既连WiFi又开热点? 毕竟像笔记本电脑虽然只有一个无线网卡,但却能在接收WiFi信号的同时,再通过软件共享,发出WiFi让其他设备上网;那么问题来了,为什么绝大多数的手机不能这么干呢?小编就带大家了解一下。

关键因素:无线网卡类型

首先介绍一下手机连接WiFi的必要硬件—无线网卡。手机的无线网卡为内置无线网卡,是接收无线WiFi信号的唯一网关部件。而无线网卡里面的 分类为全双工、半双工、和单工三种数据传输方式的类别。

单工只能单独的发信号或者收信号,通信都是单向的。而半双工则是指A能发送信号给B,B也能发送信号给A,但是不能同时进行的。而全双工则是双方可以同时接收和发送信号,请参考打电话。笔记本电脑基本上是全双工无线网卡,所以WiFi与热点共同存在。而手机的无线网卡很多的基本上都是半双工类型的(少数例外),也就导致了手机的WiFi与热点不能同时开启的原因。

为什么手机不使用全双工的网卡?

①实用性;其手机不是电脑,手机连接WiFi后再共享出去,需要用到这个功能的人少之又少。

②手机处理器能力有限;如果手机采用了全双工网卡, 一边接收WiFi一边发射WiFi耗费系统资源,处理器很快要满负荷。

最后就是系统限制了,即使个别手机配备了全双工网卡,系统也可能是半双工的工作模式。这也可以参考市面上的Win8/安卓双系统平板,在Windows系统下,可以边接收WiFi边发射WiFi,而切换到了原生安卓系统下就不行了,手机也是同理。

来自:https://baijiahao.baidu.com/s?id=1563310903599219&wfr=spider&for=pc

网络原理-双线电话机全双工原理

电话全双工通信原理

首先确定电话线通的是直流电,电压30-70V左右。视电话线距离而定。电流很小只有几十毫安。
一般来说:因为这里电话机传递的是模拟信号,并且利用了2/4线转换器,才实行全双工通信。而网络中,网线中如果只有两根导线,那么在传递数字信号时只能形成一个回路,只能半双工通信。

先介绍一下:单工 、半双工、全双工
单工通信(Simplex Communication)是指消息只能单方向传输的工作方式。
在单工通信中,通信的信道是单向的,发送端与接收端也是固定的,即发送端只能发送信息,不能接收信息;接收端只能接收信息,不能发送信息。基于这种情况,数据信号从一端传送到另外一端,信号流是单方向的。
例如:生活中的广播就是一种单工通信的工作方式。广播站是发送端,听众是接收端。广播站向听众发送信息,听众接收获取信息。广播站不能作为接收端获取到听众的信息,听众也无法作为发送端向广播站发送信号。
半双工通信(Half-duplex Communication)可以实现双向的通信,但不能在两个方向上同时进行,必须轮流交替地进行。
在这种工作方式下,发送端可以转变为接收端;相应地,接收端也可以转变为发送端。但是在同一个时刻,信息只能在一个方向上传输。因此,也可以将半双工通信理解为一种切换方向的单工通信。
例如:对讲机是日常生活中最为常见的一种半双工通信方式,手持对讲机的双方可以互相通信,但在同一个时刻,只能由一方在讲话。
全双工通信(Full duplex Communication)是指在通信的任意时刻,线路上存在A到B和B到A的双向信号传输。 全双工通信允许数据同时在两个方向上传输,又称为双向同时通信,即通信的双方可以同时发送和接收数据。在全双工方式下,通信系统的每一端都设置了发送器和接收器,因此,能控制数据同时在两个方向上传送。全双工方式无需进行方向的切换,因此,没有切换操作所产生的时间延迟,这对那些不能有时间延误的交互式应用(例如远程监测和控制系统)十分有利。这种方式要求通讯双方均有发送器和接收器,同时,需要2根数据线传送数据信号。(可能还需要控制线和状态线,以及地线)。
理论上,全双工传输可以提高网络效率,但是实际上仍是配合其他相关设备才有用。例如必须选用双绞线的网络缆线才可以全双工传输,而且中间所接的集线器(HUB),也要能全双工传输;最后,所采用的网络操作系统也得支持全双工作业,如此才能真正发挥全双工传输的威力。

 

电话机混合线圈工作原理

核心总结:

这个牵涉到所谓的二/四线转换问题:
二线是指模拟电话线路(家里的2芯电话线),而四线就是指传输设备音频连接配线、电话交换机、或者电话机的内部线路。
设备内部的音频信号都是收发独立的,各占用一对线,即4线接口方式。这样电路稳定,使用维护、检测都比较简单。
但是,为了控制投资,连接户外的用户电缆线路采用二线制式来大幅减少电缆芯线,使得能够在一对铜线上传输双方向的信号。这两部分之间的二线转四线功能就需要一个混合线圈来完成。
那如何才能实现二四线转换呢,实际上简单地说就是:音频耦合+消侧音两项功能的结合。
1.音频耦合原理简单,将将收发的信号通过线圈耦合就可以完成了,耦合以后线路上就包含了双向的信号,各自完成了发送语音的功能。
2.消侧音的功能:
由于线路上传输的信号是把你和对方的语音信号同时传递,因此在你说在进入听筒之前需要从线路信号中消掉。我们可以设计一个电路,实现将混合以后的线路减去自己的发送的语音信号然后再送入听筒,这时你就可以在听筒中只听到对方的声音了,而这个信号反向功能在变压器的应用中是很容易做到的。
因此,无论你发出什么语音,听筒发出的永远是:
线路混合语音信号(通话双方的语音混合信号)-自己发出的语音=对方语音
这就是消侧音的原理
应用了这么一个简单的原理,我们的电话系统节省了一半的通信电缆线路!  
完成这些功能的实际产品就是混合线圈,是一种四端电路……

在有线电话网中,电话机是通过两条导线和电信局的交换机传送和接收电信号。如果不采取措施,发话者的音频信号必会传到自己的受话器中,使自己听到自己的讲话声音,这就是”侧音”。较大的侧音会影响接听对方的讲话,故必须减小或消除。如图2所示是一电话机的消”侧音”电路与交换机的连接示意图。图中的两个变压器是完全相同的,a、b、c、d、e、f六个线圈的匝数相同。打电话时,对着话筒发话,把放大后的音频电压加到变压器的线圈a,从线圈c和b输出大小相等但随声频变化的电压,c两端的电压产生的电流IL通过线圈e和两导线L、电信局的交换机构成回路,再通过交换机传到对方电话机,对方就听到发话者的声音。同时由于线圈e中有电流通过,在线圈f中也会有电压输出,放大后在自己的电话机的受话器上发出自己的讲话声,这就是上面讲的”侧音”。为了消除这个侧音,可以把线圈b的电压加在线圈d上,并通过R调节d中的电流Id。那么为达到消侧音的目的,1应与3相接;4应与2相接,并使Id等于IL。对方讲话时,音频电压通过交换机和两条导线L加到本机,那么通过R的电流为多少?(0)。

解析:
甲方向乙方送话  →
1、打电话时,对着话筒发话,把放大后的音频电压加到变压器的线圈a。假设某一时刻电流从线圈a上端流入,而且增大,根据右手螺线管定则,磁力线顺时针方向,而且磁通也量增大。

2、变化的磁场使耦合线圈c产生变化的电流,根据楞次定律,线圈c上感应的电压是上正下负,即电流从上端流出,下端流入。同理可得耦合线圈b中的电流从上端流出,下端流入。

3、由于线圈c、线圈e、两导线L和交换机构成一个回路,线圈c流出的电流从线圈e的下端流入,上端流出,经导线L传到电信局的交换机,经交换机分两路输出,一路经导线L流入线圈c的下端形成回路;另一路传到对方电话机,使对方能听到发话者的声音。

4、线圈e中变化的电流又产生变化的磁场,根据右手螺线管定则磁力线逆时针方向。变化的磁场又使耦合线圈f产生变化的电流,经放大到听筒输出,于是从听筒听到自己的声音,这就是侧音。

5、由于线圈b、可变电阻R和线圈d构成一个回路,线圈b下端流出的电流通过可变电阻流入线圈d下端,于是d线圈变化的电流又产生变化的磁场,磁力线顺时针方向,只要调整可变电阻R,使流过线圈e、d的电流相等,则线圈e、d产生的磁场可完全抵消,通过线圈f的磁通量始终为零,线圈f没有感应电流,听筒中就没有发话者的声音。从而消除消侧音。

乙方向甲方送话→
对方发话时,从交换机传来的音频电压加到电话机上,假设某一时刻在线圈c、线圈e、两导线L和交换机构成的回路中形成的电流是从c的下端流入且增大,磁力线逆时针方向,则b线圈的上端为流入(负),d线圈的上端也为负,感应电压值相同,在bdR回路中没有电流,d中不会产生磁场抵消e的磁场,f中有e产生的磁场的磁感线通过,磁通量会发生变化,产生感应电动势,放大后在受话器中发出对方的声音。

网络原理-网络拓扑与多路访问和路由协议

一、网络拓扑


计算机网络拓扑(Computer Network Topology)是指由计算机组成的网络之间设备的分布情况以及连接状态.把它两画在图上就成了拓朴图.一般在图上要标明设备所处的位置,设备的名称类型,以及设备间的连接介质类型.它分为物理拓朴和逻辑拓朴两种。

 计算机网络的拓扑结构,即是指网上计算机或设备与传输媒介形成的结点与线的物理构成模式。网络的结点有两类:一类是转换和交换信息的转接结点,包括结点交换机、集线器和终端控制器等;另一类是访问结点,包括计算机主机和终端等。线则代表各种传输媒介,包括有形的和无形的。
计算机网络的拓扑结构主要有:总线型拓扑、星型拓扑、环型拓扑树型拓扑、网状拓扑和混合型拓扑。

目前流行的以太网支持星型拓扑和总线型拓扑。

图中的总线网两端的匹配电阻吸收在总线上传播的电磁波信号能量,避免在总线上产生有害的电磁波反射。

最初的以太网是将许多计算机都连接到一根总线上。当初认为这样的连接方法既简单又可靠,因为总线上没有有源器件。

以太网的广播方式发送

  • 总线上的每一个工作的计算机都能检测到 B 发送的数据信号。
  • 由于只有计算机 D 的地址与数据帧首部写入的地址一致,因此只有 D 才接收这个数据帧。
  • 其他所有的计算机(A, C 和 E)都检测到不是发送给它们的数据帧,因此就丢弃这个数据帧而不能够收下来。
  • 具有广播特性的总线上实现了一对一的通信。

上面的总线型,可以清楚说明 总线型网络存在 干扰和冲突。
干扰(interference):两个或者两个以上结点同时传输。
冲突(collision):结点同时接收到两个或者多个信号→接收失败!

以太网提供的服务

  • 以太网提供的服务是不可靠的交付,即尽最大努力的交付。
  • 当目的站收到有差错的数据帧时就丢弃此帧,其他什么也不做。差错的纠正由高层来决定。
  • 如果高层发现丢失了一些数据而进行重传,但以太网并不知道这是一个重传的帧,而是当作一个新的数据帧来发送。

而总线型 采用 半双工模式。连接到 交换机 时。交换机负责 内外 两边 信息的传输。这个时候,就有一个冲突。如果两端的信息都往交换机传输呢。所以,我干扰估计,交换机上面应该采用的    时分复用   来控制 两端的 信息收发。没发送的信息应该是 缓存起来了,等到了时间片,继续发送。 【 很明显,互联网应该是全双工模式,连接到互联网的局域网可能是半双工也可能是全双工】

 

为了能够使众多用户能够合理而方便地共享通信媒体资源,所以需要考虑共享信道的问题。

共享信道在技术上有两种实现方法:

  • 静态划分信道
    • 频分复用
    • 时分复用
    • 波分复用
    • 码分复用
  • 动态媒体接入控制(多点接入)
    • 随机接入:用户可随机发送信息,但是如果多个用户在同一时刻发送信息,那么再共享媒体上就要产生碰撞(冲突),似的这些用户都发送失败,所以必须要有解决碰撞的网络协议。比如  CSMA/CD  以太网的控制方式
    • 受控接入:用户不能随意发送信息,必须服从一定的控制,比如有分散控制的令牌环局域网和集中控制的多点线路探询(轮询)

采用静态划分信道可以解决问题,用户只要分配到了信道就不会和其他用户发生冲突。但是这种划分信道的方法代价高,不适合局域网使用。(所以ADSL频分复用那部分线路,都是运营商来负责的)

=======================================================

半双工以太网采用CSMA/CD协议,以防止产生冲突。全双工以太网由于发送和接收数据是在不同的电缆线上完成,因此不会产生冲突。全双工以太网可以用于如下三种情况:交换机到主机、交换机到交换机、用交叉电缆的主机到主机。请记住:在全双工模式下,不会有冲突域、专用的交换机端口可用于全双工节点、主机的网卡和交换机端口必须能够运行在全双工模式

二、网络访问


因为计算机网络拓扑不同,可以分为多路访问【点到多点访问】和点对点访问。

1、多路访问:一个点连接多个点。
2、点对点访问:一个点只连接一个点。

本质上区分:网络是否共享传输介质。总线型网络可以也可以看成点到多点访问。

根据两种分类,设计了   数据链路层    协议:

1、点对点链路:PPP协议,关于HDLC的问题。(HDLC可以通过原始主从模式正常响应模式(NRM)和异步响应模式(ARM)用于点对多点连接,但它们现在很少使用; 现在几乎只使用异步平衡模式(ABM)将一个设备连接到另一个设备。)

2、多路访问链路:

支持广播

(1)、广播多路访问:以太网,WLAN令牌环网ARCNETFDDI 。

参考:
发送Beacon广播管理帧http://www.cnblogs.com/littlehann/p/3700357.html
https://zh.wikipedia.org/wiki/%E5%BC%80%E6%94%BE%E5%BC%8F%E6%9C%80%E7%9F%AD%E8%B7%AF%E5%BE%84%E4%BC%98%E5%85%88)
FDDI采用了和令牌环网中令牌环(token-ring)相似的方式,ARCNET采用令牌总线(token-bus),和令牌环相似,估计也是广播形式,引用的确是广播。http://www.kepuchina.cn/wiki/ct/201803/t20180306_555756.shtml

不支持广播:【唯一的疑问的X.25是 点多点访问,理论上不是多路访问,存疑】

(2)、非广播多路访问(NBMA):帧中继(FR)、X.25和异步传输模式(ATM)。

=========================================================

核心总结:只有共享介质的情况下,才会出现下面的问题【干扰和冲突】。

干扰(interference):两个或者两个以上结点同时传输。
冲突(collision):结点同时接收到两个或者多个信号→接收失败!

说明:对于一对一访问的情况下,介质是独占的,不会出现干扰和冲突。至于两边是否会同时发送信息,从而导致碰撞问题。解决办法:

1、只用一个回路(两条线):

(1)采用时分复用,时间片轮流,两端收发状态互换,同一时刻只有一端发另一端只能收。因为时隙都很短,我们用起来感觉上是收发同时进行的。

(2)采用传递模拟电信号(双线电话模拟信号)实现全双工,两端可以同时收发。

2、用两个回路(四条线):

这个一般用在数字电信号里面,一个回路用来发信号,一个回路用来收信号。

关于光纤,一根光纤,可以利用波分复用,实现两端同时收发。

关于无线网,要看无线网卡是两根天线还是一根天线。两根天线相当于两个回路,一个回路收,一个回路发。一个天线,基本用的是时分复用,同一时刻只有一端在发。当然目前有实验室的demo,可以用一根天线实现双方同时发,用的是电磁波混合。在接收端,顺便过滤掉自己的电磁波。这样就只剩下对方的电磁波了。

GSM上网也就是2G上网:采用TDMA,时分双工(即半双工),因为时隙都很短,我们用起来感觉上是收发同时进行的。GSM中采取收发有三个时隙间隔的方式。

然后我们在考虑多路访问情况下,多路访问主要问题就是 占用介质 。

1、采用静态划分信道的办法。时分复用,频分复用,波分复用,码分复用。

2、动态信道划分:(1)随机访问 (2)轮转

这样子,多路访问的  干扰和冲突  就解决了,也就是解决了 占用介质问题。

接下来,该考虑双方是否会同时发送信息,导致碰撞。这就回到了 一对一 两端信号 同时发送 产生碰撞 的问题。

【最典型的例子: 无线网中,采用的TDMA 时分复用技术,时分双工(即半双工),发送和接收不能同时进行,但是对我们上网是不受影响的,发送和接收数据所占用的时隙都很短,我们用起来感觉上是收发同时进行的。当有多个无线设备,接入时,采用CSMA/CA  决定 介质 占用权。 】

三、通信方式


在计算机入门必备常识中,已经提到过:

计算机网络中传输的信息都是数字数据,计算机之间的通信就是数据通信方式,数据通信是计算机和通信线路结合的通信方式。在数据通信中,按每次传送的数据位数,通信方式可分为:并行通信和串行通信。

  • 并行通信是一次同时传送8位二进制数据,从发送端到接收端需要8根传输线。并行方式主要用于近距离通信,如在计算机内部的数据通信通常以并行方式进行。这种方式的优点是传输速度快,处理简单。
  • 串行通信一次只传送一位二进制的数据,从发送端到接收端只需要一根传输线。串行方式虽然传输率低,但适合于远距离传输,在网络中(如公用电话系统)普遍采用串行通信方式

对于前面提到的 多路访问

面向点对点的:PPP协议(一对一独占介质,不存在干扰和冲突;全双工,不存在两边同时发信息而导致碰撞)
至于PPPOE(在Ethernet帧内部封装PPP),PPPOA(在ATM网络中封装PPP)。目前暂时不清楚,PPPOE,PPPOA,拨号成功后,是否会一直保留会话层。按照推理来说,拨号成功后,PPP隧道会一直存在,直到电脑关机。以后找一个办法,测试看看。

面向多路访问的:
—–可能会出现两个问题—–
干扰(interference):两个或者两个以上结点同时传输。
冲突(collision):结点同时接收到两个或者多个信号→接收失败!

其实多路访问的核心问题就是,共享传输介质的问题。不共享传输介质就不会出现干扰和冲突。(解决的问题是如何共享传输介质,并且不会出现干扰和冲突)

一根光纤(一根光纤里面就一条通路),可以采用WDM(波分复用技术),双向同时传递光信号,光信号终端会解码成数字信号。这样就能双向传输信号,实现全双工,不会发生干扰和冲突。

一根电话线(里面有两根导线,如果传递数字信号只能半双工,如果传递模拟信号,可以借用2/4线转换器实现全双工。)

一根网线:

同轴电缆情况,里面有电芯和外面的网状金属层,可以实现一个回路。在传递数字信号时,半双工。传递模拟信号的话,可以和电话线那样。

双绞线情况,有许多种不同的标准适用于这种基于的线的物理媒介。最广泛使用的包括10BASE-T100BASE-TX1000BASE-T (吉比特以太网), 速率分别为10 Mbit/s, 100 Mbit/s, and 1000 Mbit/s (1 Gbit/s)。这三种标准都使用相同的连接头。也有适用于光纤的以太网。以前家里常见的是100BASE-TX(熟称cat5;五类线),支持100M/s,使用4根线(8根线用了4根线,其他4根线没有用),等于两对线,一对线用于输出数字信号,一对线用于接收数字信号,实现全双工。目前常见的是cat5e(超5类线,可以传1000M/s

以太网在使用双绞线作为传输介质时只需要2对(4芯)线就可以完成信号的发送和接收。在使用双绞线作为传输介质的快速以太网中存在着三个标准:100Base-TX、100Base-T2和100Base-T4。其中:100Base-T4标准要求使用全部的4对线进行信号传输,另外两个标准只要求2对线。而在快速以太网中最普及的是100Base-TX标准,所以你在购买100M网络中使用的双绞线时,不要为图一点小便宜去使用只有2个线对的双绞线。在美国线缆标准(AWG)中对3类、4类、五类和超五类双绞线都定义为4对,在千兆位以太网中更是要求使用全部的4对线进行通信。所以,标准五类线缆中应该有4对线。

星型网络拓扑下,每台主机连接hub,逻辑上还是连的总线型。

 

现在考虑环形网络和总线型网络:

令牌环网和总线型网络,其实连接主机的分线,可以看做是从hub上分离出来的。

令牌环网,通过令牌,来避免数据包的干扰和冲突。

总线型,以前用同轴电缆作为主线,分线处采用BNC-T型连接器连接主机。(和hub的功能差不多,主线用的是同轴电缆,分线其实没有用电缆而是直接将T型口插入电脑的接口中)参考:https://books.google.com/books?id=9-kAI9-VwDsC&pg=PA129&lpg=PA129&dq=BNC+%E4%B8%8A%E7%BD%91&source=bl&ots=BeWOmrptGp&sig=1X832lp3gHyC83EwOoGKyi7iUbQ&hl=zh-CN&sa=X&ved=2ahUKEwjSnYeApdvcAhXTA4gKHX9nAFAQ6AEwC3oECAQQAQ#v=onepage&q=BNC%20%E4%B8%8A%E7%BD%91&f=false

这种半双工总线型网络,采用CSMA/CD 来避免发生数据包干扰和冲突。

现在估计都用双绞线了吧,分线可能都是 交换机了,所以和星型差不多了,而且还是全双工,所以不需要CSMA/CD了。


好了,整理一下,多路访问共享介质的方法。

1.1多路访问控制协议(multiple access control protocol)

采用分布式算法决定结点如何共享信道,即决策结点何时可以传输数据
必须基于信道本身,通信信道共享协调信息!
无带外信道用于协调

1.2 理想MAC协议

给定: 速率为R bps的广播信道

期望:

  1. 当只有一个结点希望传输数据时,它可以以速率 R发送.
  2. 当有M个结点期望发送数据时,每个节点平均发送数据的平均速率是R/M
  3. 完全分散控制:
    • 无需特定结点协调
    • 无需时钟、时隙同步
  4. 简单

1.3 MAC协议分类

三大类:

  • 信道划分(channel partitioning)MAC协议
    • 多路复用技术
    • TDMA、 FDMA、 CDMA、 WDMA等
  • 随机访问(random access)MAC协议
    • 信道不划分,允许冲突
    • 采用冲突“恢复”机制
  • 轮转(“taking turns” )MAC协议
    • 结点轮流使用信道

多路访问更多详细内容,可以参看本站的相关文章。

四、路由协议


因为内网节点多了,各种网络拓扑结构可能组合在一起了,时间久,内网的路由器就变多了。这个时候,需要在内网中选举一台路由器最为内网核心路由器,还有一台作为备份。这样做可以提高整个内网数据包路由速度,缩短内网路由路径。

这个协议就叫 OSPF  属于   GP(内部网关协议)。

IGP(内部网关协议)是在一个自治网络网关主机路由器)间交换路由信息的协议路由信息能用于网间协议IP)或者其它网络协议来说明路由传送是如何进行的。IGP协议包括RIP、OSPF、IS-IS、IGRP、EIGRP。

借此,介绍一下路由协议。

路由协议通过在路由器之间共享路由信息来支持可路由协议。路由信息在相邻路由器之间传递,确保所有路由器知道到其它路由器的路径。总之,路由协议创建了路由表,描述了网络拓扑结构;路由协议与路由器协同工作,执行路由选择和数据包转发功能。

路由选择协议主要是运行在路由器上的协议,主要用来进行路径选择,路由协议工作在网络层。
路由协议分类:

1、IGP(内部网关协议

在一个AS(Autonomous System,自治系统,指一个互连网络,就是把整个Internet划分为许多较小的网络单位,这些小的网络有权自主地决定在本系统中应采用何种路由协议)内的路由协议称为内部网关协议(interior gateway protocol)

正在使用的内部网关路由协议有以下几种:RIP-1,RIP-2,IGRP,EIGRP,IS-IS和OSPF。其中前3种路由协议采用的是距离向量算法,IS-IS和OSPF采用的是链路状态算法,EIGRP是结合了链路状态和距离矢量路由选择协议的Cisco私有路由协议。对于小型网络,采用基于距离向量算法的路由协议易于配置和管理,且应用较为广泛。

但在面对大型网络时,不但其固有的环路问题变得更难解决,所占用的带宽也迅速增长,以至于网络无法承受。因此对于大型网络,采用链路状态算法的IS-IS和OSPF较为有效,并且得到了广泛的应用。IS-IS与OSPF在质量和性能上的差别并不大,但OSPF更适用于IP,较IS-IS更具有活力。IETF始终在致力于OSPF的改进工作,其修改节奏要比IS-IS快得多。这使得OSPF正在成为应用广泛的一种路由协议。不论是传统的路由器设计,还是即将成为标准的MPLS(多协议标记交换),均将OSPF视为必不可少的路由协议。

2、外部网关协议(Exterior Gateway Protocol,EGP)

AS之间的路由协议称为外部网关协议(exterior gateway protocol)。这里网关是路由器的旧称。

外部网关协议最初采用的是EGP。EGP是为一个简单的树形拓扑结构设计的,随着越来越多的用户和网络加入Internet,给EGP带来了很多的局限性。为了摆脱EGP的局限性,IETF边界网关协议工作组制定了标准的边界网关协议–BGP。
备注:BGP从功能划分上来说,属于外部网关协议。EGP应该已经淘汰了。

五、OSPF简单介绍


开放式最短路径优先英语:Open Shortest Path First,缩写为 OSPF)是内部网关协议的一种。

所有的“多路访问”网络类型(具体就是 broadcast 和 NBMA )的网络上,只要有2个或以上的 OSPF 路由器,就需要选举 DR 和 BDR
OSPF 里的broadcast和nbma这两种网络类型看上去写法差异很大,实际就可以这样记忆, broadcast 就是 BMA (广播多路访问),NBMA(非广播多路访问)。B和NB,决定是否动态发现邻居还是手工指定,MA决定了这两种方式都要选举 DR。

OSPF相关概念介绍:

路由器ID(RID):是用来标识此路由器的IP地址。选举方法,1、以环回接口中最高IP地址来当RID;2、如果没有配置环回地址,以所有激活的物理接口中最高的IP地址为RID。

广播多路访问:广播网络允许多个设备连接(或访问)到同一个网络上(即这个网络允许广播的性质(以太网),说明这个网络可以支持多个设备同时接入),并通过将单一数据包投递到网络中所有的结点来提供广播能力,如以太网。在OSPF中,每个广播多路访问网络都必须选出一个DR和一个BDR。

非广播多路访问(NBMA):非广播多路网络是那些诸如帧中继、X。25和异步传输模式(ATM)等类型的网络。这此网络允许多路访问,但不具备以太网那样的广播能力。因此,要实现恰当的功能,NBMA网络需要特殊的OSPF配置,并且邻居关系必须详细定义。

指定路由器(DR):指当路由器被连接到同一多路访问网络时,都需要一个指定路由器DR。典型的例子就是以太局域网。为了使建立的邻接关系的最小化,就需要在此局域网的多个路由器中挑选出一个DR,它负责将路由选择信息颁发到广播网络或链路中其他路由器上,或收集其他路由器的路由选择信息。具有相同优先级的路由吕中选择DR时,拥有最高路由器ID的路由器将成为DR。

备用指定路由器(BDR):指多路访问链路上随时准备着的待命的DR。它从OSPF邻接路由器上接收所有的路由更新,但并不泛发链路信息状态(LSA)。

配置OSPF中DR、BDR选举方法:

不选举情况:网络拓扑图中没有广播多路访问网络,这个拓扑图属于点到点链路就不需要选举DR、BDR。点到点链路指网络不支持广播传输数据只能点对点传输数据(如,路由器通过Serial口相连,Serial口没有MAC地址的,不属于以太网,不能广播)。如下图,

Router4#sh ip ospf neighbor

Neighbor ID     Pri   State           Dead Time   Address         Interface
192.168.2.1       0   FULL/  –        00:00:33    1.1.3.1         Serial0/3/0

选举情况:在OSPF中,每个广播多路访问网络都必须选出一个DR和一个BDR。下图中路由器通过以太网接口interface GigabitEthernet0/1连接。属于广播多路访问。

Router4#sh ip ospf neighbor

Neighbor ID     Pri   State           Dead Time   Address         Interface
192.168.2.1       1   FULL/DR         00:00:32    1.1.6.1         GigabitEthernet0/1

又如

 


参考:

百度百科,https://blog.csdn.net/zainwei1766/article/details/41146817

 

网络原理-集线器,网桥,交换机,路由器,网关详解

    目前,科技的发展,很多网络设备的界限也越来越模糊。比如集线器和交换机之间的界限已变得模糊,交换机也出现了3层交换机(有网络层模块),4层交换机(有传输层模块)。本文主要整理一些典型的网络设备及其功能比较。

核心总结:

1、hub(集线器)就是物理层的,会面向全端口转发物理层的包。当然因为全部转发会造成网络堵塞,所以hub还顺带集成了CSMA/CD,碰撞检测模块。
2、网桥,主要是为了hub的不足,工作在数据链路层,检测数据包mac地址,对数据包进行特定端口转发,避免造成网络堵塞。
3、交换机。一般指常见的二层交换机,工作在数据链路层。功能和网桥差不多。区别就是,网桥只有两个端口,只能连接两个子网。而交换机端口多,可以连接的子网多。
4、路由器,工作在网络层。对ip数据包进行路由转发。
5、网关,工作在应用层。仅用于两个高层协议不同的网络互连

1、HUB(集线器)


HUB是一个多端口的转发器,在以HUB为中心设备时,即使网络中某条线路产生了故障,并不影响其它线路的工作。所以HUB在局域网中得到了广泛的应用。

HUB按照对输入信号的处理方式上,可以分为无源HUB、有源HUB、智能HUB。

大多数的时候它用在星型与树型网络拓扑结构中,以RJ45接口与各主机相连(也有BNC接口)。在这方面,集线器所起的作用相当于多端口的中继器。其实,集线器实际上就是中继器的一种,其区别仅在于集线器能够提供更多的端口服务,所以集线器又叫多口中继器
集线器工作于OSI/RM参考模型的物理层和数据链路层的MAC(介质访问控制)子层。物理层定义了电气信号,符号,线的状态和时钟要求,数据编码和数据传输用的连接器。因为集线器只对信号进行整形、放大后再重发,不进行编码,所以是物理层的设备。10M集线器在物理层有4个标准接口可用,那就是:10BASE-5、10BASE-2、10BASE-T、10BASE-F。10M集线器的10BASE-5(AUI)端口用来连接层1和层2。

集线器(HUB),它是工作在物理层的设备, 由于它只是工作在物理层的设备,所以它并不关心也不可能关心OSI上面几层所涉及的,它的工作机制流程是:从一个端口接收到数据包时,会在其他端口把这个 包转发一次,因为它不知道也不可能知道这个包是发给谁的(物理层设备只关心电压这些物理概念),它也只能对所有人广播(这里和下文提到的 广播该词的意思和ARP请求时的广播有些不同,这里的广播意思是:使用物理层转发设备,如HUB,导致的广播,可以说这个广播是被逼的,因为设备的问题! 是设备转发包引起的广播!而ARP请求的广播是自己要求的,主动的,因为ARP请求包的目标地址IP是255.255.255.255,但ARP请求的广 播涉及IP层的知识,不在这篇文章讨论的范围,所以这里提到的广播,除非特别说明,否则都是第一个意思,也就说是”因设备转发数据包引起的广播” ),让他们自己处理了。

  这样一来会有不少问题,你发的数据其他人都收到了,私隐这总东西是不存在的!别入可以随便监听你信息!所以会话劫持在那个年代相当容易(记得俺第一次接触会话劫持这个概念的时候还是高2,那是2001~2002,呵,那时候集线器还是比较普遍的)。

  另外一个比较严重的问题是,如果一个大型的局域网,比如有500台机器,全部用HUB连接的,后果会怎么样呢??相当慢,网络的效率极差!为什么?如果500台机器都发一个包,那就是说每台机器,都需要接收差不多499个无用包…并且如果是需要回应的话……无用的数据包会充斥着整个的局域网,这就是传说中的广播风暴!

        为了侦测广播风暴,集线器采用了CSMA/CD(载波帧听多路访问/冲突检测)协议,CSMA/CD为MAC层协议,所以集线器也含有数据链路层的内容。但HUB本身不能识别MAC 地址和IP地址。

  为了减少广播风暴,网桥产生了(注意这里用的时候“减少”,不是“杜绝”,仅仅是减少!如果仅仅用网桥说能杜绝广播风暴,个人觉得还是不太准确,后来交换机的出现才可以说是完全杜绝了广播风暴的发生)!

  在介绍网桥之前,还想简单介绍另一个物理层的设备:“中继器”,这种设备的作用是把物理层传输的信号放大,由于长距离的传输,信号会有一定的损耗的,这种设备主要解决的就是这个问题。它和HUB的区别是:HUB主要是为了在物理层上转发数据的,所以它不关心电压值的大小,也不会放大物理信号;而中继器它的作用就是为了放大信号用的,SO…..

核心总结:有源/无源HUB工作在物理层,智能HUB覆盖物理层、链路层、网络层。依据IEEE 802.2协议,集线器功能是随机选出某一端口的设备,并让它独占全部带宽,与集线器的上联设备(交换机、路由器或服务器等)进行通信。

简单来说:HUB收到网络信号时,因为工作在物理层(智能HUB可以路由这里不考虑,有源HUB会对收到的网络信号进行放大或再生,无源HUB不会),所以HUB会无脑转发该网络信号到其他所有处于工作状态的端口上。

2、网桥


网桥也叫桥接器,是连接两个局域网的一种存储/转发设备,它能将一个大的LAN分割为多个网段,或将两个以上的LAN互联为一个逻辑LAN,使LAN上的所有用户都可访问服务器。
网桥可以是专门硬件设备,也可以由计算机加装的网桥软件来实现,这时计算机上会安装多个网络适配器(网卡)。
网桥的功能在延长网络跨度上类似于中继器,然而它能提供智能化连接服务,即根据帧的终点地址处于哪一网段来进行转发和滤除。网桥对站点所处网段的了解是靠“自学习”实现的,有透明网桥、转换网桥、封装网桥、源路由选择网桥。网桥示意如图1所示。

网桥工作在数据链路层,将两个LAN连起来,根据MAC地址来转发帧,可以看作一个“低层的路由器”(路由器工作在网络层,根据网络地址如IP地址进行转发)。

在网络互联中起到数据接收、地址过滤与数据转发的作用,用来实现多个网络系统之间的数据交换。
网桥的基本特征
1.网桥在数据链路层上实现局域网互连;
2.网桥能够互连两个采用不同数据链路层协议、不同传输介质与不同传输速率的网络
3.网桥以接收、存储、地址过滤与转发的方式实现互连的网络之间的通信;
4.网桥需要互连的网络在数据链路层以上采用相同的协议
5.网桥可以分隔两个网络之间的通信量,有利于改善互连网络的性能与安全性。

网桥连接不同网段的探讨:
首先网桥和普通的二层交换机都不具备网络层功能,也就是不能给网段上的pc机分配IP地址,然后一个网段只能有一个出口负责管理和外界连接,因为网段某节点pc发送的ARP请求,只能得到一个路由器的响应并分配ip。按照这样的推理。网桥连接的两个网段,只有一个地方的网段,连接有路由器并负责和外网进行数据交流。在路由器看来,内网是透明的,感觉就只有一个局域网。(上文的网段,应该就是网络分段的意思)

3、交换机


二层交换机工作于OSI参考模型的第二层,即数据链路层

交换机内部的CPU会在每个端口成功连接时,通过将MAC地址和端口对应,形成一张MAC表。在今后的通讯中,发往该MAC地址的数据包将仅送往其对应的端口,而不是所有的端口。因此交换机可用于划分数据链路层广播,即冲突域;但它不能划分网络层广播,即广播域

具体可分为:

  • 直通转发(cut-through):数据包的前6个字节(MAC地址)一到达交换机,即确定目的地址,向相应端口转发该数据包。这时可能该数据包在接收端口还没有传输完。适用于网络质量好,误码率低的情形。
  • 存储转发(store-and-forward):交换机把收到的完整数据包暂存,然后检查其校验和或其他;通过检验的数据包再读取其目的地址,向相应端口转发。
  • 无帧(fragment-free):基本类似于直通转发。但对数据包的前64个字节做存储-校验-转发。因为大部分误码、碰撞(collision)发生在数据包头64字节。

通常,交换机采取直通转发,如果误码率上升到某个阈值,再改用存储转发。

当一台交换机安装配置好之后,其工作过程如下:

  • 收到某网段(设为A)MAC地址为X的计算机发给MAC地址为Y的计算机的数据包。交换机从而记下了MAC地址X在网段A。这称为学习(learning)。
  • 交换机还不知道MAC地址Y在哪个网段上,于是向除了A以外的所有网段转发该数据包。这称为泛洪(flooding)。
  • MAC地址Y的计算机收到该数据包,向MAC地址X发出确认包。交换机收到该包后,从而记录下MAC地址Y所在的网段。
  • 交换机向MAC地址X转发确认包。这称为转发(forwarding)。
  • 交换机收到一个数据包,查表后发现该数据包的来源地址与目的地址属于同一网段。交换机将不处理该数据包。这称为过滤(filtering)。
  • 交换机内部的MAC地址-网段查询表的每条记录采用时间戳记录最后一次访问的时间。早于某个阈值(用户可配置)的记录被清除。这称为老化(aging)。

对于全交换(full-switch)局域网,交换机每个端口只连接一台设备,因此不会发生碰撞。交换机也不需要做过滤。

分类:

传统交换机(二层交换机)

交换机被广泛应用于二层网络交换。中档的网管型交换机还具有VLAN划分、端口自动协商、MAC访问控制列表等功能,并提供命令行界面图形界面控制台,供网络管理员调整参数

网桥和二层交换机的区别

交换机与网桥的区别(这里说的交换机就是我们常见的最普通的二层交换机)
局域网交换机的基本功能与网桥一样,具有帧转发、帧过滤和生成树算法功能。但是,交换机与网桥相比还是存在以下不同:
(1)交换机工作时,实际上允许许多组端口间的通道同时工作。所以,交换机的功能体现出不仅仅是一个网桥的功能,而是多个网桥功能的集合。即网桥一般分有两个端口,而交换机具有高密度的端口。
(2)分段能力的区别
由于交换机能够支持多个端口,因此可以把网络系统划分成为更多的物理网段,这样使得整个网络系统具有更高的带宽。而网桥仅仅支持两个端口,所以,网桥划分的物理网段是相当有限的。
(3)传输速率的区别
交换机与网桥数据信息的传输速率相比,交换机要快于网桥。
(4)数据帧转发方式的区别
网桥在发送数据帧前,通常要接收到完整的数据帧并执行帧检测序列FCS后,才开始转发该数据帧。交换机具有存储转发和直接转发两种帧转发方式。直接转发方式在发送数据以前,不需要在接收完整个数据帧和经过32bit循环冗余校验码CRC的计算检查后的等待时间。

三层交换机

三层交换机则可以处理第三层网络层协议,用于连接不同网段,通过对缺省网关的查询学习来创建两个网段之间的直接连接。

三层交换机具有一定的“路由”功能,但只能用于同一类型的局域网子网之间的互连。这样,三层交换机可以像二层交换机那样通过MAC地址标识数据包,也可以像传统路由器那样在两个局域网子网之间进行功能较弱的路由转发,它的路由转发不是通过软件来维护的路由表,而是通过专用的ASIC芯片处理这些转发;

四层交换机

四层交换机可以处理第四层传输层协议,可以将会话与一个具体的IP地址绑定,以实现虚拟IP [1] ;

七层交换器

更加智能的交换器,可以充分利用频宽资源来过滤,识别和处理应用层数据转换的交换设备。

二层交换机与集线器的区别

交换机与集线器不同之处是,集线器会将网络内某一用户发送的数据包传至所有已连接到集线器的电脑。而交换机则只会将数据包发送到指定目的地的电脑(透过MAC表),相对上能减少数据碰撞及数据被窃听的机会。交换机更能将同时传到的数据包分别处理,而集线器则不能。

最大的不同之处在于:集线器的每一个接口都处于相同的冲突域,而交换机的每个接口处于一个冲突域。在性能方面尤为突出:例如在100Mb/s的以太网络中有100个用户,使用集线器,每个用户只有1Mb/s(100Mb/s/100),因为Hub是共享式的网络;而使用交换机,每个接口有100Mb/s,如果有100个接口,总带宽为100*100Mb/s(最终的带宽大小取决于输入接口的带宽;即如果输入端口只有10000M,则达到上限前,每个用户都能使用100M带宽,但一旦所有用户的总需求超过10000M,用户将在相同优先级的原则下进行带宽分配),因为交换机是独立式的网络。

二层交换机与路由器的区别

从时间线上看,路由器诞生于交换机之后,为了弥补交换机不能定向转发数据包的缺陷。

“交换”一词最早出现于电话系统,指两个不同电话交换机之间语音信号的交换。故从本意上讲,交换是完成信号由交换设备入口至出口的转发的技术的统称。路由器名称中的“路由”(router)来自于路由器的转发策略–路由选择(routing)。交换机和路由器的区别有但不局限于以下几点(这里的交换机和路由器都是常规型号的):

1.两者工作在OSI模型的不同层次上
交换机工作在OSI模型第二层数据链路层,路由器工作在OSI模型第三层网络层。网络层提供更多的协议信息,方便路由器做出更加智能的转发选择。
2.两者转发时所依据的对象不同
交换机是基于MAC地址识别,实现封装数据包转发。路由器基于网络ID号(IP地址)。MAC一般被固化在网卡中,不可更改。而IP地址可以被系统或网络管理员进行设置和分配。
3.两者转发广播数据包的域不同
被交换机连接起来的网络属于同一广播域,广播数据包会在网络内所有网段上进行传播。连接在路由器上的网段则被分区为不同广播域,广播数据包只在各自广播域内传播而无法穿透路由器。路由器的这种子网隔离功能可以在一定程度上防止广播风暴。

三层交换机与路由器的区别

虽然三层交换机与路由器都具有路由转发功能,二者都运行在OSI模型的第三层,即网络层,但是二者并不等同,适用范围也不同,不会相互替代。

1.主打功能不同
三层交换机的主打的功能点是二层交换技术,并附加一点路由转发功能。路由器的主打功能是路由转发,并可能附加一些备用功能,比如硬件防火墙、二层交换技术等其它功能。
2.适用环境不同
三层交换机的路由转发功能一般都比较粗略,由于它一般用在简单的接入网的连接。它在以太网中的主要作用还是提供快速的二层数据交换,功能特点还是针对频繁的以太网数据交换。
路由器的设计初衷就是为了跨网段连接。尽管它也能在局域网内用于连接网络,但是它的路由转发功能主要用于不同类型网络之间,例如连接局域网广域网,连接以太网令牌环网。它的主打功能就是路由转发,专业处理复杂路由路径和复杂的网络连接。因此,路由器的路由转发功能,比三层交换机强大得多。路由器的优势是能够选择最佳路由、负荷分担、链路备份以及与其他网络进行路由信息的交换等功能。为了能够适应各种类型的网络,路由器的接口类型非常丰富,例如以太网接口、令牌环网接口、WLAN网卡、光纤接口等等。三层交换机一般只有以太网接口。
3.性能不同
三层交换机的路由转发是由硬件实现的,使用专用ASIC芯片来处理路由转发。路由器的路由转发是由软件实现的,在CPU中运行一段程序来处理路由转发。
所以三层交换机的转发效率会高过路由器,但是路由转发的功能都比较弱,由于路由转发功能是固化在硬件中的,不具有软件可扩展性,也就不会具有路由器的附加功能(例如防火墙功能)。

四、路由器


路由器英语:Router,又称路径器)是一种电讯网络设备,提供路由转送两种重要机制,可以决定数据包从来源端到目的端所经过的路由路径(host到host之间的传输路径),这个过程称为路由;将路由器输入端的数据包移送至适当的路由器输出端(在路由器内部进行),这称为转送。路由工作在OSI模型的第三层——即网络层,例如网际协议(IP)。
用于连接多个逻辑上分开的网络,所谓逻辑网络是代表一个单独的网络或者一个子网。当数据从一个子网传输到另一个子网时,可通过路由器的路由功能来完成。因此,路由器具有判断网络地址和选择IP路径的功能,它能在多网络互联环境中,建立灵活的连接,可用完全不同的数据分组和介质访问方法连接各种子网,路由器只接受源站或其他路由器的信息,属网络层的一种互联设备。

路由器的结构

路由器从功能上可以划分为:路由选择和分组转发。
分组转发结构由三个部分组成:交换结构、一组输入端口和一组输出端口。

路由器分组转发流程

从数据报的首部提取目的主机的 IP 地址 D,得到目的网络地址 N。
若 N 就是与此路由器直接相连的某个网络地址,则进行直接交付;
若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给表中所指明的下一跳路由器;
若路由表中有到达网络 N 的路由,则把数据报传送给路由表中所指明的下一跳路由器;
若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;
否则报告转发分组出错。

路由选择协议

路由选择协议都是自适应的,能随着网络通信量和拓扑结构的变化而自适应地进行调整。
互联网可以划分为许多较小的自治系统 AS,一个 AS 可以使用一种和别的 AS 不同的路由选择协议。
可以把路由选择协议划分为两大类:

  • 自治系统内部的路由选择:RIP 和 OSPF
  • 自治系统间的路由选择:BGP

1. 内部网关协议 RIP

RIP 是一种基于距离向量的路由选择协议。距离是指跳数,直接相连的路由器跳数为 1。跳数最多为 15,超过 15 表示不可达。

RIP 按固定的时间间隔仅和相邻路由器交换自己的路由表,经过若干次交换之后,所有路由器最终会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器地址。

距离向量算法:

  • 对地址为 X 的相邻路由器发来的 RIP 报文,先修改报文中的所有项目,把下一跳字段中的地址改为 X,并把所有的距离字段加 1;
  • 对修改后的 RIP 报文中的每一个项目,进行以下步骤:
  • 若原来的路由表中没有目的网络 N,则把该项目添加到路由表中;
  • 否则:若下一跳路由器地址是 X,则把收到的项目替换原来路由表中的项目;否则:若收到的项目中的距离 d 小于路由表中的距离,则进行更新(例如原始路由表项为 Net2, 5, P,新表项为 Net2, 4, X,则更新);否则什么也不做。
  • 若 3 分钟还没有收到相邻路由器的更新路由表,则把该相邻路由器标为不可达,即把距离置为 16。

RIP 协议实现简单,开销小。但是 RIP 能使用的最大距离为 15,限制了网络的规模。并且当网络出现故障时,要经过比较长的时间才能将此消息传送到所有路由器。

2. 内部网关协议 OSPF

开放最短路径优先 OSPF,是为了克服 RIP 的缺点而开发出来的。

开放表示 OSPF 不受某一家厂商控制,而是公开发表的;最短路径优先表示使用了 Dijkstra 提出的最短路径算法 SPF。

OSPF 具有以下特点:

  • 向本自治系统中的所有路由器发送信息,这种方法是洪泛法。
  • 发送的信息就是与相邻路由器的链路状态,链路状态包括与哪些路由器相连以及链路的度量,度量用费用、距离、时延、带宽等来表示。
  • 只有当链路状态发生变化时,路由器才会发送信息。

所有路由器都具有全网的拓扑结构图,并且是一致的。相比于 RIP,OSPF 的更新过程收敛的很快。

3. 外部网关协议 BGP

BGP(Border Gateway Protocol,边界网关协议)

AS 之间的路由选择很困难,主要是由于:

  • 互联网规模很大;
  • 各个 AS 内部使用不同的路由选择协议,无法准确定义路径的度量;
  • AS 之间的路由选择必须考虑有关的策略,比如有些 AS 不愿意让其它 AS 经过。

BGP 只能寻找一条比较好的路由,而不是最佳路由。

每个 AS 都必须配置 BGP 发言人,通过在两个相邻 BGP 发言人之间建立 TCP 连接来交换路由信息。

五、网关


网关(Gateway)又称网间连接器、协议转换器。默认网关在网络层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关的结构也和路由器类似,不同的是互连层。网关既可以用于广域网互连,也可以用于局域网互连 
【说明:由于历史的原因,许多有关TCP/IP的文献曾经把网络层使用的路由器称为网关,在今天很多局域网采用都是路由来接入网络,因此通常指的网关就是路由器的IP!】 
OSI中,网关有两种:一种是面向连接的网关,一种是无连接的网关。当两个子网之间有一定距离时,往往将一个网关分成两半,中间用一条链路连接起来,我们称之为半网关。
按照不同的分类标准,网关也有很多种。TCP/IP协议里的网关是最常用的,在这里我们所讲的“网关”均指TCP/IP协议下的网关。
那么网关到底是什么呢?网关实质上是一个网络通向其他网络的IP地址。比如有网络A和网络B,网络A的IP地址范围为“192.168.1.1~192. 168.1.254”,子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1~192.168.2.254”,子网掩码为255.255.255.0。在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机(如附图所示)。网络A向网络B转发数据包的过程。
所以说,只有设置好网关的IP地址,TCP/IP协议才能实现不同网络之间的相互通信。那么这个IP地址是哪台机器的IP地址呢?网关的IP地址是具有路由功能的设备的IP地址,具有路由功能的设备有路由器、启用了路由协议的服务器(实质上相当于一台路由器)、代理服务器(也相当于一台路由器)。
在和 Novell NetWare 网络交互操作的上下文中,网关在 Windows 网络中使用的服务器信息块 (SMB) 协议以及NetWare网络使用的 NetWare 核心协议 (NCP) 之间起着桥梁的作用。网关也被称为 IP路由器。

整理自:百度百科、维基百科、https://www.cnblogs.com/hyddd/archive/2009/01/18/NetWorking.html

网络原理-计算机网络详解-入门必备常识

基本常识

局域网一定要路由器吗?

局域网需要连接到 因特网 那是肯定是需要路由器的 内网 到 外网 中间肯定是要有 NAT 网关才可以上网的。 呵呵 而且还要到电信部门申请一条宽带线。
如果不连因特网是不用路由器的,用交换机或者集线器都行
如果是两台电脑直接连的话,也不需要 hub和交换机。具体分析看这里

 

宽带也是分为:上行带宽 和下行带宽的。当你模拟电话拨号上网时,
V90 协议,电话拨号上网(下行56kbps,上行33.6kbps)
V92协议 电话拨号上网(下行 56kbps 上行48kbps)

以太网就是无线网吗

不是。
以太网是指802.3标准的有线网络标准,通常的介质是铜线,如CAT5/CAT6等,但也可以用光纤。
以太网速率有10Mbps/100Mbps/1Gbps/10Gbps/40Gbps等。
无线网通常指的是WiFi,是一种无线网络,遵循802.11系列标准,如802.11 a/b/g/n/ac等,速率有1Mbps/11Mbps/54Mbps/300Mbps/1Gbps等

家用的网线:传递的数字信号,原理是:详情链接

rj45网线中,单方向传输信号都是一对导线,里面用的是差分信号,传递给对方的是电压变化 信号。【双绞线 可以 屏蔽 外界的 电磁干扰,抗干扰强】

数字电路:从 单端信号 发展到 差分信号

单端信号
早期的数字总线大部分使用单端信号做信号传输,如TTL/CMOS信号都是单端信号。所谓单端信号,是指用一根信号线的高低电平的变化来进行0、1信息的传输,这个电平的高低变化是相对于其公共的参考地平面的。单端信号由于结构简单,可以用简单的晶体管电路实现,而且集成度高、功耗低,因此在数字电路中得到最广泛的应用。

大白话:单端信号 用一根线 接地,另一根 传递 电压 高低变化,当然也是 单方向 传输啦。

异步传输与同步传输分析  参考链接 

数据链路层为什么要分层?

     这个问题和前面讲到的有很大关系:(1)半双工模式下(说的是以太网)采用的是CSMA/CD的访问方式(2)全双工模式下则可直接收发,不管线路的忙闲状态。半双工和全双工是物理层的概念,而针对物理层的双工模式提供不同的访问方式则是数据链路层的概念。因此:数据链路层和物理层是相关的。为了针对物理层的不同工作模式进行访问,后来提出了逻辑链路控制子层(LLC)和媒体访问控制子层(MAC)。这样:不同的屋里层对应不同的MAC子层,LLC子层则完全独立。

 

1、网线说明

双绞线情况,有许多种不同的标准适用于这种基于的线的物理媒介。最广泛使用的包括10BASE-T100BASE-TX1000BASE-T (吉比特以太网), 速率分别为10 Mbit/s, 100 Mbit/s, and 1000 Mbit/s (1 Gbit/s)。这三种标准都使用相同的连接头。也有适用于光纤的以太网。以前家里常见的是100BASE-TX(熟称cat5;五类线),支持100M/s,使用4根线(8根线用了4根线,其他4根线没有用),等于两对线,一对线用于输出数字信号,一对线用于接收数字信号,实现全双工。目前常见的是cat5e(超5类线,可以传1000M/s

以太网在使用双绞线作为传输介质时只需要2对(4芯)线就可以完成信号的发送和接收。在使用双绞线作为传输介质的快速以太网中存在着三个标准:100Base-TX、100Base-T2和100Base-T4。其中:100Base-T4标准要求使用全部的4对线进行信号传输,另外两个标准只要求2对线。而在快速以太网中最普及的是100Base-TX标准,所以你在购买100M网络中使用的双绞线时,不要为图一点小便宜去使用只有2个线对的双绞线。在美国线缆标准(AWG)中对3类、4类、五类和超五类双绞线都定义为4对,在千兆位以太网中更是要求使用全部的4对线进行通信。所以,标准五类线缆中应该有4对线。

 

2、将网络接入速度为64Kbps(最大下载速度为8KB/S)及其以下的网络接入方式称为“窄带”,相对于宽带而言窄带的缺点是接入速度慢。(计算方式64/8[bit] =8KBytes/s) 
从2010年世界电信日(5.17)开始,不到4M一概称为窄带,只有4M或以上才能被称为宽带
纯粹的以64kbps这个数字来区分窄带和宽带是武断模糊的。这只是一个传输速率,而不能代表频谱宽度。要理解通信意义上的“宽带”而不是运营商提供的那种“ADSL宽带

3、网线中传输的是数字信号还是模拟信号?

网线的传输当然是数字信号了。当然前提是使用网线传输网络信号。(这里的网线指连接pc机的网线,因为网线连接猫时,会发生数模转换,如果 外面接入的是电话线,那会转换成模拟电信号。如果外面接入的是光纤,则会转换成数字光信号)

之所以这样说,是因为在某些场合网线是被当做8芯电线用来传输很多种不同信号,所以就不能确定网线里面一定传输的是数字信号。
比如模拟视频监控中,有使用网线做视频信号传输或者做音频线传输拾音器的音频信号,这时网线传输的就是模拟信号。又如网线也经常被用来传输485信号或者232信号,因为485只用都两芯,所以同时又传输有电话信号或者其他模拟信号,这时就是数字模拟信号同时传输了。
因此判断网线传输信号的类型要根据它的用途来确定。

4、调制解调器是一种计算机硬件,它能把计算机的数字信号翻译成可沿普通电话线传送的模拟信号,而这些模拟信号又可被线路另一端的另一个调制解调器接收,并译成计算机可懂的语言。这一简单过程完成了两台计算机间的通信。
调制解调器是Modulator(调制器)与Demodulator(解调器)的简称,中文称为调制解调器(港台称之为数据机),根据Modem的谐音,亲昵地称之为“猫”。它是在发送端通过调制将数字信号转换为模拟信号,而在接收端通过解调再将模拟信号转换为数字信号的一种装置。

所谓调制,就是把数字信号转换成电话线上传输的模拟信号;解调,即把模拟信号转换成数字信号。合称调制解调器。

调制解调器的英文是MODEM,它的作用是模拟信号和数字信号的“翻译员”。电子信号分两种,一种是”模拟信号“,一种是”数字信号“。我们使用的电话线路传输的是模拟信号,而PC机之间传输的是数字信号。所以当你想通过电话线把自己的电脑连入Internet时,就必须使用调制解调器来”翻译”两种不同的信号。连入Internet后,当PC机向Internet发送信息时,由于电话线传输的是模拟信号,所以必须要用调制解调器来把数字信号“翻译”成模拟信号,才能传送到Internet上,这个过程叫做”调制”。当PC机从Internet获取信息时,由于通过电话线从Internet传来的信息都是模拟信号,所以PC机想要看懂它们,还必须借助调制解调器这个“翻译”,这个过程叫作“解调”。总的来说就称为“调制解调”。

5、数字电话与模拟电话
数字电话就是语音信号处理采用数字电路方式而非模拟方式的电话,优点是语音清晰度以及抗干扰能力、保密性能等提高很多。家里用的普通有线电话机都是模拟机,这种座机目前还很少数字型的,因为电信公司的设备都还是模拟的,数字型一般用在无线子母机上,用于子机与母机之间的通讯,但母机与电信局的通讯还是模拟方式。

普通的固定电话机是模拟信号,市内通话不变成数字信号,如果用卡打长途电话或非直拨长途电话,则模拟信号在电话局内转换成数字信号,在通信线路上传播,到目的地电话局再还原成模拟信号。

6、串行通信与并行通信
串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行通信是指 使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。其只需要少数几条线就可以在系统间交换信息,特别适用于计算机与计算机、计算机与外设之间的远距离通信。

USB是英文 Universal Serial Bus 的缩写,翻译成中文的含义是“通用串行总线”。

上网属于串行通信。
串行信号指的是同一时刻点,两设备之间指存在一个数据脉冲进行收发。而每根电缆里面,同一时刻只有一个数据脉冲,可以传输较远距离。这样,并行线至少要求有一大排线,传输距离非常有限,电话线只有两根,所以是串行信号通信。(从pc的网卡出去到服务器的网卡前,至于计算机内部看了下百科–>数据总线是并行的,所以内部应该是并行传网络数据的,备注:需要去看看《微机原理》)

家用的网线是串行传输数字信号,里面用差分信号技术来传输电压变化信息。

在计算机和终端之间的数据传输通常是靠电缆或信道上的电流或电压变化实现的。如果一组数据的各数据位在多条线上同时被传输,这种传输方式称为并行通信。比如,老式打印机同电脑之间。

并行接口与CPU的连接
数据总线:是CPU与并行接口进行数据交换的通道。

⑵读出写入信号线:控制数据流向,确定操作是读还是写。
⑶复位线,准备好状态线:并行接口数据准备就绪。
中断请求线:并行接口向CPU进行中断请求。
⑸地址译码电路:进行选择不同的接口电路,选择接口电路内部不同的寄存器
并行接口
控制寄存器:接收CPU发来的控制命令。
⑵数据输入缓冲器、数据输出缓冲器:进行数据的输入、输出。
状态寄存器:提供接口电路工作状态供CPU查询。

7、ISDN与PSTN的区别是什么?

ISDN是综合业务数字网的简称,它由电话综合数字网(IDN)发展而来。ISDN是数字交换和数字传输的结合,它以迅速、准确、经济、有效的方式提供目前各种通信网络中现有的业务,而且将通信和数据处理结合起来,开创了很多前所未有的新业务。 ISDN是一个全数字的网络,也就是说,不论原始信号是话音、文字、数据还是图象只要可以转换成数字信号,都能在ISDN网络中进行传输。在传统的电话网络中,实现了网络内部的数字化,但在用户到电话局之间仍采用模拟传输,很容易由于沿途噪声的积累引起失真。而对于ISDN来说,实现了用户线的数字化,提供端到端的数字连接,传输质量大大提高。

公共交换电话网络(PSTN)是是一种全球语音通信电路交换网络,包括商业的和政府拥有的。它也指简单老式电话业务(POTS)。它是自Alexander Graham Bell发明电话以来所有的电路交换式电话网络的集合。如今,除了使用者和本地电话总机之间的最后连接部分,公共交换电话网络在技术上已经实现了完全的数字化。在和因特网的关系上,PSTN提供了因特网相当一部分的长距离基础设施。因特网服务供应商(ISPS)为了使用PSTN的长距离基础设施,以及在众多使用者之间通过信息交换来共享电路,需要付给设备拥有者费用。这样因特网的用户就只需要对因特网服务供应商付费。

大白话:
PSTN与ISDN的关系,一开始是只有PSTN,而且都是铜线连接的,打电话就是模拟电话到电话局的交换机,然后连线到目标电话。后来进行数字化改造了,PSTN中电话局与电话局之间的远程线路用数字化了。然后电话局到家的这段线路也数字话了,变成了ISDN。

ISDN与数字公用电话交换网(PSTN)有者非常紧密的联系,可认为是在PSTN上为支持数据业务扩展形成的。ISDN的最基本功能与PSTN一样,提供端到端的64kbps的数字连接以承载话音或其他业务。在此基础上,ISDN还提供更高带宽的N*64kbps电路交换功能。ISDN的综合交换节点还应具有分组交换功能,以支持数据分组的交换。在信令结构上也与PSTN相同,采用7号信令系统,其用户部分为ISUP协议。

 

8、数据交换的三种类型分为:电路交换,报文交换,分组交换。

分组交换:在网络层。包括 数据报  和 虚电路。

电路交换:在物理层。包括时分交换和空分交换【就是空间上选条路】。

报文交换:传输层 ,用于 进程通信。可以理解为数据的存储转发。

分组交换技术(Packet switching technology)也称包交换技术,是将用户传送的数据划分成一定的长度,每个部分叫做一个分组,通过传输分组的方式传输信息的一种技术。它是通过计算机和终端实现计算机与计算机之间的通信,在传输线路质量不高、网络技术手段还较单一的情况下,应运而生的一种交换技术。每个分组的前面有一个分组头,用以指明该分组发往何地址,然后由交换机根据每个分组的地址标志,将他们转发至目的地,这一过程称为分组交换

电路交换:就是电话线, A打给B ,AB之间的电话线就接通了,那么不管他两说没说话,说多久,直到挂断之前,该线都是在占用之中。

报文交换:每一个结点接收整个报文,检查目标结点地址,然后根据网络中的交通情况在适当的时候转发到下一个结点。经过多次的存储——转发,最后到达目标,因而这样的网络叫存储——转发网络。其中的交换结点要有足够大的存储空间(一般是磁盘),用以缓冲收到的长报文。

分组交换:高效、灵活、迅速、可靠。

 

9、国家骨干网

参考:https://www.zhihu.com/question/26703129/answer/33931108

1)中国科技网(CSTNET)、

2)中国公用计算机互联网(CHINANET/163)

3)中国教育和科研计算机网(CERNET)、

4)中国金桥信息网(CHINAGBN)。

5)2004年ChinaNet2(CN2)启动,中国电信第二张全国骨干网

6)中国联通China169

7)中国移动CMNET

电信163和联通169是中国最重要的两个骨干网络,两者承担着中国互联网80%以上的流量

其中,CSTNET和CERNET主要为科研、教育提供非营利性Internet服务,而CHINANET和CHINAGBN则对公众提供经营性Internet服务。


十、面向连接和无连接的思考

能否说:“电路交换和面向连接是等同的,而分组交换和无连接是等同的”?不行。这在概念上是很不一样的。这点可举例说明如下。

电路交换就是在A和B要通信的开始,必须先建立一条从A到B的连接(中间可能经过很多的交换结点)。当A到B的连接建立后,通信就沿着这条路径进行。A和B在通信期间始终占用这条信道(全程占用),即使在通信的信号暂时不在通信路径上流动时(例如打电话时双方暂时停止说话),也是同样地占用信道。通信完毕时就释放所占用的信道,即断开连接,将通信资源还给网络,以便让其他用户可以使用。因此电路交换是使用面向连接的服务。

但分组交换也可以使用面向连接服务。例如X.25网络、帧中继网络或ATM网络都是属于分组交换网。然而这种面向连接的分组交换网在传送用户数据之前必须先建立连接。数据传送完毕后还必须释放连接。

因此使用面向连接服务的可以是电路交换,也可以是分组交换。

使用分组交换时,分组在哪条链路上传送就占用了该链路的信道资源,但分组尚未到达的链路则暂时还不占用这部分网络资源(这时,这些资源可以让其他用户使用)。因此分组交换不是全程占用资源而是在一段时间占用一段资源。可见分组交换方式是很灵活的。

现在的因特网使用IP协议,它使用无连接的IP数据报来传送数据,即不需要先建立连接就可以立即发送数据。当数据发送完毕后也不存在释放连接的问题。因此使用无连接的数据报进行通信既简单又灵活。

面向连接和无连接是强调通信必须经过什么样的阶段。面向连接必须经过三个阶段:“建立连接→传送数据→释放连接”,而无连接则只有一个阶段:“传送数据”。

电路交换和分组交换则是强调在通信时用户对网络资源的占用方式。电路交换是在连接建立后到连接释放前全程占用信道资源,而分组交换则是在数据传送是断续占用信道资源(分组在哪一条链路上传送就占用该链路的信道资源)。

面向连接和无连接往往可以在不同的层次上来讨论。例如,在数据链路层,HDLC和PPP协议是面向连接的,而以太网使用的CSMA/CD则是无连接的。在网络层,X.25协议是面向连接的,而IP协议则是无连接的。在运输层,TCP是面向连接的,而UDP则是无连接的。但是我们却不能说:“TCP是电路交换”,而应当说:“TCP可以向应用层提供面向连接的服务”。

TCP是面向连接的,UDP是无连接,他们是传输层的协议。
ATM也是面向连接的,但是他主要是在数据链路层。
还有Novell+SPX、Apple+Talk+ATP等等,都是面向连接的。
而无连接协议中,最重要的是IP协议,在网络层。

TCP是面向连接的,网络层中的虚电路也是面向连接的,它们有何异同?

对于传输层来说,高层用户对传输服务质量要求是确定的,传输层协议内容取决于网络层所提供的服务。网络层提供面向连接的虚电路服务和无连接的数据报服务。如果网络层提供虚电路服务,它可以保证报文分组无差错、不丢失、不重复和顺序传输。在这种情况下,传输层协议相对要简单。即使对虚电路服务,传输层也是必不可少的。因为虚电路仍不能保证通信子网传输百分之百正确。例如在X.25虚电路服务中,当网络发出中断分组和恢复请求分组时,主机无法获得通信子网中报文分组的状态,而虚电路两端的发送、接收报文分组的序号均置零。因此,虚电路恢复的工作必须由高层(传输层)来完成。如果网络层使用数据报方式,则传输层的协议将要变得复杂。
现在的基于IP的互联网网络层不是面向连接的,因此需要传输层的TCP来保证传输的可靠。

网络原理-OSI七层模型和TCP/IP模型-详解

OSI七层模型和TCP/IP模型-详解

 ⬇️   ⬇️   ⬇️  下图中有错误:SLIP 和PPP 都属于 数据链路层协议  ⬇️   ⬇️   ⬇️

OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主要的功能就是帮助不同类型的主机实现数据传输 。

完成中继功能的节点通常称为中继系统。在OSI七层模型中,处于不同层的中继系统具有不同的名称。

一个设备工作在哪一层,关键看它工作时利用哪一层的数据头部信息。网桥工作时,是以MAC头部来决定转发端口的,因此显然它是数据链路层的设备。
具体说:(中继系统分类)

物理层:网卡,网线,集线器,中继器,调制解调器

数据链路层:网桥,交换机

网络层:路由器

网关工作在第四层传输层及其以上

集线器是物理层设备,采用广播的形式来传输信息。

交换机就是用来进行报文交换的机器。多为链路层设备(二层交换机),能够进行地址学习,采用存储转发的形式来交换报文.。

路由器的一个作用是连通不同的网络,另一个作用是选择信息传送的线路。选择通畅快捷的近路,能大大提高通信速度,减轻网络系统通信负荷,节约网络系统资源,提高网络系统畅通率。

交换机和路由器的区别

交换机拥有一条很高带宽的背部总线和内部交换矩阵。交换机的所有的端口都挂接在这条总线上,控制电路收到数据包以后,处理端口会查找内存中的地址对照表以确定目的MAC(网卡的硬件地址)的NIC(网卡)挂接在哪个端口上,通过内部交换矩阵迅速将数据包传送到目的端口,目的MAC若不存在则广播到所有的端口,接收端口回应后交换机会“学习”新的地址,并把它添加入内部MAC地址表中。
使用交换机也可以把网络“分段”,通过对照MAC地址表,交换机只允许必要的网络流量通过交换机。通过交换机的过滤和转发,可以有效的隔离广播风暴,减少误包和错包的出现,避免共享冲突。
交换机在同一时刻可进行多个端口对之间的数据传输。每一端口都可视为独立的网段,连接在其上的网络设备独自享有全部的带宽,无须同其他设备竞争使用。当节点A向节点D发送数据时,节点B可同时向节点C发送数据,而且这两个传输都享有网络的全部带宽,都有着自己的虚拟连接。假使这里使用的是10Mbps的以太网交换机,那么该交换机这时的总流通量就等于2×10Mbps=20Mbps,而使用10Mbps的共享式HUB时,一个HUB的总流通量也不会超出10Mbps。
总之,交换机是一种基于MAC地址识别,能完成封装转发数据包功能的网络设备。交换机可以“学习”MAC地址,并把其存放在内部地址表中,通过在数据帧的始发者和目标接收者之间建立临时的交换路径,使数据帧直接由源地址到达目的地址。

从过滤网络流量的角度来看,路由器的作用与交换机和网桥非常相似。但是与工作在网络物理层,从物理上划分网段的交换机不同,路由器使用专门的软件协议从逻辑上对整个网络进行划分。例如,一台支持IP协议的路由器可以把网络划分成多个子网段,只有指向特殊IP地址的网络流量才可以通过路由器。对于每一个接收到的数据包,路由器都会重新计算其校验值,并写入新的物理地址。因此,使用路由器转发和过滤数据的速度往往要比只查看数据包物理地址的交换机慢。但是,对于那些结构复杂的网络,使用路由器可以提高网络的整体效率。路由器的另外一个明显优势就是可以自动过滤网络广播。

集线器与路由器在功能上有什么不同?

首先说HUB,也就是集线器。它的作用可以简单的理解为将一些机器连接起来组成一个局域网。而交换机(又名交换式集线器)作用与集线器大体相同。但是两者在性能上有区别:集线器采用的式共享带宽的工作方式,而交换机是独享带宽。这样在机器很多或数据量很大时,两者将会有比较明显的。而路由器与以上两者有明显区别,它的作用在于连接不同的网段并且找到网络中数据传输最合适的路径。路由器是产生于交换机之后,就像交换机产生于集线器之后,所以路由器与交换机也有一定联系,不是完全独立的两种设备。路由器主要克服了交换机不能路由转发数据包的不足。

总的来说,路由器与交换机的主要区别体现在以下几个方面:

(1)工作层次不同
最初的的交换机是工作在数据链路层,而路由器一开始就设计工作在网络层。由于交换机工作在数据链路层,所以它的工作原理比较简单,而路由器工作在网络层,可以得到更多的协议信息,路由器可以做出更加智能的转发决策。

(2)数据转发所依据的对象不同
交换机是利用物理地址或者说MAC地址来确定转发数据的目的地址。而路由器则是利用IP地址来确定数据转发的地址。IP地址是在软件中实现的,描述的是设备所在的网络。MAC地址通常是硬件自带的,由网卡生产商来分配的,而且已经固化到了网卡中去,一般来说是不可更改的。而IP地址则通常由网络管理员或系统自动分配。

(3)传统的交换机只能分割冲突域,不能分割广播域;而路由器可以分割广播域
由交换机连接的网段仍属于同一个广播域,广播数据包会在交换机连接的所有网段上传播,在某些情况下会导致通信拥挤和安全漏洞。连接到路由器上的网段会被分配成不同的广播域,广播数据不会穿过路由器。虽然第三层以上交换机具有VLAN功能,也可以分割广播域,但是各子广播域之间是不能通信交流的,它们之间的交流仍然需要路由器。

(4)路由器提供了防火墙的服务
路由器仅仅转发特定地址的数据包,不传送不支持路由协议的数据包传送和未知目标网络数据包的传送,从而可以防止广播风暴。

 

物理层

在OSI参考模型中,物理层(Physical Layer)是参考模型的最低层,也是OSI模型的第一层。
物理层的主要功能是:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。
物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。使其上面的数据链路层不必考虑网络的具体传输介质是什么。“透明传送比特流”表示经实际电路传送后的比特流没有发生变化,对传送的比特流来说,这个电路好像是看不见的。

数据链路层

数据链路层(Data Link Layer)是OSI模型的第二层,负责建立和管理节点间的链路。该层的主要功能是:通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。
在计算机网络中由于各种干扰的存在,物理链路是不可靠的。因此,这一层的主要功能是在物理层提供的比特流的基础上,通过差错控制、流量控制方法,使有差错的物理线路变为无差错的数据链路,即提供可靠的通过物理介质传输数据的方法。
该层通常又被分为介质访问控制(MAC)和逻辑链路控制(LLC)两个子层。

MAC子层的主要任务是解决共享型网络中多用户对信道竞争的问题,完成网络介质的访问控制;

LLC子层的主要任务是建立和维护网络连接,执行差错校验、流量控制和链路控制。
数据链路层的具体工作是接收来自物理层的位流形式的数据,并封装成帧,传送到上一层;同样,也将来自上层的数据帧,拆装为位流形式的数据转发到物理层;并且,还负责处理接收端发回的确认帧的信息,以便提供可靠的数据传输。

网络层

网络层(Network Layer)是OSI模型的第三层,它是OSI参考模型中最复杂的一层,也是通信子网的最高一层。它在下两层的基础上向资源子网提供服务。其主要任务是:通过路由选择算法,为报文或分组通过通信子网选择最适当的路径。该层控制数据链路层与传输层之间的信息转发,建立、维持和终止网络的连接。具体地说,数据链路层的数据在这一层被转换为数据包,然后通过路径选择、分段组合、顺序、进/出路由等控制,将信息从一个网络设备传送到另一个网络设备。
一般地,数据链路层是解决同一网络内节点之间的通信,而网络层主要解决不同子网间的通信。例如在广域网之间通信时,必然会遇到路由(即两节点间可能有多条路径)选择问题。

在实现网络层功能时,需要解决的主要问题如下:
 寻址:数据链路层中使用的物理地址(如MAC地址)仅解决网络内部的寻址问题。在不同子网之间通信时,为了识别和找到网络中的设备,每一子网中的设备都会被分配一个唯一的地址。由于各子网使用的物理技术可能不同,因此这个地址应当是逻辑地址(如IP地址)。
 交换:规定不同的信息交换方式。常见的交换技术有:线路交换技术和存储转发技术,后者又包括报文交换技术和分组交换技术。
 路由算法:当源节点和目的节点之间存在多条路径时,本层可以根据路由算法,通过网络为数据分组选择最佳路径,并将信息从最合适的路径由发送端传送到接收端。
 连接服务:与数据链路层流量控制不同的是,前者控制的是网络相邻节点间的流量,后者控制的是从源节点到目的节点间的流量。其目的在于防止阻塞,并进行差错检测。

传输层

OSI下3层的主要任务是数据通信,上3层的任务是数据处理。而传输层(Transport Layer)是OSI模型的第4层。因此该层是通信子网和资源子网的接口和桥梁,起到承上启下的作用。
该层的主要任务是:向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输。传输层的作用是向高层屏蔽下层数据通信的细节,即向用户透明地传送报文。该层常见的协议:TCP/IP中的TCP协议、Novell网络中的SPX协议和微软的NetBIOS/NetBEUI协议。
传输层提供会话层和网络层之间的传输服务,这种服务从会话层获得数据,并在必要时,对数据进行分割。然后,传输层将数据传递到网络层,并确保数据能正确无误地传送到网络层。因此,传输层负责提供两节点之间数据的可靠传送,当两节点的联系确定之后,传输层则负责监督工作。综上,传输层的主要功能如下:
传输连接管理:提供建立、维护和拆除传输连接的功能。传输层在网络层的基础上为高层提供“面向连接”和“面向无接连”的两种服务。
处理传输差错:提供可靠的“面向连接”和不太可靠的“面向无连接”的数据传输服务、差错控制和流量控制。在提供“面向连接”服务时,通过这一层传输的数据将由目标设备确认,如果在指定的时间内未收到确认信息,数据将被重发。
监控服务质量

会话层

会话层(Session Layer)是OSI模型的第5层,是用户应用程序和网络之间的接口,主要任务是:向两个实体的表示层提供建立和使用连接的方法。将不同实体之间的表示层的连接称为会话。因此会话层的任务就是组织和协调两个会话进程之间的通信,并对数据交换进行管理。
用户可以按照半双工、单工和全双工的方式建立会话。当建立会话时,用户必须提供他们想要连接的远程地址。而这些地址与MAC(介质访问控制子层)地址或网络层的逻辑地址不同,它们是为用户专门设计的,更便于用户记忆。域名(DN)就是一种网络上使用的远程地址例如:www.3721.com就是一个域名。会话层的具体功能如下:
会话管理:允许用户在两个实体设备之间建立、维持和终止会话,并支持它们之间的数据交换。例如提供单方向会话或双向同时会话,并管理会话中的发送顺序,以及会话所占用时间的长短。
 会话流量控制:提供会话流量控制和交叉会话功能。
寻址:使用远程地址建立会话连接。
出错控制:从逻辑上讲会话层主要负责数据交换的建立、保持和终止,但实际的工作却是接收来自传输层的数据,并负责纠正错误。会话控制和远程过程调用均属于这一层的功能。但应注意,此层检查的错误不是通信介质的错误,而是磁盘空间、打印机缺纸等类型的高级错误。

表示层

表示层(Presentation Layer)是OSI模型的第六层,它对来自应用层的命令和数据进行解释,对各种语法赋予相应的含义,并按照一定的格式传送给会话层。其主要功能是“处理用户信息的表示问题,如编码、数据格式转换和加密解密”等。表示层的具体功能如下:
数据格式处理:协商和建立数据交换的格式,解决各应用程序之间在数据格式表示上的差异。
数据的编码:处理字符集和数字的转换。例如由于用户程序中的数据类型(整型或实型、有符号或无符号等)、用户标识等都可以有不同的表示方式,因此,在设备之间需要具有在不同字符集或格式之间转换的功能。
压缩和解压缩:为了减少数据的传输量,这一层还负责数据的压缩与恢复。
数据的加密和解密:可以提高网络的安全性。

应用层

应用层(Application Layer)是OSI参考模型的最高层,它是计算机用户,以及各种应用程序和网络之间的接口,其功能是直接向用户提供服务,完成用户希望在网络上完成的各种工作。它在其他6层工作的基础上,负责完成网络中应用程序与网络操作系统之间的联系,建立与结束使用者之间的联系,并完成网络用户提出的各种网络服务及应用所需的监督、管理和服务等各种协议。此外,该层还负责协调各个应用程序间的工作。
应用层为用户提供的服务和协议有:文件服务、目录服务、文件传输服务(FTP)、远程登录服务(Telnet)、电子邮件服务(E-mail)、打印服务、安全服务、网络管理服务、数据库服务等。上述的各种网络服务由该层的不同应用协议和程序完成,不同的网络操作系统之间在功能、界面、实现技术、对硬件的支持、安全可靠性以及具有的各种应用程序接口等各个方面的差异是很大的。应用层的主要功能如下:
用户接口:应用层是用户与网络,以及应用程序与网络间的直接接口,使得用户能够与网络进行交互式联系。
实现各种服务:该层具有的各种应用程序可以完成和实现用户请求的各种服务。

OSI7层模型的小结

由于OSI是一个理想的模型,因此一般网络系统只涉及其中的几层,很少有系统能够具有所有的7层,并完全遵循它的规定。
在7层模型中,每一层都提供一个特殊的网络功能。从网络功能的角度观察:下面4层(物理层、数据链路层、网络层和传输层)主要提供数据传输和交换功能,即以节点到节点之间的通信为主;第4层作为上下两部分的桥梁,是整个网络体系结构中最关键的部分;而上3层(会话层、表示层和应用层)则以提供用户与应用程序之间的信息和数据处理功能为主。简言之,下4层主要完成通信子网的功能,上3层主要完成资源子网的功能。

以下是TCP/IP分层模型
┌────——────┐┌─┬─┬-┬─┬–┬-┬-┬─┬-┬─┬-┐
│              ││D│F│W│F│H│G│T│I│S│U│ │
│           ││N│I│H│T│T│O│E│R│M│S│其│
│第四层,应用        ││S│N│O│P│T│P│L│C│T│E│ │
│              ││ │G│I│ │P│H│N│ │P│N│ │
│              ││ │E│S│ │ │E│E│ │ │E│它│
│              ││ │R│ │ │ │R│T│ │ │T│ │
└───────——─┘└─┴─┴-┴─┴–┴-┴-┴─┴-┴─┴-┘
┌───────—–─┐┌─────────——-┬──——–────────┐
│第三层,传输层   ││      TCP   │        UDP        │
└───────—–─┘└────────——-─┴─────────——–─┘
┌───────—–─┐┌───—-──┬───—─┬───────——-──┐
│          ││            │ICMP   │           │
│第二层,网间层   ││            └──—──-┘            │
│          ││           IP                           │
└────────—–┘└────────────────────————-─-┘
┌────────——┐┌─────────——┬──────——–─────┐
│第一层,网络接口││   ARP/RARP│    其它            |
└────────——┘└─────────——┴─────——–──────┘

TCP/IP四层参考模型

TCP/IP协议被组织成四个概念层,其中有三层对应于ISO参考模型中的相应层。ICP/IP协议族并不包含物理层和数据链路层,因此它不能独立完成整个计算机网络系统的功能,必须与许多其他的协议协同工作。
TCP/IP分层模型的四个协议层分别完成以下的功能:
第一层:网络接口层
包括用于协作IP数据在已有网络介质上传输的协议。实际上TCP/IP标准并不定义与ISO数据链路层和物理层相对应的功能。相反,它定义像地址解析协议(Address Resolution Protocol,ARP)这样的协议,提供TCP/IP协议的数据结构和实际物理硬件之间的接口。
第二层:网间层
对应于OSI七层参考模型的网络层。本层包含IP协议、RIP协议(Routing Information Protocol,路由信息协议),负责数据的包装、寻址和路由。同时还包含网间控制报文协议(Internet Control Message Protocol,ICMP)用来提供网络诊断信息。
第三层:传输层
对应于OSI七层参考模型的传输层,它提供两种端到端的通信服务。其中TCP协议(Transmission Control Protocol)提供可靠的数据流运输服务,UDP协议(Use Datagram Protocol)提供不可靠的用户数据报服务。
第四层:应用层
对应于OSI七层参考模型的应用层和表达层。因特网的应用层协议包括Finger、Whois、FTP(文件传输协议)、Gopher、HTTP(超文本传输协议)、Telent(远程终端协议)、SMTP(简单邮件传送协议)、IRC(因特网中继会话)、NNTP(网络新闻传输协议)等,这也是本书将要讨论的重点。

来自:https://blog.csdn.net/yaopeng_2005/article/details/7064869

网络原理-OSI七层模型和TCP/IP模型-维基百科摘要

OSI七层模型和TCP/IP模型-维基百科摘要


开放式系统互联通信参考模型英语:Open System Interconnection Reference Model,缩写为 OSI),简称为OSI模型(OSI model),一种概念模型,由国际标准化组织提出,一个试图使各种计算机在世界范围内互连为网络的标准框架。定义于ISO/IEC 7498-1。

应用层(Application Layer)提供为应用软件而设的接口,以设置与另一应用软件之间的通信。例如: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等。

表达层(Presentation Layer)把数据转换为能与接收者的系统格式兼容并适合传输的格式。

会话层(Session Layer)负责在数据传输中设置和维护电脑网络中两台电脑之间的通信连接。

传输层(Transport Layer)把传输表头(TH)加至数据以形成数据包。传输表头包含了所使用的协议等发送信息。例如:传输控制协议(TCP)等。

网络层(Network Layer)决定数据的路径选择和转寄,将网络表头(NH)加至数据包,以形成分组。网络表头包含了网络数据。例如:互联网协议(IP)等。

数据链路层(Data Link Layer)负责网络寻址、错误侦测和改错。当表头和表尾被加至数据包时,会形成帧。数据链表头(DLH)是包含了物理地址和错误侦测及改错的方法。数据链表尾(DLT)是一串指示数据包末端的字符串。例如以太网、无线局域网(Wi-Fi)和通用分组无线服务(GPRS)等。

分为两个子层:逻辑链路控制(LLC)数据通信协议层是七层OSI模型数据链路层的上部子层。LLC子层提供多路复用机制,使得多个网络协议(例如IPIPXDecnetAppletalk)可以在多点网络中共存并通过相同的网络介质传输。它还可以提供流量控制自动重复请求(ARQ)错误管理机制。LLC子层充当媒体访问控制(MAC)子层和网络层之间的接口。

物理层(Physical Layer)在局部局域网上传送数据帧(data frame),它负责管理电脑通信设备和网络媒体之间的互通。包括了针脚、电压、线缆规范、集线器、中继器、网卡、主机适配器等。

 

互联网协议族英语:Internet Protocol Suite,缩写IPS)[1]是一个网络通信模型,以及一整个网络传输协议家族,为互联网的基础通信架构。它常被通称为TCP/IP协议族(英语:TCP/IP Protocol Suite,或TCP/IP Protocols),简称TCP/IP

应用层

该层包括所有和应用程序协同工作,利用基础网络交换应用程序专用的数据的协议。 应用层是大多数普通与网络相关的程序为了通过网络与其他程序通信所使用的层。这个层的处理过程是应用特有的;数据从网络相关的程序以这种应用内部使用的格式进行传送,然后被编码成标准协议的格式。

传输层

传输层的协议,能够解决诸如端到端可靠性(“数据是否已经到达目的地?”)和保证数据按照正确的顺序到达这样的问题。在TCP/IP协议组中,传输协议也包括所给数据应该送给哪个应用程序。 在TCP/IP协议组中技术上位于这个层的动态路由协议通常被认为是网络层的一部分;一个例子就是OSPF(IP协议89)。 TCP(IP协议6)是一个“可靠的”、面向连结的传输机制,它提供一种可靠的字节流保证数据完整、无损并且按顺序到达。

网络互连层

TCP/IP协议族中的网络互连层(internet layer)在OSI模型中叫做网络层(network layer)。

正如最初所定义的,网络层解决在一个单一网络上传输数据包的问题。类似的协议有X.25ARPANETHost/IMP Protocol。 随着因特网思想的出现,在这个层上添加附加的功能,也就是将数据从源网络传输到目的网络。这就牵涉到在网络组成的网上选择路径将数据包传输,也就是因特网。 在因特网协议组中,IP完成数据从源发送到目的的基本任务。IP能够承载多种不同的高层协议的数据;这些协议使用一个唯一的IP协议号进行标识。ICMP和IGMP分别是1和2。 一些IP承载的协议,如ICMP(用来发送关于IP发送的诊断信息)和IGMP(用来管理多播数据),它们位于IP层之上但是完成网络层的功能,这表明因特网和OSI模型之间的不兼容性。所有的路由协议,如BGPOSPF、和RIP实际上也是网络层的一部分,尽管它们似乎应该属于更高的协议栈。

网络接口层

网络接口层实际上并不是因特网协议组中的一部分,但是它是数据包从一个设备的网络层传输到另外一个设备的网络层的方法。这个过程能够在网卡软件驱动程序中控制,也可以在韧体或者专用芯片中控制。这将完成如添加报头准备发送、通过实体媒介实际发送这样一些数据链路功能。另一端,链路层将完成数据帧接收、去除报头并且将接收到的包传到网络层。 然而,链路层并不经常这样简单。它也可能是一个虚拟专有网络(VPN)或者隧道,在这里从网络层来的包使用隧道协议和其他(或者同样的)协议组发送而不是发送到实体的接口上。

 

websocket协议-细说WebSocket – java篇

tcp/udp 是协议,而 socket 是实现 该协议的 接口。所以 网络编程 就是 socket 编程。因为 http 和 websocket 都是 http 80 端口 tcp 协议。所以 web 服务器 肯定要实现 ,socket 区分 http 字节流还是  websocket 字节流。 这个 暂时 没有深入,有机会 去研究  web 开源 服务器 ,看看 如何 做到 区分 。


文章待整理

http://www.111cn.net/wy/html5/69508.htm (手动解析 websocket   )

https://www.cnblogs.com/jingmoxukong/p/7755643.html (框架解析websocket)


关于网络编程 :

百度搜 tcp ip 网络编程

【Java TCP/IP Socket】Socket编程大合集
https://blog.csdn.net/ns_code/article/details/17526127

怎样算得上熟悉 TCP/IP 协议编程?
链接:https://www.zhihu.com/question/20795067/answer/16233370

常见的三个网络协议:NetBEUI、IPX/SPX、TCP/IP
http://network.51cto.com/art/200701/38792.htm

三大协议:NetBEUI、IPX/SPX 和TCP/IP
https://searchnetworking.techtarget.com.cn/12-15241/

NetBIOS
https://zh.wikipedia.org/wiki/NetBIOS

Internet协议
https://baike.baidu.com/item/Internet%E5%8D%8F%E8%AE%AE/11049108

网络拓扑 锁定
https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C%E6%8B%93%E6%89%91/4804125?fr=aladdin

链路层包括 物理链路层 和 数据链路层

websocket协议-细说WebSocket – php篇

下面我画了一个图演示 client 和 server 之间建立 websocket 连接时握手部分,这个部分在 node 中可以十分轻松的完成,因为 node 提供的 net 模块已经对 socket 套接字做了封装处理,开发者使用的时候只需要考虑数据的交互而不用处理连接的建立。而 php 没有,从 socket 的连接、建立、绑定、监听等,这些都需要我们自己去操作,所以有必要拿出来再说一说。

   +--------+    1.发送Sec-WebSocket-Key        +---------+
    |        | --------------------------------> |        |
    |        |    2.加密返回Sec-WebSocket-Accept  |        |
    | client | <-------------------------------- | server |
    |        |    3.本地校验                      |        |
    |        | --------------------------------> |        |
    +--------+                                   +--------+

看了我写的上一篇文章的同学应该是对上图有了比较全面的理解。① 和 ② 实际上就是一个 HTTP 的请求和响应,只不过我们在处理的过程中我们拿到的是没有经过解析的字符串。如:

GET /chat HTTP/1.1
Host: server.example.com
Origin: http://example.com

我们往常看到的请求是这个样子,当这东西到了服务器端,我们可以通过一些代码库直接拿到这些信息。

一、php 中处理 websocket

WebSocket 连接是由客户端主动发起的,所以一切要从客户端出发。第一步是要解析拿到客户端发过来的 Sec-WebSocket-Key 字符串。

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

前文中也提到了 client 请求的格式(如上),首先 php 建立一个 socket 连接,监听端口的信息。

1. socket 连接的建立

关于 socket 套接字的建立,相信很多大学修过计算机网络的人都知道了,下面是一张连接建立的过程:

// 建立一个 socket 套接字
$master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($master, SOL_SOCKET, SO_REUSEADDR, 1);
socket_bind($master, $address, $port);
socket_listen($master);

相比 node,这个地方的处理实在是太麻烦了,上面几行代码并未建立连接,只不过这些代码是建立一个 socket 套接字必须要写的东西。由于处理过程稍微有复杂,所以我把各种处理写进了一个类中,方便管理和调用。

//demo.php
Class WS {
    var $master;  // 连接 server 的 client
    var $sockets = array(); // 不同状态的 socket 管理
    var $handshake = false; // 判断是否握手

    function __construct($address, $port){
        // 建立一个 socket 套接字
        $this->master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)   
            or die("socket_create() failed");
        socket_set_option($this->master, SOL_SOCKET, SO_REUSEADDR, 1)  
            or die("socket_option() failed");
        socket_bind($this->master, $address, $port)                    
            or die("socket_bind() failed");
        socket_listen($this->master, 2)                               
            or die("socket_listen() failed");

        $this->sockets[] = $this->master;

        // debug
        echo("Master socket  : ".$this->master."\n");

        while(true) {
            //自动选择来消息的 socket 如果是握手 自动选择主机
            $write = NULL;
            $except = NULL;
            socket_select($this->sockets, $write, $except, NULL);

            foreach ($this->sockets as $socket) {
                //连接主机的 client 
                if ($socket == $this->master){
                    $client = socket_accept($this->master);
                    if ($client < 0) {
                        // debug
                        echo "socket_accept() failed";
                        continue;
                    } else {
                        //connect($client);
                        array_push($this->sockets, $client);
                        echo "connect client\n";
                    }
                } else {
                    $bytes = @socket_recv($socket,$buffer,2048,0);
                    if($bytes == 0) return;
                    if (!$this->handshake) {
                        // 如果没有握手,先握手回应
                        //doHandShake($socket, $buffer);
                        echo "shakeHands\n";
                    } else {
                        // 如果已经握手,直接接受数据,并处理
                        $buffer = decode($buffer);
                        //process($socket, $buffer); 
                        echo "send file\n";
                    }
                }
            }
        }
    }
}

上面这段代码是经过我调试了的,没太大的问题,如果想测试的话,可以在 cmd 命令行中键入 php /path/to/demo.php;当然,上面只是一个类,如果要测试的话,还得新建一个实例。

$ws = new WS('localhost', 4000);

客户端代码可以稍微简单点:

var ws = new WebSocket("ws://localhost:4000");
ws.onopen = function(){
    console.log("握手成功");
};
ws.onerror = function(){
    console.log("error");
};

运行服务器代码,当客户端连接的时候,我们可以看到:

通过上面的代码可以清晰的看到整个交流的过程。首先是建立连接,node 中这一步已经封装到了 net 和 http 模块,然后判断是否握手,如果没有的话,就 shakeHands。这里的握手我直接就 echo 了一个单词,表示进行了这个东西,前文我们提到过握手算法,这里就直接写了。

2. 提取 Sec-WebSocket-Key 信息

function getKey($req) {
    $key = null;
    if (preg_match("/Sec-WebSocket-Key: (.*)\r\n/", $req, $match)) { 
        $key = $match[1]; 
    }
    return $key;
}

这里比较简单,直接正则匹配,websocket 信息头一定包含 Sec-WebSocket-Key,所以我们匹配起来也比较快捷~

3. 加密 Sec-WebSocket-Key

function encry($req){
    $key = $this->getKey($req);
    $mask = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";

    return base64_encode(sha1($key . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11', true));
}

将 SHA-1 加密后的字符串再进行一次 base64 加密。如果加密算法错误,客户端在进行校检的时候会直接报错:

4. 应答 Sec-WebSocket-Accept

function dohandshake($socket, $req){
    // 获取加密key
    $acceptKey = $this->encry($req);
    $upgrade = "HTTP/1.1 101 Switching Protocols\r\n" .
               "Upgrade: websocket\r\n" .
               "Connection: Upgrade\r\n" .
               "Sec-WebSocket-Accept: " . $acceptKey . "\r\n" .
               "\r\n";

    // 写入socket
    socket_write(socket,$upgrade.chr(0), strlen($upgrade.chr(0)));
    // 标记握手已经成功,下次接受数据采用数据帧格式
    $this->handshake = true;
}

这里千万要注意,每一个请求和相应的格式,最后有一个空行,也就是 \r\n,开始测试的时候把这东西给弄丢了,纠结了半天。

当客户端成功校检key后,会触发 onopen 函数:

5. 数据帧处理

// 解析数据帧
function decode($buffer)  {
    $len = $masks = $data = $decoded = null;
    $len = ord($buffer[1]) & 127;

    if ($len === 126)  {
        $masks = substr($buffer, 4, 4);
        $data = substr($buffer, 8);
    } else if ($len === 127)  {
        $masks = substr($buffer, 10, 4);
        $data = substr($buffer, 14);
    } else  {
        $masks = substr($buffer, 2, 4);
        $data = substr($buffer, 6);
    }
    for ($index = 0; $index < strlen($data); $index++) {
        $decoded .= $data[$index] ^ $masks[$index % 4];
    }
    return $decoded;
}

这里涉及的编码问题在前文中已经提到过了,这里就不赘述,php 对字符处理的函数太多了,也记得不是特别清楚,这里就没有详细的介绍解码程序,直接把客户端发送的数据原样返回,可以算是一个聊天室的模式吧。

// 返回帧信息处理
function frame($s) {
    $a = str_split($s, 125);
    if (count($a) == 1) {
        return "\x81" . chr(strlen($a[0])) . $a[0];
    }
    $ns = "";
    foreach ($a as $o) {
        $ns .= "\x81" . chr(strlen($o)) . $o;
    }
    return $ns;
}

// 返回数据
function send($client, $msg){
    $msg = $this->frame($msg);
    socket_write($client, $msg, strlen($msg));
}

客户端代码:

var ws = new WebSocket("ws://localhost:4000");
ws.onopen = function(){
    console.log("握手成功");
};
ws.onmessage = function(e){
    console.log("message:" + e.data);
};
ws.onerror = function(){
    console.log("error");
};
ws.send("李靖");

在连通之后发送数据,服务器原样返回:

二、注意问题

1. websocket 版本问题

客户端在握手时的请求中有Sec-WebSocket-Version: 13,这样的版本标识,这个是一个升级版本,现在的浏览器都是使用的这个版本。而以前的版本在数据加密的部分更加麻烦,它会发送两个key:

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Key1: xxxx
Sec-WebSocket-Key2: xxxx

如果是这种版本(比较老,已经没在使用了),需要通过下面的方式获取

function encry($key1,$key2,$l8b){ //Get the numbers preg_match_all('/([\d]+)/', $key1, $key1_num); preg_match_all('/([\d]+)/', $key2, $key2_num);

    $key1_num = implode($key1_num[0]);
    $key2_num = implode($key2_num[0]);
    //Count spaces
    preg_match_all('/([ ]+)/', $key1, $key1_spc);
    preg_match_all('/([ ]+)/', $key2, $key2_spc);

    if($key1_spc==0|$key2_spc==0){ $this->log("Invalid key");return; }
    //Some math
    $key1_sec = pack("N",$key1_num / $key1_spc);
    $key2_sec = pack("N",$key2_num / $key2_spc);

    return md5($key1_sec.$key2_sec.$l8b,1);
}

只能无限吐槽这种验证方式!相比 nodeJs 的 websocket 操作方式:

//服务器程序
var crypto = require('crypto');
var WS = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11';
require('net').createServer(function(o){
    var key;
    o.on('data',function(e){
        if(!key){
            //握手
            key = e.toString().match(/Sec-WebSocket-Key: (.+)/)[1];
            key = crypto.createHash('sha1').update(key + WS).digest('base64');
            o.write('HTTP/1.1 101 Switching Protocols\r\n');
            o.write('Upgrade: websocket\r\n');
            o.write('Connection: Upgrade\r\n');
            o.write('Sec-WebSocket-Accept: ' + key + '\r\n');
            o.write('\r\n');
        }else{
            console.log(e);
        };
    });
}).listen(8000);

多么简洁,多么方便!有谁还愿意使用 php 呢。。。。

2. 数据帧解析代码

本文没有给出 decodeFrame 这样数据帧解析代码,前文中给出了数据帧的格式,解析纯属体力活。

3. 代码展示

对这部分感兴趣的同学可以再去深究。代码用到了demo.php和ws.html两个文件。

<?php
class WS {
	var $master;
	var $sockets = array();
	var $debug = false;
	var $handshake = false;

	function __construct($address, $port){
		$this->master=socket_create(AF_INET, SOCK_STREAM, SOL_TCP)     or die("socket_create() failed");
		socket_set_option($this->master, SOL_SOCKET, SO_REUSEADDR, 1)  or die("socket_option() failed");
		socket_bind($this->master, $address, $port)                    or die("socket_bind() failed");
		socket_listen($this->master,20)                                or die("socket_listen() failed");
		
		$this->sockets[] = $this->master;
		$this->say("Server Started : ".date('Y-m-d H:i:s'));
		$this->say("Listening on   : ".$address." port ".$port);
		$this->say("Master socket  : ".$this->master."\n");
		
		while(true){
			$socketArr = $this->sockets;
			$write = NULL;
			$except = NULL;
			socket_select($socketArr, $write, $except, NULL);  //自动选择来消息的socket 如果是握手 自动选择主机
			foreach ($socketArr as $socket){
				if ($socket == $this->master){  //主机
					$client = socket_accept($this->master);
					if ($client < 0){
						$this->log("socket_accept() failed");
						continue;
					} else{
						$this->connect($client);
					}
				} else {
					$this->log("^^^^");
					$bytes = @socket_recv($socket,$buffer,2048,0);
					$this->log("^^^^");
					if ($bytes == 0){
						$this->disConnect($socket);
					}
					else{
						if (!$this->handshake){
							$this->doHandShake($socket, $buffer);
						}
						else{
							$buffer = $this->decode($buffer);
							$this->send($socket, $buffer); 
						}
					}
				}
			}
		}
	}
	
	function send($client, $msg){
		$this->log("> " . $msg);
		$msg = $this->frame($msg);
		socket_write($client, $msg, strlen($msg));
		$this->log("! " . strlen($msg));
	}
	function connect($socket){
		array_push($this->sockets, $socket);
		$this->say("\n" . $socket . " CONNECTED!");
		$this->say(date("Y-n-d H:i:s"));
	}
	function disConnect($socket){
		$index = array_search($socket, $this->sockets);
		socket_close($socket);
		$this->say($socket . " DISCONNECTED!");
		if ($index >= 0){
			array_splice($this->sockets, $index, 1); 
		}
	}
	function doHandShake($socket, $buffer){
		$this->log("\nRequesting handshake...");
		$this->log($buffer);
		list($resource, $host, $origin, $key) = $this->getHeaders($buffer);
		$this->log("Handshaking...");
		$upgrade  = "HTTP/1.1 101 Switching Protocol\r\n" .
					"Upgrade: websocket\r\n" .
					"Connection: Upgrade\r\n" .
					"Sec-WebSocket-Accept: " . $this->calcKey($key) . "\r\n\r\n";  //必须以两个回车结尾
		$this->log($upgrade);
		$sent = socket_write($socket, $upgrade, strlen($upgrade));
		$this->handshake=true;
		$this->log("Done handshaking...");
		return true;
	}

	function getHeaders($req){
		$r = $h = $o = $key = null;
		if (preg_match("/GET (.*) HTTP/"              ,$req,$match)) { $r = $match[1]; }
		if (preg_match("/Host: (.*)\r\n/"             ,$req,$match)) { $h = $match[1]; }
		if (preg_match("/Origin: (.*)\r\n/"           ,$req,$match)) { $o = $match[1]; }
		if (preg_match("/Sec-WebSocket-Key: (.*)\r\n/",$req,$match)) { $key = $match[1]; }
		return array($r, $h, $o, $key);
	}

	function calcKey($key){
		//基于websocket version 13
		$accept = base64_encode(sha1($key . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11', true));
		return $accept;
	}

	function decode($buffer) {
		$len = $masks = $data = $decoded = null;
		$len = ord($buffer[1]) & 127;

		if ($len === 126) {
			$masks = substr($buffer, 4, 4);
			$data = substr($buffer, 8);
		} 
		else if ($len === 127) {
			$masks = substr($buffer, 10, 4);
			$data = substr($buffer, 14);
		} 
		else {
			$masks = substr($buffer, 2, 4);
			$data = substr($buffer, 6);
		}
		for ($index = 0; $index < strlen($data); $index++) {
			$decoded .= $data[$index] ^ $masks[$index % 4];
		}
		return $decoded;
	}

	function frame($s){
		$a = str_split($s, 125);
		if (count($a) == 1){
			return "\x81" . chr(strlen($a[0])) . $a[0];
		}
		$ns = "";
		foreach ($a as $o){
			$ns .= "\x81" . chr(strlen($o)) . $o;
		}
		return $ns;
	}

	
	function say($msg = ""){
		echo $msg . "\n";
	}
	function log($msg = ""){
		if ($this->debug){
			echo $msg . "\n";
		} 
	}
}
	

new WS('localhost', 4000);
<script type="text/javascript">
var ws = new WebSocket("ws://localhost:4000");
ws.onopen = function(){
	console.log("握手成功");
}
ws.onmessage = function(e){
	console.log("message:" + e.data);
}
ws.onerror = function(){
	console.log("error");
}
</script>

 

4. 相关开源库参考

http://socketo.me Ratchet 为 php 封装的一个 WebSockets 库。

Google 上搜索 php+websoket+class,也能找到不少相关的资料。

三、参考资料

来自:https://www.barretlee.com/blog/2013/12/25/cb-websocket-with-php/     可以关注微信公众号 (小胡子哥)


文章错误纠正:

1、握手函数中不应该加chr(0),只应该发送$upgrade,否则后续消息发到浏览器中都会提示A server must not mask any frames that it sends to the client.

———————————————————

2、我想问下 在demo.php 中 您用了一个全局变量‘$handshake’ 来标记是否握手 好像这边会导致只有第一次连接的client能够成功连上,第二个client,第三个client的就连接不上了

3、我试过了可以改成 ,在把new socket变量加到全局变量$socket之后 ,就立即进行握手动作。 可以解决我之前遇到的只能第一个client连接上的问题。