计算机网络中的服务原语

从一个驱动的代码中看到了request/indication/response/confirm等函数,不知是什么功能,上网找了找才发现原来是《计算机网络》中有关服务原语的概念。摘抄如下:

服务原语包含四种类型:

 请求(request):一个实体希望得到完成某些操作的服务
指示(indication):通知一个实体,有某个事件发生
响应(response):一个实体希望响应一个事件
证实(confirm):返回对先前请求的响应


原语一般都携带参数。
证实型(confirmed)和非证实型(unconfirmed)服务的区别:
证实型服务包含所有4种服务原语。
非证实型服务只包含请求和指示2种服务原语。

服务原语示例

服务原语工作示例


1. COENNCT.request:呼叫方请求建立连接
2. CONNECT.indication:被呼叫方指示有人请求建立连接
3. CONNECT.response:被呼叫方表示接受/拒绝建立连接请求
4. CONNECT.confirm:通知呼叫方建立连接的请求是否被接受
5. DATA.request:请求发送数据
6. DATA.indication:指示数据的到达
7. DISCONNECT.request:请求释放连接
8. DISCONNECT.indication:指示对方释放了连接


服务与协议的关系

服务是各层向它上层提供的一组原语,定义了两层之间的接口。
协议是同层对等实体之间交换数据帧、分组和报文的格式及意义等信息的一组规则。
服务确定了能为上一层提供的操作。
协议实现为上一层提供服务的具体方法。

 

计算机网络中的服务原语_服务原语的四种类型-优快云博客

### 服务原语与PDU的关系 在OSI参考模型中,服务原语服务数据单元(SDU)、协议数据单元(PDU)之间存在紧密的联系。以下是具体分析: #### 1. **服务原语的作用** 服务原语是上下层之间交互的一种方式,用于定义上层如何使用下层提供的服务[^4]。服务原语主要包括四种类型:请求、指示、响应和证实。这些原语允许上层实体向下层发出指令或接收来自下层的通知。 - 当上层需要利用下层的服务时,会通过“请求”原语发起操作。 - 下层执行完成后,可能返回一个“响应”或“证实”给上层,表明任务已完成或失败。 因此,服务原语本质上是一种垂直通信机制,负责协调不同层次之间的协作。 #### 2. **PDU的意义** 协议数据单元(PDU)是对等层之间传递的信息单位[^2]。每经过一层处理后,当前层会在接收到的数据基础上增加头部或其他控制信息,形成新的PDU,并将其交给下一较低层进行进一步封装或传输。 例如,在传输层,原始的应用层数据被称为服务数据单元(SDU),当加上传输层头之后便成为了一个完整的传输层PDU——即TCP段或者UDP报文。 #### 3. **两者关系解析** 尽管服务原语和PDU分别属于不同的维度(前者为垂直方向上的跨层沟通工具;后者则是水平方向上传输的实际内容载体),但它们共同构成了整个网络通信的核心逻辑框架: - 数据从高层流向低层的过程中,每次跨越相邻两层边界都会触发对应的服务原语动作; - 同时,随着逐级下降至更低层面,初始输入逐步被转换成适合该目标环境使用的最终形式—也就是各级别的PDUs。 换句话说,每当发生一次基于服务原语的操作时,往往伴随着一个新的PDU创建出来准备送往下一个节点或另一端主机中的同等级别组件去解读并继续后续流程。 ```python def encapsulate_data(data, layer_name): """ Simulates the process of adding a header to data at each OSI layer. Args: data (str): The incoming SDU from higher layers or PDU from peer layers. layer_name (str): Name of current processing layer. Returns: str: Newly formed PDU with added headers. """ new_header = f"<{layer_name}_header>" pdu = new_header + data return pdu # Example usage demonstrating how service primitives might interact alongside PDUs creation across multiple layers application_layer_sdu = "User Data" transport_pud = encapsulate_data(application_layer_sdu, 'Transport') # Adds transport-layer specific information network_pdu = encapsulate_data(transport_pud, 'Network') # Includes network addressing details like IP addresses data_link_frame = encapsulate_data(network_pdu, 'Data Link') # Appends MAC address info etc. physical_signal = encapsulate_data(data_link_frame, 'Physical') # Converts frames into electrical/optical signals for transmission over medium ``` 以上代码片段展示了简化版的数据封装过程模拟,其中`encapsulate_data()`函数代表了每一层添加自己特有的头部到传入的数据流之中,从而构建起适用于本层需求的新形态PDU实例。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值