问题: 数据在网络中是如何传递的?
1.在同一个子网络中,数据以广播的方式传递
MAC地址/网卡地址: 信息在传递过程中,会附带接收方和发送方的 MAC 地址.
2.在不同的子网络中,数据以路由的方式传递
路由: 信息在不同的子网络中传递!(以一种最佳(最短/最快)的路径来传递信息!)
// 数据中必须包含很多信息: 接收方和发送方的 MAC 地址 / IP 地址/ 端口号!
数据链路层:(以太网数据包)
数据包: 是从 数据链路层引入的!规定数据包: 标头部分和数据部分:
数据链路层中,一个非常重要的协议——以太网协议:局域网协议 这一个协议部分内容位于数据链路层,还有一部分,位于网络层
-
以太网数据包:
标头: 18 字节:主要包含了 接收方 和 发送方的 MAC 地址!
数据: 就是分组之后需要传递的数据!
不超过 1500 字节
上层变动完全不影响下层结构! --- 网络分层!
数据包嵌套:上层协议的数据包嵌套在下层协议数据包的数据部分!
网络层: (IP数据包)
-
IP 数据包:将 IP 数据包嵌套在 以太网数据包的 数据部分!
标头: 双方的 IP 地址. 20 字节!
数据: 需要传递的数据! 不超过 65535 个字节!
传输层: (TCP/UDP数据包):
- 相同点:
都是将端口号添加到标头中,嵌套在IP数据包的数据部分。
- 不同点:
UDP数据包的标头部分,是最简单的数据包标头, 8个字节 ,就包含双方的 端口号
TCP 数据包:标头部分比较复杂: 肯定是包含端口号的, 包含一些质询信息(防止丢包)
标头: 双方的端口号
数据: 数据
为了保证一个传输层数据包恰好能嵌套在一个 IP 数据包的数据部分,总大小不超过 65535个字节!
应用层: 需要传递的数据! 数据可以无限大!
比如: IP 数据包的长度是 5000(20标头+ 4980个数据) 个字节! 分成4个包: 1500(20标头 + 1480数据) 1500(20标头 + 1480数据) 1500(20标头 + 1480数据) 500(20标头 + 540数据)
分包/拆包: 需要将数据包拆分成一个个的小包,分别嵌套在对应的数据包中!
分包之后,利于数据传递!
客户端接收到数据之后,接收到的时一个个拆分之后的数据包! 需要将接收到的数据包按顺序组合在一起,才能得到完整的数据!
Socket(套接字/插座): 是一个"通信模型"!不属于七层协议! 解决不同"主机"之间"应用程序"的通信问题!
Socket 模型: "主机" + "端口" 就是 Socket模型!
最常见的 Socket 模型就是 TCP(端口到端口之间的通信)/IP(解决的时主机到主机之间的通信) 和 UDP/IP