待补充完善

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. 代码审计-EasyCMS

    cms来源AWD线下攻防平台题目.  链接:https://pan.baidu.com/s/1eUkyRspQmsv-0fIBby8ZlQ  提取码:tywa 失效可以联系我   0x01 文件上传漏 ...

  2. JS中的事件委托/事件代理详解

    起因: 1.这是前端面试的经典题型,要去找工作的小伙伴看看还是有帮助的: 2.其实我一直都没弄明白,写这个一是为了备忘,二是给其他的知其然不知其所以然的小伙伴们以参考: 概述: 那什么叫事件委托呢?它 ...

  3. CF401D Roman and Numbers 状压DP

    CF401D 题意翻译 将n(n<=10^18)的各位数字重新排列(不允许有前导零) 求 可以构造几个mod m等于0的数字 题目描述 Roman is a young mathematicia ...

  4. Vue系列---源码调试(二)

    我们要对Vue源码进行分析,首先我们需要能够对vue源码进行调式(这里的源码调式是ES6版本的,不是打包后的代码),因此首先我们要去官方github上克隆一份vue项目下来,如下具体操作: 1. cl ...

  5. LeetCode108——Convert Sorted Array to Binary Search Tree

    题目: Given an array where elements are sorted in ascending order, convert it to a height balanced BST ...

  6. 玩转OneNET物联网平台之MQTT服务⑦ —— 远程控制LED(数量无限制)+ Android App控制 优化第一版

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  7. 基于SEER的区块链版赛亚麻将游戏Pre alpha版本内测啦!

    游戏基于SEER测试网络文体平台模块(Culture and Sports Platform,CSP),正在进行数据调试等工作,大家可以尝鲜体验. 此游戏账户和资金等核心系统完全基于区块链,但目前运行 ...

  8. Java自动化测试框架-06 - 来给你的测试报告化个妆整个形 - (下)(详细教程)

    简介 经过上一次的化妆和整形,有客户提出需求能不能将那个普通会员的套餐再升级一下,再漂亮一点.所以这次咱们就来看看从哪里下刀可以使它变得再漂亮一点点. 上一篇文章修改了一些基本的ReportNG信息, ...

  9. 用Unity做游戏,你需要深入了解一下IL2CPP

    这次我们翻译了一篇Unity官方博客上的文章,原文题目为AN INTRODUCTION TO IL2CPP INTERNALS ,作者是从事Unity软件开发的Joshua Peterson.文章的看 ...

  10. Docker应用部署

    MySQL: #拉取mysql镜像 docker pull centos/mysql--centos7 #创建容器 #-p 端口映射 -e添加环境变量MYSQL_ROOT_PASSWORD 是root ...