首页 > 其他分享 >关于TCP和UDP的联系与区别以及网络字节序和主机字节序的转换函数实践

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

时间:2022-10-09 13:33:04浏览次数:78  
标签:UDP 顺序 字节 主机 网络 TCP

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类型的系统中这些函数会定义成空宏。

 

 

标签:UDP,顺序,字节,主机,网络,TCP
From: https://www.cnblogs.com/1713564464qq/p/16771812.html

相关文章

  • kubernetes Tcp流量可视化
    kubernetesTcp流量可视化使用k8spacket和grafana的nodegraph插件可以查看kubernetespod的TCP相关信息,如connection、bytes、和duration。下面是接收和响应的字节数信息......
  • 主机字节序和网络字节序的转换
    网络字节序:是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能被正确解释。网络字节序采用大端字节排序方式。......
  • TCP与UDP的联系与区别
     TCP和UDP是TCP/IP体系中运输层的两个协议。 TCP是传输控制协议,旨在适应支持多网络应用的分层协议层次结构。连接到不同但互连的计算机通信网络的主计算机中的成对进......
  • 网络字节序与主机字节序的转换函数(实践)
    什么是字节序?字节序,顾名思义,指字节在内存中存储的顺序。(1)小端字节序,数值低位存储在内存的低地址,高位存储在内存的高地址;(2)大端字节序,数值高位存储在内存的低......
  • 网络字节序与主机字节序的转换函数实践
     在Linux网络编程中,经常会遇见网络字节序喝主机字节序的相互转换,要了解他们,首先要知道什么是字节序。字节序,顾名思义,指字节在内存中存储的顺序。比如一个int32_t类型的......
  • TCP与UDP的联系与区别
    TCP与UDP是什么?TCP协议和UDP协议都是属于TCP/IP协议簇中的协议,且都是传输层中的协议。 TCP协议TCP协议是面向连接的协议。TCP传输有三个步骤:建立连接、传输数据、关闭......
  • 网络字节序与主机字节序的转换
    什么是字节序? 字节序指字节在内存中存储的顺序。字节序有两种:(1)小端字节序(Littleendinan),数值低位存储在内存的低地址,高位存储在内存的高地址;(2)大端字节序(Bigendian),数值......
  • 网络字节序与主机字节序的转换函数实践
    1.网络字节序与主机字节序在Linux网络编程中,经常碰到网络字节序与主机字节序的相互转换。说到网络字节序与主机字节序需要清晰了解以下几个概念。字节序,顾名思义,指字节在......
  • TCP和UDP的区别
    两种协议的简单介绍TCP:传输控制协议(TCP,TransmissionControlProtocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议;UDP:用户数据报协议(UDP,UserDatagramProtoc......
  • TCP和UDP的联系与区别
         在TCP/IP体系中,运输层有两个协议:TCP和UDP。    UDP——用户数据报协议是TCP/IP协议体系中运输层协议之一,UDP协议只提供应用进程寻址和简单的差错......