认识套接字Socket

来源:互联网 发布:安禄山 杨贵妃 知乎 编辑:程序博客网 时间:2024/05/16 07:31

套接字概述

套接字是抽象出来的概念,是应用程序进行网络通信的接口,对套接字的操作最终都会调用内核中的网络驱动程序,对系统应用程序开发,内核驱动透明不可见,用户只需创建一个套接字(socket),调用套接字API即可使用网络进行通信,相当便捷;在linux系统中,套接字就是一个文件;一个套接字对应一个套接字地址结构,套接字地址结构包括:网络协议本地IP地址本地端口远程IP地址远程端口

套接字地址结构

使用struct sockaddr(通用套接字地址结构)这个结构来存储套接字地址,结构定义如下:

struct sockaddr{unsigend short sa_family;    /*address族,AF_xxx*/char sa_data[14];            /*14bytes的数组表示来表述套接字的端口号和IP地址*/}

由于使用14字节大小的数组描述套接字的IP地址和端口号很不方便,程序员们又建立了另外一个相似的结构struct sockaddr_in,结构定义如下:

struct sockaddr_in{__SOCKADDR_COMMON(sin_);    /*相当于sa_family_t sin_family;2 bytes*/in_port_in sin_port;        /*端口号,2 bytes*/struct in_addr sin_addr;    /*4bytes*/unsigned char sin_zero[sizeof(struct sockaddr) -  /*16-2-2-4 = 8*/             __SOCKADDR_COMMOM_SIZE -             sizeof(in_port_t) -             sizeof(struct in_addr)];}

套接字三种类型

流式套接字

流式套接字提供可靠的、,面向连接的通讯流,如果你通过流式的套接字发送“3”,“2”,“1”,那么到达远程的数据顺序也是“3”,“2”,“1”;这是因为流式套接字使用TCP协议传输数据,保证了数据的可靠性和顺序性;Telnet和HTTP协议都是流式套接字的应用;

数据包套接字

数据包套接字是一种无连接的的服务,数据通过相互独立的报文进行传输,数据无需且不可靠,无差错处理和重传机制;因为数据包套接字使用UDP协议,UDP协议本身就是不可靠的;tftp是数据包套接字的应用;

原始套接字

原始套接字允许对底层的协议,如IP、ICMP协议直接访问,常用于对网络协议实现的测试,需要用到具体的TCP/IP协议层的知识,后续博文会总结原始套接字的使用;

0 0
原创粉丝点击