ip地址:IP地址是ip协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。是用来区分主机的。
端口号:每个应用程序对应一个端口号,通过类似门牌号的端口号,客户端才能真正的访问到该服务器。为了对端口进行区分,将每个端口进行了编号,这就是端口号.是用来区分同一主机上的不同程序的。
协议:协议是一种约定,是通信双方对于通信规则的约定。
注:协议和标准还是有差别的,标准往往是一个认可面非常广的“国家标准”。协议,则不一定,可以是认可面非常广,也可以是认可面不广的。
协议分层:网络通信是一个非常复杂的事情,这个过程中涉及到很多的细节问题。如果只使用一个协议来约定上述所有的细节,这个协议就会非常庞大,复杂。此时,就可以把一个功能复杂的协议,拆分成多个功能更单一的协议了。这些协议要进行分类(分层)。按照不同的功能分成不同的层级,每个层级都有对应的主线任务,上层协议会调用下层协议的功能,下层协议会给上层协议提供服务。(不能“越级调用”)
分层通常有两种:1)OSI七层模型(仅存在于课本上,客观世界中不存在)
2)TCP/IP五层(也可说四层,除去物理层)模型
可以认为是OSI的简化版本,是真实世界采取的网络分层模型。
封装:应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装。首部信息中包含了一些类似于首部有多长,载荷有多长,上层协议是什么等信息。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应地首部,根据首部中的“上层协议字段”将数据交给对应的上层协议处理。
以下为数据封装过程:
以下为数据分用过程:
两台主机之间的网络通信流程:
1)应用层
应用层会将要传递的内容,组织成“应用层数据包”。将要传输的发送人,接收人,消息时间,消息内容组织到一个字符串中,不同的应用层协议数据组织的格式是不相同的。本身要发送的是一个结构化的数据(包含很多属性,字段),把结构化的转化成字符串的过程,称为“序列化”。把字符串转化成结构化数据的过程称为“反序列化”。
2)传输层
传输层(操作系统内核)提供了api(称为socket api)。让应用程序去调用。应用层接下来要把数据交给传输层,传输层拿到应用层数据包之后,就会把这个数据包进行进一步的封装,添加一个报头,构造成传输层数据包,在传输层有两个典型协议TCP和UDP,此处假设使用UDP。
传输层构造好数据包之后,就会继续把数据包交给网络层。
3)网络层
网络层又继续给数据包添加ip报头,ip报头里包含收件人的ip地址和发件人的ip地址。构成ip数据包。
接下来调用数据链路层的api,把ip数据包交给数据链路层的协议。
4)数据链路层
数据链路层的典型协议是以太网,以太网也有自己的数据包格式,就会拿到上述ip数据包,进一步的封装。
至此数据已经进入到网卡驱动中了,接下来就要真正发送出去了。
5)物理层
上述的以太网数据帧,本质上还是0101二进制数据。硬件设备要把上述二进制数据转成光信号/电信号/电磁波,才会真正进行发射。
上述层层包装数据,不停的加数据报头的过程,称为“封装”。
注:服务端:在常⻅的⽹络数据传输场景下,把提供服务的⼀⽅进程,称为服务端,可以提供对外服务。
客⼾端:获取服务的⼀⽅进程,称为客⼾端。
当数据经由交换机/路由器一系列转发之后,最终到达客户端。
客户端所做的就是将上述过程反过来。
上述过程称为“分用”。
注:在纸面上,“路由器”工作在网络层。“交换机”工作在数据链路层。而在真实情况下,现在的路由器和交换机功能越来越多,有些交换机的功能,路由器也有,所以界限就没那么分明了。
请求和响应:
⼀般来说,获取⼀个⽹络资源,涉及到两次⽹络数据传输:
• 第⼀次:请求数据的发送
• 第⼆次:响应数据的发送。
好⽐在快餐店点⼀份炒饭: 先要发起请求:点⼀份炒饭,再有快餐店提供的对应响应:提供⼀份炒饭
以上,关于网络的基本概念,希望对你有所帮助。