网络编程入门从未如此简单(二):假如你来设计TCP协议,会怎么做?


本文原题“你管这破玩意儿叫TCP?”,由闪客sun分享,转载请联系作者。

网络编程懒人入门》、《脑残式网络编程入门》两个系列,但通俗又不失内涵,简洁又不简陋,非常适合对计算机网络知识有向往但又有惧怕的网络编程爱好者们阅读,希望能给你带来不一样的网络知识入门视角。

本篇将运用通俗易懂的语言,配上细致精确的图片动画,循序渐进地引导你理解TCP协议的主要特性和技术原理,让TCP协议的学习不再如此枯燥和生涩,非常适合入门者阅读。

本文已同步发布于“即时通讯技术圈”公众号,欢迎关注。公众号上的链接是:点此进入。

网络编程入门从未如此简单(一):假如你来设计网络,会怎么做?》
  • 《网络编程入门从未如此简单(二):假如你来设计TCP协议,会怎么做?》(本文)
  • 本文主要涉及计算机网络的传输层,希望让TCP协议的学习不再枯燥和生涩。

    假如你来设计网络,会怎么做?》的一番折腾,只要你知道另一位伙伴 B 的 IP 地址,且你们之间的网络是通的,无论多远,你都可以将一个数据包发送给你的伙伴 B。

    网络编程入门从未如此简单(二):假如你来设计TCP协议,会怎么做?_1-2.png

    上篇中分享的这就是物理层、数据链路层、网络层这三层所做的事情。

    站在第四层的你,就可以不要脸地利用下三层所做的铺垫,随心所欲地发送数据,而不必担心找不到对方了。

    网络编程入门从未如此简单(二):假如你来设计TCP协议,会怎么做?_1-3.gif

    虽然你此时还什么都没干,但你还是给自己这一层起了个响亮的名字,叫做传输层。

    你本以为自己所在的第四层万事大吉,啥事没有,但很快问题就接踵而至。

    UDP协议!

    当然 UDP 协议中不光有源端口和目标端口,还有数据包长度和校验值,我们暂且略过。

    就这样,你用 UDP 协议无忧无虑地同 B 进行着通信,一直没发生什么问题。

    网络编程入门从未如此简单(二):假如你来设计TCP协议,会怎么做?_2-4.gif

    但很快,你发现事情变得非常复杂 ... ...

    [通俗易懂]深入理解TCP协议(下):RTT、滑动窗口、拥塞处理》)。

    假如拥塞窗口的大小为  cwnd,上一部分流量控制的滑动窗口的大小为 rwnd,那么窗口的右边界受这两个值共同的影响,需要取它俩的最小值。

    窗口大小 = min(cwnd, rwnd)

    含义很容易理解:当 B 的接受能力比较差时,即使网络非常通畅,A 也需要根据 B 的接收能力限制自己的发送窗口。当网络环境比较差时,即使 B 有很强的接收能力,A 也要根据网络的拥塞情况来限制自己的发送窗口。正所谓受其短板的影响嘛~

    TCP/IP详解 - 第17章·TCP:传输控制协议》(* 推荐)
  • 《TCP/IP详解 - 第18章·TCP连接的建立与终止》
  • 《TCP/IP详解 - 第21章·TCP的超时与重传》
  • 《通俗易懂-深入理解TCP协议(上):理论基础》(* 推荐)
  • 《通俗易懂-深入理解TCP协议(下):RTT、滑动窗口、拥塞处理》
  • 《理论经典:TCP协议的3次握手与4次挥手过程详解》
  • 《理论联系实际:Wireshark抓包分析TCP 3次握手、4次挥手过程》
  • 《网络编程懒人入门(一):快速理解网络通信协议(上篇)》
  • 《网络编程懒人入门(二):快速理解网络通信协议(下篇)》(* 推荐)
  • 《网络编程懒人入门(三):快速理解TCP协议一篇就够》(* 推荐)
  • 《脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手》
  • 本文已同步发布于“即时通讯技术圈”公众号。

    ▲ 本文在公众号上的链接是:点此进入。同步发布链接是:http://www.52im.net/thread-3339-1-1.html