您当前的位置:首页 > 电脑百科 > 网络技术 > 网络知识

说起来 TCP 的连接与释放真是个浪漫的故事呢!

时间:2020-06-11 11:11:21  来源:  作者:
说起来 TCP 的连接与释放真是个浪漫的故事呢!| 原力计划

作者 | JunSIr_deCp

责编 | 王晓曼

来源 | CSDN博客

说起来 TCP 的连接与释放真是个浪漫的故事呢!| 原力计划

TCP/IP协议概述

在TCP/IP协议栈,传输层有两个协议TCP和UDP:

  • TCP(Transmission Control Protocol,传输控制协议)协议:负责将要传输的文件分段 进行传输,一般用于建立会话 ,其基本特性是可靠传输 、流量控制,所谓三握手、四挥手也是基于TCP协议的;

  • UDP(User Data Protocol,用户数据报协议)协议:一个数据包就能够完成数据通信,数据包不分段 ,不需要建立会话 ,不需要流量控制 ,属于不可靠传输 , 屏幕广播 、多播 、广播都是基于UDP协议。

以上定义,下面来详讲:

说起来 TCP 的连接与释放真是个浪漫的故事呢!| 原力计划说起来 TCP 的连接与释放真是个浪漫的故事呢!| 原力计划

传输层协议的作用体现在应用层协议

TCP和UDP协议内指定不同的端口即可对应一个应用层的协议。

端口代表主机服务的侦听"门牌号",不管是TCP还是UDP,带上门牌号,它就能帮你找到主机上的对应服务。

例如我们在浏览器访问某个网站地址,这个动作会被我们本机上的80端口侦听到,并处理你的网络请求。

我们主机上常见的应用层协议端口:

  • HTTP默认使用TCP的80端口标识;
  • FTP默认使用TCP的21端口标识;

  • SMTP默认使用TCP的25端口标识;

  • POP3默认使用TCP的110端口;

  • HTTPS默认使用TCP的443端口;

  • DNS使用UDP的53端口;

  • 远程桌面协议(RDP)默认使用TCP的3389端口;

  • Telnet 使用 TCP 的23端口 windows 访问共享资源使用TCP的445端口;

但是我们通过TCP/UDP封装的数据包,通过本机侦听服务发送到目标主机,目标主机是如何识别并处理的呢?

说起来 TCP 的连接与释放真是个浪漫的故事呢!| 原力计划

如上图,我们会在数据包中添加目标端口号,这样目标主机相关服务侦听到,就能处理我们的请求了。

说起来 TCP 的连接与释放真是个浪漫的故事呢!| 原力计划

TCP/UDP传输层协议与网络层协议的区别

  • 网络层实现如何把数据包从这个地址(服务器)发送到另一个地址(服务器);

  • 传输层实现如何让这个应用程序找到对应计算机的应用程序,即服务。

说起来 TCP 的连接与释放真是个浪漫的故事呢!| 原力计划

说白了,IP协议主要让数据能知道传到哪去,不管对应目标谁来负责接待,而TCP/UDP管。

越靠近顶层应用层、功能越强大。

说起来 TCP 的连接与释放真是个浪漫的故事呢!| 原力计划

UDP协议

主要特点:

  • UDP 是面向无连接的,即发送数据之前不需要建立连接,如向DNS服务器申请域名解析服务;

  • UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制;

  • UDP 是面向报文的。UDP 没有拥塞控制,很适合多媒体通信的要求;

  • UDP 支持一对一、一对多、多对一和多对多的交互通信,这也是,应用场景如广播、组播;

  • UDP 的首部开销小,只有 8 个字节。

基本描述:

UDP首部:

首先得知道数据包在OSI模型中层层传输,自顶向下。

说起来 TCP 的连接与释放真是个浪漫的故事呢!| 原力计划

来看看UDP首部:

说起来 TCP 的连接与释放真是个浪漫的故事呢!| 原力计划
  • 用户数据报 UDP 有两个字段:数据字段和首部字段。首部字段有 8 个字节,由 4 个字段组成,每个字段都是两个字节;
  • 在计算检验和时,临时把“伪首部”和 UDP 用户数据报连接在一起。伪首部仅仅是为了计算检验和,伪首部12个字节取自IP数据报的字段;

  • 检验和实现UDP数据检验,通过验证检验和可以知道UDP数据包是否出现异常。

