sockets: sockets网络编程相关的知识

###########################################################

unix域(本地IPC):

###########################################################

在单个主机上执行客户服务器程序,可视为IPC方法之一.

unix域(本地IPC)地址结构:

struct sockaddr_un

{

sa_family_t sun_family;  //AF_LOCAL instead of AF_UNIX

char sun_path[104];   //addressname

};

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

family:(网络层协议)

bsd和linux:(AF:地址族)

AF_LOCAL(unix域)=PF_LOCAL=AF_UNIX=PF_UNIX

type:

SOCK_STREAM(字节流套接字)(tcp、sctp)

SOCK_DGRAM(数据报套接字)(udp)

protocol:(传输层协议)

0:tcp和udp,一般用这个,表示默认值

IPPROTO_SCTP: sctp用这个。

#include <sys/types.h>

#include <sys/socket.h>

int socketpair(int family, inttype, int protocol, int sv[2]);

创建两个连接起来的套接字.

family=AF_LOCAL

type=SOCK_STREAM or SOCK_DGRAM

protocol=0

fcntl()函数

ioctl函数

###########################################################

路由域

###########################################################

路由域地址结构:

struct sockaddr_dl

{

uint8_t sdl_len;

sa_family_t sdl_family; // AF_LINK

uint16_t sal_index;

uint8_t sdl_type; // IFT_ETHER

uint8_t sdl_neln;

uint8_t sdl_alen;

uint8_t sdl_slen;

char sdl_data[12];

};

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

路由域字只支持原始套接字

family:(网络层协议)

AF_ROUTE(路由域)=PF_ROUTE

type:

SOCK_RAW(原始套接字)(ipv4、ipv6)

protocol:(传输层协议)

0:tcp和udp,一般用这个,表示默认值

IPPROTO_SCTP: sctp用这个。

路由套接字支持三种操作和12个路由消息:

1.往内核发消息,有5种消息可用,使用结构struct rt_msghdr.

RTM_ADD 增加路径

RTM_DELETE 删除路径

RTM_CHANGE 改动网关,测度或标志

RTM_GET 报告测度和其它路径信息

RTM_LOCK 锁住给定的测度

2.从内核接收消息,有12种消息可用,使用结构struct rt_msghdr, if_announcemsghdr,if_msghdr,ifa_msghdr,ifma_maghdr.

3.使用sysctl函数倾斜处路由表或已配置的接口.

接口名字和索引相关的   库函数:

每个接口都有一个唯一的名字和一个唯一的正值索引.

#include <net/if.h>

unsigned int if_nametoindex(constchar *ifname);

根据名字ifname返回对应的索引.

char *if_indextoname(unsignedint ifindex, char *ifname);

返回指向接口名字的指针.

sturct if_nameindex
*if_nameindex(void);

动态分配空间存放名字和索引

返回指向if_nameindex结构数组的指针

struct if_nameindex

{

unsigned int if_index;

char *if_name; // null terminated

};

void if_freenameindex(structif_nameindex *ptr);

释放动态分配的空间

sysctl函数:检查路由表和接口列表.

###########################################################

秘钥管理套接字

###########################################################

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

秘钥域只支持原始套接字

family:(网络层协议)

AF_KEY(秘钥域)=PF_KEY

type:

SOCK_RAW(原始套接字)(ipv4、ipv6)

protocol:(传输层协议)

0:tcp和udp,一般用这个,表示默认值

IPPROTO_SCTP: sctp用这个。

打开原始秘钥管理套接字需要root权限;

Ipsec(IP安全体系结构)基于SA(安全关联),

SA的集合称为SADB(安全关联数据库).

IPsec还需要SPSB(安全策略数据库).

秘钥管理套接字支持三种操作:

1.往内核和其它打开的秘钥管理套接字发消息,9个消息可用.

2.从内核收消息,9个消息可用.

