中科大计网学习记录笔记(十三):UDP 套接字编程 | 传输层概述和传输层的服务

前言:

学习视频:中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程
该视频是B站非常著名的计网学习视频,但相信很多朋友和我一样在听完前面的部分发现信息量过大,有太多无法理解的地方,在我第一次点开的时候也有相同的感受,但经过了一段时间项目的学习,对计网有了更多的了解,所以我准备在这次学习的时候做一些记录并且加入一些我的理解,希望能够帮助到大家。
往期笔记可以看专栏中的内容😊😊😊

文章目录

      • 2.9 UDP 套接字编程
    • 03. 传输层
      • 3.1 概述和传输层的服务
        • 3.1.1 传输服务和协议
        • 3.1.2 传输层 VS 网络层
        • 3.1.3 Internet 传输层协议

2.9 UDP 套接字编程

💡 与 TCP 不同的是 UDP 在客户端和服务器之间没有连接

  • 发送端在报文中要明确的制定目标的 IP 地址和端口号
  • 服务器必须从收到的分组中提取出发送端的 IP 地址和端口号。

再来看一下 UDP 套接字编程的代码,与上节的 TCP 编程做一下对比

👉 上节内容:中科大计网学习记录笔记(十二):TCP 套接字编程

因为很多具体的部分上节已经讲过了,这里直接上代码

