Linux网络与数据封装

本文涉及的产品
.cn 域名,1个 12个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: Linux网络与数据封装

1. 网络应用程序的设计模式

(1)C/S架构

client/server架构,即客户端/服务器架构。

  • 优点:协议选用比较灵活;可以缓存数据,比如说我们在打游戏时,在游戏过程中,实际上一些音效、图片都已经缓存下来了,想象一下,如果你玩LOL的时候,音效和动画需要去服务器实时下载,那么游戏会卡成什么样子。
  • 缺点:对用户的安全构成威胁,因为客户端收集了哪些信息,这些信息用于什么工作我们都不知道;客户端开发工作量大,调试困难,需要考虑多线程和数据同步。
  • 典型的C/S架构比如QQ微信,我们在使用QQ或者微信的时候都需要安装一个客户端软件,也就是说,需要安装客户端软件的都是基于C/S架构。

(2)B/S架构

browser/server架构,即浏览器/服务器架构。

  • 优点:跨平台。浏览器不需要我们开发,我们只需要下载一个浏览器即可,并且可以在各个平台通过浏览器访问网站数据(手机、电脑等),那么既然是跨平台访问,在开发的时候就需要考虑跨平台开发语言,比如Java和QT等等,QT提供了统一的接口,只不过在不同平台下封装的API不同,有Windows、Linux等,但是可以通过同样的接口去调用。Java是运行在虚拟机上的,只要在不同平台安装Java虚拟机即可。
  • 缺点:只能使用http或https去实现。比如说,我们在浏览器输入百度的域名http://www.baidu.com,这个域名对应一个IP,浏览器会根据解析出的IP向百度的服务器发送一个http请求。

对于两种架构,并没有好坏之分,它们的应用场景不同。比如说,大型游戏必须要通过客户端来运行,比如我们玩的LOL、DNF、CF都需要下载一个客户端。而小型游戏只要在web服务器运行就可以了,比如4399小游戏等。

2. 协议

协议就是指数据传输和数据解释的规则,典型的协议比如TCP/UDP协议、HTTP协议、FTP协议、IP协议、ARP协议等。

发送数据和接收数据要遵守相同的协议,否则就无法正确解析。同时,发送数据的大小一般不要太大,因为这些数据是存放在栈上的,而栈空间的大小在Linux下默认只有8M。

3. 网络分层模型

① 七层OSI模型

  • 物理层:双绞线、光纤
  • 数据链路层:数据传输、错误检测
  • 网络层:路由转发
  • 传输层:提供端对端的接口
  • 会话层:解除或建立节点之间的联系
  • 表示层:数据格式化、代码转换、数据加密
  • 应用层:文件传输、电子邮件、文件服务、虚拟终端

② TCP/IP四层模型

  • 数据链路层
  • 网络层
  • 传输层
  • 应用层
OSI七层模型 TCP/IP四层模型
应用层 应用层
表示层 应用层 - ftp http ssh telent
会话层 应用层
传输层 传输层 - TCP/UDP协议
网络层 网络层 - IP协议
数据链路层 数据链路层(网络接口层)- 以太网帧协议
物理层 数据链路层

作为程序员主要关注的是应用层协议(其它三层由操作系统完成),我们可以自己去定义一套应用层协议,实际上大公司都有自己的应用层协议。

4. 协议格式——数据包的封装思想

(1)以太网帧格式

以太网帧是在数据链路层传输的数据格式,借助mac地址完成数据报的传递

MAC地址就是网卡编号,我们使用ifconfig就可以看到,硬件地址HWaddr就是MAC地址,这个编号是全世界唯一的,Windows下ipconfig显示的物理地址就是MAC地址(Linux中用:间隔,Windows中用-间隔)

