关于TCP和UDP的联系与区别以及网络字节序和主机字节序的转换函数实践

news/2024/5/5 18:14:39/文章来源:https://www.cnblogs.com/1713564464qq/p/16771812.html

1. TCP和UDP的相同点:

TCP和UDP都是在网络层,都是传输层协议,都能都是保护网络层的传输,双方的通信都需要开放端口。

2.TCP和UDP的不同点:

TCP传输协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC793定义。

UDP是Internet协议集支持一个无连接的传输协议,为应用程序提供了一种无需建立连接,就可以发送封装的IP数据包的方法; 

两者的区别主要如下,首先,TCP面向连接,而UDP是无连接的,也就是说,UDP发送数据前不需要建立连接; 其次,TCP提供的服务更可靠,换句话说,通过TCP连接传输的数据无差错、不丢失、不重复,并且能够按序到达,而UDP不保证可靠交付; 第三,TCP面向字节流,也就是说TCP处理数据时,看成一连串无结构的字节流,而UDP则面向报文的,TCP连接只能是点到点的,但UDP不但支持一对一,还可以一对多、多对一和多对多的交互通信,UDP的首部开销8个字节比TCP的20字节要小。 

 

 

3.网络字节序和主机字节序的转换函数实践

1.为什么要进行转换?

在进行网络编程时,由于网络字节的顺序和主机的字节顺序可能存在不同,需要进行转换以统一“格式”

2.什么是网络字节顺序和主机字节顺序呢?

2.1网络字节顺序NBO(Network Byte Order):

网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用big endian排序方式,统一格式可以避免兼容性问题。

 

2.2主机字节顺序(HBO,Host Byte Order):

不同的机器的主机字节顺序(HBO)不一定相同,与CPU设计有关。

详解:

不同的CPU有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机序

最常见的有两种

1. Little-endian:将低序字节存储在起始地址

2. Big-endian :将高序字节存储在起始地址

LE(little-endian)将地址低位存储值的低位,将地址高位存储值的高位,是最符合人的思维的字节序。因为从人的思维来说低位值小,就应该放在内存地址小的地方,也即内存地址低位;反之,高位值大就应该放在内存地址大的地方,也即内存地址高位。

BE(big-endian)的地址低位存储的是值的高位,地址高位存储的是值的低位,它是最直观的字节序。说直观是它不需要考虑对应关系,只需要把内存地址从左到右按照由低到高的顺序写出;把值按照通常的高位到低位的顺序写出,两者对照,一个字节一个字节的填充进去。例如:

在内存中双字0x01020304的存储方式

内存地址

4000 4001 4002 4003

LE 04 03 02 01

BE 01 02 03 04

如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为

内存地址BE LE

0x0000 0x12 0xcd

0x0001 0x23 0xab

0x0002 0xab 0x34

0x0003 0xcd 0x12

通常来说,x86 cpu是Little-Endian。而一般ARM CPU也是Little-Endian。

但是当前常见的开发板使用的处理器比如S3C2410A、S3C2440等都是大小端支持的,可以通过软件选择。

 

3.如何进行网络字节顺序和主机字节顺序的转换?

网络中传输的数据有的和本地字节存储顺序一致,而有的则截然不同,为了数据的一致性,就要把本地的数据转换成网络上使用的格式,然后发送出去,接收的时候也是一样的,经过转换然后才去使用这些数据,基本的库函数中提供了这样的可以进行字节转换的函数,如和htons( ) htonl( ) ntohs( ) ntohl( ),这里n表示network,h表示host,htons( ) htonl( )用于本地字节向网络字节转换的场合,s表示short,即对2字节操作,l表示long即对4字节操作。同样ntohs( )ntohl( )用于网络字节向本地格式转换的场合

1、htons 把unsigned short类型从主机序转换到网络序

2、htonl 把unsigned long类型从主机序转换到网络序

3、ntohs 把unsigned short类型从网络序转换到主机序

4、ntohl 把unsigned long类型从网络序转换到主机序

在使用little endian的系统中 这些函数会把字节序进行转换,在使用big endian类型的系统中这些函数会定义成空宏。

 

 

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

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

相关文章

SD-WAN:现代网络的基石

罗马工程构成了现代文明的基石,建造了横跨已知世界的渡槽,连接了各行各业的人民。拱门支撑着这些壮观的结构,但这些宏伟建筑成就的核心是基石。 SD-WAN 是现代网络的基石,为实现一致的服务质量 (QoS)、基于云的集中式网络管理和控…

scrapy爬取网站图片(静态加载)

1.创建一个scrapy项目 scrapy startgproject tupian cd tupian 创建爬虫文件 scrapy genspider Image www.com(域名)后续需要更改 开通pip管道是需要注意,我们将之前的类注释了,所以我们需要将原来的pip管道的名称加以修改 在终端运行就可以获取数据, 运行后会出现错误是…

面试官:Hash 碰撞是什么?如何解决?被问懵了……

