Web编程
文章平均质量分 90
淡红星空
北航小本科生一枚,从事互联网方向研究
展开
-
揭开Socket编程的面纱
对TCP/IP、UDP、Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问:1. 什么是TCP/IP、UDP?2. Socket在哪里呢?3. Socket是什么呢?4. 你会使用它们吗?什么是TCP/IP、UDP? TCP/IP(Transmi转载 2013-07-22 21:21:54 · 872 阅读 · 0 评论 -
Linux网络协议栈 -- socket创建(3)
五、初始化 sk 分配完成 sk 后,另一个重要的功能就是初始化它,sk 的成员相当复杂,其主要的初始化工作是在函数 sock_init_data()中完成的: void sock_init_data(struct socket *sock, struct sock *sk) { /* 初始化其三个队列 */ skb_que转载 2013-08-09 17:22:54 · 1300 阅读 · 0 评论 -
Linux网络协议栈 -- socket bind 地址绑定
1、bind()当创建了一个 Socket 套接字后,对于服务器来说,接下来的工作,就是调用 bind(2)为服务器指明本地址、协议端口号,常常可以看到这样的代码: strut sockaddr_in sin; sin.sin_family = AF_INET; sin.sin_addr.s_addr = xxx; sin.sin_port = xxx; bind转载 2013-08-09 17:23:37 · 1571 阅读 · 0 评论 -
pthread_create 参数传递指针问题
linux 下常用的创建多线程函数pthread_create(pthread_t * thread , pthread_attr_t * attr , void *(*start_routine)(void*) , void *args);其中第一个参数用来保存线程信息,第二个参数指新线程的运行属性,可以设置为NULL,第三个参数为自定义的线程函数,第四个参数就是线程函数需要用到的参数,一般如果转载 2013-08-10 18:48:07 · 1691 阅读 · 0 评论 -
Socket/TCP粘包、多包和少包, 断包
为什么TCP 会粘包 前几天,调试mina的TCP通信, 第一个协议包解析正常,第二个数据包不完整。为什么会这样吗,我们用mina这样通信框架,还会出现这种问题? 带者问题,我们先分析一下问题。 提到通信, 我们面临都通信协议,数据协议的选择。 通信协议我们可选择TCP/UDP:TCP(transport control protocol,传输控制协议)是面向连接转载 2013-08-10 18:46:34 · 1506 阅读 · 0 评论 -
socket编程:SO_REUSEADDR例解
网友vmstat多次提出了这个问题:SO_REUSEADDR有什么用处和怎么使用。而且很多网友在编写网络程序时也会遇到这个问题。所以特意写了这么一篇文章,希望能够解答一些人的疑难。 其实这个问题在Richard Stevens的《Unix网络编程指南》卷一里有很详细的解答(中文版P166-168页)。这里我只是写几个基本的例子来验证这个问题。 首先声明一个问题:转载 2013-08-10 18:47:19 · 1035 阅读 · 0 评论 -
select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
select函数用于在非阻塞中,当一个套接字或一组套接字有信号时通知你,系统提供select函数来实现多路复用输入/输出模型,原型: #include #include int select(int maxfd,fd_set *rdset,fd_set *wrset,fd_set *exset,struct timeval *t转载 2013-08-10 19:03:15 · 4216 阅读 · 0 评论 -
Linux网络协议栈(一) -- socket入门
1、TCP/IP参考模型为了实现各种网络的互连,国际标准化组织(ISO)制定了开放式系统互连(OSI)参考模型。尽管OSI的体系结构从理论上讲是比较完整的,但实际上,完全符合OSI各层协议的商用产品却很少进入市场。而使用TCP/IP 协议的产品却大量涌入市场,几乎所有的工作站都配有TCP/IP协议,使得TCP/IP 成为计算机网络的实际的国际标准。2、套接字(socket)转载 2013-08-09 16:14:04 · 2057 阅读 · 0 评论 -
关于TCP带外数据(OOB,Out Of Bound)
定义带 外 数据 想 像一下在银行人们排起队待等处置他们的帐单。在这个步队中每个人最后会都移到面前由出纳员行进服务。在现想像一下一个走入银行,超出个整步队,然后用枪抵 住出纳员。这个就可以看作为带 外 数据 。这个盗强超出个整步队,是因为这把枪给了他凌驾于世人的权利。出纳员也集会中注意力于这个盗强身上,因为他晓得后以 的势形是很紧迫的。应相的,一个连接的流式套口接上的带 外转载 2013-09-13 11:39:38 · 8019 阅读 · 1 评论 -
Wireshark的过滤规则
WireShark 过滤语法1. 过滤IP,如来源IP或者目标IP等于某个IP例子:ip.src eq 192.168.1.107 or ip.dst eq 192.168.1.107或者ip.addr eq 192.168.1.107 // 都能显示来源IP和目标IP2. 过滤端口例子:tcp.port eq 80 // 不管端口是来源的还是目标的都显转载 2013-09-17 10:31:53 · 1085 阅读 · 0 评论 -
IO - 同步,异步,阻塞,非阻塞
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西。这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不转载 2013-10-13 02:22:29 · 933 阅读 · 0 评论 -
Linux网络协议栈 -- socket accept接收连接
一、tcp 栈的三次握手简述 进一步的分析,都是以 tcp 协议为例,因为 udp要相对简单得多,分析完 tcp,udp的基本已经被覆盖了。 这里主要是分析 socket,但是因为它将与 tcp/udp传输层交互,所以不可避免地接触到这一层面的代码,这里只是摘取其主要流程的一些代码片段,以更好地分析 accept的实现过程。 当套接字进入 LISTEN后,意味着服务器端转载 2013-08-09 17:26:17 · 1311 阅读 · 1 评论 -
Linux网络协议栈 -- socket listen监听
一、sys_listen对面向连接的协议,在调用 bind(2)后,进一步调用 listen(2),让套接字进入监听状态: int listen(int sockfd, int backlog); backlog 表示新建连接请求时,最大的未处理的积压请求数。 这里说到让套接字进入某种状态,也就是说,涉及到套接字的状态变迁,前面 create 和bind 时,也遇到过转载 2013-08-09 17:24:52 · 1614 阅读 · 0 评论 -
Linux网络协议栈 -- socket创建(2)
三、af_inet 协议簇的协议封装 接下来,函数调用之前已经注的 inet_family_ops的函数指针 create,也就是inet_create()函数,前面,可以说一个通用的 socket 已经创建好了,这里要完成与协议本身相关的一些创建 socket 的工作。这一部份的工作比较复杂,还是先来看看 af_inet.c 中的模块初 始化时候,做了哪些与此相关的工作。转载 2013-08-09 17:20:50 · 986 阅读 · 0 评论 -
Wireshark抓包工具使用教程以及常用抓包规则
Wireshark是一个非常好用的抓包工具,当我们遇到一些和网络相关的问题时,可以通过这个工具进行分析,不过要说明的是,这只是一个工具,用法是非常灵活的,所以今天讲述的内容可能无法直接帮你解决问题,但是只要你有解决问题的思路,学习用这个软件就非常有用了。Wireshark官方下载地址:http://www.wireshark.org/download.html如果记不住,可以在百度中输入W转载 2013-07-24 14:07:56 · 918 阅读 · 0 评论 -
Windows/Linux C语言的Socket编程例子(TCP和UDP)
最近看了一些网络编程的书籍,一直以来总感觉网络编程神秘莫测,其实网络编程入门还是很容易学的,下面这些代码是我在linux下编写的,已经运行过了,编译之后就可以运行了。有不足之处希望大家多多指出,共同学习交流。 套接字是一种进程间的通信的方法,不同于以往介绍的进程间通信方法的是,它并不局限于同一台计算机的资源,例如文件系统空间,共享内存或者消息队列。套接字可以认为是对管道概念的扩展——一原创 2013-08-06 14:03:26 · 26798 阅读 · 6 评论 -
Linux网络协议栈(二) -- 套接字缓存(socket buffer)
Linux网络核心数据结构是套接字缓存(socket buffer),简称skb。它代表一个要发送或处理的报文,并贯穿于整个协议栈。1、 套接字缓存skb由两部分组成:(1) 报文数据:它保存了实际在网络中传输的数据;(2) 管理数据:供内核处理报文的额外数据,这些数据构成了协议之间交换的控制信息。当应用程序向一个socket传输数据之后,该socket将创建转载 2013-08-09 16:24:43 · 1155 阅读 · 0 评论 -
Linux网络协议栈(三)——网络设备(1)
原文地址:http://www.cnblogs.com/hustcat/archive/2009/09/23/1572884.html网络设备(network device)是内核对网络适配器(硬件)的抽象与封装,并为各个协议实例提供统一的接口,它是硬件与内核的接口,它有两个特征:(1) 作为基于硬件的网络适配器与基于软件的协议之间的接口;(2) 内核协议栈异步输入输出点。转载 2013-08-09 16:43:09 · 1163 阅读 · 0 评论 -
Linux网络协议栈(三)——网络设备(2)
原文地址:http://www.cnblogs.com/hustcat/archive/2009/09/23/1572884.html2.1、网络设备的注册与注销注册网络设备发生在下列情形: (1)加载网卡驱动程序 网卡驱动程序如果被编译进内核,则它在启动时被初始化,在运行时被作为模块加载。无论初始化是否发生,所以由驱动程序控制的网卡都被注册。 (2)插入可热拔插网络设转载 2013-08-09 16:44:31 · 1052 阅读 · 0 评论 -
Linux网络协议栈(四)——链路层(2)
原文地址:http://www.cnblogs.com/hustcat/archive/2009/09/26/1574411.html2、协议相关2.1、第3层协议的管理在Linux内核中,有两种不同目的的3层协议:(1) ptype_all管理的协议主要用于分析目的,它接收所有到达第3层协议的数据包。(2) ptype_base管理正常的3层协议,仅接收具有正转载 2013-08-09 16:47:33 · 1290 阅读 · 0 评论 -
Linux网络协议栈(四)——链路层(1)
1、接收帧当网络适配器接收到数据帧时,就会触发一个中断,中断处理程序执行一些需要及时处理的任务,然后在下半部进行其它可以延迟的处理。中断处理程序主要进行以下一些操作:(1) 分配sk_buff数据结构,并将接收到的数据帧从网络适配器I/O端口拷贝到sk_buff缓冲区中;(2) 从数据帧中提取出一些信息,并设置sk_buff相应的参数,这些参数将被上层的网络协议使用,例如s转载 2013-08-09 16:46:09 · 1251 阅读 · 0 评论 -
服务器编程之fork并行模式
服务器编程之fork并行模式摘要:网络编程本身并不复杂或多么困难,复杂或困难的是在不稳定的网络中做到稳定的服务器与通信,此时并行技术是实现的稳定的服务器的技术之一,当然也不是服务器端使用的技术。fork是POSIX系统中产生新进程的唯一方法,可以实现进程并行编程模式。在介绍服务器编程的fork模式之前,我们首先来说说fork自身的问题,对于深知fork的读者可以跳过本段转载 2013-08-09 17:01:47 · 1344 阅读 · 0 评论 -
socket编程函数详解
摘要:listen函数使用主动连接套接口变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程。在TCP服务器编程中listen函数把进程变为一个服务器,并指定相应的套接字变为被动连接。listen函数在一般在调用bind之后-调用accept之前调用,它的函数原型是:#includesys/socket.h>int listen(int sockfd, in原创 2013-08-09 17:10:38 · 1937 阅读 · 0 评论 -
Linux网络协议栈 -- socket创建(1)
原文地址:http://blog.csdn.net/zhaqiwen/article/details/7725430内核版本:2.6.12 一、系统总入口Linux 内核为所有的与 socket 有关的操作的 API,提供了一个统一的系统调用入口,其代码在net/socket.c中: asmlinkage long sys_socketcall(int call, un转载 2013-08-09 17:19:11 · 1210 阅读 · 0 评论 -
【深入剖析Linux协议栈】socket connect 发起连接请求
1、sys_connect 对于客户端来说,当创建了一个套接字后,就可以连接它了。 case SYS_CONNECT: err = sys_connect(a0, (struct sockaddr __user *)a1, a[2]); break;[转载 2013-08-09 17:27:29 · 2187 阅读 · 0 评论