局域网:通过网线把主机连接起来就是一个局域网。一般组建局域网,都会使用一些转发设备:交换机,路由器。

上面这种就是借助交换机组成局域网。
基于路由器组建局域网,就像图片这样:

基于路由器组建局域网是最常见的组网设备。
比较大的局域网就是广域网。
IP 地址:描述了网络上的一个主机的位置。IP 地址本质上是一个 32 位的整数,由于 32 位的整数,不方便人来记忆和读,一般常见的操作都是把这 32 位的整数,按照每个字节,分成四个部分,中间用 . 来分隔,也就是 点分十进制。
特殊的 IP 地址: 127.0.0.1 一个特殊的 IP 地址,环回 IP,表示自己这个主机。
端口号:描述了一个主机上的 某个应用程序(就类似于学校里面收快递的时候,收件人的电话)。端口号本质上是一个 2 个字节(16位)的无符号整数,也就是 0 - 65535,3306 MySQL 默认的端口号。
协议很重要,本质上就是约定,发出来的数据是啥样的格式,,接收方按照什么格式来接收。
网络通信的时候,本质上传输的是:光信号和电信号。通过光信号的频率(高频率/低频率)。电信号的电平(高电平/低电平)来表示 0/1。
网络通信这个过程很复杂,里面有很多很多细节。如果只通过一个协议来约定所有的细节,这个协议就会非常庞大、复杂。更好的办法就是把一个大的复杂的协议,拆成多个小的,更简单的协议,每个协议,负责一部分工作。
好处:
如下图:

具体层的功能:
描述了不同的分层的协议之间,是如何相互配合的。就是将应用层的内容,封装为传输层的内容。封装的时候就是将上面放上一些辅助的信息。封装的时候不需要考虑脏数据。
举例:
假设构造成的协议:

构造成的数据报,TCP 数据报 = TCP 报头 + 数据载荷(Payload,也就是一个完整的应用层数据):

拿到了完整的传输层数据报,就会在根据当前使用的网络层协议(例如 IP),再次进行封装,把 TCP 数据报构造成 IP 数据报,还是添加一个协议报头。仍然是字符串拼接的过程。紧接着,当前的 网络层协议,就会把这个 IP 数据报,交给数据链路层。
数据报格式如下:

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

以太网数据帧:
数据链路层,又会把这个数据交给物理层。
物理层做的工作,
拿到的数据报如下:

负责对这个数据进行解析,去掉帧头和帧尾,取出里面的 IP 数据报。然后交给 网络层协议。
拿到的数据报如下:

网络层协议(IP 协议):又会对这个数据进行解析,去掉 IP 协议报头,取出里面的 TCP 数据报,再交给传输层。
拿到的数据报如下:
又会对这个数据进行解析,去掉 TCP 报头,取出里面的 TCP 数据报,再交给应用层。
拿到的数据报如下:

就会调用 socket API 从内核中读取到这个应用层的数据报,再按照应用层协议进行解析,然后根据解析结果显示到窗口中。
在封装和分用这个过程中,会有无数个路由器和交换机。不论有多少个设备,都是下面这两种方法。
经历交换机的话,就差不多是这种情况:

