热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

TCP/IP笔记——UDP

OSI模型中最下面的两层用来解决两个硬件设备在物理上的通信问题(如规定怎么将电平信号转换为数字信号),相对应的TCPIP模型中,这部分代表将会将机器封装为一个MAC地址来实现通讯。

OSI模型中最下面的两层用来解决两个硬件设备在物理上的通信问题(如规定怎么将电平信号转换为数字信号),相对应的TCP/IP模型中,这部分代表将会将机器封装为一个MAC地址来实现通讯。网络层是关于,具体到应该由谁、哪一个设备来接受传输的信号,所以对应的TCP/IP模型中,用IP地址来表示“接收方”的地址,用于建立连接。

对应到怎么实现的问题,看上图,可以看到每一层对应的包里面的头部信息,即发送的时候,从应用层到数据链路层一层层下来进行“包装”,加上用于对应层的标识部分,在接收方则是从数据链路层一层层上去到具体应用,一层层对应地进行拆包装,最终送达。可以当成邮递快递那样理解,在快递发送的时候,最先看的是哪个省份、哪个市区,把送到某个地区的快递统一装在卡车上送到一个集中的地点,然后一步步分发,最后在目标地点附近的派送中心看快递具体到哪个位置、房号,最后才送到用户手里。如果好奇具体内容是怎么样的可以用wireshark来抓包看一下,这里就不展开来说了。


运输层的两个主要协议



  1. 用户数据报协议UDP(User Datagram Protocol)

  2. 传输控制协议TCP(Transmission Control Protocol)

UDP在传输数据前不需要建立连接,远地主机的运输层在接收到UDP报文之后不需要给出任何确认,所以UDP提供的是一种不可靠的连接,不过通常效率更加高(所以如果是更加讲究传输速率而不是保证数据的正确的话,更常用UDP,如视频通话,图像扭曲或部分图像丢失是可以接受的,所以通常用UDP实现)。

TCP提供面向连接的服务,传输数据前必须要先建立连接,数据传送结束后要释放连接。TCP提供可靠的、面向连接(即在传输数据前一定要建立连接)的运输服务,所以不可避免地增加了许多开销,因此代价较大。


关于端口

这里的端口指的是使用在运输层的协议端口号(protocol port number)。这种在协议栈层间的抽象的协议端口是软件端口,而不是类似于路由器或者交换机上面的硬件端口。硬件端口用于不同硬件设备的交互,软件端口是用于应用层的各种协议进程运输实体进行层间交互的一种地址。UDP和TCP的首部格式中都有源端口和目的端口两个字段。运输层收到IP曾交上来的运输层报文的时候根据首部中目的端口号来交付数据给应用层的目的应用进程。

TCP/IP的运输层用一个16位端口号来标志一个端口,端口号只具有本地意义,用来标志本计算机应用层中的各个进程在和运输层交互时的层间端口,如果是在不同计算机中,那么相同端口号其实没有关联。16位端口号允许65535个不同的端口号。

计算机通信的时候需要知道对方的IP地址和端口号,IP地址用于找到目标计算机,端口用于找到目标应用进程。

互联网上计算机通信方式是客户-服务器方式,所以端口号分为两大类:



  1. 服务器端使用的端口号:这里又有分两类,一类是熟知端口号(well-known port number)或系统端口号,0~1023,分配给了TCP/IP中最重要的一些应用程序;另一类是等级端口号,1024~49151,使用这类端口号的时候需要在IANA按照规定的手续登记以防重复;

  2. 客户端使用的端口号,49152~65535,尽在客户进程运行时才动态选择,因此又名短暂端口号。这类端口号可以在当前客户进程结束之后分配给另一个客户进程使用


UDP

主要特点:



  1. 无连接:发送数据前不需要建立连接,因此减少了开销和发送数据前的时延

  2. 尽最大努力交付:不保证可靠交付

  3. 面向报文:UDP对应用层交下来的报文,直接保留这些报文的边界然后进行发送,即收到多长的报文就直接照样发送

  4. 没有拥塞控制:所以源主机可以按照恒定速率来发送数据,因为不会受到网络情况的影响

  5. 支持一对一、一对多、多对一、多对多的交互通信

  6. 首部开销小:首部只有8个字节,TCP有20个


首部格式

用户数据报UDP有两个字段:数据字段和首部字段。首部字段有8个字节,4个字段,每个字段长2个字节,4个字段意义如下:

