TCP/IP,IP数据包格式,udp数据包格式,tcp数据包格式,Linux下的一个套接字socket描述符维护数据两个缓冲区,网络字节序采用大端存储,c语言的库函数转换主机字节流和网络字节流

      最后更新:2022-02-20 20:36:21 手机定位技术交流文章

      TCP/IP,IP数据包格式,udp数据包格式,tcp数据包格式,Linux下的一个套接字socket描述符维护数据两个缓冲区,网络字节序采用大端存储,c语言的库函数转换主机字节流和网络字节流

      一、ip数据包格式
      1、版本:ipv4,ipv6
      2、首部长度:首部的大小
      3、TTL:time to leave
      4、当ip无法被送达目标ip时,为了防止数据一直停留在网络中而拥塞网络
      5、ttl是一个小整数,设置数据报在路由节点中的跳转上限,经过一个节点该值减1,如果ttl为0且当前ip不是目的ip,该ip段就会被抛弃。
      在这里插入图片描述
      二、udp数据包格式
      1、端口号16位,能描述的最大端口号为2^16-1=65535
      2、ip地址可以在网络环境中唯一标识一台主机,端口号可以在网络的一台主机中唯一标识一个进程
      在这里插入图片描述
      三、TCP数据包格式
      1、32位序号:用于发送数据滑动窗口
      2、32位确认序号:用于发送数据滑动窗口
      3、6个标志位:状态信息和动作信息,用于建立,关闭连接,控制网络拥堵,信息有序传递等
      4、16位窗口大小:滑动窗口的大小
      在这里插入图片描述
      四、socket未熟的缓冲区
      1、Socket套接字在通信过程中是成对存在的,理解一下,就是两个socket插头都插到插座上实现通信
      2、Linux下的套接字如下所示:
      3、一个套接字的文件描述符维护着发送端缓冲区和接收端缓冲区共像个缓冲区。
      在这里插入图片描述
      五、网络字节序:
      1、小端存储:高位存放高地址,0x12345678的小段存储是:12 34 56 78
      2、大端存储:高位存放低地址,0x12345678的大端存储是:78 56 34 12
      3、TCP/IP协议规定,网络中的数据流采用大端存储的方式,即低地址高字节,主机则需要结合自己的存储方式判断是否需要对数据进行网络字节序到主机字节序的转换。如果是同样为大端存储的主机,不需要进行数据转换,小段存储的主机需要进行转换。

      六、C代码中有库函数可以做网络字节流和主机字节流的转换:
      #include <arpa/inet.h>
      uint32_t htonl(uint32_t hostlong);//本地转网络ip
      uint16_t htons(uint16_t hostshort);//本地转网络,端口port
      uint32_t ntohl(uint32_t netlong);//网络转本地,ip
      uint16_t ntons(uint16_t netshort);//网络转本地,port

      int inet_pton(int af,const char *src,void *dst);//将ip转为network网络字节序
      成功返回1,异常返回0,无效ip地址会异常,失败返回-1
      Af:AF_INET,AF_INET6
      Src:传入
      Dst:传出,转换后的点分十进制ip地址

      const char *inet_ntop(int af,const void *src,char *dst,socklen_t size);//将net转为ip
      成功返回dst,失败返回null
      Af:AF_INET,AF_INET6
      Src:传入的网络字节序ip地址
      Dst:传出,本地字节序
      Size:dst的大小

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/18723.html

          热门文章

          文章分类