刚刚考完试,就赶紧来总结知识点了。其实好像一直这样忙碌着也挺好,因为有着自己的方向和为之奋斗的事物。
那直接开篇吧,这个博客就是介绍一些网络编程中的初级知识。方便为后面的博客打打基础。
什么是局域网呢?局域网LAN全称是 Local Area Network,Local即标识了局域网是本地,局部组建的一种私有网络。我们一般说的局域网,其实也就是我们在某个小范围内组建的网络,其内部可以传输数据。比较典型的例子就是我们家里的路由器。一个路由器连接多个交换机,然后一个交换机又连接多个主机。
那什么是广域网呢?所谓广域网全称是Wide Area Network,简称WAN。广域网是多个局域网构建的一个大型网络,一般我们通过路由器把多个局域网连接起来,在范围上组成很大范围的网络,就这样我们的广域网就形成了。广域网内的局域网都属于其子网。
这里注意了,在一个局域网内部,各个主机是可以互相访问的。但是如果是多个局域网之间,不使用外部网络来进行连接的时候,是无法互相访问的。而且即便是使用了外部网络连接,但是基于局域网的IP是内部才可以使用的,外部也用不了。
什么是IP地址呢?IP地址就是一个标识,用来标识我们的网络主机,以及其他网络设备(比如说路由器)的一个网络地址。我们局域网IP是只有内部才可以使用的,不同的局域网IP有可能重复。我们公域网的IP是全局唯一的。
IP地址的格式是四个数字,然后每一个数字用八位的二进制数来表示,也就是每一个数字在0~255之间。这里用一个IP地址来举实例,127.0.0.1
就是我们本机的IP。
我们现在根据IP地址确定了一个主机,那么当一个数据被传输到对应的目的主机之后,应该由哪个主机来接收这份数据呢?
为了解决上面的这个问题,我们引入端口号这个概念。什么是端口号?端口号就是标识主机当中发送数据,接收数据的进程。端口号是一个0~65535范围的一个数字。比如说端口号:80
,443
等等。
发送数据:端口怎样发送数据呢?首先发送端的进程向发送端口写数据,系统会把数据经过网卡传输到网络的其他设备
接收数据:端口怎样接收数据呢?系统会把数据发送到指定的端口(数据中指定),再由端口对应的进程来接收。
这里注意了,两个不同的进程是不可以绑定同一个端口号的,但是一个进程可以绑定多个端口号。
当数据被对应的进程接收之后,要怎么解析这个数据呢?毕竟数据根据格式的不同,其编码的种类也肯定不同的呀?
这个时候就需要用到我们的协议了,基于网络数据传输,我们需要使用协议来规定双方的数据格式。那么正式解释一下,什么是协议?
协议是网络通信时,数据在网络设备中流转,都需要遵守的一组规则或者约定。
只有遵守这个规则或者说约定,计算机和计算机之间才能够正常的去通信。那解释了协议的定义,不如把问题再具体点,既然是规定,那规定了那些方面?
1.语法:即就是数据与控制信息的结构或者格式(比如朋友之间打电话,用相同的语言:汉语)
2.语义:即就是需要发出何种控制信息,完成何种动作以及做出何种响应。(类似打电话的时候
你问话我回话)
3.时序:即就是事件实现顺序的详细说明。(类似打电话想好先讲啥,后讲啥,讲话的速度等等)
最终的体现就是在网络上传输的数据包的格式。
这里说一下,系统端口号范围为0~ 65535,其中:0~1023为知名端口号。这些端口预留给服务端程序绑定广泛使用的应用层协议,比如说:
22端口:ssh协议
80端口:http协议
443端口:https协议
有了以上的这些技术的支持,我们就可以去尝试一次完整的数据通信了。在TCP和IP协议当中,是用五元组来标识一个网络通信:
- 源IP:标识源主机
- 源端口号:标识源主机中该次通信发送数据的进程
- 目的IP:标识目的主机
- 目的端口号:标识目的主机中该次通信接收数据的进程
- 协议号:标识发送进程和接收进程双方约定的数据格式
如果感觉这样难以理解的话,可以想一下我们怎样发快递,这里的源IP和源端口号就是寄件人的地址和寄件人本人,这里的目的IP和目的端口号就是收件人地址和收件人本人。而这里的协议号就是我们的快递方式,你是使用的圆通快递还是顺丰快递。
对于网络协议来说,往往是分成几个层次去定义的。在具体的讲解之前,我们要先明白,为什么需要网络协议的分层?
分层最大的好处,就是定义了不同的网络分层,但是具体用来干嘛的,调用方不关心实现细节,而是使用统一的接口来进行调用。
首先要明白,这个七层模型只是逻辑上的定义和规范,把网络从逻辑上分成了七层。但是实际上我们更多的是使用TCP/IP四层(五层)模型。
这里引申OSI七层模型主要是写一下这些分层干了什么
1.应用层:应用程序所处的分层
2.表示层:接收端用什么方式展示
3.会话层:建立会话(什么时候建立连接,什么时候断开连接)
4.传输层:确保数据传输的可靠
5.网络层:地址管理与路由器选择
6.数据链路层:识别数据帧(发送数据到下一个网络设备硬件当中)
7.物理层:网线或者wifi(电磁波)来传输0,1数据
上面已经把每一层干了什么说的很清楚了,这一部分就说一下每一层的代表协议和代表软件/设备。
上面是五层模型,如果是四层模型,就去掉物理层。这里的话还是把代表的硬件设备/软件再说一下。
对于一台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下
四层;
对于一台路由器,它实现了从网络层到物理层,也即是TCP/IP五层模型的下三层;
对于一台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层;
对于集线器,它只实现了物理层;
这里说明一下,我们的不同分层都有其代表协议,所以在网络数据传输,也就是在网络通信的时候,经过不同的网络节点(主机。路由器)的时候,如果是相同的网络分层,那就要使用一样的协议,具体表示如下:
这里其实是延续上面说的,毕竟每一个网络分层之间你不是直接就发送数据的不是?肯定是要做一些处理的。
这就是我们的封装和分用
封装:发送数据的时候,需要把数据包装成某个协议的格式再发送
分用:接收数据的时候,需要把数据按照某个协议格式来解析,再使用。
再进一步说明:
1.不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报
(datagram),在链路层叫做帧(frame)。
2.应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装
(Encapsulation)。
3.首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中
的 "上层协议字段" 将数据交给对应的上层协议处理。
下面就是封装的过程
在发送端主机,就是把像上图一样,把我们的数据一层一层打包起来,然后发送到接收端主机,而接收端主机接收到后,又要一层层的解析(从上图来看是从下往上)。