TCP协议图文秒懂
分类标签: TCP/IP
本文将简单介绍tcp协议的基本内容,主要包括一下四部分: tcp概述 TCP可靠数据传输 TCP流量控制 TCP连接管理 TCP概述 tcp是一个点对点端到端的传输协议,有一个发送方和接收方。 tcp传输的是可靠的按序到达的字节流 tcp采用流水线机制,提高传输的效率。TCP通过拥塞控制和流量控制机制来控制滑动窗口的大小阅读全文 »
TCP/IP协议攻击-arp欺骗与icmp重定向
分类标签: TCP/IP
TCP/IP协议攻击 实验概述 TCP/IP协议安全漏洞是协议的设计与实现中的一种特殊类型的漏洞,它们提供了宝贵的教训,这也是为什么安全应该从一开始就设计而不是事后考虑的原因。此外,研究这些漏洞有助于理解网络安全的挑战,为什么许多网络安全措施是必要的。 (1)网络拓扑图 本实验中至少需要3台机器,一个用于攻击,另一个用于被攻击,第三个作为观察者使用。阅读全文 »
TCP/IP之大明王朝邮差
分类标签: TCP/IP
大明王朝天启四年, 清晨。 天色刚蒙蒙亮,我就赶着装满货物的马车来到了南城门, 这里是集中处理货物的地方 , 一队一队的马车都来到这里, 城头的士兵带着头盔,身披盔甲, 手持长枪, 虎视眈眈的注视这下面的动静。 城门口的大棚里乱哄哄的,是一群人围在一起赌钱, 这些家伙都穿着同样的衣服, 前胸和后背写着三个大字 “TCP邮差”。阅读全文 »
TCP/UDP网络编程入门教程之二十六:UDP应用——UDP版的Echo Client
分类标签: TCP/IP
同样的,我们将UDP版的doEcho()也设计成返回bool:true表示循环继续;false表示关闭客户端。 当echo_message为“空”的时候,即输入直接回车,是一个"",用C风格来说,即时'\0',从C++来说,是const char[1],其C++风格的长度echo_message.size()为0,这时候就会发送一个“0长度”的UDP数据包。阅读全文 »
TCP/UDP网络编程入门教程之二十五:UDP应用—— UDP版的Echo Server
分类标签: TCP/IP
与TCP版的Echo Server类似,我们从Server Socket类中派生出Echo Server类。 我们依然让handEcho()返回一个bool,true表示客户端“正常”离开(这里没用“断开”这个词是因为UDP是无连接的;另外,我们这里用recvfrom()返回小于0来表示客户端其实是“非正常”的离开了,比如连接被重置。阅读全文 »
TCP/UDP网络编程入门教程之二十四:UDP原理——预读MSG_PEEK
分类标签: TCP/IP
recv()和recvfrom()的第4个参数可以调整函数行为。 因为UDP是按数据包接收的,我们在接收之前并不知道这个数据包有多大。一个策略是,我们准备足够大的应用程序缓存以免出错,但是这个“足够大”的概念是建立在我们对传送的数据事先有了解的情况下,比如是我们自己设计服务器端和客户端并且制定应用层协议阅读全文 »
TCP/UDP网络编程入门教程之二十三:UDP原理——“有连接”的UDP
分类标签: TCP/IP
虽然UDP是无连接的,但是也可以通过调用connect()将本地的UDP socket FD与一个远程的UDP socket FD连接起来——只需要指定这个远程sockFD的地址,假设这个地址是sockaddr_in remoteSockAddr,代码如下:... 建立连接后的UDP RecvQ就不会将非来自remoteSockAddr的数据包收入。阅读全文 »
TCP/UDP网络编程入门教程之二十一:UDP原理——设计UDP client类
分类标签: TCP/IP
UDP的客户端看起来几乎就是服务器端的翻版,甚至比服务器端更简单——因为不需要bind()本机地址:... 在最初设计这个类的时候,我曾经考虑过安排一个服务器地址的私有数据成员,并且在构造函数里面指定服务器的地址。但是,后来我觉得使用“目的地”比“服务器”更加能体现出UDP无连接的本质特点。阅读全文 »
TCP/UDP网络编程入门教程之二十:UDP原理——设计UDP server类
分类标签: TCP/IP
人们通常用电话连线来说明TCP协议,而UDP协议,则常常用邮递来做比喻。与TCP有连接的信息传输方式不同,UDP协议被认为是对底层IP协议简单的扩展:协议并不保证每个数据包都会到达目的地,也不保证到达的顺序,而仅仅就是“尽力”的发送每一个数据包。我在这篇教程中有时候使用“数据包”有时候使用“数据报”,广义的说,这两个词意思类似阅读全文 »
TCP/UDP网络编程入门教程之十九:TCP应用——构建echo客户端
分类标签: TCP/IP
echo客户端的工作原理也很简单: 1、向服务器端发送一个字符串; 2、接收服务器的返回信息(如果是echo服务器就会返回发送出去的字符串本身)。 3、在标准输出中回显服务器返回的信息。阅读全文 »
TCP/UDP网络编程入门教程之十八:TCP应用——构建echo服务器
分类标签: TCP/IP
现在,我们用前面所构建的socket类,重新设计第一章中echo的服务器,然后设计客户端程序。 echo服务器的工作原理很简单: 1、接收客户端传来的信息; 2、将接收到的信息原封不动的返回给客户端。 可以看到我们所设计的TCPServerSock类具备了echo服务的所有数据成员,我们只需要添加一个具体的echo方法。因此,我们让设计的echo类从TCPServerSock类中派生出来。阅读全文 »
TCP/UDP网络编程入门教程之十七:TCP原理——TCP连接的关闭
分类标签: TCP/IP
TCP连接一旦建立,服务器端和客户端就成为了对等关系,任何一方都可以发出关闭握手请求,甚至可以同时发出关闭握手请求。TCP的连接建立需要3次握手,而正常关闭则需要4次握手。 1、主动关闭的一方A调用close(),SendQ不再接收send()写入信息,在SendQ队列的最后,向被动关闭的一方发送TCP的IP数据报作为关闭握手的请求。这个数据报中包含着标志FIN,也包含着此刻的字节序号m。阅读全文 »
TCP/UDP网络编程入门教程之十六:TCP原理——字节流的发送与接收
分类标签: TCP/IP
从TCP三次握手的原理我们可以看到,TCP有“保障”的连接实际上可以看做是两个单向的连接:一个通道只负责发送,另外一个只负责接收。并且,传送的信息是以字节为单位保证顺序的。 在socket机制中,应用层的程序以send()函数将数据首先发送到本机系统的发送缓存中,我们称之为SendQ,意指这是一个FIFO(先进先出)的队列。阅读全文 »
TCP/UDP网络编程入门教程之十五:TCP原理——TCP的三次握手(three-way handshake)
分类标签: TCP/IP
前面3个小节介绍了socket机制对TCP协议三次握手的实现,需要强调的是,与协议独立于实现类似,TCP的三次握手是独立于socket体系的理论。在TCP协议中,三次握手是通过3个TCP格式的IP数据报来实现的。TCP格式的IP数据报中包含着TCP首部,TCP首部信息中包含着对每一个数据报具体内容的描述。阅读全文 »
TCP/UDP网络编程入门教程之十四:TCP原理——设计TCP socket的类(下)
分类标签: TCP/IP
在另外一边的客户端,我们分析一下TCPClientSock的建立过程。... 我们看到TCPClientSock的类与TCPServerSock很类似,构造函数的差别是,TCPClientSock需要提供server端的IP地址和端口号。阅读全文 »
TCP/UDP网络编程入门教程之十三:TCP原理——设计TCP socket的类(中)
分类标签: TCP/IP
当激活监听的TCPListenSock等待远程client的connect()握手请求的时候,是调用了accept()并且产生阻塞(默认情况下),如果accept()成功返回意味着conect()握手请求请求成功,这时候就通过accept()产生了一个新的sockFD用于TCP通讯。我们把这个新的sockFD构建为TCPServerSock类:...阅读全文 »
TCP/UDP网络编程入门教程之十二:TCP原理——设计TCP socket的类(上)
分类标签: TCP/IP
我们之前讲过,socket是一个int的文件描述符(WinSock中直接是一种抽象的描述符),我们通过对这个描述符发出指令操作socket。这是C语言的思想,在面向对象的思想中,最好socket本身是一种对象,各种方法由对象本身发出。用面向对象的思想封装socket并不困难,而且,对于描述socket的概念可能更加直观,这一节,我们边介绍socket和TCP的概念边对socket进行OO封装。阅读全文 »
TCP/UDP网络编程入门教程之十一:TCP原理——socket异常信息
分类标签: TCP/IP
之所以把对异常信息的介绍放到原理之前讲,是因为由于socket本身的复杂性,导致了产生各种异常的复杂性。我们应该时刻铭记的是,sokcet本身属于系统(OS),是系统对TCP/IP的实现,也就是说,socket发出的异常信息不代表程序出错,甚至不代表系统出错,而仅仅就是代表socket本身的各种异常情况。另外一点我觉得应该强调的是:socket不是TCP/IP;TCP/IP也不是socket。阅读全文 »
TCP/UDP网络编程入门教程之十:WinSock演示程序:TCP Server
分类标签: TCP/IP
本文主要给大家提供一个Tcp Server的源码例子,各源码所在的文件名已在注释中标出。阅读全文 »
TCP/UDP网络编程入门教程之九:win32下使用socket——WinSock
分类标签: TCP/IP
学习socket最好能有两台以上联网的电脑,以及能获得公网IP的网络接入方式。接下来的教程我会兼顾winsock的代码,这主要是因为winsock本身对socket几乎是兼容的。所以,这里有必要先说明在VC环境中使用socket的一些简单设置,以及与Linux环境下的细微差别。本文使用的VC环境是2008 Express。阅读全文 »