计算机网络 运输层上 | 运输层概述 UDP协议 端口 套接字

2023-12-20 17:36

本文主要是介绍计算机网络 运输层上 | 运输层概述 UDP协议 端口 套接字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1 运输层概述
    • 1.1 运输层存在的意义
    • 1.2 运输层协议概述
    • 1.3 主要端口号
  • 2 运输层主要协议 UDP
    • 2.1 UDP的特点
    • 2.2 UDP首部格式
    • 2.3 UDP工作流

1 运输层概述

1.1 运输层存在的意义

之前我们讲网络层的时候,已经可以将信息从一个主机传递到另一个主机了。

那么为什么我们还需要运输层呢?

是因为我们两个主机通信的时候,大多数情况是两个主机不同的进程在通信,比如我们浏览器访问需要一个进程,发邮件又需要一个进程。很多时候这些进程都是并行通信的。那么网络层是无法区分的,实际的区分通信的不同进程就交给了运输层,这也是运输层的重要作用——复用和分用

当然除了复用和分用,运输层还提供一些其他的功能如差错检测等

应用层不同进程的报文通过不同的端口向下交付到运输层

运输层提供应用进程的逻辑通信——逻辑通信的意思是:运输层之间的通信好像是沿着水平方向传送数据,但事实上这两个运输层之间并没有一条水平方向的物理连接

所以总结来看

网络层和运输层的区别

网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信

1.2 运输层协议概述

运输层主要有两个不同的运输协议

TCP和UDP

他们各自的PDU(运输协议单元如下)

UDP:它的PDU是TCP报文段

TCP:它的PDU是UDP报文段或用户数据报

那么实际中运输层如何区分不同的进程呢?通过抽象了端口号这种方式

由此可见,两个计算机中的进程需要对方的IP地址,还要知道对方的端口号(为了找到对方计算机中的应用程序)

不同端口号代表不同进程。

设计者们对端口号做了如下一些规定

1.3 主要端口号

两大类端口

(1)服务端使用的端口号

又分为两大类

熟知端口,数值一般为0~1023

​ 熟知端口号用来指派给TCP/IP最重要的一些程序,如下图所示

登记端口,数值为1024~49151

​ 没有数值端口使用的,使用的话必须登记

(2)客户端使用的端口号

短暂端口号,数值49152~65535

​ 仅在客户端进程运行时动态选择,因此又叫做短暂端口号
在这里插入图片描述

下面分别讨论UDP和TCP

其中UDP比较简单

2 运输层主要协议 UDP

UDP只在IP数据报上增加了很少一点的功能,即端口功能和差错检测的功能

2.1 UDP的特点

  1. UDP是一种无连接协议
  • 提供无连接服务 传送数据前不需要先建立连接
  • 不提供可靠交付 对方的运输层在收到UDP报文后,不需要给出任何确认
  1. 尽最大努力交付
  2. 没有拥塞控制
  3. UDP支持一对一,一对多,多对一和多对多的交互通信
  4. 对于应用层的报文,不合并不拆分,多长就都发送
  5. UDP首部开销较小

2.2 UDP首部格式

UDP首部很简单就八个字节,由四个字段组成,每个字段长度都是2字节

  1. 源端口
  2. 目的端口
  3. 长度 数据报长度,最小值是8
  4. 检验和 检测传输中是否有错

2.3 UDP工作流

如果接收方UDP发现报文端口号不正确,就丢弃该报文,并由ICMP发送“端口不可达”差错报文给发送方

对于UDP的差错检测,和IP数据报检测方法类似

  1. 首先,将UDP首部中的检验和字段置为0,以便进行计算。

  2. 将UDP伪首部添加到UDP数据包前面。伪首部包含了一些IP层的信息,用于计算检验和。伪首部的格式如下:

    Source IP Address (32 bits)
    Destination IP Address (32 bits)
    Reserved (8 bits, 值为0)
    Protocol (8 bits, UDP的协议值为17)
    UDP Length (16 bits, UDP首部+UDP数据的总长度)
    

    伪首部中的字段分别是源IP地址、目标IP地址、保留字段、协议字段(UDP的协议值为17)和UDP长度字段。这些字段一起构成了伪首部。

  3. 将UDP伪首部的各字段以及UDP首部和UDP数据中的所有16位字(如果数据不是16位的倍数,需要填充0使其满足16位字的条件)进行按位求和。这意味着将它们视为16位整数,将它们相加,如果结果溢出,则将溢出部分加到总和的末尾。

  4. 取总和的反码(将所有位取反,1变为0,0变为1),并将结果存储在UDP首部的检验和字段中。

  5. 发送方将带有计算后的检验和字段的UDP数据包发送到目标主机。

  6. 接收方在收到UDP数据包后,重复以上步骤,计算接收方的检验和。

  7. 接收方将计算得到的检验和与UDP首部中的检验和字段进行比较。如果它们匹配,说明数据包未损坏;如果不匹配,说明数据包可能已损坏或被篡改,接收方可以选择丢弃这个数据包。

总之,UDP检验和用于检测UDP数据包在传输过程中的完整性,但它不提供数据包的可靠传输和重传机制。如果检验和不匹配,接收方可以选择忽略数据包或向上层报告错误,但UDP本身不会进行重传。这是与TCP不同的地方,TCP提供了可靠的数据传输和重传机制。

这篇关于计算机网络 运输层上 | 运输层概述 UDP协议 端口 套接字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/516874

相关文章

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

CentOS7更改默认SSH端口与配置指南

《CentOS7更改默认SSH端口与配置指南》SSH是Linux服务器远程管理的核心工具,其默认监听端口为22,由于端口22众所周知,这也使得服务器容易受到自动化扫描和暴力破解攻击,本文将系统性地介绍... 目录引言为什么要更改 SSH 默认端口?步骤详解:如何更改 Centos 7 的 SSH 默认端口1

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

如何使用Nginx配置将80端口重定向到443端口

《如何使用Nginx配置将80端口重定向到443端口》这篇文章主要为大家详细介绍了如何将Nginx配置为将HTTP(80端口)请求重定向到HTTPS(443端口),文中的示例代码讲解详细,有需要的小伙... 目录1. 创建或编辑Nginx配置文件2. 配置HTTP重定向到HTTPS3. 配置HTTPS服务器

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

Flask解决指定端口无法生效问题

《Flask解决指定端口无法生效问题》文章讲述了在使用PyCharm开发Flask应用时,启动地址与手动指定的IP端口不一致的问题,通过修改PyCharm的运行配置,将Flask项目的运行模式从Fla... 目录android问题重现解决方案问题重现手动指定的IP端口是app.run(host='0.0.

nginx配置多域名共用服务器80端口

《nginx配置多域名共用服务器80端口》本文主要介绍了配置Nginx.conf文件,使得同一台服务器上的服务程序能够根据域名分发到相应的端口进行处理,从而实现用户通过abc.com或xyz.com直... 多个域名,比如两个域名,这两个域名其实共用一台服务器(意味着域名解析到同一个IP),一个域名为abc

Nginx启动失败:端口80被占用问题的解决方案

《Nginx启动失败:端口80被占用问题的解决方案》在Linux服务器上部署Nginx时,可能会遇到Nginx启动失败的情况,尤其是错误提示bind()to0.0.0.0:80failed,这种问题通... 目录引言问题描述问题分析解决方案1. 检查占用端口 80 的进程使用 netstat 命令使用 ss

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台