以太网帧发送数据报的前提是知道MAC地址,否则就要通过ARP协议根据对方的IP(对方的IP我们肯定是知道的,不然的话我们怎么给他发数据)去获取对方的MAC地址,我们只需要关注类型,0800表示正常发送数据,0806表示要获取对方的MAC地址,至于报文数据的填充我们不需要知道,这是操作系统完成的(只有应用层协议的封装由用户完成),当我们发送0806类型的数据包,对方会回复一条ARP数据报,我们就可以获得对方的MAC地址(见下面ARP协议示意图)。也就是说,以太网帧是根据MAC地址发送数据的,并不是根据IP地址发送数据,IP地址是用来获取MAC地址的,获取到MAC地址后,再通过MAC地址发送数据。RARP协议就是通过MAC地址获取IP地址的。

ARP数据报的格式(ARP用于根据IP地址获取MAC地址)

ARP协议的工作示意图如下

比如说,我们在北京要向广州的人员发送数据,我们只知道对方的IP不知道MAC地址,那么是如何实现以太网帧发送的呢?首先北京的主机会向广州的主机发送一个ARP协议包,帧类型为0806,以太网源地址和发送端地址都是北京本地主机的MAC地址,发送端IP为北京本地主机的IP,目的IP为要发送到的广州主机的IP地址,以太网目的地址我们不知道就填充FF。广州主机接收到这个数据包之后,会回复一个ARP数据包,类型同样为0806,这其中就包含了广州主机的MAC地址,有了这个MAC地址就可以进行以太网帧的发送了。

(2)IP段数据格式

  • 4位版本:ipv4、ipv6,当前主要是ipv4
  • 8位生存时间(TTL):最多经过多少跳,即路由
  • 32位源IP地址:数据发送端地址
  • 32位目的IP地址:数据接收端地址

需要注意的是,IP协议和IP地址是两个不同的概念,不要混淆。

关于路由:每经过一个路由结点,TTL减一,为了防止无限跳导致垃圾数据包,这个操作是由路由器完成的,当TTL减为0,路由器就不会再转发这个数据包了,而是直接丢弃。假如要从中国通过其他国家,可能通过海底光纤一跳就到达了,所以完全不必担心256跳(2的8次方)不够用,并且路由会选择最短路径。

(3)UDP数据包格式

在UDP数据包中包含一个16位源端口号和一个16位目的端口号,端口号是用来标识进程的,每个进程对应位一一个PID。在网络环境中,IP可以定位网络中的一台主机,而port端口可以定位一台主机中的一个进程,格式一般为IP:Port,比如127.0.0.1:80。端口是16位的,端口最大值为65535(2的16次方减一)。

(4)TCP数据报格式

这里有一个16位的滑动窗口,滑动窗口实际上是代表了存储空间的大小。比如说,A给B发送数据,A发送的速度快,而B处理数据的速度较慢,那么A发送的数据就要先存储起来,B就可以告诉A我的滑动窗口是多大,也就是我能缓存多少数据,A发送的数据就存储在这个缓存中,当缓存区满了后,A就不在发送了。滑动窗口就是做流量控制的,当B的缓存区满了,A就会阻塞,等到B处理了一部分数据后,A再发送数据。

在传输层是不需要封装IP地址的,这是因为传输层的数据包还要经过网络层的包装,而网络层的IP协议中已经封装了IP地址,所以传输层就不需要IP了,传输层主要是封装端口号,端口号用于标识源主机哪个进程传递给目标主机的哪个目标进程。

(5)数据的封装过程

5. TCP/UDP传输层协议简介

(1)TCP协议

面向连接的安全的流式传输协议

  • 连接的时候,自动进行三次握手
  • 数据发送的时候,会进行数据确认,是否收到
  • 数据丢失之后,会进行数据重传

(2)UDP协议

面向无连接的不安全的报式传输

  • 连接的时候不会握手,通过IP和PORT连接
  • 数据发送出去之后就不再管了,即不在乎对方收没收到

实际上,虽然UDP不会校验数据,也就是不安全的,但是实际上我们可以在应用层对数据做校验来实现UDP的安全传输,比如说QQ发消息就是使用的UDP协议,但是它在应用层自己定义了一套协议来保证安全传输,如果传输失败可以再次传输,而QQ密码校验和文件传输则是使用TCP传输。

6. DNS服务器

