美文网首页
🌐 TCP连接的建立与释放

🌐 TCP连接的建立与释放

作者: BubbleM | 来源:发表于2020-07-13 00:10 被阅读0次

计算机网络分层结构:

  • 7层OSI参考模型(法定标准)
  • 4层TCP/IP参考模型(事实标准)

标准化工作

计算机网络的标准化工作之标准的分类:

  • 法定标准:由权威机构制定的正式的、合法的标准:OSI
  • 事实标准:某些公司的产品在竞争中占据了主流,时间长了这些产品中的协议和技术就成了标准:TCP/IP

OSI参考模型(法定标准)

OSI七层模型,由ISO(国际标准化组织)指定制定的一个国际标准OSI(Open System Interconnect 开放式通信系统互联参考模型)。常用来分析和设计网络体系结构。

TCP/IP参考模型(事实标准)

OSI与TCP/IP.png
ISO/OSI参考模型 TCP/IP参考模型
网络层 无连接+面向连接 无连接
传输层 面向连接 无连接+面向连接

面向连接 分为三个阶段,第一是建立连接,在此阶段,发出一个建立连接的请求。只有在连接成功建立之后,才能开始数据传输,这是第二阶段。接着,当数据传输完毕,必须释放连接。
面向无连接 没有这么多阶段,直接进行数据传输。

5层参考模型

综合OSI和TCP/IP的优点


5层参考模型.png

传输层

传输层的功能:

  1. 传输层提供 进程和进程 之间的逻辑通信。网络层提供 主机之间 的逻辑通信;
  2. 复用和分用;
  • 复用:应用层所有的应用进程都可以通过传输层再传输到网络层;
  • 分用:传输层从网络层收到数据后交付指明的应用进程;
  1. 传输层对收到对报文进行差错检测;

传输层的两个协议

TCP

面向连接的传输控制协议TCP。传送数据之前必须建立连接,数据传送结束后要释放连接。不提供广播或多播服务。
由于TCP要提供可靠的面向连接的传输服务,因此不可避免增加了许多开销:确认、流量控制、计时器及连接管理等。
特点:可靠,面向连接,时延大,适应于大文件

  • TCP是面向连接的传输层协议;
  • 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的;
  • TCP提供可靠交付的服务,无差错、不丢失、不重复、按序到达(可靠有序,不丢不重);
  • TCP提供全双工通信,即发送方和接收方可以同时发送和接收;

发送缓存:准备发送的数据&已发送但尚未收到确认的数据
接收缓存:按序到达但尚未被接受应用程序读取的数据&不按序达到的数据

  • TCP面向字节流,TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流;

UDP

无连接的用户数据报协议UDP。传送数据之前不需要建立连接,收到UDP报文后也不需要给出任何确认。
特点:不可靠,无连接,时延小,适用于小文件

  • UDP是无连接的,减少开销和发送数据之前的时延;
  • UDP使用最大努力交付,即不保证可靠交付
  • UDP是面向报文的,即应用层给UDP多长的报文,UDP就照样发送,即一次发一个完整报文,适合一次性传输少量数据的网络应用;
    UDP传输.png
  • UDP无拥塞控制,适合很多实时应用;
  • UDP首部开销小,8B,TCP是20B;

TCP

TCP报文段首部格式

TCP报文段首部格式.png
  • 序号:在一个TCP连接中传送的字节流中的每一个字节都按顺序编号,本字段表示本报文段所发送数据的 第一个字节的序号
  • 确认号:期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则证明到序号N-1为止的所有数据都已正确收到。
  • 数据偏移(首部长度):TCP报文段的数据起始处距离TCP报文段的起始处有多远,以4B位单位,即1个数值是4B。
    6个控制位:
  • 紧急位URG:URG=1时,标明此报文段中有紧急数据,是高优先级的数据,应尽快传送,不用在缓存里排队,配合紧急指针字段使用。
  • 确认位ACK:ACK=1时确认号有效,在连接建立后所有传送的报文段都必须把ACK置为1;
  • 推送位PSH:PSH=1时,接收方尽快交付应用程序,不再等到缓存填满再向上交付;
  • 复位RST:RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立传输链接;
  • 同步位SYN:SYN=1时,表明是一个连接请求/连接接受报文;
  • 终止位FIN:FIN=1时,表明此报文段发送方数据已发完,要求释放连接。
  • 窗口:指发送本报文段的一方的接收窗口,即现在允许对方发送的数据量;
  • 检验和:检验首部+数据,检验时要加上12B伪首部,第四个字段为6;
  • 紧急指针:URG=1时才有意义,指出本报文段中紧急数据的字节数;
  • 选项:最大报文段长度MSS、窗口扩大、时间戳、选择确认...

TCP连接建立(三次握手)

三次握手.png
TCP连接的建立采用客户服务器方式,主动发起连接建立的应用进程叫做客户,而被动等待连接建立的应用进程叫服务器。
TCP连接建立.png
  • 客户端发送 连接请求报文段,无应用层数据 SYN=1(连接请求报文),序号位seq=x(随机)
  • 服务端为该TCP连接 分配缓存和变量,并向客户端返回 确认报文段,允许连接,无应用层数据 SYN=1(连接接收报文),ACK=1,seq=y(随机),确认号ack=x+1
  • 客户端为该TCP连接 分配缓存和变量,并向服务器返回确认的确认,可以携带数据 SYN=0,ACK=1,seq=x+1,ack=y+1

