OSI TCP 以太网 网络基础
网络基础
基础知识
局域网(LAN)和广域网(WAN)是一个相对的概念,根据覆盖范围而定。
协议是指计算机网络中用于通信的规则和标准。它定义了通信实体之间传递数据的格式、顺序、控制信息和处理方法等。协议确保不同设备和系统能够相互理解和交换信息。为了解决以下问题:
- 由于计算机的传输媒介是光信号和电信号,想要传递不同的信息,就需要约定好双方的数据格式。
- 如何处理发送的数据。
- 长距离的数据丢失问题。
- 如何定位主机的问题。
- 如何保证数据准确的到达下一个设备。
端口号,IP
端口号在网络通信时是需要相互交换的,因为网络通信的本质就是进程间通信。
云服务器禁止直接绑定公网IP。并且一般不会固定IP地址,一般将其置为
0
,即任意地址绑定,这样凡是发送到本主机的数据,都会根据端口号向上交付。而客户端,也是要绑定的,只不过不需要用户显示的
bind
,一般由OS自由随机选择绑定,只需要保证其在客户端主机上的唯一性就行。
端口号的范围划分
- 知名端口:
- 范围:0 到 1023
- 用途:这些端口号通常被分配给常见的网络服务和协议,例如:
- HTTP(80)
- HTTPS(443)
- FTP(21)
- SSH(22)
- DNS(53)
- 分配管理:这些端口号由互联网号码分配机构(IANA)管理,通常用于特定的标准服务。
- 注册端口:
- 范围:1024 到 49151
- 用途:这些端口号可以被应用程序或服务使用,但需要向 IANA 注册。通常分配给非标准的服务或应用程序,供其运行所需的通信使用。
- 实例:MySQL 数据库服务默认使用的端口 3306、PostgreSQL 默认端口 5432。
- 动态/私有端口:
- 范围:49152 到 65535
- 用途:这些端口号通常用于临时目的,比如客户端应用程序向服务器发起连接时动态分配的端口号。这些端口号不需要注册,适用于客户端-服务器通信中客户端的一侧。
- 实例:当一个客户端连接到服务器时,操作系统会自动为客户端分配一个动态端口。
客户端
Udp
客户端的端口随机绑定,发生在第一个数据包被发送的时候。Tcp
客户端的端口随机绑定,发生在connect
的时候,要自动随机的进行bind
。
套接字socket
在网络编程中,sockfd
是一个用于标识套接字的文件描述符。它是 socket()
函数创建的套接字的返回值,用于后续的网络通信操作。sockfd
是一个整数值,作为其他网络操作函数的参数之一。
协议分层
- 分层的目的:
- 高内聚。
- 低耦合。
- 便于封装。
- 维护。
OSI(open systems interconnection)七层模型
层级 | 名称 | 功能描述 |
---|---|---|
7 | 应用层(Application Layer) | 为应用程序提供网络服务接口,例如文件传输、电子邮件等。 |
6 | 表示层(Presentation Layer) | 负责数据的表示、加密和解密、数据格式转换等。——序列,反序列化 |
5 | 会话层(Session Layer) | 管理和控制会话,包括建立、维护和终止通信会话。——管理对外提供的服务 |
4 | 传输层(Transport Layer) | 提供端到端的传输服务,确保数据可靠传输,负责流量控制和错误检测。 |
3 | 网络层(Network Layer) | 负责路径选择和逻辑地址(IP地址)的管理,提供数据包的转发和路由功能。 |
2 | 数据链路层(Data Link Layer) | 提供物理地址(MAC地址)管理和链路建立、维护、释放功能,负责帧的传输。 |
1 | 物理层(Physical Layer) | 负责比特流的传输,包括电缆、光纤、无线等物理媒介。 |
TCP/IP 模型
TCP/IP(Transmission Control Protocol/Internet Protocol)模型是实际互联网和网络通信的基础,它简化为四层或五层结构。
- 可以使用以下五个要素来标识一个通信:
- 源IP。
- 源端口号。
- 目的IP。
- 目的端口号。
- 协议号。
五层模型
层级 | 名称 | 功能描述 |
---|---|---|
5 | 应用层 | 提供网络应用程序的接口,如HTTP、FTP、SMTP等协议。 |
4 | 传输层(Transport Layer) | 提供端到端的通信服务,确保数据可靠传输,使用协议如TCP、UDP。 |
3 | 网络层(Network Layer) | 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)**路由器(Router)工作在网络层 **。 |
2 | 数据链路层(Data Link Layer) | 负责数据帧的传输和错误检测,包含MAC地址的管理。 以太网、令牌环网(类似于线程中的锁)**交换机(Switch)通常工作在数据链路层或网络层 ** |
1 | 物理层(Physical Layer) | 负责比特流的传输,定义物理连接的硬件规范。集线器(Hub)工作在物理层 |
信息在不同层的名称
层级 | 数据名称 |
---|---|
传输层 | 数据段,数据报 |
网络层 | 数据报 |
链路层 | 数据帧 |
网络通信
报文 = 报头 + 有效载荷
网络的层状结构中,每一层都有协议。消息从自顶向下每层协议都要加上一个数据首部(报头)(header),称为封装**。
通信的过程,就是封装和解包的过程。故几乎每一种协议,都要有报头和有效载荷分离的能力——分离和将自己有效载荷交付给上一次指定协议的能力——分用。
- 由冯诺依曼体系可知,网卡(外设)接受数据之后,要载入到内存由CPU处理。
sk_buff
的概念:
sk_buff
是一个结构体,包含了网络包的数据以及各种元数据(如头部信息、状态标志、指针等)。它是网络协议栈中最基本的单元,用于表示和操作数据包。sk_buff 负责承载并传递数据包,同时记录了该数据包在它不仅包含了数据本身,还包含了协议栈所需的各种控制信息。发送报文的本质:
- 从发送方的角度来看,报文的发送过程实际上是一个 sk_buff 结构在协议栈中层层流动、逐步封装的过程。每个网络层协议对 sk_buff 进行相应的处理,直到数据包最终被发送到网络上。
- 简单来说,负责处理协议的指针移动到对应协议字段并进行处理,就是封装和解包的过程。
局域网通信原理
以太网通信:每台主机在局域网上,都要有自己唯一的一个标识。
每一台主机都会有一个
Mac地址
——网卡在出厂时自带。 在发送数据时,源头mac
和目的mac
会被封装到报文
中。根据mac
地址可以匹配通信的主机。其实在局域网中,所有网卡设备都收到了这个保文,只是因为
mac
不匹配,报文被丢弃了。但如果网卡处于混杂模式—— 指一台机器的网卡能够接收所有经过它的数据流,而不论其目的地址是否是它,那么数据可能被窃取。
可以通过在应用层进行加密,可以防止数据被抓包后窃取。
当局域网中发送的信息太多,就可能发生数据碰撞问题(产生碰撞域)。因此,任何一个时刻,只允许一台主机向局域网中发送数据——互斥访问。
交换机可以划分碰撞域。
访问局域网的过程类似于线程访问共享资源,只是实现细节和具体机制上有很大不同。
IP地址
IP地址(Internet Protocol Address)是分配给设备的一个唯一标识符,用于在网络中进行通信。它标识网络上的计算机、路由器、手机等设备,并允许它们相互识别和交换数据。
IP地址与mac地址
- 在数据传输的时候,Mac地址会随着设备变动而发生变化。而IP地址始终不变,为信息传递提供路径规划。
跨网段通信原理
当目标主机和源头主机不在同一个网段(是否在同一网段可以通过IP地址来判断),需要将数据传递给路由器设备来处理。
报文传递到路由器是局域网通信。
通过路由器的路由表到另一个网段,并且通过如
以太网
,令牌环
等方式来找到目的主机,,数据包在**每个路由器处都会重新封装局域网报头,并且更换发收的MAC地址
**。
由上可知:IP协议屏蔽了底层网络的差异化,实现了上层的统一性。
IPv6和IPv4
IPv4
和IPv6
是两种不同版本的互联网协议(IP),它们都用于在网络上标识和定位设备,并负责数据包的路由和传输。但IPv6
可以表示更多地址并支持更多特性。