发布时间:2013-01-15 17:35:33
摘要: 本文简单介绍了TCP面向连接理论知识,详细讲述了TCP报文各个字段含义,并从Wireshark俘获分组中选取TCP连接建立相关报文段进行分析。 一、概述 TCP是面向连接的可靠传输协议,两个进程互发数据之前需要建立连接,这里的连接只不过是端系统中分配的一些缓存和状态变量,中间的分组交换机不维护任何连接状态信息。连接建立整个过程如下(即三次握手协议): 首先,客户机发送一个特殊的TCP报文段; 其次,服务器用另一个特殊的TCP报文段来响应; 最后,客户机再用第三个特殊报文段作为响应。 图1 三次握手协议示意图[1] 二、TCP报文格式 2.1 概述 为......【阅读全文】
发布时间:2013-01-14 10:58:15
recv和send recv和send函数提供了和read和write差不多的功能.不过它们提供 了第四个参数来控制读写操作. int recv(int sockfd,void *buf,int len,int flags) int send(int sockfd,void *buf,int len,int flags) 前面的三个参数和read,write一样,第四个参数可以是0或者是以下的组合 _______________________________________________________________ | MSG_DONTROUTE | 不查找路由表 | | ......【阅读全文】
发布时间:2013-01-14 10:52:25
说明:1).本文以TCP的发展历程解析容易引起混淆,误会的方方面面2).本文不会贴大量的源码,大多数是以文字形式描述,我相信文字看起来是要比代码更轻松的3).针对对象:对TCP已经有了全面了解的人。因为本文不会解析TCP头里面的每一个字段或者3次握手的细节,也不会解释慢启动和快速重传的定义4).除了《TCP/IP详解》(卷一,卷二)以及《Unix网络编程》以及Linux源代码之外,学习网络更好的资源是RFC 5).本文给出一个提纲,如果想了解细节,请直接查阅RFC 6).翻来覆去,终于找到了这篇备忘,本文基于这篇备忘文档修改。 1.网络协议设计ISO提出了OSI分层网络模型,这种分......【阅读全文】
发布时间:2013-01-14 10:52:16
UDP丢包原因 一、主要丢包原因 1、接收端处理时间过长导致丢包:调用recv方法接收端收到数据后,处理数据花了一些时间,处理完后再次调用recv方法,在这二次调用间隔里,发过来的包可能丢失。对于这种情况可以修改接收端,将包接收后存入一个缓冲区,然后迅速返回继续recv。 2、发送的包巨大丢包:虽然send方法会帮你做大包切割成小包发送的事情,但包太大也不行。例如超过50K的一个udp包,不切割直接通过send方法发送也会导致这个包丢失。这种情况需要切割成小包再逐个send。 3、发送的包较大,超过接受者缓存导致丢包:包超过mtu size数倍,几个大的udp包可能会......【阅读全文】
发布时间:2013-01-11 18:12:06
在C和C++语言开发中,指针、内存一直是学习的重点。因为C语言作为一种偏底层的中低级语言,提供了大量的内存直接操作的方法,这一方面使程序的灵活度最大化,同时也为bug埋下很多隐患。 因此,无论如何,我们都要对内存有一个清晰的理解。 一、对内的分配 32位操作系统支持4GB内存的连续访问,但通常把内存分为两个2GB的空间,每个进程在运行时最大可以使用2GB的私有内存(0x00000000—0x7FFFFFFF)。即理论上支持如下的大数组:char szBuffer[2*1024*1024*1024]; 当然,由于在实际运行时,程序还有代码段、临时变量段、动态内存申请等,实际上是不可能用到......【阅读全文】