计算机网路第3章-运输层

概述和运输层服务

运输层协议为运行在不同主机上的应用进程提供了逻辑通信,从应用程序角度看,通过使用逻辑通信,就好像运行在不同主机上的进程直接相连在一起一样。

运输层和网络层的关系

网络层提供主机之间的通信,而运输层提供了不同主机上的不同进程的通信。

运输层只负责将自己的报文段提交给网络层或从网络层下载报文段,并不负责报文段在网络中的运输。

因特网运输层概述

因特网为用户提供了两种基本的运输层协议:

TCP(传输控制协议)和UDP(用户数据报协议)

其中,UDP和TCP最基本的责任是,将两个端系统间IP的交付服务扩展为运行在端系统上两个进程之间的交付服务。

将主机间交付扩展到进程间交付被称为运输层的多路复用与多路分解。

UDP和TCP也可以在报文段首部中包括差错检查字段,以提供完整性检查。

其中,进程到进程的数据交付和差错检查是两种最低限度的运输层服务,也是UDP只能提供的两种服务。

多路复用与多路分解

在接收端,运输层检查这些字段,标识出应用进程端口号,进而将报文段定向到该套接字。

将运输层报文段中的数据交付到正确的套接字的工作称为多路分解。

从源主机中不同套接字收集数据块,并为每块封装首部信息生成报文包,然后将报文报提交给网络层,这些工作被称为多路复用。

运输层报文段的基本组成

1.套接字有唯一的标识符。(即主机IP和端口号)

2.报文报有源端口号字段,目的端口号字段。(UDP报文段只有这两个,TCP还包括源IP字段和目的IP字段。)

其中端口号是一个16比特的数值,范围在0~65535之间。

其中0~1023是周知端口号,这是保留给某些众所周知的应用所使用的

诸如HTTP端口号是80。

无连接的多路复用与多路分解

即UDP所提供的多路复用和多路分解。

一个UDP套接字是由一个二元组全面标识的,该二元组包含一个目的IP和一个目的端口号

因此,如果两个UDP报文段拥有不同的源IP地址,但是具有相同的目的IP和目的端口号,这两个报文段就会被同一个UDP套接字所接收。

源端口号的用途是什么呢?

很简单,源端口号/源IP用来返回一个响应报文,响应报文中的目的IP和目的端口号就是请求报文的源IP和源端口号。

面向连接的多路复用和多路分解

即TCP所提供的多路复用和多路分解。

TCP与UDP一个细微区别就是,TCP是由一个四元组唯一标识的(目的IP、目的端口号、源IP、源端口号)这四个部分,只要有一个不同,那么就被TCP认为是两个不同的报文段,需要被两个独立的TCP套接字所接收。

下面,我们来阐述一个TCP报文段从网路到达目的主机的一个过程。

1.TCP服务器应用程序有一个“欢迎套接字”,该套接字在12000端口号上等待用户发来的连接建立请求。

2.现在有两条报文段被发送过来,两条报文段中,只有源IP不一样,其余的源端口号、目的IP、目的端口号皆相同。

3.欢迎套接字接收这两个报文段,同时进行分析判断两个报文段是否一致,因为两个报文段的源IP不一样,所以被认为是两个不同的报文段!

4.欢迎套接字创建两个新的TCP套接字,分别接收两个TCP连接请求报文段。

无连接运输:UDP

UDP只是做了运输协议所能做的最少工作:(多路复用/分解、差错检测)

实际上,如果应用程序使用的是UDP协议,那么UDP将会直接跟IP打交道。

值得注意的是,UDP发送报文段之前,发送方和接收方并没有握手,所以UDP也被称为是无连接的。

DNS就是一个常见的使用UDP协议的例子。

UDP的优点

1.关于发送什么数据以及何时发送的应用层控制更为精细

采用UDP的时候,只要应用程序将数据塞进UDP,UDP就会把数据打包进UDP报文段并且立即传送给网络层。

同时UDP相较于TCP没有拥塞控制机制,因此UDP可以比TCP有更加强大的性能体验,因为它并不需要额外的性能支出,用来提供额外的服务(拥塞控制机制、安全性保护等)

2.无需连接建立

TCP在开始连接之前,需要经过三次握手。

而UDP无需握手,即不需要构建连接,因此省去了建立连接的时间。

为此UDP协议没有建立连接的时延,这对于一些时延要求很低的应用程序,是必不可少的。

3.无连接状态

TCP需要在端系统中维护连接状态,包括接收和发送缓存、拥塞控制参数以及序号与确认号的参数。

而UDP不需要提供这些参数,因此UDP相较于TCP一般可以保持更多的活跃用户。

4.分组首部开销小

UDP报文段首部仅有:

目的IP和目的端口号。

而TCP报文段首部包含:

目的IP和目的端口号、源IP和源端口号。

综上,我们可以明白DNS为什么要使用UDP协议了,因为UDP协议没有建立连接的时延,这对于DNS来说非常重要,如果DNS采用TCP协议,那么DNS发送一个主机名查询报文段,将会获得较大的时延,这对于用户的体验是非常糟糕的。

