文章目录
网络原理
一、网络传输的基本流程
1.网络发展史
军用->民用
单机时代->局域网时代->广域网时代->移动互联网时代
1.独立模式
- 计算机之间相互独立 ,各自持有数据
2.网络互联
- 将多台计算机连接在一起,完成数据共享(本质是网络数据传输,也叫网络通信)
3.局域网LAN
局域网,即 Local Area Network,简称LAN
把几个电脑通过路由器连到一起
1.基于网线直连
2.基于集线器(Hub)组建
3.基于交换机(Switch)组建
4.基于交换机和路由器(Router)组建
路由器:家用路由器常见为5个网口(1个WAN,4个LAN)
要想让几台电脑能在同一个局域网中上网,需要把它们连接在LAN口上。WAN口用来连上机的路由器
交换机:可以扩展路由器的端口
4.广域网WAN
- 广域网,即 Wide Area Network,简称WAN
通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的
局域网都属于其子网。
2.网络通信
网络互连的目的是进行网络通信。是网络主机中的不同进程之间,基于网络传输数据。
1.IP地址
用来定位网络主机的地址
描述了一个设备,在网络上的地址。使用一个32位,4个字节的数字来表示。一般会把IP地址表示成4个0~255之间的十进制数,并用三个点进行分隔。(点分十进制)
01100100.00000100.00000101.00000110
100.4.5.6
本机环回
127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1
本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于
开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信
2.端口号
- 用来区分一个主机上不同的应用程序,定位主机中的进程
IP地址->收货地址,端口号->收货人
- 端口号也是一个整数,两个字节,0~65535 。
- 其中 1~1023这个范围的端口号(知名端口号,留给常见的服务器程序使用),写程序时不应该占用。0一般不使用。
22->ssh 、23->telnet 、 80->http 、 443->https
在网络通信中,进程可以绑定一个端口号,来发送和接受网络数据。两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号。
端口号3306就被mysql服务器绑定了,同时mysql也可以绑定别的端口号。但是其他程序就不能绑定3306了。
在实际的开发中,IP和端口往往是“一对”:源IP、源端口、目标IP、目标端口
3.协议
协议就是一种约定,约定了通信双方按照什么方式来传递数据。协议是网络协议的简称。网络协议是网络通信经过的所有网络设备都必须共同遵守的规则。
协议(protocol)最终体现为在网络上传输的数据包的格式
22端口:预留给SSH服务器绑定SSH协议
21端口:预留给FTP服务器绑定FTP协议
23端口:预留给Telnet服务器绑定Telnet协议
80端口:预留给HTTP服务器绑定HTTP协议
443端口:预留给HTTPS服务器绑定HTTPS协议
五元组
- 源IP、源端口、目的IP、目的端口、协议类型 :一次通信过程中,必不可少的信息
cmd中,输入 netstat -ano 查看网络数据传输中的五元组信息,如果需要过滤(一般是通过端口号或进程PID过滤),可以使用 netstat -ano | findstr 过滤字符串
协议分层
网络通信的场景,可能会比较复杂,有很多问题需要通过协议解决。如果只用一个大的协议来解决所有问题,这个协议就会非常复杂庞大。因此可以把大的协议拆分成多个小的协议。使每个小的协议都不会太复杂,进行化繁为简。但同时,拆分的小协议太多了反而不好进行管理。所以就需要对协议进行分层,按照协议的定位/作用来进行分类。并且约定了不同层次之间的“调用关系”。(上层协议调用下层协议,下层协议给上层协议提供支持)此时即使协议比较多,也可以完成相关工作。
分层的作用
1.协议层次之后,上层和下层彼此之间就形成了封装。使用上层协议,不必过多的关注下层。使用下层协议,也不用过多关注上层。降低了使用者的成本。只需要用而不需要明白原理。
2.每一层协议都可以根据需要灵活替换
4.网络模型
OSI七层网络模型(只出现在教科书中)
从上往下,从软件越来越接近硬件
TCP/IP五层网络模型(是OSI是简化版本)
TCP/IP五层模型将OSI的会话层、表示层、应用层 合在了一起
- 应用层对应到应用程序(自己写的代码),传输层和网络层对应到操作系统的内核(现成的,不需要手动实现),数据链路层和物理层 对应的是驱动程序和硬件。
5.应用层:应用程序如何使用拿到的这个数据
程序员要关注的点
4.传输层:关注起点和终点
淘宝商家发货时,只关心自己的发件人地址和电话以及收件人的地址和电话
3.网络层:进行路径规划
快递公司拿到包裹,进行路径规划
2.数据链路层:两个相邻结点之间的数据传输情况
拿到了规划的路线,考利每一步的相邻结点该怎么走
1.物理层:描述的是网络通信的硬件设备。比如规定使用的网线、光纤的规格
相当于基础设施:公路、铁路
网络设备所在的分层
只是对于传统设备的描述,设备的迭代往往有更多的功能
1.对于一台主机来说,操作系统内核实现了从传输层到物理层的内容(下四层)
2.对于一台三层路由器,它实现了从网络层到物理层(下三层)
3.对于一台二层交换机,它实现了从数据链路层到物理层(下两层)
交换机的作用,是针对路由器的端口进行扩展
2.对于集线器,只实现了物理层。
在物理层把网线一分为二
4.封装和分用
描述了网络通信的过程中,基本的数据传输流程。
比如:A通过QQ把 “nb woc” 传递给 B
发送方
1.应用层:
QQ应用程序,把用户A输入的“nb woc”,打包成一个应用层的数据报(这个数据报的格式,只有qq的程序员知道)
假设按照这样的格式:
源qq、目的qq、发送时间、发送内容
123456,654321,2024-04-25 12:00,nb woc
这四个字段使用,来分割。这里就构成了一个简单的应用层数据报(字符串拼贴)。
上述描述的规则,就是此处我们约定的应用层协议。应用层协议中,具体用几个字段,字段的顺序,什么分隔符都可以由程序员根据具体的场景和具体的需求来自主决定。
打包完毕之后,就可以把应用层数据报,通过操作系统的API,把数据交给传输层
2.传输层
对刚才的应用层数据,再次进行打包,变成传输层数据报。
本质上还是”字符串拼接“,在刚才的应用层数据基础上,拼贴传输层的报头。
- 传输层的典型协议:TCP, UDP
以UDP为例:一个数据报 = 报头+载荷
UDP报头中最关键的信息就是“源端口”和“目的端口”
进行封装的过程,就是给数据添加更多的“辅助信息”
就相当于快递运送的时候,会进行多次包装(塑封、外层包装、快递盒等等),就可以在包装外面贴上标签信息。同时,打包也可以保护要传输的内容不被破坏。
打包成传输层数据报之后,这个数据又会进一步交给网络层。
3.网络层
在网络层会再次进行封装,打包成网络层数据报,然后交给数据链路层。
IP报头中,最重要的属性是源IP和目的IP
4.数据链路层
会再次打包成以太网的数据报,交给物理层进行传输。
以太网的报头中,最主要的信息就是mac地址 和 目标mac地址。
5.物理层
把上述的数据,转换成二进制的01序列。通过光信号/电信号进行传输。
- 数据的封装:从上层协议到下层协议,层层给数据添加报头。一方面“贴上”辅助信息,来决定后续怎么传输数据。另一方面,可以通过报头来对传输的数据进行校验。就能及时的发现传输过程中的问题。
数据发送出去之后,由于A和B不是通过网线直连的,中间还要经过很多交换机/路由器设备进行转发。
接收方
当数据到达B之后,B就要针对上述数据进行“分用”
对数据报进行层层解析 ->拆快递!
1.物理层
拿到的光电信号转换成二进制数据,得到以太网数据报。交给数据链路层的协议来处理。
2.数据链路层
通过以太网协议,针对以太网数据报进行解析。解析出报头和报尾,以及中间的载荷。把载荷部分交给网络层协议来处理。
3.网络层
通过IP协议,对网络层数据报进行解析,去掉报头,拿到载荷。再进一步把载荷数据交给传输层。
4.传输层
通过UDP协议,针对这个数据报进行解析,去掉报头。把载荷信息交给应用层。
5.应用层
根据端口号,把数据交给QQ应用程序。QQ拿到数据进行解析,解析的方式就是QQ程序员自定义的应用层协议。
取出来nb woc,显示到页面上
实际上,数据报在网络中间还会经历一定的转发过程。如果经过路由器,就会封装分用到网络层。路由器解析到网络层,拿到IP地址后,决定下一步如何进行传输。在下一步传输的时候,又会重新经过网络层、数据链路层和物理层的封装。
如果经过的是交换机,就会封装分用到数据链路层。拿到mac地址来进行下一步的判断。