linux网络编程
文章平均质量分 61
bestboyxie
谢正明
一名喜欢写代码的程序员
bestboyxie@qq.com
展开
-
zebra 命令行定义
token| 选择分隔符,应从|分隔的各部分中选择一个作为输入。例如:A.B.C.D|() 表示分组。可用如匹配用户的多个输入。例如:(in|out)可匹配in或者out.{} 选择循环符号。{}里面的整个内容可以被选择0次,1次,或者多次,但是里面的每一个选项最多只能出现一次。并且没有顺序要求。例如:{key1|key2|key3}将匹配key1;key1 key3;key3 k原创 2016-08-25 22:29:54 · 2254 阅读 · 0 评论 -
guagga配置问题
zebra和ospfd以及ripd都有自己的配置管理接口;配置管理接口分为两种:1。使用telnet来实现的配置管理界面;2。使用unix套接字来实现的配置管理界面;TCP端口对应关系如下2601 zebra2602 ripd2603 ripngd2604 ospfd2605 bgpd2606 ospf6d使用telnet 127.0.0.1 2601就原创 2017-01-03 18:11:15 · 693 阅读 · 0 评论 -
guagga入门-lib库介绍
无论是zebra也好还是动态路由的进程也好其都是一个单线程的程序;都能完成以下几个事情1。一个tcp服务器2。一个cli命令处理程序;3。能够监听socket事件(读/写/关闭)一个线程能完成如此复杂的事情,这个与guagga程序良好的框架设计有关系;所有的库都在lib目录下thread库其实说是thread其实这并不是真正操作系统上的thr原创 2017-01-03 18:06:42 · 844 阅读 · 0 评论 -
guagga入门-我们对guagga的修改
在虚拟化修改之前我们队guagga的修改很少主要包含两个部分:1.管理接口的过滤;2.server的对接管理接口的过滤:主要是为了让zebra等程序不需要再管理口上面运行动态路由的程序。过滤方式主要是在netlink消息通知;修改文件rt_netlink.c中函数netlink_routing_table与netlink_route_change函数中原创 2017-01-03 18:06:23 · 1256 阅读 · 0 评论 -
guagga入门-我们的虚拟化方案
guagga的虚拟化最早的版本是建立在6win的在github上的开源项目。所以在虚拟化版本中我们实际上是使用的6wind的github版本,后来发现在最新的官方版本中,将6wind已经合入到主线版本中了,所以后来我们的虚拟户又是基于官方的最新版本1.1.0新的虚拟化主要思路:1。通过添加enable vrf xxx来进入不同vsys的配置视图,在自己的视图下只配置和显示自己的资源原创 2017-01-03 18:05:02 · 832 阅读 · 0 评论 -
zebra虚拟化遇到的坑
虚拟化会打开大量的socket因此有可能会出现默认的文件打不开的情况出现;;需要使用ulimit来修改限制ulimit修改限制前可以使用ulimit -a查看 修改组播组的数目/proc/sys/net/ipv4/igmp_max_memberships原创 2017-01-03 18:00:50 · 475 阅读 · 0 评论 -
Linux设置TCP发送报文的大小(SEGMENT)
为了构造特定payload的tcp报文,算是费了一些功夫。第一次尝试:修改接口MTU。发现然而并没什么用。。第二次尝试修改MSS,这个MSS是有范围的,如果payload需要设置成固定的20就没有办法了第三次尝试使用setsocketoption来设置发送的缓冲区为20。发现有效果,通过抓包发现payload的确变成20了,但是发送报文的速率又降低了,所以采用了多线程+原创 2016-11-22 09:24:00 · 4619 阅读 · 0 评论 -
用户态TCP协议栈的调研
一、各种用户态socket的对比1、MTCP简单介绍:韩国高校的一个科研项目,在DPDK的2016年的技术开发者大会上有讲,所以intel将这个也放到了官方上,所以一般搜索DPDK的用户态的协议栈的时候就能够搜索到了这个;特点:有准确的测试数据,我们本地也测试了其性能:在EP的单核上可以达到4W connect/sec 。然后因为内存限制,连接数当时是60W连接占用了1原创 2016-10-31 10:42:46 · 14719 阅读 · 7 评论 -
Linux网络编程socket模型介绍
socket是我们网络编程所必须的工具;至于什么是socket参考我另外一篇文章:http://blog.csdn.net/bestboyxie/article/details/52811381?locationNum=1&fps=1这个socket主要是讲几种socket的模型:1。阻塞型socket;2。非阻塞socket;3。多路I/O复用;以一种阻塞模型的socke原创 2016-10-28 11:49:59 · 1619 阅读 · 0 评论 -
Linux环境下socket常用API介绍
常用APIint socket (int __domain, int __type, int __protocol);TCP:int connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len);int listen (int __fd, int __n) ;int accept (int __fd, __SO原创 2016-11-07 14:39:53 · 1963 阅读 · 0 评论 -
socket中的close和shutdown区别
很明显这个两个函数是有差别的。close关闭的是双向的,in out都关了~~但是是引用计数--直到--到为0才真正的关闭~因而是线程安全的。shutdown 是单向关闭,通过参数指定关闭不同的方向,直接强制关闭,非线程安全;close关闭本进程的socket id,但链接还是开着的。怎么理解?我们知道socket描述符是对内核中socket对象的引用。而close操作的正转载 2016-11-07 14:20:42 · 946 阅读 · 1 评论 -
什么是socket
Socket编程,是网络编程中最常用的术语之一了。但是真正理解Socket到底是什么的人,可能一万个人就有一万个哈姆勒特~~Socket是个英文单词:socket英[ˈsɒkɪt]美[ˈsɑ:kɪt]n.插座; 灯座; 窝,穴; [解] 眼窝,孔窝;vt.原创 2016-10-13 23:36:40 · 685 阅读 · 0 评论 -
使用RAW socket收发报文
0。头文件管它三七二十一,包含以下头文件,搞定:学习就需要不求甚解#include #include #include #include #include #include #include // ETH_P_IP = 0x0800, ETH_P_IPV6 = 0x86DD#include #include #include // close()原创 2016-10-13 20:52:07 · 4711 阅读 · 2 评论 -
设置socket为非阻塞
1。windowint make_socket_noblocking(int sock){u_long nonblocking = 1;if (ioctlsocket(sock, FIONBIO, &nonblocking) == SOCKET_ERROR) {event_sock_warn(fd, "fcntl(%d, F_GETFL)", (int)fd);return原创 2016-10-13 20:49:51 · 2441 阅读 · 0 评论 -
创建自己的虚拟网卡TAP口
TAP是一种虚拟网卡,能够很轻松的被用户使用C语言的API使用。直接使用open write read几个操作就可以使用这种网卡;TAP是一种虚拟口,一般与物理接口配套使用。例如pppoe拨号。使用的是pppoe协议。如果自己去实现的话,物理口可以是以太网卡(真实的),用于收发pppoe报文,然后解开pppoe报文转为以太报文的时候就可以使用tap口这种方式;使用TAP口前,记得将原创 2016-09-20 22:44:02 · 11471 阅读 · 0 评论 -
转载-TCP协议实现原理
TCP协议是端到端的传输控制协议,之所以是“端到端”的协议,是因为”路由“是由IP协议负责的,TCP协议负责为两个通信端点提供可靠性保证,这个可靠性不是指一个端点发送的数据,另一个端点肯定能收到(这显然是不可能的),而是指,数据的可靠投递或者故障的可靠通知。TCP的可靠性通过以下方式来保证:1.超时重传:TCP每发送出一个报文段后,都会启动一个定时器,对目的端传回的确认信息进行确认计时转载 2016-10-09 23:19:25 · 637 阅读 · 0 评论 -
发现局域网所有主机
遇到问题:1。接入一个不知道网段网段的局域网;2。需要发现局域网的所有的ip;处理步骤1。用原始套接字,监听arp消息,获取接口的mac地址;2。根据收到的arp广播,可以从arp协议的sip字段,提取出源ip;3。根据ip地址,然后掩码上24位,然后发送从1 ~255的地址的arp 广播;4。通过收到的arp repy 来获取所有的局域网地址;5。原创 2016-09-05 23:37:59 · 5131 阅读 · 4 评论 -
quagga简介
Quagga是一款功能比较强大的开源路由软件,支持ip,ripng,ospfv2,ospfv3,bgp等协议。目前最新版本为Quagga 1.1.0。安装Quagga的目的是使装有linux系统的电脑变成一台路由器;其主要的功能支持动态+静态路由的配置功能;通过简单的编译、安装就可以让一台linux化身成为路由器,提供类似于思科的命令行配置模型;可以提供给用户配置路由相关信息的用户界面;原创 2016-12-29 11:51:15 · 9850 阅读 · 0 评论