虽然UDP协议不保证数据传输是可靠的,但这对于DNS是可容忍的,当使用UDP协议时,查询报文返回一个出错的数据后,DNS可以选择拒绝将出错数据传送给应用程序,或者将出错数据传送给应用程序并且给出报错信息。

不过值得注意的是,UDP虽然并不提供安全性保证,但可以在应用程序开发的时候,由开发人员在应用程序中内置安全性保护措施,从而使UDP也具有保护措施。

UDP报文段结构

UDP首部只有四个字段,每个字段占用两个字节。

长度字段指明了UDP报文段中的字节总数(首部加数据)。

检验和字段用来验证UDP报文段是否出错。

UDP检验和

UDP检验和提供了差错检测功能,但是这种功能仅仅能判断报文段是否出错,并不能判断出是哪一位字节或者哪些位字节出错,且不具备纠错的能力。

为此在UDP套接字检测到UDP报文段出错后,只能选择丢弃该报文段,或者将该报文段仍提交给应用数据,但附加一个出错信息用来应用程序提供报错信息。

UDP检验和的演算

UDP接收方对报文段中的所有16比特字的和进行反码运算,同时任何溢出都会被直接丢弃。

例如,下面我们由3个16比特的字:

0110 0110 0110 0000

0101 0101 0101 0101

1000 1111 0000 1100

其中按两个的和是:

1011 1011 1011 0101

再将这个和与上面的第三个比特相加,得:

0100 1010 1100 0010

再将这个和取反:

1011 0101 0011 1101

这就变成了检验和。

在接收方UDP套接字中,如果全部的四个比特字(原先的三个比特字和检验和)加在一起,如果该分组中没有出现错误,那么该和会是:

1111 1111 1111 1111

即全是1,但若16位中的某一位或多位出现了0,那么该分组中就出现了差错。

为什么UDP要具有差错检测

首先,如果端到端数据传输要提供差错检测(即不同主机上的不同应用进程传输),那么UDP就必须在端到端基础上在运输层提供差错检测。

这是一个在系统设计中被称为颂的端到端原则

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/168341.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

期中考misc复现

第一题 flow analysis 1 服务器附带的后门文件名是什么?(包括文件后缀) Windows后门是指当攻击者通过某种手段已经拿到服务器的控制权之后,然后通过在服务器上放置一些后门(脚本、进程、连接之类)&#xf…

SpringBoot Lombok的使用

