芯机智

 找回密码
 立即注册

扫一扫,访问微社区

搜索
热搜: 活动 交友 discuz
查看: 1650|回复: 1

socket函数功能杂谈

[复制链接]

534

主题

624

帖子

6282

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6282
发表于 2014-2-10 00:17:01 | 显示全部楼层 |阅读模式




学了点嵌入式知识,抱着找个嵌入式工作目标来到了一个做交换机的公司,
来了才知道像我这样的菜鸟一上来是做不了驱动了,不过看着那些杂七杂八的设备我觉得我也写不了驱动。
好吧,先从应用开始,既然是做交换机的,网络知识应该是必备的啦!

大家肯定以为交换机的应用肯定很好做啦,二层设备能有什么功能!
其实不是这样的,公司做的是多层交换机,现在什么都智能啦,交换机也没落后,
我512M的内存装了linux系统的交换机,别说你路由器功能,
你要肯连个屏幕,我想玩游戏都没问题呀,^_^

言归正传,最近在做移植一个备份路由功能,之前是Vxwork的移植到linux上。
本想的是难度在看懂Vxwork系统相关的代码,没想到单单一个socket函数就让我感到有点难度呀!




下面我就是想总结下socket的相关知识,以至于工作的时候不要连看到个socket都不知道它想干什么的地步。

====================================================================================
首先再次普及下OSI和TCP/IP参考模型的知识:

OSI是ISO提出的理想参考模型,
TCP/IP是现在Internet使用的协议的参考模型

我们常说的设备工作在几层,一般说的是OSI参考模型
====================================================================================


好的,根据上面的图我们再说下socket。

本篇想说的只是socket的有那些功能,实现每个功能都应该用了哪些参数,
而具体怎么写程序不在本篇之内,不过我会附带一些参考资料。


int socket(int domain, int type, int protocol);

domain参数:  三层

//红色代表用到的
Name                    Purpose                             Man page
AF_UNIX, AF_LOCAL   Local communication               unix(7)
AF_INET                 IPv4 Internet protocols             ip(7)
AF_INET6                IPv6 Internet protocols             ipv6(7)
AF_IPX                   IPX - Novell protocols
AF_NETLINK             Kernel user interface device       netlink(7)
AF_X25                  ITU-T X.25 / ISO-8208 protocol     x25(7)
AF_AX25                Amateur radio AX.25 protocol
AF_ATMPVC             Access to raw ATM PVCs
AF_APPLETALK          Appletalk                              ddp(7)
AF_PACKET              Low level packet interface         packet(7)

type参数: 四层
SOCK_STREAM     Provides sequenced, reliable, two-way, connection-based byte streams.  An out-of-band data
                       transmission mechanism may be supported.


SOCK_DGRAM      Supports datagrams (connectionless, unreliable messages of a fixed maximum length).

SOCK_SEQPACKET  Provides  a sequenced, reliable, two-way connection-based data transmission path for data‐
                       grams of fixed maximum length; a consumer is required to read an entire packet  with  each
                       input system call.

SOCK_RAW        Provides raw network protocol access.

SOCK_RDM        Provides a reliable datagram layer that does not guarantee ordering.

SOCK_PACKET     Obsolete and should not be used in new programs; see packet(7).


可以组合的方式:
screenshot1.png
此图截自UNIX网络编程卷一

socket的功能:

一、可自定义应用层数据传输
简介:
      也就是常说的TCP流套接UDP报套接,可以封装HTTP,FTP, TELNET等协议的程序。

示例:
socket(AF_INETSOCK_STREAM,0);  //tcp
socket(AF_INETSOCK_DGRAM,0);  //udp

二、可定自义传输层数据传输
简介:
       也就是常说的原始套接字。

示例:
socket(AF_INET,SOCK_RAW,IPPROTO_TCP);//tcp

三、可定自义网络层数据传输
简介:
      在上面的功能以上开启IPPROTO_IP选项,就可以自定义IP首部,也就是网络层,可以实现ping程序,和常见的dos攻击程序。

示例:
socket(AF_INET,SOCK_RAW,IPPROTO_TCP);//tcp
setsockopt(skfd,IPPROTO_IP,IP_HDRINCL,&on,sizeof(on))


四、可定自义链路层数据传输
简介:
      应该叫底层套接自,可以在MAC层上收发原始数据帧,这个就是写传说中的arp攻击程序了!

示例:
socket(PF_PACKET,int socket_type,int protocol);
socket(AF_INET, SOCK_PACKET, htons(0x0003));


五、可在内核与应用之间传输
简介:
      在 Linux 2.4 版以后版本的内核中,几乎全部的中断过程与用户态进程的通信都是使用 netlink 套接字实现的。

示例:
socket(AF_NETLINK, SOCK_RAW, netlink_type)


暂时就总结这几种,这几个也是我在代码中看到的,我想知道这几种,
看有socket的代码应该不会不知道它要干什么了吧!
本文随手总结,难免有误,望补充指正!

下面打包了PF_PACKET和AF_NETLINK相关文档,有兴趣的可以下载查看!

网络.zip(941.83KB)

睡觉喽!
在终极的分析中,一切知识都是历史;在抽象的意义下,一切科学都是数学;在理性的基础上,所有的判断都是统计。——C.R. Rao
回复

使用道具 举报

534

主题

624

帖子

6282

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6282
 楼主| 发表于 2019-1-3 17:28:39 | 显示全部楼层
关于PF_INET和AF_INET的区别
https://www.cnblogs.com/wkun/p/4240472.html
在终极的分析中,一切知识都是历史;在抽象的意义下,一切科学都是数学;在理性的基础上,所有的判断都是统计。——C.R. Rao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|芯机智 ( 京ICP备18048803号 )

GMT+8, 2019-10-15 07:07 , Processed in 0.153787 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表