目标计算机接收到UDP数据报时会根据首部中的目的端口把UDP数据报通过对应的端口交给应用进程,但是,如果该端口不存在,那么会直接丢弃掉这个报文并用网际控制报文协议ICMP来发送“端口不可达”差错报文给发送方(traceroute就是基于这个机制来运作的)。

UDP使用到端口号,但是因为不需要事先建立连接,所以不需要套接字socket(TCP才必须要在socket之间建立连接)。


校验和

在计算校验和之前要在UDP用户数据报前面添加12个字节的伪首部,这是只在计算校验和的时候才临时加的,不下传或者上交,只是用于计算校验和。

直接截图自书上了,没什么好说的。


参考

《计算机网络》 谢希仁著:不用说了,经典教材。



推荐阅读
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 本指南详细介绍了在Linux环境中高效连接MySQL数据库的方法。用户可以通过安装并使用`mysql`客户端工具来实现本地连接,具体命令为:`mysql -u 用户名 -p 密码 -h 主机`。例如,使用管理员账户连接本地MySQL服务器的命令为:`mysql -u root -p pass`。此外,还提供了多种配置优化建议,以确保连接过程更加稳定和高效。 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
  • 深入理解Linux网络编程:UDP协议实战解析
    深入理解Linux网络编程:UDP协议实战解析 ... [详细]
  • 深入解析Spring Boot启动过程中Netty异步架构的工作原理与应用
    深入解析Spring Boot启动过程中Netty异步架构的工作原理与应用 ... [详细]
  • 深入解析OSI七层架构与TCP/IP协议体系
    本文详细探讨了OSI七层模型(Open System Interconnection,开放系统互连)及其与TCP/IP协议体系的关系。OSI模型将网络通信过程划分为七个层次,每个层次负责不同的功能,从物理层到应用层逐步实现数据传输和处理。通过对比分析,本文揭示了OSI模型与TCP/IP协议在结构和功能上的异同,为理解现代网络通信提供了全面的视角。 ... [详细]
  • DHCP三层交换机设置方式全局模式和接口模式设置方式和命令resetsave回车输入yreboot输入n输入y重启后就恢复默认设置了默认用户名密码adminAdmin@huawei ... [详细]
  • 西北工业大学作为陕西省三所985和211高校之一,虽然在农业和林业领域不如某些顶尖院校,但在航空航天领域的实力尤为突出。该校的计算机科学专业在科研和教学方面也具有显著优势,是考研的理想选择。 ... [详细]
  • 本章介绍了TCP/IP协议族中的链路层,其主要功能是为IP模块发送和接收IP数据报。链路层还支持一些辅助性协议,如ARP。此外,本文详细探讨了不同类型的链路层技术及其应用。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • 利用 Python Socket 实现 ICMP 协议下的网络通信
    在计算机网络课程的2.1实验中,学生需要通过Python Socket编程实现一种基于ICMP协议的网络通信功能。与操作系统自带的Ping命令类似,该实验要求学生开发一个简化的、非标准的ICMP通信程序,以加深对ICMP协议及其在网络通信中的应用的理解。通过这一实验,学生将掌握如何使用Python Socket库来构建和解析ICMP数据包,并实现基本的网络探测功能。 ... [详细]
  • 在重新安装Ubuntu并配置Django和PyCharm后,忘记测试MySQL连接,导致在后续配置过程中遇到错误:ERROR 2003 (HY000) - 无法连接到本地服务器 ‘127.0.0.1’ (111)。本文将详细介绍该错误的原因及解决步骤,帮助用户快速恢复MySQL服务的正常运行。我们将从检查网络配置、验证MySQL服务状态、配置防火墙规则等方面入手,提供全面的故障排除指南。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 在JavaWeb项目架构中,NFS(网络文件系统)的实现与优化是关键环节。NFS允许不同主机系统通过局域网共享文件和目录,提高资源利用率和数据访问效率。本文详细探讨了NFS在JavaWeb项目中的应用,包括配置、性能优化及常见问题的解决方案,旨在为开发者提供实用的技术参考。 ... [详细]
  • 如何使用mysql_nd:Python连接MySQL数据库的优雅指南
    无论是进行机器学习、Web开发还是爬虫项目,数据库操作都是必不可少的一环。本文将详细介绍如何使用Python通过 `mysql_nd` 库与 MySQL 数据库进行高效连接和数据交互。内容涵盖以下几个方面: ... [详细]
author-avatar
莎仕比亚的围脖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有