目录
网络通信基础
IP地址
- 网络互联的的目的就是为了网络通信, 更具体一点就是网络中不同主机的通信. 那么在组建的网络中, 如何判断是从到底从当前主机到另一台主机的通信呢? 我们必须要找到另一台主机的地址吧. 这个地址就是用IP地址来表示. 就好比我们的快递物流一样, 我们的快递要从哪里开始发送. 最终送到到哪里呢? 都要有一个地址来表示, 比如从成都(发送) 到 重庆(送达), 成都和重庆就是IP地址. 那么得出概念
- 概念:IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址。
- 格式: IP地址是⼀个32位的⼆进制数,通常被分割为4个“8位⼆进制数”(也就是4个字节),如:01100100.00000100.00000101.00000110。
通常⽤“点分⼗进制”的⽅式来表⽰,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的⼗进制整数)。如:100.4.5.6。
端口号
- 上面说了我们送快递的起始地址相当于IP地址, 但是我们知道不光要填起始地点, 我们还要填收件人, 比如重庆巴南xx大学的小李, 我们快递员才能分别出这个快递是那个的, 不然整个大学这么多人, 知道这个快递到底是哪个的呢? 其中小李就是收件人. 这里的小李就相当于是我们的端口号. 那么在网络通信中的概念:
- 概念:端⼝号可以标识主机中发送数据、接收数据的进程。简单说:端⼝号⽤于定位主机中的进程。(也就是表示网络主机中的那个进程程序)
- 格式:端⼝号是0~65535范围的数字,在⽹络通信中,进程可以通过绑定⼀个端⼝号,来发送及接收⽹络数
据。
问题:
有了IP地址和端口号,可以定位到网络中唯一的一个进程,但还存在一个问题,网络通信是基于二进制0/1数据来传输,如何告诉对方发送的数据是什么样的呢?
网络通信传输的数据类型可能有多种:图片,视频,文本等。同一个类型的数据,格式可能也不同,如发送一个文本字符串“你好!”; 如何标识发送的数据是文本类型,及文本的编码格式呢?
基于网络数据传输,需要使用协议来规定双方的数据格式。
网络协议
- 协议相当于规定了发送方的数据怎么发, 那么接受方的数据就得怎么解析. 这样我们接收方和发送方都遵守同一个协议来保证数据格式, 那么当发送方发送的是文本数据格式的时候, 接收方也必须得以文本数据格式来解析这个网络数据包. 那么拿到的数据一定是文本数据格式的.
- 再举一个例子就是我们生活中通常需要买灯管. 这个时候我们通常是随便找一家电器店买一个大小和原来差不多的灯管. 那么我们就可以直接安装在灯座上. 从这个事情中可以看出, 我们并不需要找到灯座指定的灯管 才能安装上去. 因为大部分厂家生成的灯管都遵守这个灯座上的接口协议, 那么大部分厂家生产灯管的时候都按照这个灯座的协议来生产灯管. 这个时候我们就不需要特别在意这个灯座对应的灯管是那个了, 因为大部分厂家都是遵守这个灯座接口协议的.
- 概念: 协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。
- 协议(protocol)最终体现为在⽹络上传输的数据包的格式。
五元组
- 五元组在网络通信中的作用体现
协议分层
- 网络通信是非常复杂的, 如果我们要设计一个协议来完成整个网络通信的话. 那么这个协议一定会非常复杂和庞大. 这个时候我们把一个大的协议拆分成若干个小的协议. 这个时候分出来的小的协议一定会很多. 那么我们又把他整理归类. 把相同类型的协议放在同一层. 这些协议就会分成若干层. 然后规定, 只有相邻两层的协议之间可以进行通信. 上层协议可以调度下层协议. 下层协议对上层协议提供服务.
- 这个就相当于我们一个大公司. 员工有200个人. 那么我们不可能让老板一个人直接管理全部员工吧. 这个时候老板选20个人当组长, 剩下的180个人每个组长选9个人当组员. 那么老板就只需要管理组长, 而组长则需要管理组员. 这个时候我们就方便管理了. 并且职场中, 如果组员有什么问题应该向组长汇报. 而不是直接向老板汇报.
- 协议分层的好处:
- 封装: 上层协议并不需要 了解下层协议的细节.
- 解耦: 分层之后, 可以直接替换某一层的协议. 对整体工作的过程影响非常小.
- 这里我们语言层并不关心下一层的协议细节. 只需要遵守而我们这一层的协议就可以直接通信. 并且我们替换了通信设备层的电话机也并没有对我们语言层的通信造成影响. 我们还是可以直接用汉语协议进行通信.
OSI七层模型和TCP/IP五层(或四层)模型
- 这套分层模型在工作中并不实用, 我们详细介绍TCP/IP分层模型
- 下面从低到高介绍TCP/IP五层模型
- 物理层: 规定了网络通信中一些硬件设备需要符合的要求. 如常见的网线, wifi, 光纤这三种通信介质. 他们必须符合的一些要求.(这相当于是我们快递运输上的公路. 要送快递就要先有公路才能运输)
- 数据链路层: 完成两个相邻设备之间的通信, 比如通过网线. 把电脑连到路由器/交换机上.(这里是尝试一小步的通信)(比如我们上学时候, 如果自习课或上课和相邻的同桌传纸条)
- 网络层: 这个则是完成任意两个设备之间的通信, 两个设备之间可以隔着很多的路由器/交换机. (比如上学时候, 我们想要和第一排的女神讲话, 但是我们在最后一排, 就会拜托前面的同学把纸条传给第一排的女神)
- 传输层: 也是任意设备之间的通信, 不考虑中间过程, 只考虑终点和起点. (比如快递中我们商家和只需要考虑从哪里发然后送到哪里. 即填快递单), 不在乎中间是经历那些地方(比如重庆到北京, 可能中间会经历广东, 上海, 这些我们并不关心)
- 应用层: 这一层只关心我们拿到数据后该怎么使用. 比如我们买了一个诺基亚手机, 可以用它来打电话, 也可以用它来砸核桃.
总结:
关心诺基亚手机买到后, 如何使用 -> 应用层
卖家只关心发送地点和送达地点 -> 传输层
物理公司关心包裹是走那条路从发送地点到送达地点(比如走那条高速) -> 网络层
快递小哥关心相邻节点怎么送达(先送到相邻那个地点, 再送到相邻那个地点) -> 数据链路层
政府关心如何修路让快递物理可以运输快递 -> 物理层
网络设备所在分层
- 对于一台主机涉及到, 从物理层->应用层, 主机通过应用程序满足网络通信的需求
- 对于一台路由器涉及到, 从物理层->网络层, 路由器组建局域网, 进行网络数据包的转发
- 对于一台交换机涉及到, 从物理层->数据链路层, 交换机是对路由器接口的扩展, 不需要考虑组网的问题
- 注意我们这里说的是传统意义上的交换机和路由器,也称为二层交换机(工作在TCP/IP五层模型的下两层)、三层路由器(工作在TCP/IP五层模型的下三层)。
随着现在网络设备技术的不断发展,也出现了很多3层或4层交换机, 4层路由器。我们以下说的网络设备都是传统意义上的交换机和路由器.
所以现在可能通过wx发送一个数据, 经过某个运用商的路由器, 他就把你发送的内容解析出来了, 那么这个路由器就相当于工作在应用层
协议分层背景下, 数据网络传输的基本流程
封装
- 按照TCP / IP五层网络模型协议有五层:应用层、传输层、网络层、数据链路层、物理层。传输层为应用层提供服务,网络编程主要就是学习传输层和应用层交互
- 下面整个过程叫做封装
- 这个时候我们来通过张三用QQ向李四发送hello这个消息的例子来说明。
- 这个时候要我们构造的应用层数据包里面的数据往往是一个结构化数据,类似于C语言中的结构体。但是我们要注意:当发送数据的时候会把结构化数据转换成二进制比特流(序列化)。接受到数据的时候又会把数据构造成结构化数据(反序列化)
- 为什么要这样做? 这是因为我们结构化数据不能直接在网线, 光纤这种传输介质上传输, 网线只能用电信号来表示0和1,光纤则是也只能用光信号来表示0和1, 这个时候我们就需要把结构化数据转换成二进制比特流。 让我们数据能够通过网络介质来传输。 就好比我们网上买一张床一样, 如果商家直接把整张床发过来, 并不方便运输并且容易损坏。 这个时候我们就把床拆成若干个零件。 方便安全运输。当我们收到床的时候, 就会把这些零件拼接成一张完整的床。(反序列化)
- 为啥这里要加一个TCP报头呢? 有什么作用呢? 例如我们生活中商家寄一件毛衣, 他不可能是把毛衣揉成一团直接让快递小哥去运输吧。 通常都会对毛衣进行包装。 包装后交给快递小哥。 包装好后就可以在快递上贴一个快递标签, 标签上涵盖了这次传输所需要的信息。 比如发货地和接受地。 发件人和收件人。而这里的TCP报头就包含了五元组中的源端口和目的端口(作用是知道是那个应用程序发的, 要发给那个应用程序)等信息。
- 这里IP报头中就包含了源IP和目的IP(作用是分用的时候知道是那个主机发的, 然后要发给那个主机), 有人可能会察觉到五元组中的信息已经在这个数据包中出现了4个, 就差一个协议类型了。 这个协议类型也是在哪里存储的呢, 其实协议类型这个数据是在每一层的报头或报尾中的。他们记录了上一层使用的是什么类型的协议。这个时候我们在分用的时候,比如数据链路层把数据包分用给网络层, 这个时候以太网报头中刚好就记录了上一层(网络层)的协议类型,这个时候我们就可以按照约定好的协议来解析数据包。交给网络层了
分用
- 物理层数据信号是通过什么传输介质传输的, 也直接关联了怎么分用解析到数据链路层。 网线/光纤来的数据链路层使用的是以太网协议。 wifl来的数据数据链路层使用的是802.11协议
- 这里也体现了我们协议类型的作用
传输过程中的封装和分用
- 在网络传输中, 我们通常不只是两个主机之间直接进行通信, 而是需要通过多个交换机或者路由器来实现数据的传输。
- 这个时候呢, 我们不同的网络设备在传输的过程中也会进行封装和分用。再进行封装和分用后。才会进行数据转发给下一个设备。
/mark>