网络通信的基础
路由器
组成网络重要的核心设备
交换机
交换机可以视为是对路由器的接口进行了扩展
IP地址
IP地址用于定位主机的网络地址,表示网络一台设备所在的位置
如JDBC中的的URL
jdbc:mysql://127.0.01:3306/java?characterEncoding=utf8
端口号
一台主机上可能有多个程序同时使用网络,端口号区分一台主机上多个应用程序的
端口号用于定位主机中的进程
认识协议
网络协议就是通信双方对于发送/接受数据格式的约定,网络通信中协议非常关键
协议最终体现为在网络上传输的数据包的格式
五元组
在TCP/IP协议中,用五元组来标识一个网络通信:
- 源IP:标识源主机
- 源端口号:标识源主机中该次通信发送数据的进程
- 目的IP:标识目的主机
- 目的端口号:标识目的主机中该次通信接收数据的进程
- 协议号:标识发送进程和接收进程双方约定的数据格式
协议分层
对于网络协议来说,往往分成几个层次进行定义。
OSI七层模型
OSI:开放系统互连
|---|-------|--------------------------------------------|
| | 分层名称 | 功能 |
| 7 | 应用层 | 针对特定应用的协议。 |
| 6 | 表示层 | 设备固有数据格式和网 络标准数据格式的转换。 |
| 5 | 会话层 | 通信管理。负责建立和断 开通信连接(数据流动的 逻辑通路)。 管理传输层以下的分层。 |
| 4 | 传输层 | 管理两个节点之间的数 据传输。负责可靠传输 (确保数据被可靠地传送 到目标地址)。 |
| 3 | 网络层 | 地址管理与路由选择 |
| 2 | 数据链路层 | 互连设备之间传送和识别数据帧。 |
| 1 | 物理层 | 以"0"、"1"代表电压的高低、灯光的闪灭。界定连接器和网线的规格。 |
OSI 七层模型既复杂又不实用:所以 OSI 七层模型没有落地、实现。
TCP/IP五层(或四层)模型
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
应用层:负责应用程序间沟通。我们的网络编程主要就是针对应用层
传输层:负责两台主机之间的数据传输。只考虑两个任意设备之间的通信,不考虑中间过程
网络层:负责地址管理和路由选择。两个任意设备如何进行通信
数据链路层:负责设备之间的数据帧的传送和识别。完成两个相邻设备之间如何通信
物理层:负责光/电信号的传递方式。规定网络通信中的一些硬件设施符合的要求
物理层我们考虑的比较少。因此很多时候也可以称为 TCP/IP四层模型。
网络设备所在分层
主机
- 工作过程涉及到 从物理层->应用层
- 通过应用程序满足网络通信的需求
路由器
- 工作过程涉及到 从物理层->网络层
- (注释)组建局域网,进行网络数据包的转发
交换机
- 工作过程涉及到 从物理层->数据链路层
- (注释)对路由器的接口的扩展,不需要考虑组网的问题
网络通信的基本流程
谈到网络传输的"基本数据单位" 涉及到多个术语
网络数据包/帧/报/段
- 段 (segment) ------ TCP 用段
- 报 (Datagram) ------ UDP 用的
- 包 (packet) ------ IP 用的
- 帧 (frame) ------ 数据链路层 以太网数据帧
加工和封装
1.应用程序获取到用户输入,构造一个应用层的数据包
将用户的数据结构化,转化成字符串/二进制bit流,这个过程称为序列化(反序列化是将二进制数据
转化为结构化数据),获得的应用层数据包就会遵守应用层协议(这个应用层的协议往往是程序的程
序员自己定义的)
示例数据

2.应用层调用传输层提供的接口(API),把数据交给传输层
传输层拿到数据包之后,构造出"传输层数据包",传输层的协议主要是TCP和UDP
TCP数据包=TCP报头+TCP载荷

TCP报头中包含了源端口/目的端口
3.传输层构造好数据之后,继续调用网络层的API把传输层的数据包交给网络层
网络层继续处理,网络层最主要的协议是IP协议
IP协议继续对上述数据包进行加工=>拼上IP报头
IP数据包=IP报头+IP载荷(整个传输的数据包)

IP报头包含源IP/目的IP
IP 协议和TCP 协议本身不关心载荷内容是啥.
协议类型其实不只是一份数据有很多层,其中 IP 报头里就会记录当前的传输层使用的是哪个协议
传输层报头中, 也会记录应用层使用哪个协议(准确的说是数据交给哪个应用程序)
4.IP协议继续调用数据链路层的API,把IP数据包交给数据链路层
数据链路层中, 核心协议"以太网"。以太网这个协议也会在网络层数据包的基础上进一步加工
以太网数据帧=帧头+载荷+帧尾

5.以太网继续这样的数据交给硬件设备(网卡)
网卡会把上述二进制数据一光信号/电信号/电磁波信号传播出去
从上层到下层数据都要一步步加工(添加报头)和封装(和面向对象的封装不是一个封装)
分用
分用是数据到达接收方数据,逐层进行解析
分用的步骤
1.数据到达接收方的网卡。网卡将光电信号还原成二进制0101
把二进制数据交给上层数据链路层,物理层数据信号是咋来的, 和数据链路层是直接相关的
网线/光纤来的数据, 数据链路层 => 以太网.
wifi 来的数据, 数据链路层 => 802.11 协议
2.数据链路层按照以太网协议进行解析把报头和报尾取出来, 剩下的载荷往上传递给网络层

以太网的帧头就有专门的属性描述网络层使用哪个协议
3.网络层拿到这个数据之后,按照IP协议的格式进行解析,再把载荷数据交给传输层

IP报头中也有专门的属性描述了传输层使用哪个协议
4.传输层拿到数据之后也是类似,按照TCP协议来解析取出载荷,交给应用层

传输层报头中通过目的端口号告知数据要交给哪个应用程序
5.应用程序解析应用层数据拿到关键信息,展示到界面上给出提示

不同的应用程序会使用不同的应用层协议来解析
补充
无线用的协议是 802.11和以太网是并列的关系,本质是一样的,同样的封装分用,分装分用啥的帧
头帧尾不一样的,数据格式不一样, 功能略有差别