SYN洪泛攻击

SYN洪泛攻击发生在OSI第四层,这种方式利用TCP协议的特性,就是三次握手。攻击者发送TCP SYN,SYN是TCP三次握手中的第一个数据包,而当服务器返回ACK后,该攻击者就不对其进行再确认,那这个TCP连接就处于挂起状态,就是所谓的半连接状态,服务器收不到再确认的话,还会重复发送ACK给攻击者。这样更加会浪费服务器资源。
攻击者就对服务器发送非常大量的这种TCP连接,由于每一个都没法完成三次握手,所以在服务器上,这些TCP连接会因为挂起状态而消耗CPU和内存,最后服务器可能死机,就无法为正常用户提供服务了。
解决方案:设置SYN cookie

为什么TCP一定要握手三次?

通过三次握手,客户端经历了一次请求和一次响应,服务端也经历了一次请求和一次响应,这时一方面确认了当前网络状态不错,另一方面又确认了自己这个沟通对象既能请求又能响应、确实没毛病。只有在这样安全、稳定的前提下,两台计算机之间才可以建立起 TCP 连接。三次握手的目的是为让双方验证各自的接收能力和发送能力,确保双方能够确实建立起稳定的传输通道。

TCP连接释放(四次挥手)

四次挥手.png TCP连接释放.png
  • 客户端发送 连接释放报文段,停止发送数据,主动关闭TCP连接 FIN=1,seq=u
  • 服务器端回送一个确认报文段,客户到服务器这个方向的连接就释放了--半关闭状态 ACK=1,seq=v,ack=u+1
  • 服务端发完数据,就发出连接释放报文段,主动关闭TCP连接 FIN=1,ACK=1,seq=w,ack=u+1
  • 客户端回送一个确认报文段,再等到时间等待计时器设置的2MS(最长报文段寿命)后,连接彻底关闭 ACK=1,seq=u+1,ack=w+1

为什么TCP分手一定要挥手四次?

TCP连接是全双工协议,就是说双方都可以同时向对方发送或接收数据。
当客户端在想要断开连接时,只能确认自己没有数据要传输给服务器了,但并不能确认服务器是否还有数据要发送。
分手嘛,是两个人的事情。客户端不会因为自己没话说了就直接终止关系,而是会等服务器把话说完再走。因此,即便客户端抛出了分手请求,这时服务器还是可以传输数据过来的。
前两次挥手,只是对分手这件事做确认,但并不会立即行分手之时。
第三次挥手前,服务器会把自己想说的话说完,然后再通知一次客户端。这时,双方才真正都为分开做好了准备。
第四次挥手,客户端接收到了来自服务端的分手请求,响应“接受”的信号,才最后给这一段关系画上了句号。

相关文章

  • 理解TCP和UDP

    一、TCP端口 二、TCP报文结构 三、TCP连接的建立和释放 TCP的整个交互过程可总结为:先建立连接、然后传输...

  • TCP连接的建立与释放

    一、TCP连接的建立 TCP 是面向连接的,在传输 TCP 报文段之前先要创建连接,发起连接的一方被称为客户端,而...

  • 🌐 TCP连接的建立与释放

    计算机网络分层结构: 7层OSI参考模型(法定标准) 4层TCP/IP参考模型(事实标准) 标准化工作 计算机网络...

  • TCP 的三次握手和四次挥手,了解泛洪攻击么

    引言 TCP 建立连接与断开连接的过程 TCP 泛洪攻击(TCP 建立连接过程中的攻击手段)与防护 TCP 建立连...

  • TCP/IP协议--TCP三次握手建立连接

    TCP连接 TCP是面向连接的协议,它基于传输连接来传送TCP报文段 TCP传输连接的建立和释放是每一次面向连接的...

  • TCP三次握手四次挥手详解

    TCP的运输连接管理 TCP是面向连接的协议。运输连接是用来传送TCP报文的。TCP运输连接的建立和释放是每一次面...

  • TCP 与 UDP

    TCP 与 UDP(主要说TCP)TCP/UDP端口号TCP/UDP端口号TCP连接的建立TCP连接的建立发送se...

  • 简述TCP连接的建立与释放(三次握手、四次挥手)

    在介绍TCP连接的建立与释放之前,先回顾一下相关知识。 TCP是面向连接的运输层协议,它提供可靠交付的、全双工的、...

  • UDP

    UDP 和 TCP 的不同 TCP 在传送数据之前必须先建立连接,数据传送结束后要释放连接。 TCP 不提供广播或...

  • TCP(一) 建立连接 & 连接释放

    TCP是一个面向连接的服务,建立连接需要经过三次握手,释放连接需要经过四次挥手。 三次握手 客户端与服务器交互需要...

网友评论

      本文标题:🌐 TCP连接的建立与释放

      本文链接:https://www.haomeiwen.com/subject/xntocktx.html