Skip to content

Instantly share code, notes, and snippets.

@coderplay
Last active August 7, 2018 03:05
Show Gist options
  • Save coderplay/a01e0cb41313d36d73f0 to your computer and use it in GitHub Desktop.
Save coderplay/a01e0cb41313d36d73f0 to your computer and use it in GitHub Desktop.
TCP/IP Guide 读书笔记

TCP/IP传输层协议

此次花了三天时间读了 PART II-8 TCP/IP transport layer protocols 从第42章至第49章, 收获很大. 明白了以下一些问题:

  • 为什么需要tcp? 同时又需要udp?
  • tcp/udp端口的意义
  • tcp 和 udp端口的区别, 是否可以在一个终端上同时使用相同的tcp端口和udp端口
  • tcp端口范围,为什么要保留一些端口
  • udp格式及为什么要这么设计udp格式
  • tcp的主要功能
  • MSS和MTU的区别及联系
  • (重点)滑动窗口的意义及实现
  • (重点)tcp建立连接及断开连接的状态机
  • 为什么建立连接能用三次握手,而断开连接需要四次消息
  • sequence number的含义, ISN是怎么选
  • tcp server和client之间怎么交换参数
  • tcp格式及为什么要这么设计tcp格式
  • (重点)tcp重传机制
  • (重点)tcp怎么处理拥塞

作者对tcp/ip的历史了如指掌, 如数家珍。对比与其它填鸭式的教材,这本书不仅讲了怎么做,而且讲了为什么这么做,这么做背后的动机和故事。由于知识点太多, 怕日后忘记,所以在此记下来。以后脑子里可以形成一个轮廓。

42 Overview and Comparison of TCP and UDP

L3层主要是IP协议. IP协议有一些重大的限制: connectionless, unreliable, unacknowledged. 数据通过ip层发送到internet,如果不建立连接,虽然消息经常是可以至达正确目的地, 但是谁也没办法保证一定可以到达。而且发送者根本无从知道数据是否到达. 这对于上层的应用来说非常致命。每个应用程序都得自己来应付数据丢失,网络拥塞等现象, 这是一个浩大又重复的努力。 所以设计者在想, 为什么建立一个协议统一解决这些问题? 然而又有人问: 既然IP层有这么多问题, 为什么不是直接把这些问题在IP层就给解决了, 使IP层变得更为强大? 事实上, 以前只有一个TCP协议,没有啥IP协议. 以前建立连接、提供可靠传输、处理重发、缓存和数据流控这些东西真的做到一起了. 但是建立连接、提供可靠传输、处理重发、缓存和数据流控耗费时间和带宽,有些应用只需要速度快, 不关心数据丢失。所以解决方案是,在下面由IP层提供基本的internet数据传输功能, 上面L4层定义两套协议. 一套提供完全的功能,另一套只管速度。这就是TCP和UDP的来由.

Transmission Control Protocol (TCP ) 为上层应用提供全功能, 面向连接,可靠的协议。使得同一台机由的应用程序可以同时建立多个虚拟的连接, 在连接之后可以双工传递数据。

User Datagram Protocol (UDP ) UDP也是像TCP一样处于传输层的协议, 但UDP更像是一个给应用层提供访问IP层的wrapper协议。它不建立连接,传输不可靠, 数据可能丢失. 它只传输数据, 最大化通信的速度.

需要注意的是, 虽然经常说TCP比UDP慢. 但是TCP还是设计非常好, 实现非常高效的协议。它只在建立连接和管理连接相对于UDP有一些消耗, 但两者的速度差不是很明显.

43 TCP and UDP Addressing: Ports and Sockets

portsmultiplexing

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment