IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> TCP协议简要说明 -> 正文阅读

[网络协议]TCP协议简要说明

博文内容提炼自《网络是怎样连接的》一书,个人认为这本书非常适合想要了解网络整体框架的同学,强烈推荐想要学习网络知识的小伙伴。

要理解TCP协议,那么理解头部信息的内容非常重要,理解了头部各字段的意义,就等于理解了通讯的整个过程。

重点理解四个字段:序号,ACK号,控制位,窗口

序号:发送方告知接收方该网络包所发送的数据相当于所有发送数据的第几个字节。

控制位:控制位一个重要用法,就是connect过程中的三次握手操作和四次挥手,TCP中经典的三次握手操作是通过控制位的BIT[SYNC]和BIT[ACK]来实现的。
SYN 设为 1 并告知初始序号这一操作仅在连接过程中出现,因此发送SYN 为 1 的网络包就表示发起连接的意思。

三次握手

三次握手完成后,即connect函数调用完成后,接下来就要进行数据收发操作。
应用程序调用write发送数据时,时间是先存放在发送缓冲区的,并不是立马发出,判断数据什么时候发送出去,主要由两个要素决定:
1、每个网络包所能容纳的数据长度,即MTU(以太网为1500),当应用程序收到的数据超过或接近MSS时,则发送,这样可以避免大量小包。
2、即使缓冲区的数据长度没有达到MSS,也应该果断发送出去,为此,协议栈内部实现了一个计时器,当满足一定时间后,则发送,这样可以
? ?避免发送延时。
3、应用程序在发送数据时,可以指定一个选项,比如指定“不等待填满缓冲区直接发送”,这样发送时刻交给用户控制。

单窗口时客户端与服务器发送接收报文流程,假设在连接阶段,确定的序号初始值为1,窗口大小也为1。

单窗口客户端与服务器报文交互流程

ACK回传等待时间不能太长也不能太短:
1、太短:当网络拥塞时,ACK的返回会变慢,如果ACK等待设计时间过短,会导致触发重传,导致网络里出现多余的报文,加剧网络拥塞。.
2、太长:如果报文丢失时,触发重传的实际被延后,导致网络速度变慢。
因此ACK等待时间设为为一个固定值是不合理的,因此,TCP采用了动态调整的方法来设置ACK等待时间。


在窗口为1的模式下,当客户端发送完一个报文后,其进入ACK等待期,在这一段时间内是不做操作的,这大大浪费了时间和资源。因此,TCP
一般采用滑动窗口的方式来管理数据发送和ACK号的回复操作。

所谓滑动窗口,就是在发送一个包之后,不等待ACK号返回,而是直接发送后续一系列的包,这样一来,等待ACK号的这段时间就被利用起来了。
但是这样引入了另外一个问题,当发送包的频率超过接收方处理能力的时候,接收端缓冲区会溢出,导致数据丢失。为了避免这样的情况,接收方
需要告知发送方自己最多还能接收多少数据,发送方通过这个数据控制自己对数据的发送,即接收方要实时更新窗口大小。

窗口更新时机

接收方不用没收到一个包就更新缓冲区,因为发送方在当前的窗口大小下,根据已经发送了多少个报文,是能够计算到当前窗口
的剩余长度的。当接收方的接收数据能力改变的时候,即接收方缓冲区的数据被应用程序取走的时候,接收方更新缓冲区。

四次挥手?

客户端或服务器完成数据发送后,会调用close接口发起断开连接。close内部采用即四次挥手实现,四次挥手使用控制位的BIT[FIN]和ACK号实现。

客户端和服务器通讯的完整过程

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-01-01 14:20:18  更:2022-01-01 14:20:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/6 13:13:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码