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

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

时间:2022-10-09 20:22:14浏览次数:60  
标签:UDP 字节 TCP addrSrv sin addr

TCP和UDP的区别

TCP是一个面向连接的、可靠的、基于字节流的传输层协议。

UDP是一个面向无连接的传输层协议。

具体来分析,和 UDP 相比,TCP 有三大核心特性:

面向连接:所谓的连接,指的是客户端和服务器的连接,在双方互相通信之前,TCP 需要三次握手建立连接,而 UDP 没有相应建立连接的过程。

可靠性:TCP 花了很多的功夫来保证连接的可靠,这个可靠性体现在哪些方面呢?一个是有状态,另一个是可控制。

TCP 会精准记录哪些数据发送了,哪些数据被对方接收了,哪些没有被接收到,而且保证数据包按序到达,不允许半点差错。这是有状态

当意识到丢包了或者网络环境不佳,TCP 会根据具体情况调整自己的行为,控制自己的发送速度或者重发。这是可控制

相应的,UDP 就是无状态, 不可控的。

面向字节流:UDP 的数据传输是基于数据报的,这是因为仅仅只是继承了 IP 层的特性,而 TCP 为了维护状态,将一个个 IP 包变成了字节流。

举个例子就是说,我们的视频通话就是使用UDP协议来尽最大能力让你听完,不管有的没的;而下载文件就是TCP,一定要保障文件的完整性。

 

TCP和UDP的联系

首先TCP和UDP都是运输层的协议,然后他们都是建立在IP之上,TCP是交流式套接字,而UDP是报文套接字。

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

代码如下:

SOCKADDR_IN addrSrv;

addrSrv.sin_addr.S_un.S_addr=htonl(2130706689);

先是定义了一个IP地址结构体addrSrv,然后初始化它的IP时addrSrv.sin_addr.S_un.S_addr必须是赋值IP地址的网络字节序,htonl函数的作用是把一个主机字节序转换为网络字节序,也就是上面转换过程中第二步转换为第三步的作用,127.0.1.1的主机字节序是21307066689,把主机字节序2130706433转换为网络字节序就是htonl(2130706689)=16842879,所以如果你知道网络字节序是16842879的话,addrSrv.sin_addr.S_un.S_addr=htonl(2130706689);与addrSrv.sin_addr.S_un.S_addr=16777689;是完全一样的。

addrSrv.sin_addr.S_un.S_addr=htonl(2130706689);这句还可以写为:

addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.1.1"); 结果是完全一样的。

可见inet_addr函数的转换作用就是上面的第一步到第三步的转换。

然后就是端口的主机字节序和网络字节序也是同理,端口号就是主机字节序,先把端口转成16位的二进制数,然后把前八个和和八个调换位置在转成十进制就是网络字节序。

标签:UDP,字节,TCP,addrSrv,sin,addr
From: https://www.cnblogs.com/dzxdwybk/p/16773530.html

相关文章

  • TCP/IP三次握手
    TCP/IP三次握手----为了保证能建立一个安全可靠的连接发送标识:SYN--使得接受端知道,本端可以正常接受到消息回复标识:ACK--回复给发送端,使得发送端可以知道,对端可以接收到......
  • TCP与UDP的联系与区别(以及网络字节序与主机字节序的转换函数实践)
    TCP与UDP的联系TCP:是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。UDP:是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把......
  • TCP三次握手与四次挥手
    三次握手:第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SENT状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),......
  • 网络字节序与主机字节序的转换函数实践
        CPU向内存保存数据的方式有2种,这意味着CPU解析数据的方式也分为2种:        ♦ 大端序(bigendian):高位字节存放到低位地址;      ......
  • 关于TCP和UDP的联系与区别以及网络字节序和主机字节序的转换函数实践
    1.TCP和UDP的相同点:TCP和UDP都是在网络层,都是传输层协议,都能都是保护网络层的传输,双方的通信都需要开放端口。2.TCP和UDP的不同点:TCP传输协议,是一种面向连接的、可靠的......
  • 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类型的......