局域网和广域网
局域网
局域网,即 Local Area Network,简称LAN。
Local 即标识了局域网是本地,局部组建的一种私有网络。
局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的。
局域网组建网络的方式有很多种:
1.基于网线直连
2.基于交换机组建
3.基于路由器组建
广域网
广域网,即 Wide Area Network,简称WAN。
通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网。
网路通信基础
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
IP地址解决了网络通信时,定位网络主机的问题,但是还存在一个问题,传输到目的主机后,由哪个进程来接收这个数据呢?这就需要端口号来标识。
端口号
概念
在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单说:端口号用于定位主机中的进程。
类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货人(端口号)。
格式
端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。
注意事项
两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号。
了解:
认识协议
要想进行有效的通信,前提就是能够明确通信协议
网络通信的时候,本质上,传输的是光信号和电信号
所以协议就是一种约定
协议分层
协议分层类似于打电话时,定义不同的层次的协议
这就体现了协议分成的两个好处
TCP/IP五层网络模型
我们听到的最多的是OSI五层参考模型,如下图
但实际上,这种参考模型只出现在教科书中,所以不做过多介绍
真实情况下,使用最多的是TCP/IP五层(四层)网络模型
如图,左侧是OSI七层参考模型,右侧是TCP/IP五层网络模型.可以看出,下面四层其实都是一样的,
下面的四层,和程序猿的关系不是特别大,这里的代码逻辑都是通过操作系统和驱动以及硬件实现好的,程序猿打交代最多的其实是应用层的协议
物理层
网络通信中的硬件设施
比如网线、网卡…针对硬件设备的约定,就是物理层协议负责的范畴,需要保证所有的主机和网络设备之间,都是相互匹配的
数据链路层
负责相邻(一根网线连接的两个设备)的设备之间的通信
网络层
负责点到点之间的通信.也就是网络中的任意节点到任意节点之间的通信
网络层负责这两个点之间,规划出一条合适的路线
实际上,网络中的环境非常复杂,两个点之间的路线不止一条,就需要规划处一条最合适的路线
传输层
负责端到端之间的通信(起点到终点之间的通信)
传输层只关注结果(数据到没到),不关注过程(数据是怎么到的)
应用层
和应用程序密切相关的,不同的程序就有不同的用途
以上的所有只考虑包裹如何传输,不关系包裹内部是啥,更不关系包裹里的东西是干啥的
而我作为购物的人,是是抱着一定的用途/目的来购买的
一个主机,其实就对应了物理层到应用层五层(五层全部实现)
一台路由器,主要是物理层到网络层(主要实现了物理层,数据链路层,网络层)
一台交换机.主要就是物理层到数据链路层(主要是实现了物理层,数据链路层)
封装和分用
不同分层的写意之间,是如何相互配合的
举个栗子:
封装
用户A在键盘上输入了一个"hello",按下回车键
应用层(QQ应用程序)
根据用户输入的内容,把数据构造成一个应用层的协议报文(协议是一种约定,报文就是遵守这个约定的一组数据)
QQ代码中就会根据程序猿所设计的应用层协议,来构造出一个应用层数据报文。
假设的应用层协议
应用层协议就调用操作系统提供的API(称为socket API),把应用层的数据,交给传输层(就已经进入了操作系统内核了)
传输层(操作系统内核)
根据刚才传过来的数据,基于当前使用的传输层协议,构造出一个传输层协议报文
传输最经典的协议 (TCP/DCP) 这里一TCP为例
TCP的数据报 = TCP报头 + 数据载荷(Payload ,也就是一个完整的应用层数据)
构造TCP的过程可以视为是一个字符串拼接(二进制数据)
TCP的报头有很多的信息,最重要的就是”源端口“ 和 ”目的端口“ (相当于发送人电话和收件人电话)
网络中的封装的目的就是为了贴标签,贴上辅助转发的信息
接下来就将这个传输层的数据报交给网络层
网络层(操作系统内核)
拿到完整的传输层数据报,就会再根据当前使用的网络层协议(例如IP),再次进行封装,把TCP数据报狗造成IP数据报(添加上一个协议报头)
IP数据报 = IP协议报头+载荷(完整的TCP/UDP的数据报)
IP协议报头中也有很多的信息,其中最重要的就是源IP和目的IP。相当于发件人的地址和收件人的地址
紧接着,当前的网络层协议就会将这个IP数据报交给数据链路层
数据链路层(驱动难关程序)
以太网数据报 = 帧头 + IP数据报 —— 帧尾i
帧头最重要的信息就是接下来要传入的设备的地址是啥
帧尾放的是校验和
数据链路层又会把则会个数据交给物理层
物理层(硬件设备)
工作就是根据刚刚的以太网数据帧(一组0 1 )把这里的0 1 变成高低电平,通过网线传输出去;或者把这里的0 1 变成高频、低频的电磁波,通过光纤、无线的方式传播出去
此时的数据就已经离开了当前主机,前往了下一个设备。
分用
数据到了B的主机后。
物理层(硬件设备/网卡)
主机B的网卡感知到了一组高低电平,然后将这些电平分翻译为0 1 的一串数据 ,然后这一串0 1 就是完整的以太网数据帧
物理层九就把这个数据交给了数据链路层
数据链路层(驱动)
数据链路层负责对这个数据进行解析,去掉帧头和帧尾,去除里面的IP数据报,然后交给网络协议
网络层(操作系统)
网络层协议(IP协议)又会对这个数据进行解析,去掉IP协议报头,去取出里面的TCP数据报再交给传输层
传输层(操作系统内核)
传输层协议(TCP协议)又会对这个数据进行解析,去掉TCP报头,取出里面的TCP数据报,交给应用层
应用层(应用程序)
应用层就会调用socket API从内核中读取到这个应用层数据报。再按照应用程协议进行解析。
再根据解析结果给显示到窗口中
中间的过程
无论网络多么复杂,这里整体的传输过程都是类似的,只是在不断的封装和分用