TCP协议、算法和原理的介绍

发布者:水墨人生最新更新时间:2017-12-10 来源: 互联网关键字:TCP  算法 手机看文章 扫描二维码
随时随地手机看文章

TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面。所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人有很多收获。关于TCP这个协议的细节,我还是推荐你去看W.Richard Stevens的《TCP/IP 详解 卷1:协议》(当然,你也可以去读一下RFC793以及后面N多的RFC)。另外,本文我会使用英文术语,这样方便你通过这些英文关键词来查找相关的技术文档。


之所以想写这篇文章,目的有三个,


一个是想锻炼一下自己是否可以用简单的篇幅把这么复杂的TCP协议描清楚的能力。


另一个是觉得现在的好多程序员基本上不会认认真真地读本书,喜欢快餐文化,所以,希望这篇快餐文章可以让你对TCP这个古典技术有所了解,并能体会到软件设计中的种种难处。并且你可以从中有一些软件设计上的收获。


最重要的希望这些基础知识可以让你搞清很多以前一些似是而非的东西,并且你能意识到基础的重要。


所以,本文不会面面俱到,只是对TCP协议、算法和原理的科普。


我本来只想写一个篇幅的文章的,但是TCP真TMD的复杂,比C++复杂多了,这30多年来,各种优化变种争论和修改。所以,写着写着就发现只有砍成两篇。


上篇中,主要向你介绍TCP协议的定义和丢包时的重传机制。


下篇中,重点介绍TCP的流迭、拥塞处理。


废话少说,首先,我们需要知道TCP在网络OSI的七层模型中的第四层——Transport层,IP在第三层——Network层,ARP在第二层——Data Link层,在第二层上的数据,我们叫Frame,在第三层上的数据叫Packet,第四层的数据叫Segment。


首先,我们需要知道,我们程序的数据首先会打到TCP的Segment中,然后TCP的Segment会打到IP的Packet中,然后再打到以太网Ethernet的Frame中,传到对端后,各个层解析自己的协议,然后把数据交给更高层的协议处理。


TCP头格式


接下来,我们来看一下TCP头的格式


你需要注意这么几点:


TCP的包是没有IP地址的,那是IP层上的事。但是有源端口和目标端口。


一个TCP连接需要四个元组来表示是同一个连接(src_ip, src_port, dst_ip, dst_port)准确说是五元组,还有一个是协议。但因为这里只是说TCP协议,所以,这里我只说四元组。


注意上图中的四个非常重要的东西:


Sequence Number是包的序号,用来解决网络包乱序(reordering)问题。


Acknowledgement Number就是ACK——用于确认收到,用来解决不丢包的问题。


Window又叫AdverTIsed-Window,也就是著名的滑动窗口(Sliding Window),用于解决流控的。


TCP Flag ,也就是包的类型,主要是用于操控TCP的状态机的。


TCP的状态机


其实,网络上的传输是没有连接的,包括TCP也是一样的。而TCP所谓的“连接”,其实只不过是在通讯的双方维护一个“连接状态”,让它看上去好像有连接一样。所以,TCP的状态变换是非常重要的。


下面是:“TCP协议的状态机”(图片来源) 和 “TCP建链接”、“TCP断链接”、“传数据” 的对照图,我把两个图并排放在一起,这样方便在你对照着看。另外,下面这两个图非常非常的重要,你一定要记牢。(吐个槽:看到这样复杂的状态机,就知道这个协议有多复杂,复杂的东西总是有很多坑爹的事情,所以TCP协议其实也挺坑爹的)


很多人会问,为什么建链接要3次握手,断链接需要4次挥手?


对于建链接的3次握手,主要是要初始化Sequence Number 的初始值。通信的双方要互相通知对方自己的初始化的Sequence Number(缩写为ISN:Inital Sequence Number)——所以叫SYN,全称Synchronize Sequence Numbers。也就上图中的 x 和 y。这个号要作为以后的数据通信的序号,以保证应用层接收到的数据不会因为网络上的传输的问题而乱序(TCP会用这个序号来拼接数据)。

关键字:TCP  算法 引用地址:TCP协议、算法和原理的介绍

上一篇:Web安全之CSRF攻击
下一篇:中国联通100G波分采购结果,华为、中兴通讯等四名进入候选

推荐阅读最新更新时间:2024-05-07 17:46

