待补充完善

TCP 相关基本点

1、面向连接

两个不同主机上的进程在通过 TCP 进行通信之前,必须先通过三次握手来建立 TCP 连接

2、全双工服务

即,如果一台主机上的进程 A 与另一台主机上的进程 B 存在一条 TCP 连接,那么应用层数据就可以从进程 B 流向进程 A 的同时,也从进程 A 流向进程 B。

3、TCP 连接提供的是“点对点”的服务

即一对一的服务,不可能一对多、多对一或者多对多

什么是流量控制?为什么要进行流量控制?
后一个问题可以转化为:如果不进行流量控制,任其自然发展会怎么样
由于 TCP 是全双工的,所以一条 TCP 连接每一侧主机都为该连接设置了接收缓存。当该 TCP 连接接收到正确、按序的字节后,它就将数据放入接收缓存。相关联的应用进程会从该缓存中读取数据,但是不必数据刚一到达就立即读取。事实上,接收方应用也许正忙于其他任务,甚至要过很长时间后才去去读该数据。如果某应用程序读取数据时相对缓慢,而发送方送得太多、太快,发送的数据就会很容易地使该连接的接收缓存溢出。
由于现实中就是按这样运作的,所以如果不对发送方就行遏制,就会导致接收缓存溢出,从而导致数据丢失(或因数据丢失而造成的频繁重传)
而由于防止接收缓存溢出这个原因而遏制发送方的行为称为流量控制。
 
怎么进行流量控制,即,流量控制方法有哪些?
首先,当 TCP 连接建立起来之后,该连接的两方主机都会给该连接分配一个接收缓存(由于 TCP 是全双工的,所以每一方都会作为接收方),且都会维护一个接收窗口,该接收窗口的长度(当前没有被使用的长度)等于接收缓存的长度(总长度)减去已接收到但是还没有被应用进程读取的那部分数据的长度(正在被使用的长度)
每次发送数据给发送方时,都将接收窗口的长度捎带过去,发送方控制已发送但未确认的数据的长度不超过接收方接收窗口的长度,就做到了流量控制。
 
什么是拥塞控制?为什么要进行拥塞控制?
如果不进行拥塞控制,链路上的拥塞会逐步加重,直至链路瘫痪
为了防止链路过于拥塞,而遏制发送方发送速率的行为就是拥塞控制
 
怎么进行拥塞控制,即,拥塞控制方法有哪些?
拥塞控制方法有两种:
1、网络辅助的拥塞控制
在这种方法中,网络层构件(即路由器)会向发送方提供关于网络中拥塞状态的显式反馈信息,能够让发送方知道目前输出链路上支持的传输速率。
2、端到端拥塞控制
当网络层不提供显式支持(即不直接向发送方提供拥塞信息)时,端系统必须通过对网络行为的观察(比如分组丢失与时延)来推断拥塞情况。
 
流量控制与拥塞控制的区别?
流量控制和拥塞控制都是遏制发送方的发送速率
但是,这两类控制的目的不同
流量控制是为了防止接受缓存溢出,接收缓存溢出会导致数据丢失
拥塞控制是为了防止链路上的拥塞,当出现轻度拥塞时,如果不进行拥塞控制的话,拥塞程度很快会变成重度,然后一发不可收拾
 
TCP 的三次握手和四次挥手?
1、三次握手
如下图:

可参考我之前写的对于 TCP 三次握手的理解:

https://www.cnblogs.com/stone94/p/10185316.html

2、四次挥手
 如下图:

3、为什么连接的时候是三次握手,到了关闭的时候,是四次挥手?

因为对于连接建立来说,当发送方向接收方发送连接请求时,接收方能够立刻返回信息,并立即准备建立连接

而当接收方接到发送方的关闭连接时,只能说明发送方肯定不再需要发送数据了,但接收方说不定还需要发送一些数据给发送方,但是这些数据也许还在处理,不能立即返回

这时,接收方先返回一个 ACK 给发送方,表示你发过来的关闭连接的请求我收到了,但是我还有些其他数据要发给你,等我把这些数据发送完了,我会给你发一个关闭请求的。

于是当接收方发送完其他数据时,他给发送方发送了关闭请求,然后发送方回应他,最后连接彻底关闭

其实四次挥手的机制有点像异步回调
应用层和运输层都是在网络边缘(端系统中),而网络层和链路层都在网络核心

