网络基础1-socket编程1

1.字节序(CPU对内存的访问顺序)

(1)一个字节有一个地址(C语言初阶)

(2)小端字节序:低位存放低地址

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

地址0x01020304中:高位在01 低位在04

(3)主机字节序&网络字节序

主机字节序:指的是机器本身的字节序,如果是大端,则主机字节序就是大端;如果是小端,主机字节序就是小端。

网络字节序:规定网络当中传输的字节序使用大端,如果小端机器在传数据的时候,需要将数据转化为大端字节序进行传输,对端机器默认传输过来的数据是大端字节序

问题:最常见的x_86体系架构是小端机器,怎样验证自己的机器是大端还是小端?

【解析】使用联合数据结构的特性:共用内存,int 为4字节,char为1字节

data.a=1-->(高位)00000000 00000000 00000000 00000001 (低位)

如果为小端时,b为:(高地址)00000000 00000000 00000000 00000001 (低地址),因为char类型为1字节,所以只能取后面1字节:(高地址)00000000 00000000 00000000 00000001 (低地址),即b为1;

如果为大端是,b为:(高地址)00000001 00000000 00000000  00000000(低地址),即b为0

#include <stdio.h>
int main()
{
//联合数据结构特性:共用内存,因此占用4字节
   union Data
  {
      int a;
      char b;
   
  }data;

  data.a=1;
  if(data.b==1)
  {
     printf("小端\n");
  }
  else
  {
     printf("大端\n");
  }
  return 0;
}

(4)结论:网络信息中数据的五元组信息除协议外,还有传输的真实源数据都需要转化为网络字节序来传输;当通信双方都是小端机器的时候,对于网络报头当中的ip和port还是必须遵守网络字节序的格式进行传输,否则网络链路上的转发设备无法正确的转发该条数据,因为双方都是小端机器,所以传输的数据可以不用进行字节序转换

2.TCP和UDP的区别

TCP:面向连接、可靠传输、面向字节流

面向连接:TCP通信双方在发送数据之前,需要先建立连接,才能够发送数据

可靠传输:TCP保证传输的数据是可靠有序的到达对端

面向字节流:

1.对于传输的数据之前是没有明显的数据边界的

2.对于接受方而言,可以在接收数据的强狂下,可以接收任意字节的数据

UDP协议:无连接、不可靠、面向数据报

无连接:UDP通信双发在发送数据之前,是不需要进行沟通的,客户端只要知道服务端的ip和端口,就直接可以发送数据了

不可靠:不保证数据可靠到达对端的,并且不保证数据是按序到达

面向数据报:UDP对于应用层和传输层数据递交的时候,都是整条数据交付的

猜你喜欢

转载自blog.csdn.net/weixin_43807876/article/details/114675879