Hash如何存数据 hash表的本质其实就是数组,hash表中通常存放的是键值对Entry。 如下图:这里的学号是个key,哈希表就是根据key值来通过哈希函数计算得到一个值,这个值就是下标值,用来确定这个Entry要存放在哈希表中哪个位置。 Hash碰撞 hash碰撞指的是,两个不同的值(比如张…

你真的了解SQL中的EXISTS谓词吗?

EXISTS 谓词的用法 支撑 SQL 和关系数据库的基础理论主要有两个:一个是数学领域的集合论,另一个是作为现代逻辑学标准体系的谓词逻辑(predicate logic),准确地说是“一阶谓词逻辑”。EXISTS 是为了实现谓词逻辑中“量…

管理系统权限总结

概念 功能权限和数据权限。 功能权限:用户是否能打开某一个网页,是否能点击编辑按钮等。数据权限:用户可以使用的数据范围。 用户 应用系统的具体操作者,用户可以自己拥有权限信息,可以归属于0~n个角色&…

使用VSCode连接远程服务器

1 效果展示 最近在使用云服务器开项目,发现VSCode的remote插件能远程连接服务器进行开发,这样就非常方便了。效果如下: 可以看到,这样操作,使得云端开发和本地开发几乎没什么不同,如果是云服务器就更方便了…

Vue脚手架报错:‘v-model‘ directives require no argument 解决方案

1、报错: v-model directives require no argument 截图 2、原因: ESLint对vetur进行了eslint检查 3、解决方法 ① 修改模板中使用v-show 将 v-model:show"show" 改为 v-model"show" ② vetur插件的作者给出了解决办法 我们可…

20201306吴龙灿第三章学习笔记

目录Ⅰ知识点归纳1.进程的概念什么是进程?进程的特征动态性并发性独立性异步性结构性程序和进程主要区别2.多任务处理系统(1)背景(2)多任务处理系统代码介绍3.进程同步(1)同步(2)进程唤醒与睡眠无效唤醒A 进程:B 进程:避免无效唤醒A 进程:Linux 内核的例子Ⅱ实践内容与…

docker jenkins升级以及失败处理

一、概述 jenkins是由docker安装的,目前的jenkins版本为2.356。然后jenkins右上角提示版本升级 点击了升级,升级完成后,需要重启一下。 然后就芭比Q了,访问jenkins出现504错误。查看docker日志,提示需要jdk升级到1.8。默认的jenkins的jdk版本为1.7,然后docker就开始一直…

督办管理系统——让企业工作落实到位

开展督查督办工作是企业在经营管理过程中的重要环节和管理手段,是企业办公室系统政务服务的一项重要工作。其具有间接性、权威性、实效性等特点。要加强企业督查督办工作,必须思想认识到位,充分把握督查督办工作原则;制度建设到位&#xff0c…

linux NTP同步时间后比实际时间慢8小时

1. issue ntp同步时间后比实际时间慢8小时 2. analysis 查询系统当前的时区设置 date -R,看到系统是 0000 时区,而中国统一采用北京所在的东8时区,由此造成了8小时的时间偏差。 3. solution 将PC ubuntu /usr/share/zoneinfo/Asia/Shanghai…

Django定义路由_子路由_函数视图

Django定义路由什么是路由,怎么去定义路由?添加路由Path 函数路由定义的痛点处理路由中的动态参数什么是路由,怎么去定义路由? 通常在我们创建项目包中,有个url.py的文件,我们需要去定义路由信息&#xff…

二叉树专项训练LeetCode

144. 二叉树的前序遍历 二叉树入门 递归 与 迭代 class Solution {List<Integer> ans new ArrayList<>();void dfs(TreeNode root){if(root null) {return;}ans.add(root.val);dfs(root.left);dfs(root.right);}public List<Integer> preorderTraversal(T…

【Golang开发面经】蔚来(两轮技术面)

文章目录一面1. channel 缓冲与非缓冲2. mysql引擎3. 索引如何建立&#xff1f;4. linux 如何看进程5. redis 字符串的底层6. 线程池理解7. 线程池的拒绝策略8.悲观锁&#xff0c;乐观锁9. HTTP 各个版本的区别10. HTTP2.0之前怎么实现服务器推送机制&#xff1f;11. websocket…

[操作系统] 启动

启动 一、通电 由于内存是随机存储器&#xff08;Random access memory&#xff0c;RAM&#xff09;&#xff0c;属于易失性存储器&#xff0c;未通电时&#xff0c;RAM中不会有任何内容&#xff0c;因此刚一通电&#xff0c;RAM不可能有任何实际信息。计算机硬件厂商在只读存…

信创浪潮下,看看大公司是如何建立数据安全保护体系的?

信创&#xff0c;即信息技术应用创新产业&#xff0c;它是数据安全、网络安全的基础&#xff0c;也是新基建的重要组成部分。信创涉及到的行业包括IT基础设施&#xff1a;CPU芯片、服务器、存储、交换机、路由器、各种云和相关服务内容&#xff0c;基础软件&#xff1a;数据库、…

1.ROS机器视觉:单目摄像头的调用与标定

(1条消息) ROS改错&#xff1a;vm虚拟机中调用摄像头失败_机械专业的计算机小白的博客-CSDN博客https://blog.csdn.net/wzfafabga/article/details/127204106?spm1001.2014.3001.5502 首先保证摄像头是可调用的。 1.安装usb_cam驱动 sudo apt-get install ros-melodic-usb-…

数据导入导出功能的测试点

【数据导入功能】 一、操作按钮校验 1、导入按钮生效 2、取消导入按钮生效 二、导入模板校验 1、文件数量 1&#xff09;不传模板&#xff1a;点确认时提示错误 2&#xff09;传模板&#xff1a;只支持单文件 or 还支持多文件同时导入 2、文件格式 只支持xlsx文件 or 还支…

HTML学生个人网站作业设计 学生大学生活网页设计作品 学生个人网页模板 简单个人主页成品 div+css个人网页制作

&#x1f329;️ 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f482; 作者主页: 【进入主页—&#x1f680;获取更多源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;HTML5网页期末作业 (1000套…

Java项目:ssh网上便利店系统

作者主页&#xff1a;夜未央5788 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 该项目分为前后台。非maven项目&#xff1b; 前台主要功能包括&#xff1a; 会员登录、注册、商品展示、加入购物车、会员中心、我的订单、我的地址…