一、网络
(一)、原始网络
用线把各个主机连在一起,像个蜘蛛网一样。人们通过这些电线吵架撕逼,但是线太多,网络变大后,密密麻麻的,主机端口也不够用了,吵架的时候,还容易迷路,这咋办?
(二)、局域网
相当于一个快递机构,把线路变少了,主机用户直接撕逼的时候,有帮忙把信息通过正确路径发送。此时就组成了一个局域网。只有这个局域网类的主机才能互相撕逼…
(三)广域网
我打字健步如飞,祖安10年,双亲尚在。区区一个局域网类的用户,都被干下阵来,再也无法满足我触碰键盘的双手,那咋办?再买一台其他局域网的主机?显然不用,把局域网变大变大,可以认为有N多台主机的网路,比较大的局域网,就成为广域网。
二、网络通信
这些主机通过网络连接起来后,要怎么具体的撕逼呢?我用中文和一讲英文的人撕逼的前提是,要么我们之间有一个人会两种语言,要么中间有一个翻译器,同样的我这台主机定义0/1是“你好”的意思,到另一台主机哪里0/1被翻译成“滚蛋”,这种情况咋办?
(一)、协议
说白了就是一个局域网或者广域网中的所有主机规定了一个通用的“语言”,本质上讲就是约定,发出来的数据是啥样的格式,接收方又按照对应的格式翻译。在这协议中不仅要另一台主机知道这个格式数据讲了啥,还要路由器知道这个协议要发送给那一台主机上。
(二)协议分层:OSI七层网络模型:
把一个大协议分成写小协议,不同专业的人只关注自己那一层协议,如:我是个程序员就关注应用层协议是啥样的
(注):真实情况下常使用OSI的简化版本,TCP/IP五层(四层)网络模型
- 物理层:网络通信中的硬件设备,以0/1表示光电信号,规定要使用这片网的主 机和路由器之间的接口、网卡、数据线、网线是什么规制的,口径要多大等。
- 数据链路层:负责完成相连的两个设备之间的通信,规定互联设备之间传送和识别数据帧。
- 网络层:负责点到点之间的连线,任意节点到任意节点之间的通信,规划好A主机要怎么走,要经过多少台路由器或其他主机才能到达B主机。
- 传输层:负责端到端之间的传输,只关注结果,A主机上的那个应用软件要在B主机上的那个“应用软件”才能使用。
- 应用层:主机A传到主机B的数据是干啥用到。
三、IP地址和端口号
主机之间连成网络了,协议也搞好了。没有地址,还是和别人不能撕逼,回到刚开始问题,我的主机是A,别人的主机也叫A,怎么区分是从哪到哪的地址呢?
也就是在网路层中,必须给每个主机一个唯一的表示地址,才能进行点到点之间的连线。
(一)IP地址:
描述网络上一个之间位置,在ipv4协议中是32位的整数,为了人类好识别采用点分十进制的表示方法,如:127.139.12.255
(注:IPv4协议地址是不够用的,怎么解决这个不够用的问题,下回再说)
(二)端口号:
描述主机上某个应用程序的位置,本质上是两个字节的无符号整数。
如:3306,就是mysql默认的端口号
范围:0~~65535
(注:这丫的也不够用,咋办?下次再说)
四、封装
把这些一整个大协议给分开了,那还是要合并起来,人家才看得懂呀,那怎么合并起来呢?就是层层封装。
(一)应用层:
程序猿自己实现了软件,写了些代码,然后通过调用操作系统提供的API(socket API),把应用层数据打包交给传输层(进入操作系统内核)。
(二)、传输层
传输层根据传过来的数据,基于当前的传输层协议(UDP /TCP),来构造一个传输层协议报文。
- TCP/UDP数据报有源端口号和目的端口号,从而知道主机应用到那个主机应用的传输。
(三)、网络层
网络层得到传输层的的数据报,再根据当前使用的网络层协议(IP),再次封装,把TCP数据报构造成一个IP数据报。
- IP数据报中有源IP和目的IP,以此来知道从那个主机到那个主机的传输。
(四)数据链路层
在IP数据报的基础上,根据当前使用的数据链路层协议(以太网),再次封装,构造出一个数据链路层的数据报:“以太网数据帧”
- 帧头和帧尾是接下来一个相邻节点的地址(网络传输路线中的中转站)。
总结:从上往下,数据从上层协议不断的交给下层协议,由下层协议进行封装,构造出层层协议报文。
(五)、分用
封装的逆过程,逐层解析,主机A把数据封装成一个大报文,交个路由器或者主机B,那主机B就要层层解析,最终看见应用层数据。
至此:你可以愉快的在网上撕逼啦