3.往内核发送倾泻消息,内核应答当前的SADB.(调试用)

消息返回的结构为structsadb_msg.

秘钥管理消息有10个:

SADB_EXPIRT:只能从内核发往进程.

SADB_REGISTER:只能从进程发往内核.

SADB_DUMP:倾泻SADB,调试用.

###########################################################

数据链路层的访问接口:

访问数据链路层常用的三种方法:

1.BPF:BSD分组过滤器

2.DLPI:数据链路提供者接口

3.socket函数的AF_PACKET选项

一般使用与实现无关的两个库:

1.libpcap,只支持分组的读入.

2.libnet,构造任意协议的分组输出到网络接口.

补充:

原始套接字:

 

原始套接字的创建:

只有超级用户能创建原始套接字

sockfd = socket(AF_INET, SOCK_RAW, ?);

原始套接字的作用:

1.进程可以读写ICMPV4,ICMPV6 和 IGMPV4的分组

2.进程可以读写内核不处理其协议字段的IP数据报

3.进程可以自行构造IPv4首部,用于诊断.

ping和traceroute使用原始套接字.

###########################################################

IP地址分为三类:

单播:ipv4和ipv6和tcp和udp,一个进程就与另一个进程通信.

广播:ipv4和udp支持.一个和一组通信.

多播:ipv6和udp支持.一个和所有通信.

IP地址有五种格式:

A:网络号.主机号.主机号.主机号(0.0.0.0-127.255.255.255)

B:网络号.网络号.主机号.主机号(128.0.0.0-191.255.255.255)

C:网络号.网络号.网络号.主机号(192.0.0.0-223.255.255.255)

D:多播地址(224.0.0.0-239.255.255.255)

E:预留地址,试验用(240.0.0.0-255.255.255.255)

IP地址组成:网络号+主机号(子网号+主机号)。

子网掩码:32bit,值=1的位表示IP对应位留给网络号和子网号,值=0的位表示IP对应位留给主机号。

tcp只支持单播;ipv6不支持广播,ipv4可以支持多播,udp支持所有.

单播:单播IP数据报仅通过目的IP地址指定的单个主机接收,子网上的其它主机不受影响。

广播地址分两类:

1.子网定向广播地址:*.*.*.255,指定子网*.*.*上所有接口的广播地址。

2.受限广播地址:255.255.255.255,路由器从不转发目的地址为受限广播地址的IP数据报。

广播:广播分组去往子网上所有分组,包括自己,一般用于局域网。

竞争状态:多个进程访问共享的数据,正确的结果取决于进程执行的顺序。

解决竞争状态的三个方法:

1.使用pselect

2.使用sigsetjmp和siglongjmp

3.使用从信号处理函数到函数主循环的IPC(管道)。

在非阻塞的时候超时时间到,会出现竞争状态,所以要在非阻塞时候禁止发出超时信号。

多播:多播地址标识一组IP接口,局域网和广域网都可以用。

IPv4的D类地址是IPv4的多播地址,是一个32位的组地址,低28位位组ID,该地址是一个统一管理了的组地址。

特殊IPv4多播地址:

主机组:244.0.0.1

路由组:244.0.0.2

IPv6的多播地址:

多播相对于广播的优势就是不会给对多播组不感兴趣的主机增加额外负担。

###########################################################

B/S架构的客户服务器程序设计

迭代服务器iterate

并发服务器(每个客户一个子进程)concurrent

预先派生子进程服务器程序(accept无上锁保护)

预先派生子进程服务器程序(accept使用文件上锁保护)

预先派生子进程服务器程序(accept使用线程上锁保护)

预先派生子进程服务器程序(传递描述符)

并发服务器(每个客户一个子线程)thread

预先创建线程服务器程序(每个线程各自accept)

预先创建线程服务器程序(主线程统一accept)

###########################################################

时间: 2024-11-10 00:53:37

sockets: sockets网络编程相关的知识的相关文章