说起来 TCP 的连接与释放真是个浪漫的故事呢!| 原力计划

TCP协议

基本特点:

  • TCP 是面向连接的传输层协议,UDP面向无连接;
  • 每一条 TCP 连接只能有两个端点(endpoint),每一条 TCP 连接只能是点对点的(一对一);
  • TCP 提供可靠交付的服务(持续交付);
  • TCP 提供全双工通信(信道双向传输);
  • 面向字节流(传送最小单位为字节,即八位)。

说起来 TCP 的连接与释放真是个浪漫的故事呢!| 原力计划

上图可以看出TCP传输是如何面向字节流的,具体细节后面继续解析:

TCP连接基于Socket:

  • TCP 把连接作为最基本的抽象,每一条 TCP 连接有两个端点;
  • TCP 连接的端点不是主机,不是主机的IP 地址,不是应用进程,也不是传输层的协议端口。TCP 连接的端点叫做套接字(socket);
  • IP地址+服务端口构成了套接字。
说起来 TCP 的连接与释放真是个浪漫的故事呢!| 原力计划

TCP协议确保可靠传输

TCP使用自动重传请求ARQ (Automatic Repeat reQuest)确保可靠传输;

停止等待机制:

说起来 TCP 的连接与释放真是个浪漫的故事呢!| 原力计划

报文过不了检验的,被B丢弃,A发送发出去的报文无回应、重新发送。

请注意:

  • 在发送完一个分组后,必须暂时保留已发送的分组的副本,方便重传;
  • 分组和确认分组都必须进行编号;

  • 超时计时器的重传时间应当比数据在分组传输的平均往返时间更长一些。

确认丢失和确认迟到机制:

说起来 TCP 的连接与释放真是个浪漫的故事呢!| 原力计划
  • 确认丢失机制将超时的包覆盖为超时重传的包。

使用上述的确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信。

ARQ 表明重传的请求是自动进行的。

TCP流水线传输:停止等待协议的优点是简单,但缺点是信道利用率太低。

改进:

发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认,由于信道上一直有数据不间断地传送,这种传输方式可获得很高的信道利用率。

说起来 TCP 的连接与释放真是个浪漫的故事呢!| 原力计划

连续 ARQ 协议(自动重传协议):连续ARQ(AutomaticRepeat reQuest)协议指发送方维持着一个一定大小的发送窗口,位于发送窗口内的所有分组都可连续发送出去,而中途不需要等待对方的确认。这样信道的利用率就提高了。而发送方每收到一个确认就把发送窗口向前滑动一个分组的位置;

说起来 TCP 的连接与释放真是个浪漫的故事呢!| 原力计划

接收方一般都是采用积累确认的方式。这就是说,接收方不必对收到的分组逐个发送确认,而是在收到几个分组后,对按序到达的最后一个分组发送确认,这就表示:到这个分组为止的所有分组都已正确收到了;

积累确认有优点也有缺点。优点是:容易实现,即使确认丢失也不必重传。但缺点是不能向发送方反映出接收方已经正确收到的所有分组的信息;

例如,如果发送方发送了前5个分组,而中间的第3个分组丢失了。这时接收方只是对前两个分组发出确认。发送方无法知道后面三个分组的下落,而只好把后面的三个分组都再重传一次。这就叫做Go-back-N(回退N),表示需要再退回来重传已发送过的N个分组。可见当通信线路质量不好时,连续ARQ协议会带来负面的影响。

TCP 报文段的首部格式:

