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 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 17、面向连接的传输:TCP协议 -> 正文阅读

[网络协议]17、面向连接的传输:TCP协议

一、概述
1、点对点:一个是发送方,一个是接收方
2、使用可靠的、按顺序的字节流传输,但是传输的报文段发送方与接收方可能不一致,没有报文边界
3、管道化(流水线):TCP拥塞控制和流量控制设置窗口大小
4、
(1)全双工数据:在同一连接数据流双向流动
(2)MSS:最大报文段
(3)MTU:最大传输单元(以太网:150字节)
在传输的报文中,会根据MSS分为若干个报文段,也就是若干个MSS,然后加上应用层的TCP头部传输到传输层,加上IP的头部,大小刚好是MTU
5、面向连接:在数据交换之前,通过握手(交换控制报文)初始化发送方、接收方的状态变量
6、有流量控制:发送方不会淹没接收方,会根据传输链路以及接收方的最大传输带宽控制传输速率

二、TCP报文段结构
在这里插入图片描述
1、序号:报文段首字节在字节流中的编号
2、确认号:期望从另一方收到的下一字节的序号
3、累计确认
4、接收方如何处理乱序?报文段没有规定
5、例子
在这里插入图片描述
三、如何设置TCP的往返延时(RTT)和超时计时器?
1、每个报文段的往返时间都是不一样的,时间设置太短,太早就超时,会引起不必要的重传,时间太长,对报文段的反应太慢,消极。
所以引出SimpleRTT,SimpleRTT是测量从报文段发出到确认的时间,如果有重传,则忽略此次测量,然后对最近几次测量时间求平均
EstimatedRTT = (1-a)* EstimateedRTT + a * SampleRTT
a:平均值SampleRTT的贡献值
超时时间相差的越大,平均值也就越大
2、超时设置
EstimatedRTT + 安全边界时间
DevRTT = 1-
在这里插入图片描述

四、TCP的可靠数据传输
1、TCP是流水线协议,是GBK和SR的混合体

2、TCP是在IP不可靠服务的基础上建立了rdt,设置了管道化的报文段,即发送方一次可以发送一个或多个分组

3、为什么说TCP是是GBK和SR的混合体?
TCP建立了rdt,设置了管道化的报文段,超时定时器只设置了一个,且为累计确认(每次只传送一个),但是超时需要重传时,不需要将其他分组进行重传,只需要传输未确认的段

4、TCP简化版:忽略的重复的确认,忽略了流量控制和拥塞控制
(1)发送方:
a.只传送具有最小序号的未确认段,而不是全部重传
b.用nextsep创建报文段,序号nextsep为报文段首字节的字节流编号
c.定时器与最早未确认的报文段关联(过期间隔:TimeOutInterval)
d.超时:重传后沿最老的报文段,并且重启定时器
e.收到未确认的报文段的确认(ACK):更新已被确认的序号,若还有未被确认的报文段,则重启定时器
在这里插入图片描述
在这里插入图片描述

接收方是累计确认,而且返回ACK字节是给予期待,也就是返回的是接收方未收到的最前沿报文段
在这里插入图片描述

5、快速重传:发送方发送了报文段n后,返回ACKn+1,然后发送方发送了报文段n+1丢失了,丢失了之后同时又有其他报文段到接收方,而超时定时器还没开始倒计时,每段报文段都会返回ACKn+1,而发送方收到接收方的返回信息后,立刻传输了ACKn+1,而不是等到超时定时器触发超时重传,这种称为快速重传

五、TCP的流量控制
1、目的:防止发送方发送得太快,超过接收方的处理能力,太快以至于让接收方缓冲区溢出
2、如何控制:通过捎带,从数据的角度上,任何一方即是发送方又是接收方,接收方在收到报文段后需要返回ACK,然后又需要向发送方发送报文段,这时候将ACK及缓冲区大小附在报文段上告诉发送方,来做流量控制,这叫piggybacking技术
3、缓冲区剩余大小
在这里插入图片描述
RcvWindow = RcvBuffer-[LastByteRcvd-LastByteRead]

六、TCP连接管理
1、在正式交换数据之前,发送方和接收方 握手 建立通信关系;
2、需要握手几次?两次行不行?
(1)两次握手就意味着:
‘’’
A:嘿,准备好了吗
B:好了,来吧
‘’’
问题 : 这样子会造成什么?
a.虚假连接:假如A连接请求发送之后,B的同意连接信息没有丢失,但是已经造成超时,这时候A是不是会重新发一个请求,而在这个时候这个新的请求建立成功,在它们之间通信结束之后,这个超时的连接请求到达B,跟B请求连接,那B肯定会跟它建立连接,这时候就造成了 虚假连接
b.旧数据被当成新数据:与上面类似,在第一次连接建立的时候,B的同意连接,这个同意连接滞留在传输过程中,然后发送了新的连接,连接建立成功之后,双方开始通信,A发送了报文段滞留在传输过程中,然后造成超时,A再次发送,双方都没有出现问题,愉快的通信,最后愉快的结束了通信。但是还有滞留的连接呀,这时候滞留的连接终于到了B方,B方同意连接建立之后,滞留的报文段又到达,这时候旧的数据便被当成新数据接收了.

问题:需要几次握手?
答案:三次
在这里插入图片描述
问题:四次握手是什么?
答案:其实就是将三次握手拆为两次,应该说是本来就是两次,但是前面说过piggybacking技术,将回应与建立连接一起发送,那就是将上面三次握手:SYNbit=1,Seq=y,ACKbit=1,ACKnum=x+1分为:ACKbit=1,ACLnum=x+1和连接请求SYNbit=1,Seq=y。

七、关闭连接
1、客户端、服务器分别关闭它自己这一侧的连接,发送FIN bit = 1的TCP段 ,接收到用ACK回应,接到FIN,可以将自己的FIN同ACK一起发送
2、可以同时处理FIN交换
在这里插入图片描述
这是大概其的连接释放,TCP的连接释放并不完美

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-05-19 12:04:56  更:2022-05-19 12:05:21 
 
开发: 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年5日历 -2024/5/19 11:13:31-

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