随笔分类 -  网络编程

摘要:大多数程序员所接触到的套接字(Socket)为两类: (1)流式套接字(SOCK_STREAM):一种面向连接的Socket,针对于面向连接的TCP服务应用; (2)数据报式套接字(SOCK_DGRAM):一种无连接的Socket,对应于无连接的UDP服务应用。 从用户的角度来看,SOCK_STREAM、SOCK_DGRAM这两类套接字似乎的确涵盖了TCP/IP应用的全部,因为基于TCP/IP的应用,从协议栈的层次上讲,在传输层的确只可能建立于TCP或UDP协议之上(图1),而SOCK_STREAM、SOCK_DGRAM又分别对应于TCP和UDP,所以几乎所有的应用都可以用这两类套接字实... 阅读全文
posted @ 2011-09-21 09:26 hnrainll 阅读(473) 评论(0) 推荐(0) 编辑
摘要:SOCKET_STREAM 流式套接字SOCKET_DGRAMSOCKET_RAW 原始套接字IPPROTO_IP IP协议IPPROTO_ICMP INTERNET控制消息协议,配合原始套接字可以实现ping的功能IPPROTO_IGMP INTERNET 网关服务协议,在多播中用到在AF_INET地址族下,有SOCK_STREAM、SOCK_DGRAM、SOCK_RAW三种套接字类型。SOCK_STREAM也就是通常所说的TCP,而SOCK_DGRAM则是通常所说的UDP,而SOCK_RAW则是用于提供一些较低级的控制的;第3个参数依赖于第2个参数,用于指定套接字所用的特定协议,设为0表示 阅读全文
posted @ 2011-09-20 14:14 hnrainll 阅读(17634) 评论(2) 推荐(2) 编辑
摘要:gethostbyname和gethostbyaddr这两个函数仅仅支持 IPv4,getaddrinfo函数能够处理名字到地址以及服务到端口这两种转换,返回的是一个sockaddr结构的链表而不是一个地址清单。这些 sockaddr结构随后可由套接口函数直接使用。如此以来,getaddrinfo函数把协议相关性安全隐藏在这个库函数内部。应用程序只要处理由 getaddrinfo函数填写的套接口地址结构。该函数在 POSIX规范中定义了。#include<netdb.h>int getaddrinfo( const char *hostname, const char *servi 阅读全文
posted @ 2011-09-20 12:24 hnrainll 阅读(411) 评论(0) 推荐(0) 编辑
摘要:在计算机科学中,UDP打洞指的是一种普遍使用的NAT穿越技术。[编辑]描述通过UDP打洞实现NAT穿越是一种在处于使用了NAT的私有网络中的Internet主机之间建立双向UDP连接的方法。由于NAT的行为是非标准化的,因此它并不能应用于所有类型的NAT。其基本思想是这样的:让位于NAT后的两台主机都与处于公共地址空间的、众所周知的第三台服务器相连,然后,一旦NAT设备建立好UDP状态信息就转为直接通信,并寄希望于NAT设备会在分组其实是从另外一个主机传送过来的情况下仍然保持当前状态。这项技术需要一个完全圆锥型NAT设备才能够正常工作。受限圆锥型NAT和对称型NAT都不能使用这项技术。这项技术 阅读全文
posted @ 2011-09-19 16:59 hnrainll 阅读(1330) 评论(0) 推荐(0) 编辑
摘要:一、HTTP协议定义URL的组成例如:http://www.alimama.com/membersvc/index.htm。它的含义如下:http://:代表超文本传输协议,通知baidu.com服务器显示Web页,通常不用输入;www:代表一个Web(万维网)服务器;alimama.com/:这是装有网页的服务器的域名,或站点服务器的名称;membersvc/:为该服务器上的子目录,就好像我们的文件夹;index.htm:index.htm是文件夹中的一个HTML文件(网页)。HTTP 协议的基本特点:支持客户 / 服务器模式。简单快速 : 客户向服务器请求服务时 , 只需传送请求方法和路径 阅读全文
posted @ 2011-09-19 09:40 hnrainll 阅读(5327) 评论(0) 推荐(2) 编辑
摘要:网络中的一台主机如果希望能够接收到来自网络中其它主机发往某一个组播组的数据报,那么这么主机必须先加入该组播组,然后就可以从组地址接收数据包。在广域网中,还涉及到路由器支持组播路由等,但本文希望以一个最为简单的例子解释清楚协议栈关于组播的一个最为简单明了的工作过程,甚至,我们不希望涉及到 IGMP包。 我们先从一个组播客户端的应用程序入手来解析组播的工作过程: #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <string.h> #include 阅读全文
posted @ 2011-09-02 08:11 hnrainll 阅读(2367) 评论(0) 推荐(0) 编辑
摘要:OSI/RM参考模型的提出:世界上第一个网络体系结构由IBM公司提出(74年,SNA),以后其他公司也相继提出自己的网络体系结构如:Digital公司的DNA,美国国防部的TCP/IP等,多种网络体系结构并存,其结果是若采用IBM的结构,只能选用IBM的产品,只能与同种结构的网络互联。 为了促进计算机网络的发展,国际标准化组织ISO于1977年成立了一个委员会,在现有网络的基础上,提出了不基于具体机型、操作系统或公司的网络体系结构,称为开放系统互联模型(OSI参考,open system interconnection)TCP/IP开发过程:在构建了阿帕网先驱之后,DARPA开始了其他数据传. 阅读全文
posted @ 2011-09-01 20:33 hnrainll 阅读(3854) 评论(0) 推荐(0) 编辑
摘要:IBM 系统网络体系结构Systems Network Architecture(SNA),IBM 早在1974年首次公布的SNA是IBM为了连接他的3270系列产品而推出的方案。SNA包括一套联网协议。SNA这个体系结构中,包括大型计算机系统(主机)、中型机计算机系统、3270终端和台式计算机,并有一个使这些系统与主机系统通信或系统间相互对等通信的策略。 简单的历史回顾有助于我们认识到集中、分层的SNA是如何适应今天的对等通信、客户机/服务器模式的。SNA设计在与IBM主机系统相连的大多数终端是不可编程终端的年代。SNA在互连的主机之间提供了静态路由选择,所以用户在一个终端上可以访问其... 阅读全文
posted @ 2011-09-01 20:25 hnrainll 阅读(978) 评论(0) 推荐(0) 编辑
摘要:概述目前有许多不同的成熟的TCP/IP协议的实现版本,其中大部分都在操作系统的核心实现,这种方案固然是提高TCP/IP协议软件的效率的必然所选,但却给TCP/IP协议的学习、研究和调试带来了很大的困难。于是,如果不考虑TCP/IP协议软件实现的效率问题,在应用进程中实现一个TCP/IP协议软件,是具有一定的意义和价值的。本文作者构造了一个单进程的TCP/IP协议软件:minitcpip,并提供了一个SOCKET接口函数库:minisocket。在实现这个协议软件函数库时,作者选择采用了libnet+libpcap的方式在用户态下实现这个软件,不仅是因为这样可以避开一些操作系统对底层网络开发的种 阅读全文
posted @ 2011-09-01 16:47 hnrainll 阅读(1145) 评论(0) 推荐(0) 编辑
摘要:转自:http://forum.byr.edu.cn/pc/pccon.php?id=1117&nid=28538&s=all在Unix系统平台上的网络安全工具开发中,目前最为流行的CAPIlibrary有libnet、libpcap、libnids和libicmp等。它们分别从不同层次和角度提供了不同的功能函数。使网络开发人员能够忽略网络底层细节的实现,从而专注于程序本身具体功能的设计与开发。其中,*libnet提供的接口函数主要实现和封装了数据包的构造和发送过程。*libpcap提供的接口函数主要实现和封装了与数据包截获有关的过程。*libnids提供的接口函数主要实现了开 阅读全文
posted @ 2011-09-01 16:35 hnrainll 阅读(3560) 评论(0) 推荐(0) 编辑
摘要:1IP地址分类 A类网络地址有128个(支持127)个网络,占有最左边的一个字节(8位)。高位(0)表示识别这种地址的类型。 B类地址使用左边两个8位用来网络寻址。两个高位(10)用于识别这种地址的类型,其余的14位用作网络地址,右边的两个字节(16位)用作网络节点。 C类地址是最常见的Internet地址。三个高位(110)用于地址类型识别,左边三个字节的其余21位用于寻址。C类地址支持1046个网络,每个网络可多达256端点。 D类地址是相当新的。它的识别头是1110,用于组播,例如用于路由器修改。 E类地址为时延保留,其识别头是11110。1.1A类地址 0.xx.xx.xx ~ 126 阅读全文
posted @ 2011-09-01 16:02 hnrainll 阅读(6835) 评论(0) 推荐(1) 编辑
摘要:单播”(Unicast)、“多播”(Multicast)和“广播”(Broadcast)这三个术语都是用来描述网络节点之间通讯方式的术语。那么这些术语究竟是什么意思?区别何在?.1.单播:网络节点之间的通信就好像是人们之间的对话一样。如果一个人对另外一个人说话,那么用网络技术的术语来描述就是“单播”,此时信息的接收和传递只在两个节点之间进行。单播在网络中得到了广泛的应用,网络上绝大部分的数据都是以单播的形式传输的,只是一般网络用户不知道而已。例如,你在收发电子邮件、浏览网页时,必须与邮件服务器、Web服务器建立连接,此时使用的就是单播数据传输方式。但是通常使用“点对点通信”(Point to 阅读全文
posted @ 2011-09-01 12:25 hnrainll 阅读(2579) 评论(0) 推荐(0) 编辑
摘要:电路交换:通常是在物理层,譬如打电话等。此时整个物理线路的带宽是由该通讯独占的。虚电路交换:在一条物理线路上虚拟出多个逻辑的通道,此时该物理线路上可以有多条通讯量,每条通讯独占一条虚拟电路。多个虚拟电路通过时分/频分等多路复用方式复用到一条物理链路上。 阅读全文
posted @ 2011-09-01 11:31 hnrainll 阅读(4577) 评论(1) 推荐(0) 编辑
摘要:(1)在传输方式上,虚电路服务在源、目的主机通信之前,应先建立一条虚电路,然后才能进行通信,通信结束应将虚电路拆除。而数据报服务,网络层从运输层接收报文,将其装上报头(源、目的地址等信息)后,作为一个独立的信息单位传送,不需建立和释放连接,目标结点收到数据后也不需发送确认,因而是一种开销较小的通信方式。但发方不能确切地知道对方是否准备好接收,是否正在忙碌,因而数据报服务的可靠性不是很高。 (2)关于全网地址:虚电路服务仅在源主机发出呼叫分组中需要填上源和目的主机的全网地址,在数据传输阶段,都只需填上虚电路号。而数据报服务,由于每个数据报都单独传送,因此,在每个数据报中都必须具有源和目的主机的. 阅读全文
posted @ 2011-09-01 11:16 hnrainll 阅读(3120) 评论(0) 推荐(1) 编辑
摘要:TCP穿越挪动窗口的观念来举行流量扼制。假象在发送端发送数据的速度很快而接收端接收速度却很慢的情形下,为了保证数据不失落,显明必需举行流量扼制, 调停睦通信双边的工作节奏。所谓挪动窗口,能够会意成接收端所能供给的缓冲区大小。TCP利用一个挪动的窗口来告诉发送端对它所发送的数据能供给多大的缓 冲区。由于窗口由16位bit所定义,因而接收端TCP 能最大供给65535个字节的缓冲。由此,能够利用窗口大小和第一个数据的序列号计算出最大可接收的数据序列号。挪动窗口性质上是描写接受方的TCP数据报缓冲区大小的数据,发送方依据这个数据来计算自己最多能发送多长的数据。万一发送方收到接受方的窗口大小为0的TC 阅读全文
posted @ 2011-08-31 14:38 hnrainll 阅读(5627) 评论(0) 推荐(1) 编辑
摘要:TCP协议只定义了一种报文格式建立、拆除连接、传输数据使用同样的报文TCP报文格式TCP报文段首部(20个字节)源端口和目的端口:各占2个字节,16比特的端口号加上32比特的IP地址,共同构成相当于传输层服务访问点的地址,即“插口”;这些端口可用来将若干高层协议向下复用;序号字段和确认序号字段:序号:占4个字节,是本报文段所发送的数据部分第一个字节的序号。在TCP传送的数据流中,每一个字节都有一个序号。例如,一报文段的序号为300,而起数据供100字节,则下一个报文段的序号就是400;确认序号:占4字节,是期望收到对方下次发送的数据的第一个字节的序号,也就是期望收到的下一个报文段的首部中的序号 阅读全文
posted @ 2011-08-31 14:11 hnrainll 阅读(18038) 评论(0) 推荐(0) 编辑
摘要:/*poll实现的echo服务器.Author:thinkmay*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <poll.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <sys/types.h>#include <errno.h>#defin 阅读全文
posted @ 2011-08-31 10:57 hnrainll 阅读(413) 评论(0) 推荐(1) 编辑
摘要:I/O 复用的能力: 如果一个或多个 I/O 条件满足(例如,输入已准备好被读,或者描述字可以承接更多的输出)时,我们就被通知到。I/O 复用由函数 select 和 poll 支持。I/O 复用典型的应用场合:a. 当客户处理多个描述字(一般是交互式输入和网络套接口),必须使用 I/O 复用;b. 一个客户同时处理多个套接口[较少出现];c. TCP 服务器既要处理监听套接口,又要处理已接套接口;d. 服务器既要处理 TCP,又要处理 UDP;e. 服务器要处理多个服务或多个协议[例如inetd守护进程]。Unix 下五个 I/O 模型:1. 阻塞的 I/O 模型 最流行的 I/O 模型,缺 阅读全文
posted @ 2011-08-31 10:04 hnrainll 阅读(900) 评论(0) 推荐(0) 编辑
摘要:1.1 Ethernet II协议简介 以太网是当今现有局域网采用的最通用的通信协议标准。该标准定义了在局域网中采用的电缆类型和信号处理方法。EthernetII由DEC,Intel和Xerox在1982年公布其标准,Etherent II主要更改了EthernetI的电气特性和物理接口,在帧格式上并无变化。Etherent II采用CSMA/CD的媒体接入和广播机制。1.2 Ethernet II报头详解 Ethernet II协议报头结构 每个字段的详细解释如下: --目标地址:此数据包的目标MAC地址。 --源地址:此数据包的源MAC地址。 --协议类型:上层协议,表示网络层... 阅读全文
posted @ 2011-08-29 09:04 hnrainll 阅读(7772) 评论(0) 推荐(1) 编辑
摘要:常见以太网帧结构详解1 以太网相关背景以太网这个术语通常是指由DEC,Intel和Xerox公司在1982年联合公布的一个标准,它是当今TCP/IP采用的主要的局域网技术,它采用一种称作CSMA/CD的媒体接入方法。几年后,IEEE802委员会公布了一个稍有不同的标准集,其中802.3针对整个CSMA/CD网络,802.4针对令牌总线网络,802.5针对令牌环网络;此三种帧的通用部分由802.2标准来定义,也就是我们熟悉的802网络共有的逻辑链路控制(LLC)。由于目前CSMA/CD的媒体接入方式占主流,因此本文仅对以太网和IEEE 802.3的帧格式作详细的分析。在TCP/IP世界中,以太网 阅读全文
posted @ 2011-08-29 09:02 hnrainll 阅读(1480) 评论(0) 推荐(0) 编辑