当前位置: 首页 > news >正文

计算机网络自顶向下方法6——应用层 进程通信与运输服务

应用层探秘(二):进程通信与运输服务

本文深入解析网络应用的基石:进程如何通过网络通信,以及如何选择合适的运输服务。

一、进程通信:网络应用的实质

网络应用的本质,是运行在不同主机上的应用进程之间的通信。“客户端”和“服务器”实际上是进程的角色。

1. 客户端与服务器进程
  • 客户端进程:通信的发起者。

    • 通常由用户触发,间歇性运行。

    • 主动向服务器发起通信。

    • 动态获取IP地址。

  • 服务器进程:通信的等待者。

    • 总是运行在后台,等待连接请求。

    • 拥有固定的、众所周知的IP地址。

关键点:我们常说的“客户端”和“服务器”,指的是承担相应角色的进程,而非整个主机。一台主机可以同时运行多个客户端和服务器进程。

2. 进程与网络之间的接口:套接字

进程通过一个称为套接字的软件接口向网络发送和接收报文。

// 一个简化的视角:你的项目中的通信
// 客户端进程
int sockfd = socket(AF_INET, SOCK_STREAM, 0); // 创建套接字
connect(sockfd, &server_addr, sizeof(server_addr)); // 连接服务器进程
send(sockfd, json_request, strlen(json_request), 0); // 通过套接字发送数据// 服务器进程
int client_fd = accept(server_sockfd, NULL, NULL); // 接受连接,创建新的套接字用于通信
recv(client_fd, buff, sizeof(buff), 0); // 通过套接字接收数据

套接字是应用层与运输层之间的门户。开发者可以控制套接字这一端的几乎所有东西(选择运输协议、设定参数),但对套接字另一端的运输层基础设施几乎无法控制。

3. 进程编址:如何找到对方?

为了向特定主机上的特定进程发送报文,需要两种信息:

  1. 主机的地址:IP地址

  2. 进程的标识符:端口号

  • HTTP服务器使用端口80

  • SMTP服务器使用端口25


二、应用程序需要的运输服务

不同的网络应用对数据传输有不同的要求。在选择运输协议时,主要从以下四个维度考量:

1. 可靠数据传输
  • 需求:数据能否容忍丢失?

  • 可靠:确保由发送进程发送的数据最终完整地交付给接收进程。

    • 适用场景:文件传输、电子邮件、Web文档传输。

  • 不可靠:可能发生数据丢失。

    • 适用场景:语音/视频通话(丢失少量数据影响不大,重传反而有害)。

2. 吞吐量
  • 需求:应用对传输速率有无最低要求?

  • 带宽敏感的应用:需要吞吐量保证在某数值以上。

    • 适用场景:多媒体应用(如视频流)。

  • 弹性应用:能够利用任何可用的吞吐量。

    • 适用场景:电子邮件、文件传输。

3. 定时
  • 需求:数据对传输延迟是否敏感?

  • 要求低延迟:数据必须在某个时间范围内到达。

    • 适用场景:网络游戏、语音通话(延迟>400ms体验就很差)。

  • 对延迟不敏感:没有严格的延迟上限。

    • 适用场景:文件下载。

4. 安全性
  • 需求:数据是否需要保密、完整或认证?

  • 需要安全:对传输数据进行加密,防止窃听和篡改。

    • 适用场景:网上银行、电子商务、企业敏感信息。

  • 不需要安全:数据可以明文传输。

    • 适用场景:非敏感信息的普通浏览。


三、因特网提供的运输服务

因特网的运输层主要为我们提供了两个协议:TCPUDP。它们为应用层提供了截然不同的服务模型。

1. TCP服务

TCP是一个面向连接的、可靠的运输协议。

  • 面向连接:在数据传输前,客户端和服务器会交换控制信息,进行三次握手,建立一个TCP连接。数据传输结束后,会关闭连接。

  • 可靠数据传输:通过确认、重传等机制,确保数据正确、有序地从发送进程到达接收进程。

  • 拥塞控制:当网络出现拥堵时,TCP会抑制发送进程,缓解网络压力。这不仅是为了对方考虑,也是为了整个网络的健康。

  • 流量控制:协调发送和接收速率,防止发送方过快地发送数据而淹没接收方。

