一、假设有A、B两台主机想要进行通信,那应该怎么做呢。
1、通过不同的介质将A主机和B主机连接在一起,比如双绞线、蓝牙等。
2、不同的的连接介质,对应的接口是不同的,比如双绞线的接口是 RJ-45。
3、计算机中只能处理二进制,属于数字信号,而双绞线中的信号则是模拟信号,这就涉及到了如何将模拟信号转换为数字信号的问题(比如RS232、RS485等通信协议)
上述三个问题将在物理层解决,最终A、B两台主机可以实现通信。
二、假如,此刻不止两个主机进行通信了,而是多台主机进行通信,比如下图所示,那应该怎么做呢。
A 要想和 C 进行通信,会在发送信息时带上自己的 MAC 地址和 C 的 MAC 地址,因为在同一总线上,A发出的信息,总线上所有的主机都可以接收的到,但其他主要一看不是要和自己通信的,就会把 A 发送的包(帧数据)给丢弃,而 C 则会接收(上面过程应该是由交换机来完成的,交换机一看 A 想要和 C 进行通信,就会把包发送给 C),C 接收到的包后,会对包进行解析,包的格式是什么,哪部分表示 MAC 地址,哪部分又表示信息数据。
这都是要在数据链路层要解决的问题(二层网络需要交换机)。
三、现在,同一网络内的主机可以实现通信了,那不同网络之间的主机又应该怎么通信呢?比如下图中 N1 网络中的 A 主机想要和 N2 网络中的 B 主机进行通信。
不同网络(局域网,二层网络)之间的主机要想通信,需要使用到路由器(找路),同时还需要使用到 ip 地址 来表示每一台主机在网络中的位置。
这些是要在网络层要解决的问题(三层网络需要路由器)。
四、假设 B 这台主机上面有很多的应用程序,比如有 QQ 和 微信 等,那 A 这台主机想要和 B 这台主机的 QQ 通信,那就需要使用到一个东西来标识到底是哪个进程(程序)。 当 A 主机 和 B主机之间通过某个应用程序来进行通信后,就不可避免的由于各种原因造成丢包或者包的信息出错的问题。那怎么来解决丢包的问题呢? 这就需要进行差错控制。还有假设 A 主机是 手机,而 B 主机是 电脑,手机和电脑之间的流量值可能会不一样,比如 A 主机一次能发30个包,而 B 主机一次能接收100 个包,这就需要进行流量控制。
这些也都是要用传输层来解决的问题,传输层主要强调端口信息(两个互相通信的应用程序使用同一端口)。
五、会话层,建立会话、维持会话和终止会话。
当 A 主机和 B 主机实现连接之后,下面就要开始互相通信了,打个比方,我有手机了,你也有手机了,这就有了互相通信的前提了,但我想要给你打电话,就要知道你的电话号码,当我拨通了你的电话号码(这就相当于是建立会话),并且为了防止你我双方讲话的过程中,突然被打断,就需要维持通话(维持会话),当双方通信完成,还需要挂断电话(终止会话)。
六、表示层,解决一些编码问题。
比如 A 主机向 B 主机发送了 “Hello” ,这是一个英文的字符串,那计算机是怎么来表示英文的呢?是用 ASCII 码来表示英文的。那 A 主机再向 B 主机发送 “你好” ,这是一个汉字,那计算机是怎么来表示汉字的呢?首先,我们通过键盘输入的汉字属于输入码,而 A 计算机要将输入码保存为机内码之后,再发送出去。当 B 主机接收到 A 主机发送的信息之后,要将其显示出来,称为字形码。这个就是表示层要做的事情。
七、应用层,提供人机交互的窗口,比如 QQ 软件的界面设计、窗体设计。
在一个相互连接的网络系统上从源地址到目的地址传输数据包(互联网数据包)所提供必要功能的协议,尽量将数据从 源地址 发送到 目的地址。
特点:
不可靠:它不能保证 IP 数据包能成功的到达它的目的地,仅提供尽力而为的传输服务。
无连接:IP 并不维护任何关于后续数据包的状态信息。每个数据包的处理是相互独立的。IP数据包可以不按发送顺序接收。
ip 数据包中含有发送它主机的 ip 地址(源地址)和接收它主机的 ip 地址(目的地址)。
TCP是一种面向连接的,可靠的传输层通信协议。
功能:提供不同主机上的进程间通信。
特点:
1、建立链接 - 》使用链接 -》释放链接(虚电路)(保证连接性)
2、TCP数据包中包含序号和确认序号(保证可靠性)
3、对包进行排序并检错,而损坏的包可以被重传。(保证质量)
服务对象:
需要高度可靠性且面向连接的服务,如 HTTP、FTP、SMTP 等。
总结:TCP 面向连接 可靠 排序 检错 失败重传
TCP是一种面向无连接的,不可靠的传输层通信协议。
功能:提供不同主机上的进程间通信。
特点:
1、发送数据之前不需要建立链接
2、不对数据包的顺序进行检查
3、没有错误检错和重传机制
服务对象:
主要用于 “查询—应答” 的服务,如 NFS(网络文件协议)、NTP(网络时间协议)、DNS(域名解析协议)等。
总结:UDP 无连接 不排序 不检错 不重传 (优点是 速度快)
UDP 和 TCP没有优劣之分,适合自己的才是最好的。
MAC地址,用于标识网络设备,类似于身份证号,且理论上全球唯一。
组成:以太网内的 MAC 地址是一个48 bit (6个字节)的值。
TCP/IP协议采用 端口 标识通信的 进程 。
作用:用于区分一个系统里的多个进程。
特点:
1、对于同一个端口,在不同系统中对应着不同的进程。
2、对于同一个系统,一个端口只能被一个进程拥有。
3、一个进程拥有一个端口后,传输层送到该端口的数据全部被该进程接收,同样,进程送交传输层的数据也通过该端口被送出。
作用:类似 pid 标识一个进程,在网络程序中,用端口号(port)来标识一个运行的网络程序。
特点:
1、端口号是无符号短整型的类型
2、每个端口都拥有一个端口号,一个端口号只能对应一个进程。
3、TCP、UDP 维护各自独立的端口号。
4、网络应用程序至少要占用一个端口号,也可以占有多个端口号。(一个进程可以拥有多个端口号。)
思考 :为什么有了 pid ,还需要端口来标识一个进程呢?
pid 是在同一个系统中去标识不同的进程,而通信双方的网络程序是在不同系统系统上的,所以需要用端口来标识一个进程。
由互联网数字分配机构(IANA)根据用户需要进行统一分配。
例如: FTP — 21,HTTP — 80 等
服务器通常使用的范围:若强制使用,须加 root 权限。
应用程序通常使用的范围。
注意:端口号类似于进程号,同一时刻只能表示一个进程,可以重复使用。