随笔分类 -  网络编程

摘要:IP选路的必要性由于Internet是由许多不同的物理网络连接而成的,加入Internet的计算机在与其他入网计算机通信时,发送信息的源计算机可能与接收信息的目的计算机在同一个物理网络中;也可能不在同一个物理网络(如以太网)中。为了实现IP数据包从源地址到目的地址的传送,需要针对不同情况进行IP数据报转发路径的选择。什么是IP选路?在TCP/IP系统中,选路(Routing)是指在网络中选择一条用于传送IP数据包路径的过程。路由器(Router)是承担选路任务的网络设备。用于决策选路的信息称为IP选路信息(IP routing information)。路由器使用IP选路信息,对所传输的IP数 阅读全文
posted @ 2011-10-26 11:15 hnrainll 阅读(1669) 评论(0) 推荐(0) 编辑
摘要:什么是IGMP?IGMP 是Internet Group Management Protocol(互联网组管理协议)的简称。它是TCP/IP 协议族中负责IP 组播成员管理的协议,用来在IP 主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。IGMP主要功能当一台主机加入到一个新的组时,它发送一个IGMP消息到组地址以宣告它的成员身份,多播路由器和交换机就可以从中学习到组的成员。利用从IGMP中获取到的信息,路由器和交换机在每个接口上维护一个多播组成员的列表。IGMP报文格式和分类一个完整的IGMP数据报:正如ICMP一样, IGMP 也被当作IP 层的一部分。 IGMP报文的基本格 阅读全文
posted @ 2011-10-26 11:13 hnrainll 阅读(7570) 评论(0) 推荐(1) 编辑
摘要:TCP 协议为终端设备提供了面向连接的、可靠的网络服务;UDP 协议为终端设备提供了无连接的、不可靠的数据报服务。从上图我们可以看出,TCP 协议为了保证数据传输的可靠性,相对于UDP 报文,TCP 报文头部有更多的字段选项。 首先让我们来看一下 TCP 的报文头部主要字段:1.源端口号(source port)和目的端口号(destination port):用于标识和区分源端设备和目的端设备的应用进程。在TCP/IP 协议栈中,源端口号和目的端口号分别与源IP 地址和目的IP 地址组成套接字(socket),唯一的确定一条TCP 连接。 2.序列号(Sequence number):用来标 阅读全文
posted @ 2011-10-25 12:21 hnrainll 阅读(5001) 评论(0) 推荐(0) 编辑
摘要:以太网数据过滤过程1.首先,网卡查看由信道传送过来的帧,确定是否接收该帧,若接收后就将它传往设备驱动程序。通常网卡仅接收那些目的地址为网卡物理地址或广播地址的帧。另外,多数接口均被设置为混合模式,这种模式能接收每个帧的一个复制。作为一个例子,tcpdump使用这种模式。目前,大多数的网卡经过配置都能接收目的地址为多播地址或某些子网多播地址的帧。对于以太网,当地址中最高字节的最低位设置为1时表示该地址是一个多播地址,用十六进制可表示为01:00:00:00:00:00(以太网广播地址ff:ff:ff:ff:ff:ff可看作是以太网多播地址的特例)。2.如果网卡收到一个帧,这个帧将被传送给设备驱动 阅读全文
posted @ 2011-10-25 11:52 hnrainll 阅读(532) 评论(0) 推荐(0) 编辑
摘要:TCP连接的建立 TCP使用三次握手( three-way handshake )协议来建立连接。三次握手协议可以完成两个重要功能:它确保连接双方做好传输准备,并使双方统一了初始顺序号。这三次握手为: 1.请求端(通常称为客户)发送一个 SYN 报文段( SYN 为 1 )指明客户打算连接的服务器的端口,以及初始顺序号( ISN )。 2.服务器发回包含服务器的初始顺序号的 SYN 报文段( SYN 为 1 )作为应答。同时,将确认号设置为客户的 ISN 加 1 以对客户的 SYN 报文段进行确认( ACK 也为 1 )。 3.客户必须将确认号设置为服务器的 ISN 加 1 以对服务器的 S. 阅读全文
posted @ 2011-10-25 11:17 hnrainll 阅读(1876) 评论(0) 推荐(0) 编辑
摘要:TCP数据流分类基于TCP的各类解决方案,可以根据数据吞吐量来大致分成两大类: (1)交互数据类型,例如telnet,ssh,这种类型的协议在大多数情况下只是做小流量的数据交换,比如说按一下键盘,回显一些文字等等。 (2)数据成块类型,例如ftp,这种类型的协议要求TCP能尽量的运载数据,把数据的吞吐量做到最大,并尽可能的提高效率。针对这两种情况,TCP给出了两种不同的策略来进行数据传输。TCP的交互数据流通常,在网络速度很快的情况下,比如用lo接口进行telnet通信,当按下字母键并要求回显的时候,客户端和服务器将经历 发送按键数据->服务器发送按键数据的ack -> 服务器端发 阅读全文
posted @ 2011-10-25 11:14 hnrainll 阅读(1995) 评论(0) 推荐(0) 编辑
摘要:网络并不新鲜。在计算机时代早期,众所周知的巨型机时代,计算机世界被称为分时系统的大系统所统治。分时系统允许你通过只含显示器和键盘的哑终端来使用主机。哑终端很像PC,但没有它自己的CPU、内存和硬盘。靠哑终端,成百上千的用户可以同时访问主机。这是如何工作的?是由于分时系统的威力,它将主机时间分成片,给用户分配时间片。片很短,会使用户产生错觉,以为主机完全为他所用。 在七十年代,大的分时系统被更小的微机系统所取代。微机系统在小规模上采用了分时系统。所以说,并不是直到七十年代PC发明后,才想出了今天的网络。 远程终端计算机系统是在分时计算机系统基础上,通过Modem(调制解调器)和PSTN(公用.. 阅读全文
posted @ 2011-10-17 17:45 hnrainll 阅读(1672) 评论(0) 推荐(0) 编辑
摘要:Andrew Huangbluedrum@163.com 相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需要控制这个过程.但是对于理解TCP底层运作机制,相当有帮助. 而且对于有网络协议工程师之类笔试,几乎是必考的内容.企业对这个问题热情之高,出乎我的意料:-)。有时上午面试前强调这个问题,并重复讲一次,下午几乎每一个人都被问到这个问题。因此在这里详细解释一下这两个过程。TCP三次握手所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。三次握手的目的是连接服务器指定端口,建立 阅读全文
posted @ 2011-10-14 17:05 hnrainll 阅读(132950) 评论(10) 推荐(15) 编辑
摘要:文件传送协议FTP: File Transfer Protocol 是因特网上使用得最广泛的文件传送协议。提供交互式的访问,允许客户指明文件的类型与格式(如指明是否使用ASCII码),并允许文件具有存取权限(如访问文件的用户必须经过授权,并输入有效的口令)。FTP屏蔽了各计算机系统的细节,可在异构网络中任意计算机之间传送文件。 FTP基于TCP,TFTP基于UDP,是文件共享协议的一大类,即复制整个文件。其特点是:若要存取一个文件,就必须先获得一个本地的文件副本。若要修改文件,只能对文件的副本进行修改,然后再将修改后的文件副本传回原节点。 文件共享协议的另一大类是联机访问。联机访问意味着允许多 阅读全文
posted @ 2011-10-14 15:22 hnrainll 阅读(878) 评论(0) 推荐(0) 编辑
摘要:域名系统DNS: Domain Name System 一种分布式的网络目录服务,主要用于域名与IP地址的要互转换。 使用UDP协议35端口进行通信。工作方式:为了将一个域名映射到一个IP地址,应用程序调用一个称为解析器的程序,将域名作为参数传送给该程序;解析器将域名封装到一个UDP包中,发送给本地域名服务器;域名服务器将域名映射到IP地址,将IP地址封装到一个UDP包中,发回给解析器,解析器再将IP地址返回给调用者。有了这个IP地址,应用程序就可以与目的方建立一个TCP连接或者发送一个UDP包。DNS的域名解析服务有两种:正向域名解析和逆向域名解析。域名解析的方式有两种:递归解析、反复解析。 阅读全文
posted @ 2011-10-14 15:19 hnrainll 阅读(632) 评论(0) 推荐(0) 编辑
摘要:UDP User Datagram Protocol 用户数据报协议TCP Transmission Control Protocol 传输控制协议UDP:向应用层提供无连接的、不可靠的数据通信服务。端系统使用UDP协议相互通信时,UDP协议只负责将应用程序传输人传输层的数据发送出去,但是并不保证它们能到达。如果传输中数据出错,UDP协议不负责重传,而由更高层负责。当数据正确到达后,接收端不负责确认,交由更高层负责。1.UDP具有以下几个特性: <1>. UDP信息包的头标很小,只有8字节,相对于TCP的最小20字节的头标而言,传输开销更小。 <2>.UDP是一个无连接 阅读全文
posted @ 2011-10-14 15:13 hnrainll 阅读(713) 评论(0) 推荐(0) 编辑
摘要:IP地址与硬件地址物理地址是数据链路层和物理层使用的地址。IP地址则是网络层和以上各层使用的地址,是一种逻辑地址。IP地址放在IP数据报的首部,而硬件地址则放在MAC帧的首部。数据链路层看不见数据报的IP地址。数据在网络传输时, <1>. 在IP层抽象的互联网上只能看到IP数据报 <2>. 路由器只根据目的站的IP地址的网络号进行路由选择。 <3>. 在局域网的链路层,只能看见MAC帧。 在不同网络上传送时,MAC帧首部中的源地址和目的地址要发生变化。 <4>. IP层抽象的互联网却屏蔽了下层这些复杂的细节。------------------- 阅读全文
posted @ 2011-10-14 15:11 hnrainll 阅读(764) 评论(0) 推荐(0) 编辑
摘要:1. 前言整个的因特网就是一个单一的、抽象的网络。而IP地址就是给因特网上的每一个主机(或路由器)的每一个接口分配一个在全世界范围是唯一的32位的标识符。IP地址的结构使我们可以在因特网上很方便地进行寻址。但是,根据TCP/IP协议的规定的IP地址是由32位二进制数组成的,例如:11010010 01001001 10001100 00000010,很显然,这些数字对人来说不非常不方便的。人们为了方便记忆,就将组成算机机的IP地址的32位二进制分成四段,每段8位,中间用小数点隔开,然后将每八位二进制转换成十进制数,这样上述计算机的IP地址就变成了:210.73.140.2。这是点分十进制表示法 阅读全文
posted @ 2011-10-14 15:01 hnrainll 阅读(628) 评论(0) 推荐(0) 编辑
摘要:因特网向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。网络层不提供服务质量的承诺。网际协议IP是TCP/IP体系中两个最主要的协议之一,也是最重要的因特网标准协议之一。IP协议是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输。IP提供不可靠、无连接的数据报传送服务。不可靠(unreliable)的意思是它不能保证IP数据报能成功地到达目的地。 IP仅提供最好的传输服务。如果发生某种错误时,如某个路由器暂时用完了缓冲区, IP有一个简单的错误处理算法:丢弃该数据报,然后发送 ICMP消息报给信源端。任何要求的可靠性必须由上层来提 阅读全文
posted @ 2011-10-14 14:56 hnrainll 阅读(482) 评论(0) 推荐(1) 编辑
摘要:三层交换机和路由器都工作在网络的第三层,根据IP地址进行数据包的转发。许多网管员朋友对两者的区别不是很清楚,本文将简单介绍这两种技术及它们之间的区别。路由技术路由器内部有一个路由表,标明了如果要去某个地方,下一步应该往哪走。路由器从某个端口收到一个数据包,它首先把链路层的包头去掉(拆包),读取目的IP地址,然后查找路由表,若能确定下一步往哪送,再加上链路层的包头(打包),把该数据包转发出去;如果不能确定下一步的地址,则向源地址返回一个信息,并把这个数据包丢掉。三层交换技术三层交换是相对于传统交换概念而提出的。传统的交换技术是在OSI网络标准模型中的第二层—数据链路层进行操作的,而三层交换技术是 阅读全文
posted @ 2011-10-14 14:47 hnrainll 阅读(565) 评论(0) 推荐(0) 编辑
摘要:转自:http://www.cnblogs.com/yuteng/articles/1904215.html我们来看当我们在浏览器输入http://www.mycompany.com:8080/mydir/index.html,幕后所发生的一切。首先http是一个应用层的协议,在这个层的协议,只是一种通讯规范,也就是因为双方要进行通讯,大家要事先约定一个规范。1.连接 当我们输入这样一个请求时,首先要建立一个socket连接,因为socket是通过ip和端口建立的,所以之前还有一个DNS解析过程,把www.mycompany.com变成ip,如果url里不包含端口号,则会使用该协议的默认端口号 阅读全文
posted @ 2011-10-14 11:32 hnrainll 阅读(609) 评论(0) 推荐(0) 编辑
摘要:转自:http://www.ibm.com/developerworks/cn/linux/l-sockpit/在 4.2 BSD UNIX® 操作系统中首次引入,Sockets API 现在是任何操作系统的标准特性。事实上,很难找到一种不支持 Sockets API 的现代语言。该 API 相当简单,但新的开发人员仍然会遇到一些常见的隐患。本文识别那些隐患并向您显示如何避开它们。隐患 1.忽略返回状态第一个隐患很明显,但它是开发新手最容易犯的一个错误。如果您忽略函数的返回状态,当它们失败或部分成功的时候,您也许会迷失。反过来,这可能传播错误,使定位问题的源头变得困难。捕获并检查每一 阅读全文
posted @ 2011-10-14 09:39 hnrainll 阅读(573) 评论(0) 推荐(0) 编辑
摘要:转载自 分享最终编辑 金秋奇子在进行linux网络编程时,每次修改了源代码并再次编译运行时,常遇到下面的地使用错误:Bind error: Address already in use虽然用Ctrl+C强制结束了进程,但错误依然存在,用netstat -an |grep 5120和ps aux |grep 5120都还能看到刚才用Ctrl+C“强制结束”了的进程,端口还是使用中,只好每次用kill结束进程,很是麻烦。昨天晚上无意间浏览到IBM网站上的一篇题为《Linux 套接字编程中的 5 个隐患》的文章,恍然大悟,今天试了一下,果然解决问题,在此表示感谢,也希望更多的coder看到这篇文章, 阅读全文
posted @ 2011-10-14 09:29 hnrainll 阅读(20647) 评论(0) 推荐(0) 编辑
摘要:1.1 环境要求本文读者需要熟悉C++、TCP/IP、Socket编程、MFC,和多线程。源码使用Winsock 2.0和IOCP技术,要求:Windows NT/2000或以上:要求Windows NT3.5或以后版本Windows 95/98/ME:不支持Visual C++.NET,或完整更新过的Visual C++ 6.01.2 摘要当 你开发不同类型的软件,你迟早必须处理C/S的开发。对一个程序员来说,写一个通用的C/S编码是一项困难的工作。本文档提供了一份简单但是功能强大的C /S源码,可以扩展到任何类型的C/S应用程序中。这份源码使用了高级的IOCP技术,该技术可以高效的服务于多 阅读全文
posted @ 2011-10-13 17:01 hnrainll 阅读(1054) 评论(1) 推荐(1) 编辑
摘要:1.1 RequirementsThe article expects the reader to be familiar with C++, TCP/IP, socket programming, MFC, and multithreading. The source code uses Winsock 2.0 and the IOCP technology, and requires: Windows NT/2000 or later: Requires Windows NT 3.5 or later.Windows 95/98/ME: Not supported.Visual C++ . 阅读全文
posted @ 2011-10-13 17:00 hnrainll 阅读(1393) 评论(0) 推荐(0) 编辑