1 / 45

TCP Understandings

TCP Understandings. 主讲:孟宁 电话:0512-68839302 E-mail:mengning@ustc.edu.cn 主页:http://staff.ustc.edu.cn/~mengning 地址:苏州工业园区独墅湖高等教育区仁爱路166号明德楼A302室. 2010年12月. TCP Understandings. 字节流与序号 Port Numbers Concurrent Servers TCP的交互数据流 Nagle算法 TCP的成块数据流 滑动窗口协议,慢启动,拥塞控制. TCP Basis. 传输层的责任:

galen
Download Presentation

TCP Understandings

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. TCP Understandings 主讲:孟宁 电话:0512-68839302 E-mail:mengning@ustc.edu.cn 主页:http://staff.ustc.edu.cn/~mengning 地址:苏州工业园区独墅湖高等教育区仁爱路166号明德楼A302室 2010年12月

  2. TCP Understandings • 字节流与序号 • Port Numbers • Concurrent Servers • TCP的交互数据流 • Nagle算法 • TCP的成块数据流 • 滑动窗口协议,慢启动,拥塞控制

  3. TCP Basis • 传输层的责任: • 创建进程到进程的通信 • 提供传输层控制机制(流量控制、差错控制、分组确认等) • 为进程提供连接机制 • TCP • 通过使用端口号来完成进程到进程的通信 • 使用滑动窗口协议完成流量控制 • 使用确认分组、超时和重传来完成差错控制 • TCP 是面向连接的、可靠的传输协议 • TCP是专门设计用于在不可靠的Internet上提供可靠的、端到端的字节流通信的协议。

  4. Stream Delivery Service • TCP是专门设计用于提供可靠的、端到端的字节流通信的协议,它使得进程与进程之间好像如同由“管道”连接一般。 • 发送方TCP实体将应用程序的输出流分为不超过64k字节(实际通常为1500字节)的数据片段(piece),并将每个数据片段封装在一个IP分组中发送出去。 • 接收方TCP实体根据字节序号(32位)将接收到的各个数据片段组装成连续的字节流交给应用程序。

  5. buffers of a TCP socket

  6. 白色:表示空位置 灰色:已发送但还没确认字节 白色:表示空位置 红色:将要发送的字节 红色:接收到的字节 Sending and receiving buffers

  7. TCP segments 报文段:若干个字节构成的TCP分组,报文段的长度不尽相同,大约是几百字节~几千字节。

  8. 字节编号与序号 • 字节号:TCP对所有发送的字节都编了号。 • 起始字节号:第一个字节的编号,在0~232-1之间随机产生的一个数。 • 序号:TCP 给每个报文指派一个序号,该序号就是该报文段中的第一个字节数据的字节号。 • 确认号:TCP通信中的一方期望接收的下一个字节的编号。(确认号是累计的)

  9. TCP segmentsExample Suppose a TCP connection is transferring a file of 5000 bytes. The first byte is numbered 10001. What are the sequence numbers for each segment if data is sent in five segments, each carrying 1000 bytes? SolutionThe following shows the sequence number for each segment: Segment 1➡ Sequence Number: 10,001 (range: 10,001 to 11,000) Segment 2➡ Sequence Number: 11,001 (range: 11,001 to 12,000) Segment 3➡ Sequence Number: 12,001 (range: 12,001 to 13,000) Segment 4➡ Sequence Number: 13,001 (range: 13,001 to 14,000) Segment 5➡ Sequence Number: 14,001 (range: 14,001 to 15,000)

  10. Port Numbers 50000

  11. Well-known ports used by TCP

  12. Concurrent Servers • 使用一个四元组来标识一个连接: • (本机IP:端口号,对端IP:端口号)

  13. TCP的交互数据流 • 按分组数量计算,一半的TCP报文段包含块数据,一半则包含交互数据 • 按字节计算,则成块数据与交互数据的比例约为90%和10% • 显然TCP需要处理这两类数据,但是处理算法则有所不同 • 经受时延的确认和Nagle算法

  14. 经受时延的确认 • 通常TCP在接收到数据时并不立即发送ACK,而是推迟发送,以便将ACK与需要沿改方向发送的数据一起发送。也称为“数据捎带ACK”。 • 绝大多数实现采用时延200ms • 检测超时使用500ms的定时器

  15. Nagle算法[RFC896] • 交互数据产生的小分组在广域网上会增加拥塞的可能性。 • Nagle算法要求一个TCP连接最多只能有一个未被确认的小分组,在该分组的确认到达之前不能发送其他的小分组。同时TCP收集这些小分组,并在确认到来时以一个分组的方式发送出去。 • 自适应性:确认到达的越快,数据也就发送得越快。

  16. 关闭Nagle算法 • 对时延要求高的应用有时需要关闭Nagle算法,比如X窗口系统服务器,鼠标移动必须无时延发送。 • Socket API用户可以使用TCP_NODELAY选项来关闭Nagle算法。

  17. 停止等待协议 • 数据发送方在发送下一个数据块之前需要等待接收已发送数据的确认。 • 发送方必须每发送一个分组就停下来等待确认。 • TFTP协议即使用这种方法传送数据。

  18. 滑动窗口协议 • 滑动窗口覆盖缓存的一部分,这部分(即窗口)就是主机可以发送而不必考虑从另一个主机发来的确认。当发送出的数据得到确认时,这个窗口便在缓存上滑动。 • TCP的滑动窗口是面向字节的。

  19. Example

  20. 窗口大小 • 接收缓存的大小是该连接上所能够通告的最大窗口大小 • 发送和接收缓冲区的大小 • 4.2BSD是2K • 4.3BSD是4K • 8K • 16K

  21. 慢启动slow start • 在发送方与接收方之间存在多个路由器和速率较慢的链路时,一些路由器缓存分组过多可能导致耗尽存储空间。 • 因而TCP需要一种算法来使新分组进入网络的速率与另一端返回确认的速率相同。 • 慢启动slow start算法为发送方增加另一个窗口-- 拥塞窗口(congestion window,cwnd)

  22. 慢启动slow start算法 • 拥塞窗口初始化为1个报文(cwnd以字节为单位,但慢启动以报文段大小为单位增加) • 发送方取minimum(cwnd,rwnd)为发送上限 • 发送方发送一个报文然后等待ACK,收到ACK则拥塞窗口从1变为2,即可发送2个报文,收到2个ACK,拥塞窗口就增加为4,这是一种指数增加关系。

  23. 拥塞控制 • 由于当前网络传输介质的可靠性越来越高,所以TCP假定超时(丢失报文)就是网络拥塞造成的,可根据超时来判断是否发生拥塞。 • 网络和接收方的容量是造成拥塞的两个潜在问题,发送方必须维持两个窗口:接收方承认的窗口和拥塞窗口,发送的有效窗口是这两个窗口中较小的一个。

  24. 拥塞控制算法 • Internet的拥塞控制算法:初始设置门限(临界)值(threshold)为64kB,若发生超时,将临界值设为当前拥塞窗口的1/2,并将拥塞窗口恢复为最大段长度,执行慢启动算法,直至拥塞窗口达到临界值,此后要求拥塞窗口按线性增加(每次只增加一个最大段长度),直至最终达到接收窗口大小或发生超时;若超时再将临界值设为当前拥塞窗口的1/2,重复上述过程。

  25. 慢启动与拥塞避免

  26. 快速重传与快速恢复

  27. TCP congestion policy

  28. TCP 软件包

  29. 传输控制块TCBs

  30. 虚线:服务器端 实线:客户机端 红线:非正常情况 MSL:30s~120s

  31. 主模块 接收:TCP报文段、或来自应用程序的报文、或超时事件 • 查找TCB表。 • 若(相应的TCB未找到) • 创建TCB项目,并设定它的状态为CLOSED • 找到相应的TCB表项的状态。

  32. Case(状态) • CLOSED: • LISTEN: • SYN-SENT: • SYN-RCVD: • ESTABLISHED: • FIN-WAIT-1: • FIN-WAIT-2: • CLOSING: • TIME-WAIT: • CLOSE-WAIT: • LAST-ACK:

  33. CLOSED: • 若(收到来自应用程序的“被动打开”报文) • 把状态改为LISTEN。 • 若(收到来自应用程序的“主动打开”报文) • 发送SYN报文段。 • 把状态改变为SYN-SENT。 • 若(收到任何报文段) • 发送RST报文。 • 若(收到任何其他报文段) • 发出差错报文。 • 返回

  34. LISTEN: • 若(收到来自应用程序的“发送数据”报文) • 发送SYN报文段。 • 把状态改变为SYN-SENT。 • 若(收到SYN报文段) • 发送SYN+ACK报文段。 • 把状态改变为SYN-RCVD。 • 若(收到任何其他报文段或报文) • 发出差错报文。 • 返回。

  35. SYN-SENT: • 若(超时) • 把状态改变为CLOSED。 • 若(收到SYN报文段) • 发送SYN+ACK报文段。 • 把状态改变为SYN-RCVD。 • 若(收到SYN+ACK报文段) • 发送ACK报文段。 • 把状态改变为ESTABLISHED。 • 若(收到任何其他报文段或报文) • 发出差错报文。 • 返回

  36. SYN-RCVD: • 若(收到SYN报文段) • 把状态改变为ESTABLISHED。 • 若(超时) • 发送RST报文段。 • 把状态改变为CLOSED。 • 若(收到来自应用程序的“关闭”报文) • 发送FIN报文段。 • 把状态改变为FIN-WAIT-1。 • 若(收到RST报文段) • 把状态改变为LISTEN。 • 若(收到任何其他报文段或报文) • 发出差错报文。 • 返回。

  37. ESTABLISHED: • 若(收到FIN报文段) • 发送ACK报文段。 • 把状态改变为CLOSE-WAIT • 若(收到来自应用程序的“关闭”报文) • 发送FIN报文段。 • 把状态改变为FIN-WAIT-1。 • 若(收到RST或SYN报文段) • 发出差错报文。 • 若(收到数据或ACK报文段) • 调用输入模块。 • 若(收到来自应用程序的“发送数据”报文) • 调用输出模块。 • 返回。

  38. FIN-WAIT-1: • 若(收到FIN报文段) • 发送ACK报文段。 • 把状态改变为CLOSING。 • 若(收到FIN+ACK报文段) • 发送ACK报文段。 • 把状态改变为TIME-WAIT。 • 若(收到ACK报文段) • 把状态改变为FIN-WAIT-2。 • 若(收到任何其他报文段或报文) • 发出差错报文。 • 返回。

  39. FIN-WAIT-2: • 若(收到FIN报文段) • 发送ACK报文段。 • 把状态改变为TIME-WAIT。 • 返回

  40. CLOSING: • 若(收到ACK报文段) • 把状态改变为TIME-WAIT。 • 若(收到任何其他报文段或报文) • 发出差错报文。 • 返回

  41. TIME-WAIT: • 若(超时) • 把状态改变为CLOSED。 • 若(收到其他任何报文或报文段) • 发出差错报文。 • 返回。

  42. CLOSE-WAIT: • 若(收到来自应用程序的“关闭”报文) • 发送FIN报文段。 • 把状态改变为LAST-ACK。 • 若(收到任何其他报文或报文段) • 发出差错报文。 • 返回。

  43. 输入模块 • 处理数据 • 发送ACK • 接收窗口大小的声明 • checksum验证

  44. 输出模块 • 发送数据 • 超时重发数据重传计时器:处理重传时间,即对确认报文的等待时间。 • 坚持计时器:处理0接收窗口的等待时间。

  45. 谢谢大家!

More Related