待补充完善

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. PHP代码审计基础-初级篇

    对于php代码审计我也是从0开始学的,对学习过程进行整理输出沉淀如有不足欢迎提出共勉.对学习能力有较高要求,整个系列主要是在工作中快速精通php代码审计,整个学习周期5天 ,建议花一天时间熟悉php语 ...

  2. 关于Linux中的 localhost 默认地址简单介绍

    大家都知道localhost指的是本机的IP地址:127.0.0.1 用于回路测试,那能不能修改localhost呢,答案肯定是可以的 打开终端--->输入: vim /etc/host  然后 ...

  3. HDFS概述(一)

    HDFS概述(一) 1. HDFS产出的背景及定义 1.1 HDFS产生的背景 随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需 ...

  4. Spring 框架基础(04):AOP切面编程概念,几种实现方式演示

    本文源码:GitHub·点这里 || GitEE·点这里 一.AOP基础简介 1.切面编程简介 AOP全称:Aspect Oriented Programming,面向切面编程.通过预编译方式和运行期 ...

  5. 百万年薪python之路 -- JS的BOM与DOM对象

    BOM对象 location对象 location.href 获取URL location.href="URL" // 跳转到指定页面 location.reload() 重新加载 ...

  6. 百万年薪python之路 -- 小数据池和代码块

    1.小数据池和代码块 # 小数据池 -- 缓存机制(驻留机制) # == 判断两边内容是否相等 # a = 10 # b = 10 # print(a == b) # is 是 # a = 10 # ...

  7. 【Bug】解决 java.sql.SQLSyntaxErrorException 异常

    java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax 错误 错误详情: Caused by: java.sql. ...

  8. abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理六(二十四)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...

  9. 面试又被 Java 基础难住了?推荐你看看这篇文章。

    本文已经收录自 JavaGuide (59k+ Star):[Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识. 1. 面向对象和面向过程的区别 面向过程 :面向过程性能比面 ...

  10. Kerberos kinit crontab定时任务不生效的问题解决

    问题 有这样一个定时任务 1 */12 * * * kinit -kt xxxxxx.keytab principle 这样写每天 12点,执行一次. 但是服务器的应用程序报错: GSS initia ...