说起来 TCP 的连接与释放真是个浪漫的故事呢!| 原力计划
  • 源端口和目的端口字段各占 2 字节(16位),源端口指发送端相关服务端口,目的端口是目标主机相关服务,端口是传输层与应用层的服务接口,传输层的复用和分用功能都要通过端口才能实现。
  • 序号:当前数据组的第一个字节在整个文件中的序号。

  • 确认号ack:接收端发送,提示发送端下一次该发的数据在整个文件中的序号(收发连续的话就是序号+1),接收端收到后,会把这个序号之前的数据从缓存中删掉。

  • 数据偏移:指明当前TCP报文段第多少个字节后是TCP的数据部分了,数据偏移最多表示1111,即15,他最多可以表示15乘以4,即60个字节的偏移量,所以选项+填充最多只能是40个字节。

  • 保留:就是保留,没有用的。

  • URG:urgent,意思是优先级高,发送端优先发送,而不是在缓存中排队。

  • ACK:acknowledge,1意味着确认正式建立了会话。

  • PSH:1意味着接收端优先读取,而不是在缓存中排队。

  • RST:reset,1意味着TCP会话出现严重错误,必须释放和重新连接,比如你打开网页又立马将之关掉了,那么接收方也不用再给你传输网页信息了。

  • SYN:同步,1意味着要发起会话。

  • FIN:finish,1意味着释放连接。

  • 窗口:同步接收端和发送端窗口大小的,接收端先发,发送端根据接收端的窗口尺寸确定发送端窗口尺寸。

  • 检验和:略,上已讲。

  • 紧急指针:只有URG为1才有用。

说起来 TCP 的连接与释放真是个浪漫的故事呢!| 原力计划

滑动窗口

1、TCP 可靠通信的具体实现:

  • TCP 连接的每一端都必须设有两个窗口——一个发送窗口和一个接收窗口;
  • TCP 的可靠传输机制用字节的序号进行控制;

  • TCP 两端的四个窗口经常处于动态变化之中;

  • TCP连接的往返时间 RTT 也不是固定不变的,需要使用特定的算法估算较为合理的重传时间;

2、窗口动态变化-以字节为单位的滑动窗口:

说起来 TCP 的连接与释放真是个浪漫的故事呢!| 原力计划
  • A的发送窗口是由B的接受窗口长度决定的;
  • 在没有收到B确认收到之前,A不能删掉滑动窗口内的内容;

  • A可以持续给B发送,直到A的滑动窗口内数据都发送成功;

  • B收到后给A发确认收到的反馈ack(下一个应该发送的字节的序号),A收到后,就可以滑动窗口到对应的位置。例如B反馈ack是7,那么A的滑窗可以移动到7位置,1-6删除,21-26可以继续发送。

相关名词:

说起来 TCP 的连接与释放真是个浪漫的故事呢!| 原力计划
  • P3 – P1 = A 的发送窗口(又称为通知窗口);

  • P2 – P1 = 已发送但尚未收到确认的字节数;

  • P3 – P2 = 允许发送但尚未发送的字节数(又称为可用窗口)。

说起来 TCP 的连接与释放真是个浪漫的故事呢!| 原力计划

TCP流量控制

流量控制(flowcontrol)就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。

利用滑动窗口机制可以很方便地在 TCP 连接上实现流量控制,收方返回的 rwnd中会包含自己的接收窗口的大小,并且利用大小来控制发送方的数据发送,发送方在rwnd窗口之后的数据不允许发送。

流量控制根本目的是防止分组丢失,它是构成TCP可靠性的一方面。

说起来 TCP 的连接与释放真是个浪漫的故事呢!| 原力计划

死锁解决:

接收方返回窗口大小为0,可能是缓冲区已满,需要处理缓存中的字节,发送端收到滑动窗口为0,不再发送,但是数据还没发送完,这就造成了死锁;

如果在某个时候,接收方缓冲区有空间了,于是发送了一个非 0 窗口的通告给接收方,不幸的是这个通告丢失了,而发送方却还在死等接收方的非 0 窗口通告,接下来就成了死锁;

TCP 为每一个连接设有一个持续计时器:

  • 若持续计时器设置的时间到期,就周期性的向接收方发送 1 字节的 0 窗口探测报文;
  • 若窗口仍然是零,则收到这个报文段的一方就重新设置持续计时器,等待重传;
  • 若窗口不是零,则死锁的僵局就可以打破了。
说起来 TCP 的连接与释放真是个浪漫的故事呢!| 原力计划

三次握手齐白首

传输连接有三个阶段,即:连接建立(三次握手)、数据传送和连接释放(四次挥手)。

说起来 TCP 的连接与释放真是个浪漫的故事呢!| 原力计划

头两次握手除了确定双方都能联通外,还通知了双方的一些端口信息:

A:我们谈恋爱吧;

B:好的(如果“好的“丢了,A就不知道B的态度,感情就无法建立起来);

C:走你~