DNS服务器也叫做域名解析服务器,根据域名解析出IP地址,比如说在浏览器输入一个域名www.baidu.com,该域名将会通过DNS服务器解析得到IP地址。DNS根服务器在全世界总共有13台,其中美国10台,英国、瑞典、日本各有一台。如果其他国家不向中国提供域名解析服务,那么我们就无法上网了,所以中国现在主推IPv6,实现DNS根服务器的多国治理。

相关文章
|
5天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
18 2
|
17天前
|
域名解析 网络协议 安全
|
23天前
|
运维 监控 网络协议
|
16天前
|
存储 安全 网络安全
云计算与网络安全:保护数据的新策略
【10月更文挑战第28天】随着云计算的广泛应用,网络安全问题日益突出。本文将深入探讨云计算环境下的网络安全挑战,并提出有效的安全策略和措施。我们将分析云服务中的安全风险,探讨如何通过技术和管理措施来提升信息安全水平,包括加密技术、访问控制、安全审计等。此外,文章还将分享一些实用的代码示例,帮助读者更好地理解和应用这些安全策略。
|
18天前
|
存储 缓存 Dart
Flutter&鸿蒙next 封装 Dio 网络请求详解:登录身份验证与免登录缓存
本文详细介绍了如何在 Flutter 中使用 Dio 封装网络请求,实现用户登录身份验证及免登录缓存功能。首先在 `pubspec.yaml` 中添加 Dio 和 `shared_preferences` 依赖,然后创建 `NetworkService` 类封装 Dio 的功能,包括请求拦截、响应拦截、Token 存储和登录请求。最后,通过一个登录界面示例展示了如何在实际应用中使用 `NetworkService` 进行身份验证。希望本文能帮助你在 Flutter 中更好地处理网络请求和用户认证。
135 1
|
18天前
|
存储 Ubuntu Linux
2024全网最全面及最新且最为详细的网络安全技巧 (三) 之 linux提权各类技巧 上集
在本节实验中,我们学习了 Linux 系统登录认证的过程,文件的意义,并通过做实验的方式对 Linux 系统 passwd 文件提权方法有了深入的理解。祝你在接下来的技巧课程中学习愉快,学有所获~和文件是 Linux 系统登录认证的关键文件,如果系统运维人员对shadow或shadow文件的内容或权限配置有误,则可以被利用来进行系统提权。上一章中,我们已经学习了文件的提权方法, 在本章节中,我们将学习如何利用来完成系统提权。在本节实验中,我们学习了。
|
20天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:从漏洞到加密,保护数据的关键步骤
【10月更文挑战第24天】在数字化时代,网络安全和信息安全是维护个人隐私和企业资产的前线防线。本文将探讨网络安全中的常见漏洞、加密技术的重要性以及如何通过提高安全意识来防范潜在的网络威胁。我们将深入理解网络安全的基本概念,学习如何识别和应对安全威胁,并掌握保护信息不被非法访问的策略。无论你是IT专业人士还是日常互联网用户,这篇文章都将为你提供宝贵的知识和技能,帮助你在网络世界中更安全地航行。
|
23天前
|
存储 安全 网络安全
云计算与网络安全:如何保护您的数据
【10月更文挑战第21天】在这篇文章中,我们将探讨云计算和网络安全的关系。随着云计算的普及,网络安全问题日益突出。我们将介绍云服务的基本概念,以及如何通过网络安全措施来保护您的数据。最后,我们将提供一些代码示例,帮助您更好地理解这些概念。
|
27天前
|
Ubuntu Linux 虚拟化
Linux虚拟机网络配置
【10月更文挑战第25天】在 Linux 虚拟机中,网络配置是实现虚拟机与外部网络通信的关键步骤。本文介绍了四种常见的网络配置方式:桥接模式、NAT 模式、仅主机模式和自定义网络模式,每种模式都详细说明了其原理和配置步骤。通过这些配置,用户可以根据实际需求选择合适的网络模式,确保虚拟机能够顺利地进行网络通信。
|
1月前
|
网络协议 安全 Ubuntu
Linux中网络连接问题
【10月更文挑战第3天】
32 1