Linux网络编程学习笔记(3)---socket编程中的基本概念

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_38215395/article/details/79537700

本文将介绍socket的概念、IPV4套接口地址结构、字节序、套接字类型以及常用的几个地址转换函数。

1、什么是socket?

socket可以看成是用户进程与内核网络协议栈的编程接口。它不仅可以用于本机间的进程间通信,还可以用于网络上不同主机间的进程间通信。socket在TCP/IP协议栈中的位置如下图所示。
这里写图片描述

2、IPV4套接字地址结构(网际套接字地址结构)

存放于<netinet/in.h>中,以“sockaddr_in”命名。

struct sockaddr_in{
    uint8_t sin_len;            //结构体大小
    sa_family_t sin_family;     //指定该地址家族,IPV4为AF_INET
    in_port_t sin_port;         //端口号,无符号16位整数
    struct in_addr  sin_addr;   //32位无符号地址
    char sin_zero[8];       
};

3、字节序

字节序分为大端字节序和小端字节序,其中大端字节序又称为网络字节序。两种子节序存储数据的方式如下:
比如,现有一个无符号32位整数0x12345678,存在两种存储方式:
这里写图片描述
我们常用的x86平台,是利用的小端字节序存储数据,Motorola 6800利用的是大端字节序存储数据。而ARM的字节序是可配置的。

当字节在传输过程中,比如A—>B,存在以下过程 :A—>网络字节序—>B机字节序—>B。

4、常用的地址转换函数

  1. in_addr_t inet_addr(const char *cp):将点分十进制的ip地址转换成32位无符号整数;
  2. char *inet_ntoa(struct in_addr in):将一个地址结构转换成点分十进制的ip地址;
  3. int inet_aton(const char *cp,struct in_addr *inp):将点分十进制的ip地址转换成网络字节序地址(通过inp结构体输出)

5、套接字类型

主要有流式套接字、数据报式套接字以及原始套接字。
1. 流式套接字SOCK_STREAM(对应于TCP):提供面向连接的可靠的数据传输,即数据无差错、无重复、无失序的传输;
2. 数据报式套接字SOCK_DGRAM(对应于UDP):提供无连接服务,不保证可靠传输;
3. 原始套接字:可直接封装。

猜你喜欢

转载自blog.csdn.net/weixin_38215395/article/details/79537700