第三次握手原因:假如把三次握手改成仅需要两次握手,死锁是可能发生的。作为例子,考虑计算机A和B之间的通信,假定A给B发送一个连接请求分组,B收到了这个分组,并发送了确认应答分组。

按照两次握手的协定,B认为连接已经成功地建立了,可以开始发送数据分组。可是,B的应答分组在传输中被丢失的情况下,A将不知道B是否已准备好,A认为连接还未建立成功,将忽略B发来的任何数据分组,这样就形成了死锁。

说起来 TCP 的连接与释放真是个浪漫的故事呢!| 原力计划

四次挥手说分手

说起来 TCP 的连接与释放真是个浪漫的故事呢!| 原力计划

A 的应用进程先向其 TCP 发出连接释放报文段,并停止再发送数据,主动关闭 TCP

连接:

  • A 把连接释放报文段首部的 FIN = 1,其序号seq = u,等待 B 的确认(A:分手吧?)
  • B 发出确认,确认号 ack = u + 1,而这个报文段自己的序号 seq = v(B:确定吗?)
  • TCP 服务器进程通知高层应用要进行关闭了
  • 从 A 到 B 这个方向的连接就释放了,TCP 连接处于半关闭状态。B 若发送数据,A 仍要接收(因为A要知道B是否收到断开请求)
  • 若 B 已经没有要向 A 发送的数据,其应用进程就通知 TCP 释放连接,并通知A连接已关闭(B:那就分了吧,我走了)
  • A 收到连接释放报文段后,必须发出确认(好的)

版权声明:本文为CSDN博主「JunSIr_deCp」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:
https://blog.csdn.net/junsirhl/article/details/106155015