《计算机网络 自顶向下方法》 第3章 运输层 Part2的更多相关文章

  1. 计算机网络自顶向下方法第2章-应用层(application-layer).1

    2.1 应用层协议原理 2.1.1网络应用程序体系结构 1)在客户-服务器体系结构 (client-server architecture)中,有一个总是打开的主机称为服务器,它服务于来自许多其他称为 ...

  2. 计算机网络自顶向下方法第3章-传输层 (Transport Layer).1

    3.1 概述和运输层服务 运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信(logic communication)功能. 3.1.1 运输层和网络层的关系 网络层提供了主机之间的逻辑通信,而 ...

  3. 计算机网络自顶向下方法第4章 网络层:数据平面 (Network layer)

    4.1 网络层概述  网络层主要功能为转发(将数据从路由器输入接口转移到合适的输出接口)和路由选择(端到端的路径选择),每台路由器都有一张转发表,用最长前缀匹配规则来转发. 4.1.1 转发和路由选择 ...

  4. 计算机网络自顶向下方法第2章-应用层(application-layer).2

    2.4 DNS:因特网的目录服务 2.4.1 DNS提供的服务 DNS的定义 实体层面看,DNS是一个由分层的DNS服务器实现的分布式数据库 协议层面看,DNS是一个使得主机能够查询分布式数据库的应用 ...

  5. 计算机网络自顶向下方法第3章-传输层 (Transport Layer).2

    3.5 面向连接的运输: TCP 3.5.1 TCP连接 TCP是因特网运输层的面向连接的可靠的运输协议. TCP连接提供全双工服务(full-duplex service). TCP连接是点对点的连 ...

  6. 《计算机网络 自顶向下方法》 第2章 应用层 Part1

    常见的应用层协议有哪些?  HTTP(HyperText Transfer  Protocol):超文本传输协议 FTP(File Transfer Protocol):文件传输协议 SMTP(Sim ...

  7. 《计算机网络 自顶向下方法》 第3章 运输层 Part1

    由于个人精力和智商有限,又喜欢想太多.钻牛角尖,导致学习系统性知识很痛苦,尝试改变学习方式,慢慢摸索 现在看到 rdt2.0,又有点看不下去 现在的想法: 要有个目标,且有截止时间(作业模式.考试模式 ...

  8. 《计算机网络 自顶向下方法》 第8章 计算机网络中的安全 Part2

    SSL(使 TCP 连接安全) SSL(Secure Socket Layer),即安全套接字层,是对 TCP 的强化 HTTPS 使用 SSL,而 HTTP 不使用 SSL 通过采用机密性.数据完整 ...

  9. 《计算机网络 自顶向下方法》 第6章 链路层和局域网 Part2

    待补充完善 Web 页面的请求历程 应用层     报文.主机 运输层     报文段. 网络层     数据报.路由器.IP 地址 链路层     以太网帧.交换机.MAC 地址 步骤 1)到 4) ...

随机推荐

  1. Spring Cloud Gateway的动态路由怎样做?集成Nacos实现很简单

    一.说明 网关的核心概念就是路由配置和路由规则,而作为所有请求流量的入口,在实际生产环境中为了保证高可靠和高可用,是尽量要避免重启的,所以实现动态路由是非常有必要的:本文主要介绍 Spring Clo ...

  2. Flask中的数据连接池

    pymsql链接数据库 import pymysql conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd=' ...

  3. JavaScript 编译器-Babel

    Babel是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行.这意味着,你可以现在就用ES6.ES7编写程序,而不用担心现有环境是否支持. 一.全局安装babel工具 在保证n ...

  4. POJ2828 Buy Tickets 树状数组

    Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must get ...

  5. opencv::Mat属性

    OpenCV支持JPG.PNG.TIFF等常见格式图像文件加载 加载图像 Mat imread( const String& filename, int flags = IMREAD_COLO ...

  6. 把图片在word中显示

    如下: //放入word中 #region word ThreadPool.QueueUserWorkItem(//使用线程池 (P_temp) =>//使用lambda表达式 { G_wa = ...

  7. HashMap - 类注释

    了解到Java8以后HashMap的实现换了,也看了很多博客一直在向我这个小菜鸡说HashMap的重要.因此我决定洗心革面,好好正视HashMap 基于jdk 8 先从类注释开始入手学习,顺便提高提高 ...

  8. 斯坦福机器学习课程 Exercise 习题四

    Exercise 4: Logistic Regression and Newton’s Method 回顾一下线性回归 hθ(x)=θTx Logistic Regression hθ(x)=11+ ...

  9. 设计模式(八)Abstract Factory模式

    抽象工厂的工作是将“抽象零件”组装为“抽象产品”.在抽象工厂模式中将会出现抽象工厂,它会将抽象零件组装为抽象产品.也就是说,我们并不关心零件的具体实现,而是只关心接口.我们仅适用该接口将零件组装起来成 ...

  10. Unity事件系统

    # 1.前言Unity中事件/委托有着广泛的应用,本文通过封装一个简易的事件的系统,来统一管理消息的传递.此功能在简易应用或者事件较少的体现不出太好的作用,但是对于事件应用较多时,可以减少脚本之间的耦 ...