PID算法调节C51程序(5)
typedef struct PIDValue { uint32 Ek_Uint32 ; //差值保存,给定和反馈的差值 uint8 EkFlag_Uint8 ; //符号,1则对应的Ek 为负数,0为对应的Ek 为正数 uint8 KP_Uint8; uint8 KI_Uint8; uint8 KD_Uint8; uint8 B_Uint8; //死区电压 uint8 KP; //显示修改的时候用 uint8 KI; // uint8 KD; // uint8 B; // uint16 Uk_Uint
[单片机]
新的微弱GPS信号快速捕获算法
  当前GPS作为全球性卫星导航系统的应用范围越来越广,而其在弱信号环境下的接收技术研究,受到紧急救援和未来军事需求的刺激已经成为研究热点。其中,高灵敏度接收技术在GPS接收机中的应用,由于不受环境和条件的限制尤为受到重视。在高灵敏度GPS接收机中,由于捕获算法处在基带处理的最前端,因此高效的微弱GPS信号捕获算法是提高高灵敏度GPS接收机性能的关键。通常的弱信号环境比室外信号强度低约20~30 dB,载噪比小于28 dB-Hz,故被视为弱信号,高灵敏度GPS接收机主要通过信号处理算法来获得高的信号处理增益。本文分析了主要信号累积技术的优缺点,讨论了弱信号环境下GPS信号检测值的概率统计分布特性,在此基础上结合快速相干累积算法,提
[网络通信]
揭秘OPPO首款芯片背后:影像专用NPU,从IP算法到流片自研
江湖传闻OPPO 造芯已久,今天它终于来了! 2021年12月14日,OPPO2021年度未来科技大会正式开幕,OPPO首款自研NPU芯片马里亚纳®️ MariSilicon X也在大会上正式发布。 作为一家终端公司,OPPO涉足上游芯片备受业界关注。业界也有太多疑问,比如:为什么不是SOC芯片?OPPO造芯从何时开始?投入如此之大,是真自研吗? 就在发布会前,集微网也专访了OPPO芯片产品高级总监姜波,他详细介绍了这颗芯片背后的故事…… 6nm先进制程,定位影像专用NPU “这是OPPO第一颗自主设计、自主研发的影像专用NPU芯片,也是全球第一颗为影像而生的专用NPU芯片,用AI技术解决传统手机影像难题。”发布会上姜波宣布,
[手机便携]
机器视觉是干什么的_机器视觉的应用有哪些
  机器视觉是干什么的   机器视觉是指通过计算机技术和算法实现对图像或视频进行分析、处理、识别和理解的能力。它的主要目的是模拟人眼的视觉系统,让计算机能够像人一样“看懂”图像和视频,并从中提取出有用的信息。   机器视觉换句话来说用机器代替人眼来“看外部世界”﹐对目标进行识别、跟踪和测量等;人的大脑其实就是最强悍的视觉系统,它会昼夜不分进行图像识别分析,随着社会的发展进步,在计算机出现后,人们开始尝试将视觉感知能力赋予机器。   机器视觉就是用机器代替人眼来做测量和判断的一个系统应用。简单地理解机器视觉,初期是一门在工业生产过程中代替人类视觉自动对产品外形特征做检测(100%全检)的技术。   尤其是在工业中的视觉环
[嵌入式]
IC卡芯片设计企业寻求新市场突破口
  北京中电华大电子设计有限责任公司总经理刘伟平:    力争2010年实现销售收入20亿元   年均销售收入增长超80%   北京中电华大电子设计有限责任公司(华大电子),从2002年改制成立以来,销售收入和利润直线上升,年均销售收入增长超过80%。华大电子目前主营业务有三个方面:IC卡系列芯片产品、无线通信芯片产品以及EDA工具,在每个业务方面都确立了自己独特的地位。   在IC卡芯片方面,华大电子目前已经对外供应芯片超过1.5亿颗;在无线通信芯片方面,技术达到了国际一流公司的技术水平,相应的芯片产品即将面市;在EDA方面,公司是国内唯一的具有自主知识产权的EDA产品供应商,产品已经在全球销售,也为我国在EDA软件
[焦点新闻]
音频信号采集与AGC算法的DSP实现
  引言   电台等由于其自办频道的广告、新闻、广播剧、歌曲和转播节目等音频信号电平大小不一,导致节目播出时,音频信号忽大忽小,严重影响用户的收听效果。在转播时,由于传输距离等原因,在信号的输出端也存在信号大小不一的现象。过去,对大音频信号采用限幅方式,即对大信号进行限幅输出,小信号不予处理。这样,仍然存在音频信号过小时,用户自行调节音量,也会影响用户的收听效果。随着电子技术,计算机技术和通信技术的迅猛发展,数字信号处理技术已广泛地深入到人们生活等各个领域。其中语音处理是数字信号处理最活跃的研究方向之一,在IP电话和多媒体通信中得到广泛应用。语音处理可采用通用数字信号处理器DSP和现场可编程门阵列(FPGA) 实现,其中DSP实现
[嵌入式]
ARM 9平台下的CMOS图像传感器数据采集系统
引言 随着CMOS(互补金属氧化物半导体)技术的发展及市场需求的增加,CMOS图像传感器得以迅速发展。由于采用了CMOS技术,可以将像素阵列与外围支持电路(如图像传感器核心、单一时钟、所有的时序逻辑、可编程功能和A/D转换器)集成在同一块芯片上。与CCD(电容耦合器件)图像传感器相比,CMOS图像传感器将整个图像系统集成在一块芯片上,具有体积小、重量轻、功耗低、编程方便、易于控制等优点,因此,CMOS图像传感器的应用已经变得越来越广泛。 但是,目前市场上的大部分基于CMOS图像传感器的图像采集系统都是采用DSP与图像传感器相连,由DSP来控制图像传感器,然后由DSP采集到图像后再通过USB接口将图像数据传输到PC机进行后续的处
[应用]
集装箱装载问题的模拟退火遗传算法
摘要:将模拟退火的思想引入遗传算法中,将两者结合起来,探讨了模拟退火遗传算法在复杂集装箱装载中的应用,以此达到缩小搜索区域,增强算法的收敛性的目的。该算法充分发挥了遗传操作中交叉算子的作用,并通过实验仿真表明该算法优于传统的计算方法。 关键词:集装箱装载 模拟退火遗传算法 启发式算法 目前,物流业正处在快速发展的时期,集装箱运输将会有大幅度的增长。集装箱装载作为物流配送过程中的一个关键性环节,可提高配送业务的自动化水平、提高货物装载的优化程度、提高配送业务的工作效率和规范业务流程等。 从二十世纪70年代初正式开始,集装箱装载问题就引起了应用的研究和探讨。装箱问题就是将不同尺寸的物品摆放入有一定容易的容器中,以获得某种最佳的
[传感技术]
小广播
最新网络通信文章
换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved