lv7 嵌入式开发-网络编程开发 11 TCP管理与UDP协议

2023-10-06 11:06

本文主要是介绍lv7 嵌入式开发-网络编程开发 11 TCP管理与UDP协议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1 TCP管理

1.1 三次握手

1.2 四次挥手

1.3 保活计时器

2 wireshark安装及实验

3.1 icmp协议抓包演示

3.2 tcp协议抓包演示

3 UDP协议

3.1 UDP 的主要特点:

4 练习


1 TCP管理

1.1 三次握手

TCP 建立连接的过程叫做握手。

采用三报文握手:在客户和服务器之间交换三个 TCP 报文段,以防止已失效的连接请求报文段突然又传送到了,因而产生 TCP 连接建立错误

  1. B 的 TCP 服务器进程先创建传输控制块 TCB,准备接受客户进程的连接请求。
  2. A 的 TCP 向 B 主动发出连接请求报文段,其包头中的同步位 SYN = 1,并选择序号 seq = x,表明传送数据时的第一个数据字节的序号是 x。注意:TCP规定,SYN 报文段(即SYN = 1的报文段)不能携带数据,但要消耗掉一个序号。
  3. B 的 TCP 收到连接请求报文段后,如同意,则发回确认。 B 在确认报文段中应使 SYN = 1,使 ACK = 1,其确认号 ack = x + 1自己选择的序号 seq = y。注意:这个报文段也不能携带数据,但同样要消耗掉一个序号。
  4. A 收到此报文段后向 B 给出确认,其 ACK = 1确认号 ack = y + 1。 A 的 TCP 通知上层应用进程,连接已经建立。注意:TCP 标准规定:ACK 报文段可以携带数据。 但如果不携带数据,则不消耗序号。下一个数据报文段的序号仍是 seq = x + 1
  5. B 的 TCP 收到主机 A 的确认后,也通知其上层应用进程:TCP 连接已经建立。双方可以开始数据传送。

1.2 四次挥手

TCP 连接释放过程比较复杂。

数据传输结束后,通信的双方都可释放连接

TCP 连接释放过程是四报文握手。

  1. A 的应用进程先向其 TCP 发出连接释放报文段,并停止再发送数据,主动关闭 TCP 连接。 A 把连接释放报文段首部的 FIN = 1,其序号seq = u,等待 B 的确认。 TCP规定:FIN 报文段即使不携带数据,也消耗掉一个序号。
  2. B 发出确认,ACK=1,确认号 ack = u+1,这个报文段的序号 seq = v。 TCP 服务器进程通知高层应用进程。 从 A 到 B 这个方向的连接就释放了,TCP 连接处于半关闭 (half-close) 状态。B 若发送数据,A 仍要接收。
  3. 若 B 已经没有要向 A 发送的数据,其应用进程就通知 TCP 释放连接。 FIN=1,ACK=1,确认号 ack = u+1,这个报文段的序号 seq = w
  4. A 收到连接释放报文段后,必须发出确认。  ACK=1,确认号 ack=w+1,自己的序号 seq = u + 1
  5. 请注意:此时 TCP 连接还没有释放掉。必须经过时间等待计时器 (TIME-WAIT timer) 设置的时间 2MSL 后,A 才释放 TCP 连接。

1.3 保活计时器

用来防止在 TCP 连接出现长时期空闲。

通常设置为 2 小时 。

若服务器过了 2 小时还没有收到客户的信息,它就发送探测报文段。

若发送了 10 个探测报文段(每一个相隔 75 秒)还没有响应,就假定客户出了故障,因而就终止该连接。

2 wireshark安装及实验

windows下载:Wireshark · Download

linux下载:

sudo apt-get install wireshark//添加权限
sudo chmod 777 /usr/bin/dumpcap

3.1 icmp协议抓包演示

每ping一下,发送、应答 

3.2 tcp协议抓包演示

http协议的端口是443

3 UDP协议

UDP 只在 IP 的数据报服务之上增加了一些功能:

  • 复用和分用
  • 差错检测

3.1 UDP 的主要特点:

  • 无连接。发送数据之前不需要建立连接。
  • 使用尽最大努力交付。即不保证可靠交付。
  • 面向报文。UDP 一次传送和交付一个完整的报文。
  • 没有拥塞控制。网络出现的拥塞不会使源主机的发送速率降低。很适合多媒体通信的要求。
  • 支持一对一、一对多、多对一、多对多等交互通信。 首部开销小,只有 8 个字节。
  • UDP 通信的特点:简单方便,但不可靠。

UDP 是面向报文的

发送方 UDP 对应用层交下来的报文,既不合并,也不拆分,按照原样发送

接收方 UDP 对 IP 层交上来的 UDP 用户数据报,去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。 

UDP在计算校验和时,需要使用一个伪首部(Pseudo Header)来增强校验的准确性。伪首部通常在计算校验和时与UDP数据包头部一起进行处理,以确保校验和的准确性。伪首部的组成如下:

  1. 源IP地址:4个字节,表示发送方的IP地址。

  2. 目标IP地址:4个字节,表示接收方的IP地址。

  3. 保留字段:1个字节,全为0。

  4. 协议字段:1个字节,表示上层协议的类型,对于UDP来说,该字段的值为17。

  5. UDP数据包长度:2个字节,表示整个UDP数据包的长度。

伪首部的组成不包含在UDP数据包的实际字节中,而是在计算校验和时与UDP数据包头部一同处理。伪首部的目的是增加校验和的准确性,确保校验和的计算正确,并有效地检测数据在传输过程中的任何变化。

需要注意的是,伪首部只用于计算校验和,而不是作为实际的数据传输

UDP数据包的具体字节组成如下:

  1. 源端口和目标端口:每个端口号占用2个字节,共4个字节。源端⼝号。在需要对⽅回信时选⽤。不需要时可⽤全 0。⽬的端⼝号。终点交付报⽂时必须使⽤

  2. 长度字段:2个字节,表示整个UDP数据包的长度。其最⼩值是 8(仅有⾸部)

  3. 校验和字段:2个字节,用于校验数据包的完整性。检测 UDP ⽤户数据报在传输中是否有错。有错就丢弃  

  4. 数据部分:根据应用程序发送的实际数据而定,可以是任意长度。

下面是一个简单的UDP数据包的例子(以16进制表示):

源端口号: 0xABCD (2个字节) 目标端口号: 0x1234 (2个字节) 长度字段: 0x0012 (2个字节) 校验和字段: 0x5678 (2个字节) 数据部分: 0x48656C6C6F20576F726C64 (11个字节,对应ASCII编码的"Hello World")

4 练习

  • 1.画出三次握手的过程
  • 2.画出四次握手的过程
  • 3.实现TCP通信,并使用wireshark抓包,提交wireshark抓包截图,截图内容包含三次握手过程和四次握手过程

这篇关于lv7 嵌入式开发-网络编程开发 11 TCP管理与UDP协议的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求

Python+wxPython开发一个文件属性比对工具

《Python+wxPython开发一个文件属性比对工具》在日常的文件管理工作中,我们经常会遇到同一个文件存在多个版本,或者需要验证备份文件与源文件是否一致,下面我们就来看看如何使用wxPython模... 目录引言项目背景与需求应用场景核心需求运行结果技术选型程序设计界面布局核心功能模块关键代码解析文件大

C++多线程开发环境配置方法

《C++多线程开发环境配置方法》文章详细介绍了如何在Windows上安装MinGW-w64和VSCode,并配置环境变量和编译任务,使用VSCode创建一个C++多线程测试项目,并通过配置tasks.... 目录下载安装 MinGW-w64下载安装VS code创建测试项目配置编译任务创建 tasks.js

Elasticsearch 的索引管理与映射配置实战指南

《Elasticsearch的索引管理与映射配置实战指南》在本文中,我们深入探讨了Elasticsearch中索引与映射的基本概念及其重要性,通过详细的操作示例,我们了解了如何创建、更新和删除索引,... 目录一、索引操作(一)创建索引(二)删除索引(三)关闭索引(四)打开索引(五)索引别名二、映射操作(一

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

在Node.js中使用.env文件管理环境变量的全过程

《在Node.js中使用.env文件管理环境变量的全过程》Node.js应用程序通常依赖于环境变量来管理敏感信息或配置设置,.env文件已经成为一种流行的本地管理这些变量的方法,本文将探讨.env文件... 目录引言为什么使php用 .env 文件 ?如何在 Node.js 中使用 .env 文件最佳实践引

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二