网络连接相关基础知识笔记

一.常说的TCP/IP的含义 TCP/IP协议簇并不仅仅指TCP协议和IP协议,实际它包括了一系列协议组成的集合,如:TCP,IP,UDP,FTP,SMTP,DNS,ARP,PPP等 TCP与UDP协议都属于传输层协议,但有很大不同,TCP是面向连接的协议,提供的是可靠的数据流服务,TCP采用"带重传的肯定确认"机制来实现传输的可靠性,实现了一种"虚电路",因为从物理上来说,并不是真正在两台主机间建立了连接,这种连接只是存在于逻辑上的.最大的开销出现在通信前建立连接

TCP/UDP网络编程的基础知识与基本示例(windows和Linux)

一.TCP编程的一般步骤 服务器端: 1.创建一个socket,用函数socket() 2.绑定IP地址.端口等信息到socket上,用函数bind() 3.开启监听,用函数listen() 4.接收客户端上来的连接,用函数accept() 5.收发数据,用函数send()和recv(),或者read()和write() 6.关闭网络连接 7.关闭监听 客户端: 1.创建一个socket,用函数socket() 2.设置要连接的对方IP地址和端口等属性 3.连接服务器,用函数connect()

网络编程相关知识点

一.网络基础 用途:未来的web框架的学习 未来的工作场景做铺垫 两个运行中的程序如何传递信息? 通过文件 两台机器上的两个运行中的程序如何通信? 通过网络 网络应用开发架构 C/S client 客户端 server 服务端 例如:迅雷 qq 浏览器 飞秋 输入法 百度云 pycharm git VNC 红蜘蛛 各种游戏 B/S browser 浏览器 server 服务端 例如:淘宝 邮箱 各种游戏 百度 博客园 知乎 豆瓣 抽屉 统一程序的入口 B/S和C/S架构的关系:B/S是特殊的C/

网络编程基本的知识

1. ip地址:(门牌号)在网络中每台计算机都必须有一个的IP地址: 32位,4个字节,常用点分十进制的格式表示,例如:192.168.1.100 127.0.0.1 是固定ip地址,代表当前计算机,相当于面向对象里的 "this" 2 端口:(房间号)可以区分每个软件,每个软件都会占用不同端口两台计算机进行连接,总有一台服务器,一台客户端.服务器和客户端之间的通信通过端口进行.ip地址是 192.168.1.100的服务器通过端口 8080与ip地址是192.168.1.189的客户

网络基础相关的知识 socket模块

1.架构 1.C/S架构:client客户端和server服务器端 优势:能充分发挥pc机的性能 2.B/S架构:browser浏览器和server服务器    隶属于C/S架构 B/S架构  统一了应用的接口 2.通信的事 a.同一台电脑上两个py程序通信:打开一个文件 b.两个电脑如何通信:连一个网线 c.多个电脑通信: ex:电脑1(源)要找电脑2(目标) 电脑1首先发送一个请求帧,其中包含(我的IP地址和mac地址,以及我要找的IP地址的主机),将此请求发送给交换机. 交换机要广播这条消

Socket网络编程相关

1.http://blog.csdn.net/byrsongqq/article/details/5888214 2.http://blog.csdn.net/byxdaz/article/details/4496575

网络编程相关

来源:http://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html 来源:http://blog.csdn.net/makeyourchance/article/details/51834567 来源:http://www.cnblogs.com/linjiqin/archive/2011/06/10/2077237.html

sockets: sockets网络编程基础

全部包含: #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h>      #include <netinet/in.h>  #include <netinet/tcp.h>   #include <netinet/sctp.h> #include <net/if.h> #include

Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介

Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- Android包 : android.net 包 (1接口, 19类, 3枚举, 1异常), android.net.http 包 (6类), android.net.nsd 包 (3接口, 2类), android.net.rtp (4类), android.net.sip 包 (1接口, 9类, 1