;网络通信的目的是资源共享,数据之间基于介质传输数据,那么这些传输数据的节点之间是如何判断信息的来源,和目的呢?
环回IP:本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。是使用一个特殊的ip地址127.0.0.1来实现的
端口号可以标识主机中发送数据、接收数据的进程。例如mysql服务器默认绑定3306端口。
网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。协议最终体现为在网络上传输的数据包的格式。
由于网络环境的复杂性,在进行网络通信时的状况比较复杂,所以在传输时就需要提前确定好如何传输,数据如何组织,如何发送数据,网络线路如何选择…
如果使用一个协议来约定和解决所有问题,会导致这个协议非常复杂,非常的庞大,因此在设计网络协议时,就对网络协议进行拆分,这样:
上层协议调用下层协议,不需要了解下层协议的实现细节(封装)
下层协议给上层协议提高支持
可以灵活的调整替换某层协议
有了这样的层次结构,就可以避免夸层次交互,降低了协议之间的耦合,提高了协议系统的可读性
在TCP/IP协议中,用五元组来标识一个网络通信:
网络通信是一个比较复杂的工作,如果靠一个协议来解决所有的问题,会导致这个协议非常庞大、复杂。
网络分层就可以让网络的体系结构更加清晰的呈现。上层协议调用下层协议,下层协议给上层协议提高支持。每个层次之间不需要明确层次结构,每个层次对外隐藏实现细节,对每个层次之间的协议也可以根据需要灵活调整。这样就降低了耦合。
由于理论和实践之间的差异,理论上网络有七层OSI七层模型 - 参考模型,而各大产商支持的普遍是TCP/IP五层协议。
在具体实践中,将OSI中的应用层、表示层、会话层合并为TCP/IP中的应用层。
通信双方通信数据的规范
通常是根据场景和需求,由程序员自主决定的
只关注通信的起点和终点 - 端口
网络传输路线如何规划 - IP地址
描相邻节点之间的如何 - MAC地址
描述了网络基础设施的规范和标准
我们通过一个例子来看网络中的封装和分用。比如我给对方发送一句”hello“,这句“hello”,对方是如何收到的。
(我 微信号:111111):
1. 应用层:微信客户端按照应用层的协议将”hello“封装成应用层的数据报,然后交给传输层。假设微信的应用层的协议这样组织(发送方微信号,接收方微信号,时间,正文):
应用层就可以根据协议构造上述的应用层数据报,构造好后调用传输层API将这个数据报交给传输层。
UDP不会关心应用层的数据是什么,将其当做本层载荷进行封装。传输层封装完成后,进一步将UDP数据报交给网络层。
网络层:网络层最主要的协议是IP协议,此处网络层拿到UDP数据报后会将其封装成IP数据报:
同样的,IP层也不会关心UDP的内容,只会将其当做本层的载荷,进行封装。
数据链路层:使用以太网对上层协议(IP数据报)进行封装,加上以太网帧头和帧尾。
物理层:物理层根据物理层协议规范(网卡)将以太网数据报转换成01序列进一步转换成光/电信号进行发送
中间情况:中间可能会经过路由器交换机的转发,先拆包,在封装,具体拆到那一层取决于是交换机还是路由器。
(对方 微信号:222222):
发送方从应用层到物理层逐层封装,接收方从物理层到应用层逐层解析,每个层次之间相互独立,完成自己的功能,相互配合,完成了数据的传输。
总结: