网络编程入门介绍:TCP 和 UDP

目录

  1. 简介
  2. TCP:传输控制协议
    • TCP 的特点
    • TCP 如何工作
    • TCP 示例
    • TCP 实践样例
  3. UDP:用户数据报协议
    • UDP 的特点
    • UDP 如何工作
    • UDP 示例
    • UDP 实践样例
  4. TCP 与 UDP 的比较
  5. 总结

简介

在计算机网络中,TCP(传输控制协议)和 UDP(用户数据报协议)是两种常用的传输层协议。它们在数据传输方式、可靠性和用途上有显著差异。本文将通俗易懂地介绍 TCP 和 UDP,帮助新手理解这两种协议。
在这里插入图片描述

TCP:传输控制协议

TCP 的特点

  • 面向连接:TCP 在传输数据之前需要建立连接,类似于打电话前要拨号。
  • 可靠性:TCP 确保数据包按顺序、无丢失地传输到目标设备。
  • 流量控制:TCP 管理发送和接收数据的速率,避免网络拥塞。
  • 错误检测和恢复:TCP 能够检测数据传输中的错误,并进行重传。

TCP 如何工作

  1. 建立连接:TCP 使用“三次握手”建立连接。
    • 客户端发送 SYN 请求。
    • 服务器收到请求并返回 SYN-ACK 确认。
    • 客户端收到确认后再发送 ACK 确认,连接建立。
  2. 数据传输:数据以段(Segment)为单位传输,每个段都包含序号,接收方按序接收并确认。
  3. 断开连接:使用“四次挥手”断开连接。
    • 客户端发送 FIN 请求。
    • 服务器收到请求并返回 ACK 确认。
    • 服务器发送 FIN 请求。
    • 客户端收到请求后返回 ACK 确认,连接断开。

TCP 示例

在这里插入图片描述

场景:下载文件

  • 客户端请求下载文件,使用 TCP 连接确保文件完整无误地传输到客户端。

TCP 实践样例

下面是一个使用 Python 实现 TCP 客户端和服务器的示例:

TCP 服务器
import socket# 创建TCP/IP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定套接字到地址和端口
server_address = ('localhost', 65432)
server_socket.bind(server_address)# 监听传入连接
server_socket.listen(1)print('等待连接...')
connection, client_address = server_socket.accept()try:print('连接来自', client_address)# 接收数据并发送回去while True:data = connection.recv(1024)if data:print('收到:', data.decode())connection.sendall(data)else:break
finally:# 关闭连接connection.close()
TCP 客户端
import socket# 创建TCP/IP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 连接服务器
server_address = ('localhost', 65432)
client_socket.connect(server_address)try:# 发送数据message = '这是一个测试消息。'.encode()client_socket.sendall(message)# 接收响应data = client_socket.recv(1024)print('收到:', data.decode())
finally:# 关闭连接client_socket.close()

在这个示例中,TCP 服务器在 localhost 上的 65432 端口监听传入连接。客户端连接到服务器并发送一个测试消息。服务器接收消息并将其回显给客户端。

UDP:用户数据报协议

UDP 的特点

  • 无连接:UDP 不需要建立连接,直接发送数据,类似于发短信。
  • 不保证可靠性:UDP 不保证数据包的顺序和完整性,适用于对可靠性要求不高的场景。
  • 快速传输:UDP 适合实时应用,如视频流和在线游戏。

UDP 如何工作

  1. 直接发送数据:UDP 将数据打包成数据报(Datagram),附加源和目的信息后直接发送。
  2. 无确认机制:发送方不等待接收方的确认,数据包可能丢失或乱序。

UDP 示例

在这里插入图片描述

场景:视频通话

  • 视频通话需要快速传输数据,允许少量数据丢失,不影响整体体验,因此使用 UDP。

UDP 实践样例

下面是一个使用 Python 实现 UDP 客户端和服务器的示例:

UDP 服务器
import socket# 创建UDP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 绑定套接字到地址和端口
server_address = ('localhost', 65432)
server_socket.bind(server_address)print('等待数据...')while True:data, address = server_socket.recvfrom(4096)print('收到:', data.decode(), '来自:', address)if data:sent = server_socket.sendto(data, address)
UDP 客户端
import socket# 创建UDP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)server_address = ('localhost', 65432)
message = '这是一个测试消息。'.encode()try:# 发送数据print('发送:', message.decode())sent = client_socket.sendto(message, server_address)# 接收响应data, server = client_socket.recvfrom(4096)print('收到:', data.decode())
finally:client_socket.close()

在这个示例中,UDP 服务器在 localhost 上的 65432 端口等待数据。客户端发送一个测试消息到服务器,服务器接收消息并将其回显给客户端。

TCP 与 UDP 的比较

特性TCPUDP
连接类型面向连接无连接
可靠性
传输顺序保证不保证
速度较慢较快
传输单元段(Segment)数据报(Datagram)
典型应用文件传输、网页浏览视频流、在线游戏

总结

TCP 和 UDP 各有优缺点,适用于不同的应用场景。TCP 适合需要高可靠性的数据传输,如文件下载和网页浏览。UDP 则适合对实时性要求高但允许少量数据丢失的应用,如视频通话和在线游戏。理解它们的工作原理和特点,有助于选择合适的协议来满足特定的网络需求。

希望这篇文章能帮助你入门 TCP 和 UDP,进一步探索网络世界的奥秘。

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

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

相关文章

2024年6月15日 十二生肖 今日运势

小运播报:2024年6月15日,星期六,农历五月初十 (甲辰年庚午月庚戌日),法定节假日。 红榜生肖:兔、马、虎 需要注意:牛、鸡、龙 喜神方位:西北方 财神方位:…

AI 客服定制:LangChain集成订单能力

为了提高AI客服的问题解决能力,我们引入了LangChain自定义能力,并集成了订单能力。这使得AI客服可以根据用户提出的问题,自动调用订单接口,获取订单信息,并结合文本知识库内容进行回答。这种能力的应用,使得…

使用powershell筛选AD域控不能自主更改的用户并变更

# 查询“用户不能更改密码”为勾选状态的所有域用户,将域账户、姓名、勾选状态作为结果保存到C:\result\result.csvGet-ADUser -Filter * -Properties CannotChangePassword | Where-Object { $_.CannotChangePassword -eq $true } | Select SamAccountName, Name, …

班子考核评价的重要性与实施方法

在组织管理领域,班子考核评价是一项至关重要的工作,它不仅关系到组织的发展方向和速度,更直接影响到组织的凝聚力和战斗力。一个科学、公正、有效的班子考核评价体系,能够准确反映班子的工作成效,激励班子成员积极作为…

QML学习及实战

QML学习及实战(更多内容) 创建项目 3. 剩下的就是一路下一步即可 添加静态资源——图片 添加之后完成之后的路径 案列 || demo 可以参考的资料:https://github.com/gongjianbo/MyTestCode/blob/master/README.md 1. 文本省略号 Text {wi…

第二十三节:带你梳理Vue2:Vue插槽的认识和基本使用

前言: 通过上一节的学习,我们知道了如何将数据从父组件中传递到子组件中, 除了除了将数据作为props传入到组件中,Vue还允许传入HTML, Vue 实现了一套内容分发的 API&#xff0c;这套 API 的设计灵感源自 Web Components 规范草案&#xff0c;将 <slot> 元素作为承载分发…

系统思考与创新解决

结束了为期两天的《系统思考与创新解决》课程&#xff0c;专为上市公司中后台管理者设计。这次课程让我深刻感受到中后端管理者与前端管理者在心智模式上的显著差异。通过使用系统环路图&#xff0c;不仅揭示了这些差异&#xff0c;还探讨了如何利用这些见解来增强团队间的对话…

13. 第十三章 案例研究-选择数据结构

13. 案例研究-选择数据结构 到这里尼应该已经学会了Python的核心数据结构, 也见过了一些使用它们的算法. 如果你想要更多地了解算个发可以阅读第21章. 本章配合联系介绍一个案例分析, 帮你思考如何选择数据结构并如何使用它们.13.1 单词频率分析 1. 练习1 编写一个程序, 读入…

《站在2024年的十字路口:计算机专业是否仍是高考生的明智之选?》

文章目录 每日一句正能量前言行业竞争现状行业饱和度和竞争激烈程度[^3^]新兴技术的影响[^3^]人才需求的变化[^3^]行业创新动态如何保持竞争力 专业与个人的匹配度判断专业所需的技术能力专业核心课程对学生的要求个人兴趣和性格特点专业对口的职业发展要求实践和经验个人价值观…

vue+intro.js实现引导功能

