通过网线连接多台设备

通过转发设备,交换机,路由器

路由器和交换机:实际上,真正的交换机和路由器之间的界限已经越来越模糊了,路由器的很多功能交换机也有,交换机的很多功能路由器也有。
局域网:通过路由器/交换机组建起来的网络叫做局域网
广域网:广域网和局域网之间没有明确的界限,认为比较大的局域网就可以称为“广域网”,全世界最大的广域网Internet(因特网)
描述一个网络上的一个主机的位置(收货地址),IP地址本质上是一个32位的整数,一般按照每个字节分成四个部分中间用.分割,“点分十进制”
端口号:描述一个主机上的应用程序(收件人的电话),端口号本质是2个字节(15位)的无符号整数,0-65535。服务器程序在启动的时候就需要绑定端口号以便用户来访问。
进行有效的通信,前提就是要明确通信协议,本质上就是约定发出来的数据是什么样子的格式,接收方按照对应的格式进行解析。
网络通信的时候本质上传输的是光信号和电信号,通过光信号的频率(高频率/低频率)电信号的电平(高电平/低电平)来表示0,1
将大的复杂的协议拆成小的,每个协议负责一部分工作。
优点:
每层协议不需要理解其他协议的细节(更好的做到了封装)
把对应层的协议换成其他协议(更好地解耦合)
1.物理层:以0,1代表电压的高低,灯光的闪灭,界定连接器和网线的规格。负责比特流和电子信号之间的切换。
2.数据链路层:互联设备之间传送和识别数据帧。负责数据帧与比特流之间的转换。
3.网络层:地址管理与路由选择。负责经过那个路由传递到目标。
4.传输层:管理两个节点之间的数据传输。
5.会话层:通信管理。负责建立和断开通信连接。管理传输层以下的分层。
6.表示层:设备固有数据格式和网络标准数据格式的转换。接受不同表现形式的信息,如文字流、图像、声音等。
7.应用层:针对特定应用的协议。
站在全局角度是一个五层模型,转载程序员角度,最下面的物理层描述的是硬件设备,这时候就认为是四层。

物理层:网络通信中的硬件设备 数据链路层:负责完成相邻的两个设备之间的通信的(一根网线相连的两个设备)
网络层:负责点到点之间的通信,任意节点到任意节点,更多指的是不相邻的节点。负责规划合适的路线。
传输层:负责端到端之间的通信,起点和终点只是关注结果(数据到没到),不关注过程(不关注数据走哪条路),相当于买家和卖家,快递公司则要关注中间的过程。
应用层:和应用程序密切相关,传输数据的作用,不同的应用程序有不同的用处。
有一天我在网上卖一个床刷子
商家站在传输层,考虑这个东西能不能发到我的手上。
快递公司站在网络层规划线路。
快递小哥站在数据链路层,骑着电动车把火拉到集散中心。
电动车/货车/公路站在物理层,提供传输的基础。
上述都在考虑包裹如何传输,不考虑包裹里面是什么东西干什么用的。
而造刷子的人是抱着用途的。就是应用层。
一台主机,其实就对应了物理层到应用层(把这五层都实现了)
一台路由器,主要是物理层到网络层(主要是实现了物理层,数据链路层,网络层)
一台交换机,主要是物理层导数据链路层(主要实现了物理层,数据链路层)
根据用户输入的内容,把数据构造成一个应用层的协议报文。
协议:协议是一种约定,其他传输层,网络层等协议都是现成的,应用层的协议大概率是程序员自己设定的。
报文:遵守这一约定的一组数据
假设的一种应用层的协议格式:

应用层协议:调用操作系用提供的API(称为SOCKET API),把应用层的数据交给传输层(就已经进入操作系统内核了)
根据刚才传过来的数据,基于当前使用的传输层协议构造出一个传输层的协议报文。
传输层最典型的协议,UDP,TCP以TCP为例。
假设的一种传输层的协议格式:

TCP的数据报 = TCP报头 + 数据载荷(Payload,也就是一个完整的应用层数据),
可以简单的把这个构造TCP报文的过程视为一个字符串拼接(这里拼的是二进制数据)
TCP报头:包含了很多信息,最重要的就是“源端口”和“目的端口”,即发件人电话和收件人电话 接下来就会把这个传输层的数据包交给网络层
拿到了完整的传输层数据报,就会根据当前使用的网络层协议(例如IP),再次进行封装。把TCP数据报构造成IP数据报。还是再加上一个协议报头。
假设的一种网络层的协议格式:

IP数据报 = IP协议报头 + 载荷(完整的TCP/UDP的数据报)
IP报头:包含了很多信息,最重要的就是源IP和目的IP,相当于发件人的地址和收件人的地址。 接下来网络层就会把这个IP数据报交给数据链路层。
在刚才IP数据报基础上,根据当前使用数据链路层协议,构造成一个数据链路层的数据报,典型的数据链路层的协议叫做以太网,就会构造一个“以太网数据帧”
假设的一种以太网数据帧格式:

以太网数据帧 = 帧头 + IP数据报 + 帧尾
帧头:最重要的信息是接下来要传给的设备地址是啥
帧尾:校验
IP协议的报头和帧头的区别:
IP协议里面的地址写的是起点和终点(西安和安广镇)
以太网数据帧帧头写的是接下来一个相邻节点的地址,随着数据往下一个设备转发,帧头的地址一直在发生改变。
例如:
我人在西安,这里的地址写的是 西安/长春
我人在长春,这里的地址写的是 长春/白城
我人在白城,这里的地址写的是 白城/安广
数据链路层又会把这个数据交给物理层
负责根据刚才的以太网数据帧(其实就是一组01),变成高低电平通过网线传输出去,或者变成高频/低频的电磁波,通过光纤/无线的方式传播出去。
到了这一步,书库就已经离开当前主机了,前往了下一个设备,下一个设备可能是交换机或者是路由器等其它设备。
主机B的网卡感知到了一组高低电平,将这组电平翻译成01数据,然后这一串01就是一个完整的以太网数据帧。
物理层就把这个数据交给了数据链路层。
对这个以太网数据帧进行解析,去掉帧头和帧尾,取出里面的IP数据报,然后交给网络层。
对这个IP数据报的数据进行解析,去掉IP协议报头取出TCP数据报再交给传输层。
对这个TCP数据报进行解析,去掉TCP报头,取出里面的数据载荷交给应用层。
调用socket API从内核中读取到这个应用层数据报,再按照应用层协议进行解析,根据解析结果显示到窗口上。
上述只是讨论到了起点和终点,中间经过的交换机和路由器:

