套接字通信
1.内核开发的工程师将网络相关的头文件存储到一个专门目录include/net中,而不是存储到include/linux
2.ISO/OS和TCP/IP参考模型
应用层:网络服务与最终用户的接口;
表示层:数据的表示,安全及压缩:格式(jpeg,ascii等)
会话层:建立,管理及终止会话;
传输层:定义传输数据的协议端口,以及流控和差错检测;(数据包一旦离开网卡就进入网络传输层)
网络层:进行逻辑地址建立、实现不同网络之间的路由选择;
数据链路层:建立逻辑链接、进行硬件地址寻址、差错检验等等这些功能(由底层网络定义协议)将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。
3.核心基本术语
数据帧----->数据链路层(帧头部和帧数据),帧头部包含接收方主机物理地址的定位等
IP数据由两部组成:数据体头部和帧数据,帧头部包括IP源地址和IP目标地址及其他信息。
数据包----->网络层
数据报----->无连接网络服务的网络层
数据段----->传输层
信息----->网络层以上,经常在应用层
元素----->数据链路层(异步传输模式和交换多兆位数据服务)
数据单元 (data unit):服务数据单元(SDU),协议数据单元(PDU)。
4.创建套接字
套接字不仅可以用于各种传输协议的IP链接,也可以用于内核支持的所有其他地址和协议类型(IPX,Appletalk,本地UNIX套接字,还有在<socket.h>中列出的许多其他类型)
(1)
sa_family:是地址族类型的变量(取值:AF_UNIX、AF_INET或AF_INET6),地址族类型通常与协议族类型相对应,一般可以混用。所有专用socket地址类型的变量在实际使用时都必须强制转换成通用socket地址类型(sockaddr),因为所有socket编程接口函数使用的地址参数的类型都是sockaddr。
sa_data:14字节协议族
这个数据结构用作bind,connect,recvfrom,sendto等函数参数,指明地址信息。
(2)
(3)
typedef uint32_t in_addr_t;
struct in_addr其实就是一个32位的IP地址