前言&#xff1a; 使用 intro.js这个插件&#xff0c;来实现一个引导性的效果&#xff0c;适用场景&#xff0c;比如&#xff1a;新手引导页&#xff0c;操作说明等等 效果图&#xff1a; 官网地址&#xff1a;点我 实现步骤&#xff1a; 1、安装 npm install intro.js --sa…

【架构之路】聊聊什么是微服务

如何让大模型更聪明&#xff1f; 引言 微服务&#xff08;Microservices&#xff09;是一种软件架构风格&#xff0c;它将单一的应用程序拆分为多个小的服务&#xff0c;每个服务都是独立运行和部署的。每个微服务通常只专注于一个业务功能&#xff0c;具有自己的数据存储&…

JavaScript 实现数字计数器的动画效果

写JavaScript 实现数字递增的效果 在HTML页面实现数字计数器的动画效果&#xff0c;类似于页面上的计数器功能&#xff0c;可以控制递增速度和效果的流畅度。主要是显示数字时流畅度更好&#xff0c;页面没那么僵硬 1、第一种 设置每次增加的数量&#xff0c;我这里演示的是…

【UIDynamic-动力学-UIGravityBehavior-重力行为 Objective-C语言】

一、UIGravityBehavior,重力行为, 1.接下来啊,我们一个一个来做, 新建一个项目,叫做:01-重力, 接下来,我们在这个ViewController里边, ViewDidLoad:里边,先写一段简单的代码, 我们写这么一段简单的代码,新建一个红色的UIView,把它显示在屏幕上, UIView *redVie…

《征服数据结构》双端栈

摘要&#xff1a; 1&#xff0c;双端栈的介绍 2&#xff0c;双端栈的代码实现 1&#xff0c;双端栈的介绍 双端栈主要利用了“栈底位置不变&#xff0c;栈顶位置动态变化” 的特点&#xff0c;可以让两个栈共享一块存储空间。在前面我们讲到用数组实现栈的时候&#xff0c;如果…

2024最新流媒体在线音乐系统网站源码 音乐社区 多语言开心版

本文来自&#xff1a;2024最新流媒体在线音乐系统网站源码 音乐社区 多语言开心版 - 源码1688 应用介绍 简介&#xff1a; 2024最新流媒体在线音乐系统网站源码| 音乐社区 | 多语言 | 开心版 图片&#xff1a;

Hyper-V如何将文件复制到虚拟机?教您3个简单的方法!

需要将文件复制到虚拟机&#xff01; “大家好&#xff0c;有谁知道Hyper-V怎么将文件复制到虚拟机吗&#xff1f;我有一些文件&#xff0c;想要从主机中复制进虚拟机中&#xff0c;但是我不知道该怎么操作&#xff0c;有谁可以帮帮我吗&#xff1f;谢谢。” Hyper-V虚拟机可…

Python 使用 Tkinter库 设置 tkinter ttk 框架的背景颜色

Tkinter 设置 tkinter ttk 框架的背景颜色 在本文中&#xff0c;我们将介绍如何使用 Tkinter 在 tkinter ttk 框架中设置背景颜色。Tkinter 是 Python 中常用的 GUI 工具包&#xff0c;ttk 则是 Tkinter 中的一个模块&#xff0c;提供了一套更加现代化的控件。 Tkinter 简介 …

JAVA开发 PDF文件生成表格,表格根据内容自动调整高度

1、展示效果 2、相关功能实现 JAVA开发 使用Apache PDFBox库生成PDF文件&#xff0c;绘制表格 3、实现代码 import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.ap…

新增多种图表类型,新增视频、流媒体、跑马灯组件,DataEase开源数据可视化分析工具v2.7.0发布

2024年6月11日&#xff0c;人人可用的开源数据可视化分析工具DataEase正式发布v2.7.0版本。 这一版本的功能变动包括&#xff1a;图表方面&#xff0c;新增对称条形图、桑基图、流向地图、进度条等图表类型&#xff0c;并对已有的仪表盘、指标卡、明细表、汇总表、水波图、象限…

android studio 自定义类注释模版

perferences>File and Code Templates>Class 填写&#xff1a; /*** ClassName: ${ClassName}* Description: ${Description}* Author: ${Author}* CreateDate: ${CreateDate}* UpdateUser: ${UpdateUser}* UpdateDate: ${UpdateDate}* UpdateRemark: ${UpdateRemark}* …