编程语言
首页 > 编程语言> > 网络编程套接字

网络编程套接字

作者:互联网

网络字节序

内存中的多字节数据相对于内存地址有大端和小端之分, 磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分, 网络数据流同样有大端小端之分。

那么如何定义网络数据流的地址呢?

概念补充:

字节序:CPU对内存当中的数据进行存取的顺序

大端字节序:低地址存高位

小端字节序:低地址存低位

eg:

------------------->

主机字节序:当前计算机的字节序,一般情况下X86_64机器都是小端机器。

如何判断当前机器是大端还是小端?

#include <stdio.h>

int main()
{
    union AB
    {
        int a;
        char b;
    }c;

    c.a = 1;
    if(1 == c.b)
    {
        printf("当前计算机为小端机器!\n");
    }
    return 0;
}

为使网络程序具有可移植性,使同样的C代码在大端和小端计算机上编译后都能正常运行,可以调用以下库函数做网络字节序和主机字节序的转换。

 #include <arpa/inet.h>

uint32_t htonl(uint32_t hostlong);
uint32_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint32_t ntohs(uint16_t netshort);

UDP数据传输流程

一张图来说明:

理解服务器缓存

还是画图来说明:

客户端所有的请求通过网络传给服务器之后,都会存入网卡,然后由服务器不同的服务端口获取各自要处理的请求,并放在自己的缓冲区,这个缓冲区由socket来维护。

一条数据的五元组

用送快递的过程来形象解释这几个元素:

  1. src_ip:  源IP,这个东西是从哪里寄来的;
  2. dest_ip:   目的IP,这个东西要送往哪里去:
  3. src_port:   源端口,这个东西是谁寄的;
  4. dest_port:  目的端口,这个东西要寄给谁;
  5. protocol:   协议,使用的是哪个快递公司,顺丰/申通/德邦......

 

 

 

 

Angus_lxy 发布了83 篇原创文章 · 获赞 26 · 访问量 8629 私信 关注

标签:小端,字节,主机,编程,网络,大端,接字,uint32
来源: https://blog.csdn.net/lexiaoyao_0000/article/details/104588008