目录 下载Lombok插件 Lombok的用法 获取日志对象 生成get,set方法 Lombok框架的实现原理 Lombok的常用注解 下载Lombok插件 要使用Lombok首先要确保idea安装了lombok插件 在项目中添加 lombok依赖 在<dependency>里右键生成点击edit starters 插件(没有就下载,可…

分治法,动态规划法,贪心法,回溯法主要概括

目录 分治法&#xff0c;动态规划法&#xff0c;贪心法&#xff0c;回溯法主要概括 1.前言2.分治法2.1基本思想&#xff1a;2.2适用条件&#xff1a;2.3时间复杂度&#xff1a;2.4主要解决&#xff1a;2.5关键字&#xff1a;2.6其他&#xff1a; 3.动态规划法3.1基本思想&…

使用序列化技术保存数据 改进 IO流完成项目实战水果库存系统

上一节内容是 使用IO流完成项目实战水果库存系统https://blog.csdn.net/m0_65152767/article/details/133999972?spm1001.2014.3001.5501 package com.csdn.fruit.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java…

基于stm32控制的4G模块在设备模式下通讯

这里的32控制其实和51的控制思路都是一样的&#xff0c;都是先利用一个网络助手将家里的无线网生成局域网&#xff0c;接着通过花生壳软件将局域网变成公共网&#xff0c;最后是利用串口助手&#xff0c;在4G模块的AT指令模式写入命令ATSOCKTCPC,公共网IP地址,公共网端口号&…

Hadoop3教程(二十七):(生产调优篇)HDFS读写压测

文章目录 &#xff08;146&#xff09;HDFS压测环境准备&#xff08;147&#xff09;HDFS读写压测写压测读压测 参考文献 &#xff08;146&#xff09;HDFS压测环境准备 对开发人员来讲&#xff0c;压测这个技能很重要。 假设你刚搭建好一个集群&#xff0c;就可以直接投入生…

跨境商城源码可以支持多种用户权限管理方式吗?

在跨境电商领域&#xff0c;为了满足消费者的需求和提供更好的购物体验&#xff0c;开发人员需要使用一种可靠的跨境商城源码来构建跨境电商平台。然而&#xff0c;这个商城源码是否可以支持多种用户权限管理方式呢?本文将探讨这个问题。 1.什么是跨境商城源码? 跨境商城源码…

linux进程管理,一个进程的一生(喂饭级教学)

这篇文章谈谈linux中的进程管理。 一周爆肝&#xff0c;创作不易&#xff0c;望支持&#xff01; 希望对大家有所帮助&#xff01;记得收藏&#xff01; 要理解进程管理&#xff0c;重要的是周边问题&#xff0c;一定要知其然&#xff0c;知其所以然。看下方目录就知道都是干货…

【单片机学习笔记】Windows+Vscode+STM32F4+freeRTOS+FatFs gcc环境搭建

为摒弃在接受keil邮件&#xff0c;研究了下gun编译&#xff0c;以STM32F407为例&#xff0c;简单记录 1. 软件包准备 Git 选择对应版本直接安装即可https://git-scm.com/download/winmakegcc ​ 1&#xff09;将上述软件包放置于C盘根目录 2&#xff09;添加环境变量 3&am…

【Git】idea提交项目到Gitee

文章目录 1. 创建Gitee仓库1. 新建仓库2. 添加描述3. 复制仓库地址 2. idea建立连接提交2.1 Create Git Repository2.2 选择要提交的根目录2.3 Commit2.4 Push2.5 提交成功 1. 创建Gitee仓库 1. 新建仓库 2. 添加描述 3. 复制仓库地址 点击右上角克隆/下载&#xff0c;复制HT…

pv操作题目笔记

对于 pv 操作分以下几步走 什么是pv操作 PV操作在进程同步中通常指的是信号量&#xff08;Semaphore&#xff09;操作。信号量是一种用于控制多个并发进程或线程之间的同步和互斥访问的同步工具。PV操作通常涉及两个基本操作&#xff1a;P操作&#xff08;wait操作&#xff0…

MD5生成和校验

MD5生成和校验 2021年8月19日席锦 任何类型的一个文件&#xff0c;它都只有一个MD5值&#xff0c;并且如果这个文件被修改过或者篡改过&#xff0c;它的MD5值也将改变。因此&#xff0c;我们会对比文件的MD5值&#xff0c;来校验文件是否是有被恶意篡改过。 什么是MD5&#xff…

微信小程序实现类似于 vue中ref管理调用子组件函数的方式

微信小程序中确实有类似于 vue 中 ref管理子组件的方式、 这里 我给子组件定义了一个 class 只要是 css选择器拿得到的 都没什么问题 但你要保证唯一性 建议前端开发还是慎重一点 就算是不能重复也尽量用class 因为id总还是有风险的 然后 我在子组件中顶一个了一个函数 start…

计网----数据包在传输中的变化过程,单播组播和广播,ARP协议,ARP代理,免费ARP,DNS协议,路由数据转发过程

计网----数据包在传输中的变化过程&#xff0c;单播组播和广播&#xff0c;ARP协议&#xff0c;ARP代理&#xff0c;免费ARP&#xff0c;DNS协议&#xff0c;路由数据转发过程 一.数据包在传输中的变化过程&#xff08;在同一个路由器下&#xff09; 1.传输数据时&#xff0c…

RPA的尽头是超自动化?

超自动化在经过数年的发酵期后&#xff0c;已从一个科技概念崛起为市值近千亿元的新赛道&#xff0c;包括各大互联网巨头、科技公司都纷纷围绕超自动化进行战略布局。 一方面&#xff0c;是行业巨头选择纷纷跻身超自动化新赛道&#xff0c;另一方面&#xff0c;RPA行业的领军企…

Proteus仿真--VB上位机程序控制DS1302时钟仿真(Proteus仿真+程序)

本文主要介绍基于51单片机的VB上位机程序控制DS1302时钟仿真设计&#xff08;完整仿真源文件及代码见文末链接&#xff09; 简介 硬件电路主要分为单片机主控模块、DS1302模块、LCD1602液晶显示模块以及串口模块 &#xff08;1&#xff09;单片机主控模块&#xff1a;单片机选…

Git最佳实践:git常用命令和原理

Git 是一个开源的分布式版本控制系统。 Git 工作区、暂存区和版本库 工作区&#xff1a;就是你在电脑里能看到的目录。暂存区&#xff1a;英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件&#xff08;.git/index&#xff09;中&#xff0c;所以我们把暂存区有时…

Leetcode—104.二叉树的最大深度【简单】

2023每日刷题&#xff08;六&#xff09; Leetcode—104.二叉树的最大深度 递归实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/int maxDepth(struct TreeNode* root){…

热点不热!如何修复笔记本电脑未连接到移动热点的问题

当你远离常规Wi-Fi时,移动热点是让你的笔记本电脑上网的关键,但当它没有按计划运行时,你会怎么办?以下是Windows笔记本电脑无法连接到移动热点时的几种修复方法。 为什么我的笔记本电脑没有连接到我的热点 由于你的笔记本电脑正试图连接到另一个有限制和可能存在问题的设…

PHP yield

概念&#xff1a; Generator&#xff1a;带 yield的function yield&#xff1a;Generator或task的中断关键字&#xff0c;执行到yield时一次调度周期执行完即阻塞&#xff0c;并返回右侧表达式结果&#xff0c;等待下一次调度器运行next()或迭代遍历才会继续往下执行&#xff0…