上一页 1 ··· 33 34 35 36 37 38 39 40 41 ··· 71 下一页
摘要: 2.2 快重传和快恢复 如果发送方设置的超时计时器时限已到但还没有收到确认,那么很可能是网络出现了拥塞,致使报文段在网络中的某处被丢弃。这时,TCP马上把拥塞窗口 cwnd 减小到1,并执行慢开始算法,同时把慢开始门限值ssthresh减半。这是不使用快重传的情况。 快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时才进行捎带确认。接收方收到了M1和M2后都分别发出了确认。现在假定接收方没有收到M3但接着收到了M4。显然,接收方不能确认M4,因为M4是收到的失序报文段。根据可靠传输原理,接收方可以什么都不做, 阅读全文
posted @ 2011-09-21 15:18 hnrainll 阅读(558) 评论(0) 推荐(0) 编辑
摘要: TCP的流量控制1. 利用滑动窗口实现流量控制 如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。 利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。 设A向B发送数据。在连接建立时,B告诉了A:“我的接收窗口是 rwnd = 400 ”(这里的 rwnd 表示 receiver window) 。因此,发送方的发送窗口不能超过接收方给出的接收窗口的数值。请注意,TCP的窗口单位是字节,不是报文段。TCP连接建立时的窗口协商过程在图中没有显示出来。再设每一个报文段为100字节长,而数据报文 阅读全文
posted @ 2011-09-21 15:16 hnrainll 阅读(828) 评论(0) 推荐(0) 编辑
摘要: libnet介绍与分析当前,基于socket的网络编程已成为当今不可替代的编程方法,它将网络通讯当作文件描述符进行处理,把对这个“网络文件”(即socket套接字)的操作抽象成一种类似于文件操作的方式进行。从实现细节上,这种工作方式根据TCP/IP的网络通讯模型,封装了一系列的实现,使得我们只需要使用一个指定的参数,就可以实现在基于所需协议的数据的发送和接收。但是,如果我们对那些系统自动给我们做的工作感兴趣,希望与发送的数据作“面对面”的接触,libnet则会是一个不错的选择。libnet是UNIX系统同台上网络安全工具开发的重要的库,它和libpcap、libnids一起,给网络安全工具的开 阅读全文
posted @ 2011-09-21 14:05 hnrainll 阅读(10064) 评论(1) 推荐(1) 编辑
摘要: 号称网络硬件三剑客的集线器(Hub)、交换机(Switch)与路由器(Router)一直都是网络界的活跃分子,但让很多初入网络之门的菜鸟恼火的是,它们三者不仅外观相似,而且经常呆在一起,要想分清谁是谁,感觉有点难!就让我们一起来看看它们之间有什么区别和联系吧!三剑客的工作原理一、集线器1.什么是集线器在认识集线器之前,必须先了解一下中继器。在我们接触到的网络中,最简单的就是两台电脑通过两块网卡构成“双机互连”,两块网卡之间一般是由非屏蔽双绞线来充当信号线的。由于双绞线在传输信号时信号功率会逐渐衰减,当信号衰减到一定程度时将造成信号失真,因此在保证信号质量的前提下,双绞线的最大传输距离为100米 阅读全文
posted @ 2011-09-21 11:52 hnrainll 阅读(7205) 评论(0) 推荐(0) 编辑
摘要: Linux下Sniffer程序的实现http://www.nsfocus.net/index.php?act=magazine&do=view&mid=1797 阅读全文
posted @ 2011-09-21 10:25 hnrainll 阅读(401) 评论(0) 推荐(1) 编辑
摘要: 大多数程序员所接触到的套接字(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 阅读(470) 评论(0) 推荐(0) 编辑
摘要: “计算机编程中极少人是真正的艺术家,大多数人充其量不过是房屋粉刷匠而已。”———Tim Bryce 管理顾问 Tim Bryce 不喜欢程序员,而许多程序员也不喜欢他。(注:Tim Bryce 发布过一篇名为《P理论:管理程序员的哲学》的文章。)Bryce对程序员的看法:程序员都是故弄玄虚,妄自尊大的家伙。与其它大学程度的工作者相比,普通程序员的智商要低。程序员总显得邋里邋遢,精神涣散。程序员做事杂乱无章,因此很难评估他们工作的进度,其技术也尽显不足之处。程序员的典型表现是常常埋怨自己工作过量,薪酬过低,所受的重视过少。程序员自诩对科技发展怀有无比的好奇心。 然而,好奇心是需要通过管理慎重培养 阅读全文
posted @ 2011-09-21 06:54 hnrainll 阅读(625) 评论(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 阅读(17620) 评论(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 阅读(406) 评论(0) 推荐(0) 编辑
摘要: 通过昨天的资料搜集、对比、安装、阅读文档和使用,对git有了初步的了解!这些内容在我的上一篇文章中都有,就不在赘述了!今天老大让我结合我们的项目和使用细节写一个文档给实验室的同学。一直工作在linux下,就把文档先写在我的blog里吧!Git安装以及使用Git 管理个人文档1.1 Git 安装Git的最新版本可以在http://git-scm.com/下载,它是基于命令行操作的,网上也有第三方开发的相应GUI可供下载,因为我比较喜欢命令行操作,所以没有对GUi下载和安装,有兴趣的同学可以自己试试。网上也有相应的文章和资料可供参考!安装之前首先确保相应的依赖包已经安装,主要有以下几个:zlibl 阅读全文
posted @ 2011-09-20 10:38 hnrainll 阅读(299) 评论(0) 推荐(0) 编辑
摘要: 在多任务操作系统环境中,如果一个进程尝试对正在被其他进程读取的文件进行写操作,可能会导致正在进行读操作的进程读取到一些被破坏或者不完整的数据;如果两个进程并发对同一个文件进行写操作,可能会导致该文件遭到破坏。因此,为了避免发生这种问题,必须要采用某种机制来解决多个进程并发访问同一个文件时所面临的同步问题,由此而产生了文件加锁方面的技术。早期的 UNIX 系统只支持对整个文件进行加锁,因此无法运行数据库之类的程序,因为此类程序需要实现记录级的加锁。在 System V Release 3 中,通过 fcntl 提供了记录级的加锁,此后发展成为 POSIX 标准的一部分。本文将基于 2.6.23 阅读全文
posted @ 2011-09-20 09:59 hnrainll 阅读(761) 评论(0) 推荐(0) 编辑
摘要: MAC地址也叫物理地址、硬件地址或链路地址,由网络设备制造商生产时写在硬件内部。IP地址与MAC地址在计算机里都是以二进制表示的,IP地址是32 位的,而MAC地址则是48位的。MAC地址的长度为48位(6个字节),通常表示为12个16进制数,每2个16进制数之间用冒号隔开,如:08: 00:20:0A:8C:6D就是一个MAC地址,其中前6位16进制数08:00:20代表网络硬件制造商的编号,它由IEEE(电气与电子工程师协 会)分配,而后3位16进制数0A:8C:6D代表该制造商所制造的某个网络产品(如网卡)的系列号。只要你不去更改自己的MAC地址,那么你的MAC地 址在世界是惟一的。MA 阅读全文
posted @ 2011-09-19 18:45 hnrainll 阅读(4481) 评论(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 阅读(1325) 评论(0) 推荐(0) 编辑
摘要: 一、登陆。不管UDP还是TCP,最终登陆成功之后,QQ都会有一个TCP连接来保持在线状态。这个TCP连接的远程端口一般是80,采用UDP方式登陆的时候,端口是8000。因此,假如你所在的网络开放了80端口(80端口是最常用端口。。就是通常访问Web的端口,禁掉它的话,你的网络对你来说价值已经不大了),但没有屏蔽腾讯的服务器IP,恭喜你,你是可以登陆成功QQ的。二、聊天消息通信。采用UDP协议,通过服务器中转方式。因此,现在的IP侦探在你仅仅跟对方发送聊天消息的时候是无法获取到IP的。大家都知道,UDP协议是不可靠协议,它只管发送,不管对方是否收到的,但它的传输很高效。但是,作为聊天软件,怎么可 阅读全文
posted @ 2011-09-19 16:55 hnrainll 阅读(20711) 评论(1) 推荐(2) 编辑
摘要: Apache是一个web服务器环境程序,可以作为web服务器使用。不过只支持静态网页,如(asp,php,cgi,jsp)等动态网页的就显得无能为力。 引用如果要在Apache环境下运行jsp 的话就需要一个解释器来执行jsp网页,而这个jsp解释器就是Tomcat, 为什么还要JDK呢?因为jsp需要连接数据库的话,就要jdk来提供连接数据库的驱程,所以要运行jsp的web服务器平台就需要Apache+tomcat+JDK。不过作者认为:最好不要在JSP页面中有访问数据库的代码。JSP的功能只是负责显示。需要JDK的另一个原因是Tomcat是用JAVA语言实现的。如果想让服务器也能处理动态页 阅读全文
posted @ 2011-09-19 10:06 hnrainll 阅读(905) 评论(1) 推荐(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 阅读(5320) 评论(0) 推荐(2) 编辑
摘要: 首先来说一个高级程序员并非靠自己读几本书写几万行代码就能练就的,我更关注于低层的环境,也就是程序员实实在在的工作环境。因为程序员的高低还得从实际的工作来衡量,而非其它。所以我想说的是,中国的软件公司的性质直接导致程序员的水平的高低。而我所说的软件公司,不是指某个或者某几个,而是指主流的软件公司,大众型的软件公司。所以我希望那些已经步入一个理想的公司的程序员理解我这篇文章的定位。软件公司的无偿加班对程序员的影响: 国内的软件公司中程序员是常常加班的,每日加,周未也常加。基于这种性质,出现了一种很莫名其妙的现象:每天程序员的实际下班时间总是要晚于规定下班时间,至于晚一个小时还是两个小时还是更多这就 阅读全文
posted @ 2011-09-17 18:31 hnrainll 阅读(433) 评论(0) 推荐(0) 编辑
摘要: fopen /open区别UNIX环境下的C对二进制流文件的读写有两套班子:1) fopen,fread,fwrite ; 2) open, read, write这里简单的介绍一下他们的区别。1. fopen系列是标准的C库函数;open系列是POSIX定义的,是UNIX系统里的system call。也就是说,fopen系列更具有可移植性;而open系列只能用在POSIX的操作系统上。2.使用fopen系列函数时要定义一个指代文件的对象,被称为“文件句柄”(file handler),是一个结构体;而open系列使用的是一个被称为“文件描述符”(file descriptor)的int型整 阅读全文
posted @ 2011-09-16 14:19 hnrainll 阅读(1583) 评论(0) 推荐(0) 编辑
摘要: int open(const char *path, int access,int mode) path 要打开的文件路径和名称 access 访问模式,宏定义和含义如下: O_RDONLY 1 只读打开 O_WRONLY 2 只写打开 O_RDWR 4 读写打开 还可选择以下模式与以上3种基本模式相与: O_CREAT 0x0100 创建一个文件并打开 O_TRUNC 0x0200 打开一个已存在的文件并将文件长度设置为0,其他属性保持 O_EXCL 0x0400 未使用 O_APPEND 0x0800 追加打开文件 O_TEXT 0x4000 打开文本文件翻译CR-LF控制字符 O_BIN 阅读全文
posted @ 2011-09-16 14:14 hnrainll 阅读(35536) 评论(1) 推荐(2) 编辑
摘要: open和fopen的区别:主要区别是涉及到系统,而不是缓冲。带f的是标准IO,代码可以移植。不带f只能在UNIX/LINUX系统调用。 open一个是整数,fopen一个是指针(FILE *)。 二者区别大致可以总结为以下几点:1,fread是带缓冲的,read不带缓冲.2,fopen是标准c里定义的,open是POSIX中定义的.3,fread可以读一个结构.read在linux/unix中读二进制与普通文件没有区别.4,fopen不能指定要创建文件的权限.open可以指定权限.5,fopen返回指针,open返回文件描述符(整数).6,linux/unix中任何设备都是文件,都可以用op 阅读全文
posted @ 2011-09-16 14:08 hnrainll 阅读(1076) 评论(0) 推荐(0) 编辑
上一页 1 ··· 33 34 35 36 37 38 39 40 41 ··· 71 下一页