Tags:TCP   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
1.TCP/IP 网络模型有几层?分别有什么用? TCP/IP网络模型总共有五层 1.应用层:我们能接触到的就是应用层了,手机,电脑这些这些设备都属于应用层。 2.传输层:就是为应用层提供网络...【详细内容】
2021-12-22  Tags: TCP  点击:(35)  评论:(0)  加入收藏
TCP握手的时候维护的队列 半连接队列(SYN队列) 全连接队列(accepted队列)半连接队列是什么?服务器收到客户端SYN数据包后,Linux内核会把该连接存储到半连接队列中,并响应SYN+ACK报...【详细内容】
2021-12-21  Tags: TCP  点击:(10)  评论:(0)  加入收藏
什么是滑动窗口?窗口是操作系统开辟的一块缓存空间,发送方在收到接收方ACK应答之前,必须在缓冲区保留已发送的数据,如果按期收到确认应答,数据就可以从缓冲区移除。什么是滑动窗...【详细内容】
2021-12-14  Tags: TCP  点击:(30)  评论:(0)  加入收藏
一、TCP协议位于传输层, 提供可靠的字节流服务。所谓的字节流服务(Byte Stream Service) 是指, 为了方便传输, 将大块数据分割成以报文段(segment) 为单位的数据包进行管理。 而可...【详细内容】
2021-11-26  Tags: TCP  点击:(34)  评论:(0)  加入收藏
TCP(Transmission Control Protocol)传输控制协议是一种面向连接的、可靠的、基于字节流的传输层协议 端口号取值范围0~6535 因为十六位二进制构成 2^16 ...【详细内容】
2021-10-19  Tags: TCP  点击:(90)  评论:(0)  加入收藏
昨晚有位读者问了我这么个问题: 大概意思是,一个已经建立的 TCP 连接,客户端中途宕机了,而服务端此时也没有数据要发送,一直处于 establish 状态,客户端恢复后,向服务端建立连接,此...【详细内容】
2021-09-17  Tags: TCP  点击:(71)  评论:(0)  加入收藏
想必大家已经知道我的niao性,搞个标题,就是不喜欢立马回答。就是要搞一大堆原理性的东西,再回答标题的问题。说这个是因为我这次会把问题的答案就放到开头吗?不!我就不!但是大家可...【详细内容】
2021-09-13  Tags: TCP  点击:(72)  评论:(0)  加入收藏
本文是参考【图解TCP/IP】TCP(Transmission Control Protocol)是传输控制协议,其作用于传输层,是一种提供了面向连接通信服务的协议看TCP的英文全称就知道,其主要作用就是传输 、...【详细内容】
2021-09-08  Tags: TCP  点击:(40)  评论:(0)  加入收藏
TCP 连接建立的三次握手1、先提出一个问题,可以不进行三次握手直接往服务端发送数据包吗?是不可以的,也是可以的;1)不可以是因为现在的TCP连接标准和规范要求传输数据前先确认两...【详细内容】
2021-09-03  Tags: TCP  点击:(124)  评论:(0)  加入收藏
入侵一些网站,电脑,制作一些病毒,学会多项编程,这是一个普通黑客都会的技能,那么真正黑客能厉害到什么程度呢?除了勒索病毒,熊猫烧香等自动感染的病毒被大家熟知外,还有更厉害的骚操...【详细内容】
2021-08-19  Tags: TCP  点击:(66)  评论:(0)  加入收藏
▌简易百科推荐
以京训钉开发平台接口文档为例,使用HttpClient类请求调用其接口,对数据进行增删改查等操作。 文档地址: https://www.yuque.com/bjjnts/jxd/bo1oszusing System;using System.C...【详细内容】
2021-12-28  Wednes    Tags:HttpClient   点击:(1)  评论:(0)  加入收藏
阿里云与爱快路由安装组网教程一、开通好阿里云轻量服务器之后在服务器运维-远程连接处进行远程 二、进入控制台后在root权限下根据需要安装的固件位数复制下面命令。32位:wg...【详细内容】
2021-12-28  ikuai    Tags:组网   点击:(1)  评论:(0)  加入收藏
HTTP 报文是在应用程序之间发送的数据块,这些数据块将通过以文本形式的元信息开头,用于 HTTP 协议交互。请求端(客户端)的 HTTP 报文叫做请求报文,响应端(服务器端)的叫做响应...【详细内容】
2021-12-27  程序员蛋蛋    Tags:HTTP 报文   点击:(4)  评论:(0)  加入收藏
一 网络概念:1.带宽: 标识网卡的最大传输速率,单位为 b/s,比如 1Gbps,10Gbps,相当于马路多宽2.吞吐量: 单位时间内传输数据量大小单位为 b/s 或 B/s ,吞吐量/带宽,就是网络的使用率...【详细内容】
2021-12-27  码农世界    Tags:网络   点击:(3)  评论:(0)  加入收藏
1.TCP/IP 网络模型有几层?分别有什么用? TCP/IP网络模型总共有五层 1.应用层:我们能接触到的就是应用层了,手机,电脑这些这些设备都属于应用层。 2.传输层:就是为应用层提供网络...【详细内容】
2021-12-22  憨猪哥08    Tags:TCP/IP   点击:(35)  评论:(0)  加入收藏
TCP握手的时候维护的队列 半连接队列(SYN队列) 全连接队列(accepted队列)半连接队列是什么?服务器收到客户端SYN数据包后,Linux内核会把该连接存储到半连接队列中,并响应SYN+ACK报...【详细内容】
2021-12-21  DifferentJava    Tags:TCP   点击:(10)  评论:(0)  加入收藏
你好,这里是科技前哨。 随着“元宇宙”概念的爆火,下一代互联网即将到来,也成了互联网前沿热议的话题,12月9日美国众议院的听证会上,共和党议员Patrick McHenry甚至宣称,要调整现...【详细内容】
2021-12-17  王煜全    Tags:Web3   点击:(14)  评论:(0)  加入收藏
一、demopublic static void main(String[] args) throws Exception { RetryPolicy retryPolicy = new ExponentialBackoffRetry( 1000, 3);...【详细内容】
2021-12-15  程序员阿龙    Tags:Curator   点击:(22)  评论:(0)  加入收藏
一、计算机网络概述 1.1 计算机网络的分类按照网络的作用范围:广域网(WAN)、城域网(MAN)、局域网(LAN);按照网络使用者:公用网络、专用网络。1.2 计算机网络的层次结构 TCP/IP四层模...【详细内容】
2021-12-14  一口Linux    Tags:网络知识   点击:(31)  评论:(0)  加入收藏
无论是在外面还是在家里,许多人都习惯了用手机连接 WiFi 进行上网。不知道大家有没有遇到过这样一种情况, 明明已经显示成功连接 WiFi,却仍然提示“网络不可用”或“不可上网”...【详细内容】
2021-12-14  UGREEN绿联    Tags:WiFi   点击:(25)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条