1. 网络互连
2. 局域网和广域网
3. IP地址和端口号
4. 网络协议
5. OSI七层模型
6. TCP/IP模型
7. 模拟实现网络通信
1. 网络互连
几十年前, 在计算机刚刚兴起的时候, 计算机之间是相互独立的, 然而, 随着时代的发展, 越来越需要计算机之间的相互通信, 需要计算机之间进行共享数据, 传输数据, 也就是多个计算机协同完成业务, 于是, 网络互连由此产生.
网络互连:多台计算机连接在一起, 实现数据的共享. 数据共享的本质其实就是网络中的数据传输, 即计算机通过网络来传输数据, 又叫做网络通信. 根据网络互连的规模大小, 我们将网络的互连划分为局域网和广域网.
局域网和广域网局域网(local area Network), 又叫LAN, 局域网是在本地范围内局部组建的一种私有网络(例如一间办公室内的网络, 一个家庭里的网络)
广域网(wide area Network), 又叫WAN, 通过路由器将多个局域网连接起来, 形成一个非常庞大的网络体系, 就构成了一个广域网, 广域网内部的局域网都属于其子网, 全球最大的广域网为 - “Internet”(因特网)
局域网和广域网之间没有明显的划分, 也就是没有规定多少米范围内的网络属于广域网还是局域网, 要判断一个网络属于广域网还是局域网, 从宏观上判断即可, 范围小的网络即为局域网, 范围大的网络即为广域网.
IP地址和端口号在进行网络互连时, 网络中的设备非常多, 像主机, 交换机, 路由器等设备都属于网络互连中的设备, 那么,如何将这么多的设备进行区分呢?
这就用到了IP地址, IP地址用于标识网络主机以及其他网络设备(如路由器)的网络地址, 简单来说, IP地址定位了网络中每台设备的位置.
IP地址的格式是一个4字节(也就是32个比特位)的二进制数, 通常情况下, IP地址都被分割为4个"8位2进制数", 每个数字之间用点号" . “连接, 而每个8位二进制数的范围为 0~255, 因此, 最大的IP地址为"255.255.255.255”.
IP地址解决了设备在网络中的地址问题, 然而, 一台主机中可能同时运行着多个进程, 数据传输到相应的主机之后, 要由哪个进程来进行接收呢?
在网络通信中, 端口号用于标识主机中发送和接收数据的进程, 也就是说, 数据通过IP地址发送给主机,然后通过端口号来定位到需要获取这些数据的进程.
端口号是一个范围为0~65535的数字, 在网络通信中, 进程可以通过绑定一个端口号来实现网络数据的接收和发送. 例如, MySQL服务器的默认端口号为3306.
注意:在网络通信中, 同一个进程可以有多个不同的端口号, 但是, 不同进程的端口号不可以相同.
引入网络协议
有了IP地址和端口号之后, 就可以正确地定位到网络中特定主机上的进程, 那么, 进程和进程之间是如何实现数据传输的呢?例如, 我通过我的主机向其他人的主机发送了一条消息, 一个文档, 又发送了一张图片, 那网络是如何精准无误地将不同类型的数据传输到其他人的主机呢?
基于网络传输, 可以通过协议来规定双方的数据格式.
4. 网络协议网络协议是网络通信过程中所有网络设备都必须遵守的一组约定和规则, 如怎样建立设备间的连接, 怎样互相识别等. 只有所有的设备都遵从网络协议, 才能实现设备间的通信交流.
网络协议的三要素:
- 语法:数据与控制信息的结构或格式
- 语义:即需要发出何种控制信息, 完成何种动作以及做出何种响应
- 时序:规定了事件实现的先后顺序
为什么要使用网络协议呢?
使用网络协议是为了消除网络中的差异. 例如, 如果没有物理层协议(网络协议中的一种), 不同的生产厂家生产出的计算机可能各不相同, 甚至是接口的大小和形状可能都会各有千秋.
为了统一进行管理所有的网络设备, ISO提出了一个模型, 也就是OSI七层网络模型, 每层都有其对应的网络协议.
5. OSI七层模型OSI:即Open System Interconnection, 开放系统互联
OSI七层模型的体系结构为:
OSI模型将网络从逻辑上分为了七层(注意:分层仅限于逻辑层面, 而并非物理层面), 其最大的好处就是将服务, 接口和协议明确地区分开, 概念清楚, 理论完整, 通过七个层次化的结构模型使不同的系统, 不同的网络之间实现可靠的通讯.
但是, OSI模型有着明显的缺点, 这个模型太过理想化, 庞大的体系结构使得它既复杂又不实用, 这样的缺点使得这个模型几乎只存在于理论中, 生活中实际应用的是另一种模型 - TCP/IP五层模型, 这也是我们需要重点学习的.
6. TCP/IP模型
可以看到, 五层模型将OSI七层模型中的上面三层(应用层, 表示层, 会话层)合并在了一起, 组成了新的应用层.
TCP/IP模型中每层的功能:
- 物理层:负责网络通信中的硬件设备, 所有针对硬件设备的约定都是物理层协议所负责的, 物理层协议需要保证所有的主机和网络设备之间是相互匹配的
- 数据链路层:负责相邻两个设备之间的通信(相邻设备就是通过网线连接起来的设备)
- 网络层:负责点到点之间的通信, 也就是在网络中的任意节点到任意节点之间, 由网络层协议负责在这两个节点之间规划出一条合适的路线
- 传输层:负责端到端之间的通信, 与网络层不同, 传输层只关注结果不关注过程, 也就是只需要关注起点和终点, 不需要关心数据是通过哪条网络路径到达的
- 应用层:和应用程序密切相关, 数据对于不同的应用程序有不同的用途
发送方向接收方发送一条消息:
- 发送方的应用层协议开始生效, 发送消息的进程会根据该进程的应用层协议构造出一个应用层的协议报文(报文:遵从网络协议的数据)
创建好应用层报文之后, 应用层协议就会调用 *** 作系统的API(也就是socket), 将应用层的数据交给传输层处理
2.传输层将应用层传过来的协议进行封装, 也就是为协议加上传输层协议的报头.
传输层最典型的协议有TCP协议, UDP协议等, 以TCP协议为例:
TCP报头中存放了源端口和目的端口等信息, 封装好之后, 传输层会将报文传给网络层
-
网络层获取到传输层传来的报文之后, 会根据当前正在使用的网络层协议(例如IP协议)继续对报文进行封装, 再次为报文加上报头, 将TCP数据报构造成IP数据报(网络层的 *** 作是在 *** 作系统内核中进行的)
IP数据报头中存放了源IP和目的IP等信息, 封装好之后, 网络层将报文传给数据链路层 -
报文传输到数据链路层之后, 数据链路层会根据当前的协议(数据链路层最常用的协议是以太网协议)构造出一个数据链路层的数据报, 例如以太网协议帧
以太网数据帧的帧头中存放的是下一个要到达的设备的地址(类似于中转站), 帧尾中存放的是校验和(后面会学到), 封装完成之后, 数据链路层会将以太网数据帧发送给物理层
- 物理层收到数据链路层发来的以太网数据帧(一组二进制数据)之后, 会将其中的1和0分别变为高点平和低电平, 然后通过光纤或无线的方式传送出去, 至此, 这些数据就脱离了发送方的主机, 经过若干个路由器或交换机的转发, 将数据送往接收方.
接收方收到消息:
-
接收方的物理层率先感知到一组高低电平, 然后将这组点平翻译为0和1的二进制编码(也就是一个完整的以太帧), 将这个以太帧发送到接收方的数据链路层
-
数据链路层接收到以太帧之后, 将以太帧的帧头和帧尾去掉, 取出其中的IP数据报, 将去掉帧头和帧尾的报文发送给网络层
-
网络层接收到报文之后, 将IP报头去掉, 取出里面的TCP数据报交给传输层
-
传输层又会对获取到的报文进行解析, 去掉TCP报头, 取出应用层报文并传给应用层
-
应用层调用socket API从内核中读取到报文, 并按照应用层协议对该报文进行解析, 并将结果显示出来.
至此, 一次数据的发送过程就执行完了. 可以看出, 在这个执行过程中, 发送方的每一层都在对报文添加相应的信息, 这个过程叫做封装, 而接收方对报文中每一层信息的去除, 这一 *** 作叫做分用.
对于上面的数据传输 *** 作, 我们忽略了中间的转发过程, 实际上, 数据转发的过程是非常复杂的, 用于数据转发的路由器, 交换机等设备也都实现了TCP/IP模型, 只不过这些设备只实现了一部分, 例如:
交换机实现了物理层和数据链路层, 交换机转发的大致 *** 作为:先对报文进行分用(也就是拆分), 将报文解析到数据链路层, 更新以太网数据帧的帧头中的地址, 然后重新封装, 再进行转发.
路由器实现了物理层, 数据链路层和网络层, 路由器进行转发的大致 *** 作为:路由器对报文进行分用, 一直将报文解析到网络层, 拿到IP地址后进行下一阶段的路线规划, 然后向下封装, 并进行转发.
The end
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)