认识套接字Socket

套接字概述

套接字是抽象出来的概念,是应用程序进行网络通信的接口,对套接字的操作最终都会调用内核中的网络驱动程序,对系统应用程序开发,内核驱动透明不可见,用户只需创建一个套接字(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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值