TCP像是可靠的“快递服务”:你寄出的包裹(数据)保证不丢失、不损坏、按顺序送达,但可能需要付出一些时间(延迟、开销)的代价。

2. UDP服务

UDP是一个无连接的、不可靠的运输协议。

  • 无连接:发送数据前没有握手过程,直接发送。

  • 不可靠数据传输:不保证数据一定能到达接收进程,也不保证按序到达。

  • 没有拥塞控制和流量控制:发送进程可以按任何速率发送数据。

UDP像是普通的“邮政平信”:成本低、速度快,但可能丢失、乱序,且不通知你。

3. TCP与UDP对比速查表
特性TCPUDP
连接建立需要(三次握手)不需要
可靠性可靠,保证交付不可靠,可能丢失
吞吐量受拥塞控制调节不受限制,但可能因丢包而不稳定
定时不保证不保证
拥塞控制
头部开销较大(20字节)较小(8字节)
数据流面向字节流,无消息边界面向报文,保留消息边界

四、运输服务选择指南

作为应用开发者,如何为你的应用选择合适的运输协议?

应用应用层协议底层运输协议选择原因
电子邮件SMTPTCP可靠性至关重要,不能丢失邮件内容
Web应用HTTPTCP可靠性至关重要,需要保证网页完整加载
文件传输FTPTCP可靠性完整性是首要目标
远程终端SSH/TelnetTCP可靠性很重要,打错的命令后果严重
流媒体HTTP, RTPTCP  UDP时效性吞吐量是关键,可容忍少量丢失
网络电话SIP, RTP通常UDP低延迟时效性是关键,重传无意义
域名解析DNS通常UDP请求-响应模式,简单快速,一次交换即可完成

总结

  • 进程通信是网络应用的实质,通过套接字接口实现。

  • 运输服务的选择是在可靠性、吞吐量、定时、安全性等多个维度间的权衡

  • TCP提供可靠的、面向连接的字节流服务,是大多数数据应用的首选。

  • UDP提供简单的、无连接的不可靠报文服务,适用于实时性要求高、可容忍丢失的应用。

理解这些基础原理,是设计高效、健壮网络应用的第一步

http://www.dtcms.com/a/532284.html

相关文章:

  • HTTP 常考问题简洁回答(速记版)
  • MQTT 与 HTTP 协议对比
  • 商城网站建设视频教程wordpress教程cms
  • SZU大学物理A2实验报告-汇总链接-free
  • IOT项目——电源入门系列-第四章
  • ① leetcode刷题汇总(数组 / 字符串)
  • 网站名称填写什么晋中品牌网站建设建设
  • 宫殿记忆术AI训练系统:可扩展的终身记忆框架
  • 掌握机器学习算法及其关键超参数
  • 网站建设收费价目表织梦制作网站如何上线
  • 【传奇开心果系列】基于Flet框架实现的窗口加载显示本地图像示例自定义模板实现原理深度解析
  • 机器学习算法常用算法
  • Gorm(七)关联的Tag写法
  • 零基础理解k8s
  • *Python基础语法
  • 广东卫视你会怎么做网站化妆品网站的建设方案
  • WPF 静态样式与动态样式的定义及使用详解
  • 有没有专业做盐的网站手机wap网站程序
  • 【线程同步系列6】一个基于VC封装的多线程类CMyThread(类似QT中的QThread类的run方法)
  • python+vue旅游购票管理系统设计(源码+文档+调试+基础修改+答疑)
  • 宠物管理|宠物店管理|基于SSM+vue的宠物店管理系统(源码+数据库+文档)
  • 站内关键词自然排名优化制作图片的免费软件
  • Cline中模型识别任务与clinerules相关性的实现逻辑
  • Linux 进程面试考点:进程状态、通信方式、信号量等关键问题速记
  • 网站建设有哪些类型西昌网站建设公司
  • 风中有朵雨做的云网站观看美容网站开发
  • Java IO 流详解:字符流(Reader/Writer)与字符编码那些事
  • C++新特性—— 智能指针(shared_ptr/unique_ptr/weak_ptr)
  • OpenCV(十四):绘制直线
  • 支持支付宝登录的网站建设wordpress指定分类文章列表