Socket

  1.Socket与TCP/IP协议簇关系    

         数据链路层、网络层、传输层协议是在内核中实现。因此操作系统需要提供API(Application Programming Interface,应用程序编程接口)使得应用程序能够访问这些协议提供的服务。主要的一套API便是socket.

        socket提供如下两点功能:

        1.将应用程序数据从用户缓冲区中复制到TCP/UDP内核发送缓冲区,以交付内核来发送数据(例如下图中的send函数),或者将应用程序从内核TCP/UDP接收缓冲区中复制数据到用户缓冲区,以读取数据;

        2.应用程序可以通过socket来修改内核中各层协议的某些头部信息或者其它数据结构,从而精细地控制底层通信的行为。

        总的来说socket是一套通用的网络程序接口。

        一个socket地址是一个IP地址和端口对(ip,port)。socket的主要基础API都定义在sysy/socket.h头文件中。另外,Linux提供了一套网络信息API,以实现主机名和IP地址之间的转换以及服务名称和端口号之间的转换,定义netdb.h头文件中。

2.通用socket地址

        表示socket地址的是结构体sockaddr

        

         sa_family成员是地址类型(sa-family_t)的变量。

 

 3.专用socket地址

        linux为各个协议簇提供了专门的socket地址

TCP/IP协议簇有sockaddr_in和sockaddr_in6两个socket地址结构体,分别用于IPv4和IPv6:

 4.IP地址转换函数

 

 5.创建socket

        补充:type参数中还可以设置为SOCK_RAW或者SOCK_DGRAM,表示原始套接字。

        协议栈的原始套接字从实现上可以分为“链路层原始套接字”和“网络层原始套接字”两大类。链路层原始套接字可以直接用于接收和发送链路层的MAC帧,在发送时需要由调用者自行构造和封装MAC首部。而网络层原始套接字可以直接用于接收和发送IP层的报文数据,在发送时需要自行构造IP报文头(取决是否设置IP_HDRINCL选项)。关于原始套接字请查看:(81条消息) 原始套接字_ox0080的博客-CSDN博客_原始套接字

      

 6.命名socket

       socket地址是第二三小节提到的结构体,而一个socket是指上一节提到的一个socket文件描述符。

7.监听socket

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值