1.网络互联网络互联就是将多台计算机连接在一起完成数据共享。数据共享本质就是网络数据传输即计算机之间通过网络来传输数据也称为网络通信。根据网络互联的规模不同可以划分为局域网和广域网。1.1 局域网局域网即Local Area Network简称LAN。Local即标识了局域网是本地的局部组建了一种私有网络。局域网内的主机能方便的进行网络通信又称为内网局域网和局域网之间在没有连接的情况下位于不同局域网内的主机是不能够通信的。局域网的组建方式有很多种(1) 基于网线直连2基于集线器直连3基于交换机直连4基于交换机和路由器直连1.2 广域网广域网即Wide Area Network简称WAN。通过路由器将多个局域网连接起来在物理上组成很大范围的网络就行成了广域网。广域网内部的局域网都属于其子网。2.网络通信基础网络互联的目的是进行网络通信也叫网络数据传输更具体一点就是主机中的不同进程之间基于网络传输数据。那么在组建的网络中如何判断数据是从哪一台主机将数据传送给哪一台主机呢这时候就需要使用IP地址来标识。2.1 IP地址IP地址主要用于标识网络主机、其他网络设备如路由器的网络地址简单来说IP地址就是用来标识主机网络地址。IP地址是一个32位的二进制数通常被分割位4个“8位二进制数”也就是4个字节如01100100.00000100.00000101.00000110。通常用”点分十进制“的方式来表示即a.b.c.d的形式abcd都是0~255之间的十进制数字如上面的IP地址的”点分十进制“100.4.5.6一个特殊的IP地址127.0.0.1127.0.0.1被称为本地回环地址主要用于标识本地主机即本地计算机本身和网络测试和开发用途。2.2 端口号在网络通信中端口号可以标识主机中发送数据和接收数据的进程应用程序简单来说端口号用来标识主机中的进程应用程序端口号是一个0~65535范围内的数字在网络通信中进程应用程序可以通过绑定一个端口号来发送和接收网络数据。问题有了IP地址和端口号我们就可以定位到网络中唯一的一个进程但是网络通信是基于二进制0/1数据来传输的 也就是对端接收到的数据是一串二进制数据那对端是如何正确解析二进制数据正确得获得对方发送过来得内容呢网络通信的数据类型有很多种如图片视频文本等。同一个类型的数据格式也可能会不同例如纯文本和富文本都是文本数据但是纯文本格式只是简单的字符序列而富文本格式则可以包含字体样式、颜色、超链接等多种格式信息。如我们发送一个文本字符串”你好“是如何标识发送的数据是文本数据类型及文本的编码格式呢所以基于网络数据传输需要使用协议来规定双反方的数据格式。3.认识协议在网络领域中协议是网络协议的简称。网络协议是所有网络通信即网络数据传输的网络设备必须共同遵守的一组约定、规则。例如网络设备间如何建立连接、怎样互相识别等。只有遵守这个协议计算机之间才能相互通信交流。简单来说网络协议是通信双方对于发送和接收数据格式的约定我的数据怎么发出去的你收到就得怎么解析。在网络通信中协议非常重要只有互相通信之间的多个主机能认同并遵守同一套协议此时的通信才是有意义的。协议最终体现为在网络上传输的数据包的格式。4.五元组一次网络通信的进行会涉及到5个关键信息分别为源IP源端口号目的IP目的端口号和协议类型这5个信息被称为五元组。在TCP/IP协议中用五元组来标识一个网络通信。源IP标识源主机源端口号标识源主机中该次网络通信中发送数据的进程应用程序目的IP标识目的主机目的端口号标识目的主机中该次网络通信中接收数据的进程应用程序协议类型标识发送数据的进程和接收数据的进程双方约定的数据格式如下图5.协议分层由于网络通信非常复杂如果在一个网络协议中完成网络通信涉及到的方方面面的问题那么必定会使这个协议非常复杂。所以一般会让协议分层不同的层次分别根据各自层次的协议各自完成在一次网络通信中该层需要执行的任务。什么是协议分层协议分层是计算机网络中一种重要的组织和设计方法用于将发杂的网络通信功能划分为多个层次每个层次负责特定的任务并通过明确规定的接口于相邻层进行交互。注意事项协议之间的交互不能跨层进行。 只有相邻两层协议才能进行交互上层协议可以调用下层协议下层协议可以给上层提供服务。分层的作用分层的最大的好处类似于面对接口编程 定义好两层之间的接口规范让双方遵循这个规范来进行交互。在代码中类似于定义好一个接口一方是实现接口的类提供方提供服务另一方为接口的使用类使用方对于使用方来说并不关心接口的具体实现细节只需使用接口即可。对于提供方来说利用封装的特性隐藏了具体的实现细节只需要开放接口即可。如下图这样的规定也能达到解耦合的效果。如下图两个互相进行通信的人 只要这两个人能够说同一种语言无论设备层的设备如何改变也就是不论我们使用任何设备对这两个人的交流的影响不是很大后续改变通讯设备对于两个人之间的交流也不会影响很大这就达到了很好的解耦合的效果。5.1 OSI七层模型OSI七层模型是一种逻辑上的定义和规范把网络从逻辑上分为了7层。但是由于这一套分层体系太复杂了实际真实的网络分层方式更简化。5.2 TCP/IP五层模型 经典面试题TCP/IP是一组协议的代名词它还包括许多协议组成了TCP/IP协议簇。TCP/IP通讯协议采用了5层的层级结构每一层都呼叫它的下一层所提供的网络来完成自己的需求。1. 应用层负责应用层序之间的沟通也负责对网络传输的数据进行何种处理2. 传输层负责任意两台网络设备之间的通信该层只考虑数据的发起点和数据的接点 不关心数据传输的中间过程。例如在该层的TCP协议中能够保证数据可靠的从源主机发送到目标主机。3. 网络层负责地址管理和路由选择。网络层也是负责任意两台网络设备之间的通信但是 网络层会考虑网络数据传输的中间过程。例如在该层的IP协议中通过IP地址来标识一台主机并通过路由表路由表的主要内容包含 目的网络地址下一跳地址出接口的方式出两台主机之间数据传输的路线。4. 数据链路层负责相邻设备之间的数据帧的传送和识别。5. 物理层负责光/电信号的传递方式规定了网络通信中一些硬件设施符合的要求。有些资料将数据链路层和物理层结合在一起所以也叫TCP/IP四层协议。5.3 网络设备主机主机的操作系统实现了从传输层到物理层的内容即TCP/IP五层模型的下四层通过应用程序满足通信的需求。路由器路由器实现了网络层到物理层的内容即是TCP/IP五层模型的下三层。交换机交换机实现了从数据链路层到物理层的内容即TCP/IP五层协议的下两层。集线器集线器实现了物理层的内容。注意现在的路由器和交换机很多都有对方的功能了。6. 网络通信的基本流程6.1 封装与分用1. 不同的协议层对数据包有不同的称谓在传输层叫段在网络层叫数据报在数据链路层叫帧。2. 应用层数据通过协议栈发到网络上每层协议上都要加上一个数据首部称为封装。3. 首部信息中包含了一些类似于首部有多长载荷有多长上层协议是什么等信息。4. 数据封装成帧后发到传输介质上到达目的主机后每层协议再剥掉相应的首部根据首部中“上层协议字段”将数据交给对应的上层协议处理这就是分用。1.封装的过程1. 应用层序获取到用户输入构造一个“应用层数据包”这个应用层数据包就会遵守应用层协议。2. 应用程序调用传输层提供的接口API把数据交给传输层传输层的拿到数据之后构造出“传输层数据段” 。这个传输层数据段主要遵守传输层协议主要是TCP协议和UDP协议。以TCP协议来说TCP数据段就是由TCP段头TCP载荷组成。TCP载荷就是应用层数据包。3. 传输层构造好数据之后继续调用网络层的api把传输层的数据段交给网络层网络层拿到数据后构造出网络数据报。网络数据报主要遵守网络层的IP协议则网络数据报就是IP报头IP载荷。4. 网络层数据构造好之后IP协议继续调用数据链路层的api把IP数据包交给数据链路层构造出一个“以太网数据帧” 。再数据链路层中核心协议为“以太网协议”根据以太网这个协议就会再网络层数据报的基础上进一步加工打包成一个以太网数据帧。以太网数据帧帧头载荷帧尾。5. 数据链路层构造好“以太网数据帧” 之后数据链路层继续调用物理层的api把以太网数据帧交给物理层也就是硬件设备网卡网卡会把上述二进制数据网络上传输的数据本质上都是二进制最终以光信号/电信号/电磁波信号传播出去了。2.分用的过程1. 数据到达接收方主机的网卡物理层接收方主机网卡会将光电信号还原成二进制并把二进制数据交给上层数据链路层。2. 数据达到数据链路层后从帧头和帧尾发现此时的协议为“以太网协议”则数据链路层按照以太网协议进行解析把帧头和帧尾取出来剩下的载荷继续往上传给网络层。3. 数据到达网络层后从IP报头中得知此时的协议为网络层协议则按网络层协议对数据进行解析把IP报头取出来剩下的载荷再继续传给传输层。4. 数据达到传输层后从TCP段头中得知此时的协议为传输层协议则此时按照传输层协议对数据进行解析把TCP段头取出来剩下的载荷继续往上传给应用层。cong5. 数据到达应用层后会按照应用层协议不同应用的应用层协议是不同的解析拿到关键信息展示到界面上并给出提示。数据从源主机传送到目的主机的中间的过程中也有可能涉及到封装和分用的。数据传输过程中遇到交换机主机的数据 交换机交换机收到数据后物理层解析数据链路层解析没有网络层分用此时有又会重新构造出以太网数据帧封装此时在交换机中的数据链路层中得到以太网数据帧的帧头后信息就足以支持交换机进行下一步工作。交换机是工作在数据链路层也就是二层转发数据传输过程中遇到路由器面试常考主机的数据 路由器。路由器收到数据之后物理层解析数据链路层解析网络层解析没有传输层解析分用又会重新构造网络层数据包重新构造以太网数据帧重新构造构造出二进制数据封装进行转发。路由器是工作在网络层也就是三层转发。