🍀 服务端

	// 创建 UDP 套接字
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd < 0) {
        perror("Socket creation failed");
        exit(EXIT_FAILURE);
    }

    // 创建 TCP 套接字
    if ((client_sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
        perror("socket creation failed");
        exit(EXIT_FAILURE);
    }

可以看出创建 socket 时指定的套接字类型不同,分别为 SOCK_DGRAMSOCK_STREAM

// 设置服务器地址结构
    memset(&server_addr, 0, sizeof(server_addr));
    memset(&client_addr, 0, sizeof(client_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = INADDR_ANY;
    server_addr.sin_port = htons(PORT);

    // 将套接字绑定到服务器地址
    if (bind(sockfd, (const struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
        perror("Bind failed");
        exit(EXIT_FAILURE);
    }

接下来是设置服务器的 sockaddr 并且将其与 socket 相关联

while (1) {
    // 接收来自客户端的消息
    n = recvfrom(sockfd, (char *)buffer, BUF_SIZE, 0, (struct sockaddr *)&client_addr, &len);
    buffer[n] = '\0';
    printf("Client : %s\n", buffer);

    // 将接收到的消息发送回客户端
    sendto(sockfd, (const char *)buffer, strlen(buffer), 0, (const struct sockaddr *)&client_addr, len);
}

在这里可以发现,服务器并没有 创建新的 socket 而是直接从输入中获得了客户端的信息来直接返回数据。

🍀 客户端

sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
    perror("Socket creation failed");
    exit(EXIT_FAILURE);
}
// 设置服务器地址结构
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
// 发送信息到服务器
sendto(sockfd, (const char *)buffer, strlen(buffer), 0, (const struct sockaddr *)&server_addr, sizeof(server_addr));
// 接收服务器的响应
n = recvfrom(sockfd, (char *)buffer, BUF_SIZE, 0, NULL, &len);

💡 可以看出是直接发送的数据,而没有经过连接的过程

03. 传输层

提纲:

3.1 概述和传输层服务

3.2 多路复用与解复用

3.3 无连接传输:UDP

3.4 可靠数据传输的原理

3.5 面向连接的传输 TCP

  • 段结构
  • 可靠数据传输
  • 流量控制
  • 连接管理

3.6 拥塞控制原理

3.7 TCP 拥塞控制

3.1 概述和传输层的服务

3.1.1 传输服务和协议

💡 传输层为运行在 不同主机 上的 应用进程 提供了逻辑通信

  • 在前面的学习中可以得知,网络层提供了端到端的通信,而传输层在网络层的基础上又提供了进程到进程的通信。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 传输协议(如 TCP、UDP)运行在端系统上,发送方将应用层的报文分割成报文段(UDP 为数据报(datagram))

  • TCP 提供的是数据流的服务,而对于数据的分割需要应用层根据协议来判断

3.1.2 传输层 VS 网络层

💡 传输层提供进程之间的通信,网络层提供端到端的通信

在前面学到:本层对于上层的服务是本层的服务与其下面所有层提供的服务的总和

传输层作为网络层的上层在其端到端的通信的基础上做了如下的增强:

传输层对网络层做了几项主要的增强:

  1. 可靠性:传输层提供了可靠的数据传输机制。TCP(传输控制协议)通过序列号、确认和重传机制来确保数据的可靠性,即使在网络出现丢包或乱序的情况下也能够按序正确地传输数据。
  2. 流量控制:传输层通过流量控制机制来控制数据的传输速率,以防止发送方发送速度过快导致接收方无法及时处理数据而造成数据丢失。TCP利用滑动窗口机制进行流量控制。
  3. 拥塞控制:传输层还实现了拥塞控制机制,以避免网络拥塞并确保网络的高效利用。TCP通过拥塞窗口和拥塞避免算法来控制数据的发送速率,从而避免网络拥塞。
  4. 多路复用:传输层可以在单个网络连接上同时传输多个数据流,即多路复用。TCP和UDP都支持在同一个端口上通过不同的套接字进行多路复用。

在这些里面需要注意的是多路复用:多路复用就是提供传输多个数据流来为多个进程提供服务,分为两步

  • 在传输端需要做到 多路复用
  • 在接收端需要 解复用

来举一个现实中的例子:

💡 Ann 家里的 12 个孩子给 Bill 家里的 12 个孩子发邮件

  • Ann 家里将所有的邮件打包发出(复用)
  • Bill 家里来讲邮件分发给不同的孩子(解复用)

类比:

  • 主机 = 家庭
  • 进程 = 小孩
  • 应用层报文= 信封中的信件
  • 传输协议= Ann 和 Bill
    • 为家庭小孩提供复用解复用服 务
  • 网络层协议 = 邮政服务
    • 家庭-家庭的邮包传输服务
3.1.3 Internet 传输层协议

🍀 TCP 提供的服务:

  1. 可靠的数据传输:TCP通过序列号、确认和重传机制来确保数据的可靠传输,即使在网络出现丢包或乱序的情况下也能够按序正确地传输数据。
  2. 流量控制:TCP通过滑动窗口机制来进行流量控制,防止发送方发送速度过快导致接收方无法及时处理数据而造成数据丢失。
  3. 拥塞控制:TCP通过拥塞窗口和拥塞避免算法来控制数据的发送速率,避免网络拥塞并确保网络的高效利用。
  4. 面向连接:TCP是面向连接的协议,通信双方在通信前需要建立连接,数据传输完成后需要释放连接。这种连接方式提供了一种可靠的通信环境,可以确保数据传输的有序性和可靠性。
  5. 有序传输:TCP保证数据的有序传输,即发送方发送的数据包按顺序到达接收方,接收方能够按顺序正确地接收和处理数据。
  6. 多路复用和解复用

🍀 UDP 提供的服务

  1. 无连接:UDP是一种无连接的协议,通信双方在通信前不需要建立连接,直接进行数据传输。这使得UDP的通信过程更加简单和高效。
  2. 尽最大努力交付:UDP不保证数据的可靠传输,它尽最大努力将数据包从发送方传输到接收方,但不保证数据的正确性、顺序性和完整性。因此,在不稳定的网络环境下,UDP可能会出现丢包、乱序或重复传输等问题。
  3. 无流量控制:UDP不提供流量控制机制,发送方可以按照自己的速度发送数据,而不考虑接收方的接收能力。这意味着UDP可能会导致网络拥塞和数据丢失。
  4. 无拥塞控制:与流量控制类似,UDP也不提供拥塞控制机制,发送方发送数据时不会考虑网络的拥塞情况,可能会导致网络拥塞和数据丢失。
  5. 数据报格式:UDP使用数据报格式来传输数据,每个数据报都包含了完整的数据信息以及源和目标端口号等信息,这使得UDP适用于对实时性要求较高的应用场景,如音视频传输、在线游戏等。
  6. 多路复用和解复用

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

知识产权-

知识产权 《中华人民共和国著作权法》 《中华人民共和国著作权法》是为了保护文学、艺术和科学作品作者的著作权及与著作权有关的权益。《中华人民共和国著作权法》中涉及到的作品的概念是文学、艺术和自然科学、社会科学、工程技术等作品,具体来说,这些作品包括以下九类: …

不买服务器也可以将本地服务放到互联网(ngrok内网穿透)

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 不买服务器也可以将本地服务放到互联网 前言ngrok基础&#xff1a;穿越网络边界的魔法使用场景&#xff1a;突破网络限制的利器实战 前言 在网络的世界里&#xff0c;有时候你的服务像是困在一座数字…

前端工程化之:webpack4-1(babel的安装和使用)

一、安装 官网&#xff1a;https://babeljs.io/ 民间中文网&#xff1a;https://www.babeljs.cn/ 1.babel简介 babel一词来自于希伯来语&#xff0c;直译为巴别塔。 巴别塔象征的统一的国度、统一的语言 而今天的 JS 世界缺少一座巴别塔&#xff0c;不同版本的浏览器能识别…

为什么要使用纯净住宅代理?

随着互联网的快速发展&#xff0c;代理服务器已经成为许多在线活动的关键组成部分&#xff0c;从数据挖掘到网络安全。然而&#xff0c;随着技术的不断发展&#xff0c;住宅IP代理正崭露头角&#xff0c;因其在保障隐私、提升性能和应对封锁方面的卓越优势而备受瞩目。本文将深…

聚观早报 | 比亚迪秦PLUS荣耀版上市;任天堂成日本最富有公司

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 2月20日消息 比亚迪秦PLUS荣耀版上市 任天堂成日本最富有公司 理想汽车2024春季发布会 真我12 Pro系列国内官宣 …

读《能力陷阱》的一些随想

一、引言 这本书是由埃米尼亚.伊贝拉所写&#xff0c;作者是哈佛大学商学院和欧洲工商管理学院组织行为学教授。《能力陷阱》是一本由埃米尼亚伊贝拉所著的畅销书籍&#xff0c;它为我们揭示了如何摆脱自我限制&#xff0c;并释放出潜在的无限能力。在阅读这本书的过程中&#…

计算机视觉的应用23-OpenAI发布的文本生成视频大模型Sora的原理解密

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用23-OpenAI发布的文本生成视频大模型Sora的原理解密。本文概况性地将Sora模型生成视频主要分为三个步骤&#xff1a;视频压缩网络、空间时间潜在补丁提取以及视频生成的Transformer模型。 文章目录…

使用倒模耳机壳UV村脂胶液制作HIFI耳机隔音降噪耳机壳推荐的材料和工艺流程?

对于使用倒模耳机壳UV树脂胶液制作HIFI耳机隔音降噪耳机壳&#xff0c;以下是一些推荐的材料和工艺流程&#xff1a; 材料&#xff1a; UV树脂胶液&#xff1a;选择适合倒模工艺的UV树脂胶液&#xff0c;要求具有高透明度、良好的流动性和固化性能。模具材料&#xff1a;根据…

Docker命令实战

文章目录 一、Docker常用命令-图谱二、基础实战命令2.1、查找镜像2.2、启动容器2.3、修改容器内容2.3.1、进入容器内部修改2.3.2、挂载数据到外部修改 2.4、提交改变2.5、镜像传输--将镜像保存成压缩包2.6、两台主机间压缩文件的传输拷贝2.7、推送阿里云个人远程镜像仓库2.8、其…

漫漫数学之旅027

文章目录 经典格言数学习题古今评注名人小传 - 约翰弥尔顿 经典格言 机会统治一切。——约翰弥尔顿&#xff08;John Milton&#xff09; 约翰弥尔顿&#xff0c;这位伟大的英国诗人曾掷地有声地说出&#xff1a;“机会统治一切。”这句话如果放在一场宇宙级的脱口秀中&#x…

(三十六)大数据实战——ClickHouse数据库的部署安装实现

前言 ClickHouse是俄罗斯的Yandex于2016年开源的列式存储数据库 DBMS &#xff09;&#xff0c;使用C语言编写&#xff0c;主要用于在线分析处理查询&#xff08; OLAP &#xff09;&#xff0c;能够使用SQL查询实时生成分析数据报告。列式存储&#xff1a;数据按列进行存储&a…

wordpress企业网站模板免费

绿色风格的wordpress免费模板&#xff0c;经测试可以免费下载的WP模板。 https://www.wpniu.com/themes/300.html 简洁大气的文化艺术类wordpress模板&#xff0c;可以免费下载&#xff0c;实用易上手&#xff0c;新手也适合。 https://www.wpniu.com/themes/304.html 高端大…

微信小程序-绑定数据并在后台获取它

如图 遍历列表的过程中需要绑定数据&#xff0c;点击时候需要绑定数据 这里是源代码 <block wx:for"{{productList}}" wx:key"productId"><view class"product-item" bindtap"handleProductClick" data-product-id"{{i…

maven异常记录-must be unique

maven 打包异常记录 我们可以看看一个重要的异常&#xff1a; dependencies.dependency.(groupId:artifactId:type:classifier) must be unique: org.springframework.boot:spring-boot-starter-test 经过检查pom文件 果然是spring-boot-starter-test引用重复&#xff0c;平…

Elasticsearch:什么是搜索引擎?

搜索引擎定义 搜索引擎是一种软件程序或系统&#xff0c;旨在帮助用户查找存储在互联网或特定数据库中的信息。 搜索引擎的工作原理是对各种来源的内容进行索引和编目&#xff0c;然后根据用户的搜索查询向用户提供相关结果列表。 搜索引擎对于希望快速有效地查找特定信息的用…

SpringMVC 的参数绑定之list集合、Map

标签中name属性的值就是pojo类的属性名 参数绑定4 list [对象] <form action"teaupd.do" method"post"> <c:forEach items"${list}" var"tea" varStatus "status"> 教师编号&#xff1a;<input…

基础antdesign的业务型 短时间控件封装(复制即可使用)

{/* startFieldName 开始时间标识 endFieldName 结束时间标识 label 同form lable rules 是否开启规则校验 默认开启 detailData 详情数据&#xff0c;用于编辑回显 dateRange 限制结束时间的范围 例如&#xff1a;开始时间选择了 2024-02-05 &#xff0c;加上 dateRange3 后 只…

【MATLAB】BiGRU神经网络回归预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 BiGRU神经网络回归预测算法是一种基于双向门控循环单元&#xff08;GRU&#xff09;的多变量时间序列预测方法。该方法结合了双向模型和门控机制&#xff0c;旨在有效地捕捉时间序列数据中…

基于Java SSM框架实现生鲜食品o2o商城系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现生鲜食品o2o商城系统演示 摘要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 生鲜食品o2o商城系统&#xff0c;主要的模块包括查看管理员&#xff1b;首页、个人中心、用户…
最新文章