0%

在网络上,两台计算机要通信,就需要一个通信媒介。

物理层,通过这么一个介质,使得两台计算机之间得以完成信号的传输。

如果全世界的计算机都连接到彼此互通的介质中,那么彼此之间都可以相互进行信号的传输了。

通信的根本目的就是为了传输数据,而这个数据可以是任何形式的。

在生活中,常见的信号传输介质有:光缆、电缆、双绞线、无线电波等。

物理层

简单的说,物理层包含的就是通信介质信号传输

通俗的说,物理层规定了通信数据应该以何种方式、何种形态、在何处进行传输。

物理层规定了通信介质的一些特性。
  • 机械特性
  • 电气特性
  • 规程特性

机械特性,规定了接口的大小、形状、颜色、排列方式,比如:RJ45水晶头。

电气特性,规定了在网线中传输的电压的范围,分为高(5V)低(-5V)电压。

规程特性,规定了建立连接时元器组件之间的工作方式及步骤。

信号的形态分为:模拟信号、数字信号。

信号的形态

信号数据,可以表示图片、语音、文字、视频等任何信息。

模拟信号,指的是在某一段连续时间内,信号的幅度、频率、相位随着时间的变化而连续变化。

数字信号,指的是幅度的取值被限制为0和1的离散型信号,跳跃着变化的,由高低电压来体现。

调制解调器,实现了模拟信号数字信号的转换。

在家庭中,调制解调器又称为,既可以连接电信电路,又可以连接网线。

电话信号一般是低频率的,而高频率的则用来作为宽带信号。

调制:将数字信号转为模拟信号的过程。

解调:将模拟信号转为数字信号的过程。

调制解调器

信号又分为:基带信号、带通信号。
  • 基带信号(类比货物)

    从信号源头产生的没有经过加工的信号。

    在手机中,基带是手机的通信模块,调制解调器。

    手机通话、上网质量差跟基带也是有莫大的关系的。

  • 带通信号(类比货车)

    基带信号经过载波调制后,被放大频率,以便在信道中传输。

    载波是一个特定频率的无线电波,单位是Hz,是一种在频率、调幅、相位方面被调制成用来传输语音、文本等数据的电磁波。由振荡器产生的并在信道上传输的无线电波,频率会比基带信号高,属于高频信号。

基带信号

信号的传输方式:

  • 串行、并行
  • 单工、半双工、全双工
  • 位同步、字符同步

串行,将一个字符的二进制码1个个的从低位向高位在信道中依次传输。

并行,将一个字符的二进制码在8个并行信道中同时传输。

transtype

单工,信号只能单向传输。

半双工,信号支持双向传输,但是同一时刻只允许往一个方向。

全双工,信号支持双向传输,并且同一时刻允许往两个方向。

work

位同步,使接收端的每一位都跟发送端的保持同步状态,也是数字信号码元时间对齐的过程。码元指的是数字信号0、1,1个码元可以携带多个bit的数据量。

位同步包含:外同步、内同步。

  • 外同步

发送端发送数据时,同时发送时钟信号,接收方用同步信号来锁定自己的时钟脉冲频率

时钟脉冲指的是脉冲信号是一个按一定电压幅度,一定时间间隔连续发出的脉冲信号。脉冲信号之间的时间间隔称为周期。一个周期发送的脉冲信号的个数称为频率频率的计量单位是赫兹Hz

通俗的说,就是二者要在一个频道上。

电信频谱

  • 内同步

发送端通过特殊的编码方式进行编码,如:曼彻斯特编码,这些编码信号中包含了同步信号,接收端从这些信号中提取出时钟脉冲频率

字符同步,由于位同步只能以二进制码元的方式传输,为了识别出每一个字符的边界,还需要通过字符同步的方式来约束每一个字符应该到哪结束,如:ASCII编码,每一个字符都是8位,则应该以8位8位的方式作为一个字符的结束点来同步。

信号转换

信道,表示传输信息的媒体。

信道分为:有线信道、无线信道。

  • 有线信道(导向传输媒体)

    常见的有线信道,包含有:明线、对称电缆、同轴电缆、光纤。

    明线,架在电线杆上的那种。

    对称电缆,比如双绞线。

    同轴电缆,那种同心圆柱体状的电缆。

    光纤,利用光反射的原理使其在纤导中传播。

  • 无线信道(非导向传输媒体)

    信号基于电磁波传输,假想的一个无形的通道,比如无线电。

    根据频段的不同来区分不同的信道。

    在家庭路由器当中,通常会有13个信道,每个信道频率不同。

数据通信系统

数据通信系统

一台计算机,本质上就是一堆零件,只有安装上了软件,才能被正常使用。

计算机由硬件和软件组成。

硬件包括:CPU、内存、磁盘、主板、网卡、声卡、显卡等。

软件包括:操作系统软件、应用程序软件。

如果没有软件,计算机就是一堆破铜烂铁,而如何来管理这些硬件,就需要操作系统软件来帮助完成这件事情了。

computer.png

操作系统

操作系统是管理和控制计算机硬件和软件资源的计算机软件,是最基本的系统软件。

所有的应用程序软件都需要在操作系统的支持下才能使用。

操作系统为软件程序的运行提供了调度、分配硬件资源,协调多个程序之间的运行,也为用户提供了一个可视化的界面。

网络通信

一台计算机可以使用了之后,多台计算机之间如果不相互通信,那么计算机就比较孤独了,人与人之间需要通信,计算机之间也是需要通信的。

计算机之间通过互联网来完成彼此之间的通信,而计算机之间总得需要有一样的方言才能读懂对方计算机在说什么吧,而计算机之间的方言被称之为互联网协议

互联网协议定义了网络之间如何相互连接、如何进行通信的种种标准。

Internet.png

互联网协议

有个称为 ISO 国际标准化组织,定义了一个 OSI模型,定义了不同计算机之间的通信标准。这个模型将网络通信分为七层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

protocol.png

当消息下推到客户端的时候,服务端对于推送状态是无感知的。

在用户建立连接的时候,在Channel中缓存并初始化tid0,每一条消息下推的时候,都会设置一个自增tid,并将等待Ack的消息存储在队列中,一旦某个tidAck了就将该消息移出队列。

也有一些情况,比如超过设置的期望时间,还没有Ack,则可以认为该消息丢失了,则启动重新下推的操作。

ACK的数据结构可以定义为:

1
2
3
4
5
6
7
8
9
10
11
@Data
public class Ack {
private long tid;
private String msgId;
}

@Data
public class WaitAckMessage {
private Message message;
private long tid;
}

定义一个AckBuffer来存储ack的信息

1
2
3
4
5
6
7
8
9
10
11
12
public class AckBuffer {
private static Set<Long> set = Sets.newHashSet();

public void acknowledge(Ack ack) {
//可以使用redis的zset来实现
set.remove(ack.getTid());
}

public void addAck(Ack ack) {
set.add(ack.getTid());
}
}