TCP/IP 学习笔记(二)-网络层和传输层常见算法原理简析

383 阅读25分钟

路由算法:RIP、OSPF、BGP

内部网关协议RIP

RIP协议应该是一种最简单的内部网关协议了。

内部网关协议是跟外部网关协议相对的。在自治系统AS(比如校园网)里面用的路由协议就是内部网关协议,而在自治系统和自治系统之间进行路由的是外部网关协议。 RIP协议是一个距离向量路由协议,它以跳数作为评价标准,跳数越少,距离越短,当跳数为16时,表示距离不可达。因此RIP协议只适用于小型网络。

工作原理:

  1. RIP协议基于你有一个思想,我有一个思想,我们交换思想就可以得到更全面的想法一样,路由器仅和相邻的路由器交换信息;

  2. 路由器交换的信息就是自己目前的路由表,具体是目的网络,最短距离,下一条网络;

  3. RIP协议按固定时间交换信息,比如30秒,就交换一次路由表信息,如果超过了某个固定时间(比如三分钟)还没有交换信息,说明目的路由器不可达,将距离设置为16。

就这样进行下去,最终就可以得到正确的路由。

详细过程 : 路由算法之RIP

需要注意的是每一个路由器的路由表是不同的,路由表并没有指出去目的网络的一个路径,而是仅给出下一条的地址。 但是RIP虽然简单,但是有个缺点,就是会以讹传讹,坏消息传的很慢。

举个例子,本来路由器A连接这网络1,路由器B连接这路由器A。突然网络1瘫痪了,那么路由器A就把网络1的路径长度
设置为16,但是隔了一段时间见路由器B却跟路由器A说我到网络1的距离是2(之前的错误信息),然后A就以为到网络
1的距离是3,然后又跟B交换信息,B以为到网络1的距离是4,就这样一直传递错误的信息,知道距离到了16,才知道
目的网络不可达。但是知道这个事实却花了好几分钟。

像这样收到自己发送出去的消息的问题,成为无限计数。解决办法:

  1. 限定最大距离不超过16。由此即使发生无限计数问题,也可以从时间上进行控制;
  2. 规定路由器不再把所收到的路由消息原路返回给发送端,这也被称为水平分割;

RIP使用UDP数据报进行传送。

RIP的度量值与更新时间

1. RIP的度量值

RIP路由协议使用跳数作为唯一的度量值。

在RIP中规定了跳数的最大值为15, 16跳视为不可达。因此,RIP路由协议不适用与大型的广域网。

2. RIP的更新时间

RIP使用UDP协议,端口号是520

路由器启动后,平均每隔30s就从每个启动RIP协议的接口不断的发送出路由更新消息。

水平分割(Split Horizon)

网络收敛后,路由器仍然在以30s的时间间隔向外发送整个路由表。

执行水平分割可以阻止路由环路的发生,水平分割的规则是:从一个接口学习到路由信息,不再从这个接口发送出去。水平分割不仅能够阻止路由环路的产生,同时也能减少路由更新信息占用的链路带宽资源。

内部网关协议OSPF

OSPF同样是内部网关协议的,但是OSPF是基于链路状态的。这个链路状态包括连通性、费用、距离、时延、带宽等信息。换句话说,OSPF考虑问题更全面,因为最短路径应该是时间最短的,而路由的时间跟上面的因素而不仅仅是跳数有关。

工作原理:

(1)OSPF向所有路由器发送信息,它使用一种泛洪法(路由器的一种转发方式),向所有输出接口发送信息,这样最后所有的路由器都会得到这个消息的副本。(即路由器通过所有端口向所有相邻的路由器发送信息。而每个相邻路由器又将此信息发往其所有相邻路由器(但不再发送给刚刚发来信息的那个路由器))

(2)发送的信息是与本路由器相邻的路由器的链路状态信息。

(3)只有当链路状态发生变化时,才会使用泛洪法转发信息

经过上面的步骤,最后每个路由器都会得到一个全网的拓扑结构(注意RIP并没有这个),这个拓扑结构跟带权无向图差不多,有了这个图,就可以使用最短路径算法(比如Dijkstra提出的最短路径算法)找到一条最短路径了,不过最后填入路由表的还是下一跳的信息

可参考OSPF基本工作原理(上)

[简述ospf的工作原理_OSPF 一文详解] (blog.csdn.net/weixin_3971…) 路由算法(全网最细)

OSPF的优点在于收敛快,适用于较大型的网络。

问题在于,当网络的规模越来越大时,表示链路状态的拓扑数据库就越来越大,路由控制信息的计算也就越来越复杂。为了减少网络上的通行量,已经减少上述全网的拓扑结构的规模,可以将一个系统划分为不同的区域,这样泛洪法交换信息只局限于一个区域。

OSPF直接使用IP数据报进行封装传送。

边界网关协议BGP

与内部网关协议不同,BGP(边界网关协议,Border Gateway Protocol )是自治系统之间的路由选择协议。BGP用于连接Internet。作为最新的外部网关协议,现有四个版本。 BGP 是唯一一个用来处理像因特网大小的网络协议,也是唯一能够妥善处理好不相关路由域间的多路连接协议。BGPv4是一种外部的路由协议。可认为是一种高级的距离向量路由协议。 理由如下:

  1. 互联网规模太大,如果使用最短路径算法计算时间将会很久。
  2. 不同的自治系统有不同的策略,就好像不同的国家有不同的法律一样,有些路由器可能会过滤一些请求。

工作原理:

  1. 在每个自治系统里面选择至少一个BGP发言人,这个角色是用来跟相邻自治系统来交换信息的,信息包括到达某个网络所要经过的一系列自治系统。
  2. 当BGP发言人互相交换了网络可达性的信息后,各BGP发言人就根据所采用的策略从收到的路由信息中找出到达个自治系统的合适的路由。 BGP协议交换路由信息的节点数量级是自治系统的量级

BGP特点:

  • BGP是一种外部路由协议,与OSPF、RIP不同,其着眼点不在于发现和计算路由,而在于控制路由的传播和选择最好的路由。
  • BGP通过携带AS路径信息,可以彻底的解决路由循环问题。
  • 为了控制路由的传播和路由的选择,为路由附带属性信息。
  • 使用TCP作为其传输层协议,提高了协议的可靠性。端口号179。
  • BGP-4支持CIDR(无类别域间选路),CIDR的引入简化了路由聚合,减化了路由表。
  • BGP更新时只发送增量路由,减少了BGP传播路由占用的带宽。
  • 提供了丰富的路由策略。 详细请查阅 :BGP协议基本原理

NAT类型

一般来讲, NAT可以分为四种类型,分别是:

  1. 全锥型(NAT1 → Full Cone NAT)
  2. 受限锥型(NAT2 → Address-Restricted Cone NAT), 或者说是IP受限锥型
  3. 端口受限锥型(NAT3 → Port-Restricted Cone NAT), 或者说是IP + PORT受限锥型
  4. 对称型(NAT4 → Symmetric NAT) 其中1,2,3属于同一种类型,都是锥型,区别只是路由器的不同的安全策略。假定:
    公网server1 ip是1.1.1.1, 监听端口是1111
    公网server2 ip是2.2.2.2, 监听端口是2222
    NAT router ip是8.8.8.8
    NAT内部client是192.168.0.3

client发送数据的时候,不管是tcp还是udp必须本地绑定一个端口,一般来讲,这个过程都是自动的。

假定client(192.168.0.3, 100)给 server(1.1.1.1, 1111)发送报文,报文到达路由器,路由器在自己的公网ip上开辟一个端口800,从而建立了一个隐射关系(8.8.8.8, 800)<--->(192.168.0.3, 100), 建立映射关系后,所以(192.168.0.3, 100)和(1.1.1.1, 1111)之间的报文都通过这个映射关系进行转发。
NAT之间主要的区别分两种情况讨论:

  1. client(192.168.0.3, 100)和server(1.1.1.1, 1111)在路由器上建立好映射关系后,如果client(192.168.0.3, 100)又给(2.2.2.2, 2222)发送数据,路由器该怎么处理呢?
  • 复用旧的映射关系(8.8.8.8, 800)<--->(192.168.0.3, 100)和(2.2.2.2, 2222)通信, 这就是锥型(Cone) NAT
  • 创建新的映射关系(8.8.8.8, 801)<--->(192.168.0.3, 100)和(2.2.2.2, 2222)通信, 这就是对称型NAT
注:  (8.8.8.8, 801)只是举例,到底用什么端口取决于路由器的端口管理策略,总之是另外的一个端口,
有的路由器有多个公网IP,不同的IP也会参与到这个映射关系中。
  1. client(192.168.0.3, 100)和server(1.1.1.1, 1111)在路由器上建立好映射关系后,如果这个时候路由器(8.8.8.8)在800端口上收到从另外一台server(2.2.2.2, 2222)发来的数据,是不是应该转发给(192.168.0.3, 100)呢?

有四种情况:

  • 2.1 无条件转发给(192.168.0.3, 100), 这就是全锥型(Full Cone)NAT。
  • 2.2 如果(192.168.0.3, 100)之前给(2.2.2.2)发送过数据,则转发, 这就是受限锥型(Restricted Cone)。
  • 2.3 如果(192.168.0.3, 100)之前给(2.2.2.2, 2222)发送过数据,则转发, 这就是端口受限锥型(Port Restricted Cone)。
  • 2.4 丢弃报文,拒绝转发, 这就是对称型NAT。 从上面也描述也可以看出,安全性系数, 对称型 > 端口受限锥型 > 受限锥型 > 全锥型

组播和任播

组播

  IP组播是一种通过使用一个组播地址将数据在同一时间以高效的方式发往处于TCP/IP网络上的多个接收者的协议。此外,它还常用来与RTP等音视频协议相结合。

  组播组中的主机可以是在同一个物理网络,也可以来自不同的物理网络(如果有组播路由器的支持)。

  组播报文的目的地址使用D类IP地址(224.0.0.0~239.255.255.255), D类地址不能出现在IP报文的源IP地址字段。

实现组播技术的前提条件

  实现IP组播传输,则组播源和接收者以及两者之间的下层网络都必须支持组播。这包括以下几方面:

  • 主机的TCP/IP实现支持发送和接收IP组播;
  • 主机的网络接口支持组播;
  • 有一套用于加入、离开、查询的组管理协议,即IGMP(v1,v2);
  • 有一套IP地址分配策略,并能将第三层IP组播地址映射到第二层MAC地址;
  • 支持IP组播的应用软件;
  • 所有介于组播源和接收者之间的路由器、集线器、交换机、TCP/IP栈、防火墙均需支持组播;

组播地址

  在组播通信中,我们需要两种地址:一个IP组播地址和一个Ethernet组播地址。其中,IP组播地址标识一个组播组。由于所有IP数据包都封装在 Ethernet帧中,所以还需要一个组播Ethernet地址。为使组播正常工作,主机应能同时接收单播和组播数据,这意味着主机需要多个IP和 Ethernet地址。 IP地址方案专门为组播划出一个地址范围,在IPv4中为D类地址,范围是224.0.0.0到239.255.255.255,并将D类地址划分为局部链接组播地址、预留组播地址、管理权限组播地址。 局部链接地址:224.0.0.0~224.0.0.255,用于局域网,路由器不转发属于此范围的IP包; 预留组播地址:224.0.1.0~238.255.255.255,用于全球范围或网络协议; 管理权限地址:239.0.0.0~239.255.255.255,组织内部使用,用于限制组播范围;

  D类地址的最后28比特没有结构化,即没有网络ID和主机ID之分。响应某一个IP多播地址的主机构成一个主机组,主机组可跨越多个网络。主机组的成员数是动态的,主机可以通过IGMP协议加入或离开某个主机组。IP多播地址影射到以太网地址的方法见下图。因为IP多播地址的高5位未影射,因此,影射的以太网地址不是唯一的,共有32个IP多播地址影射到一个以太网地址。

组播协议:

IP网上的组播有以下三个常用的协议

1.Internet群组管理协议(IGMP)

  该协议被主机用来通知直连的路由器,提出具体组播地址,申请加入或离开一个组播组。发送者则要确定一个合适的地址,这个地址代表一个主组,然后,组播数据包通过普通的IP地址以UDP广播方式传送到提出申请的主机所在子网内的各主机用户。

  主机使用IGMP通知子网组播路由器,希望加入组播组;路由器使用IGMP查询本地子网中是否有属于某个组播组的主机。

  • 加入组播组   当某个主机加入某一个组播组时,它通过“成员资格报告”消息通知它所在的IP子网的组播路由器,同时将自己的IP模块做相应的准备,以便开始接收来自该组播组传来的数据。如果这台主机是它所在的IP子网中第一台加入该组播组的主机,通过路由信息的交换,组播路由器加入组播分布树。
  • 退出组播组   在IGMP v1中,当主机离开某一个组播组时,它将自行退出。组播路由器定时(如120秒) 使用“成员资格查询” 消息向IP子网中的所有主机的组地址(224.0.0.1)查询,如果某一组播组在IP子网中已经没有任何成员,那么组播路由器在确认这一事件后,将不再在子网中转发该组播组的数据。与此同时,通过路由信息交换,从特定的组播组分布树中删除相应的组播路由器。这种不通知任何人而悄悄离开的方法,使得组播路由器知道IP子网中已经没有任何成员的事件延时了一段时间,所以在IGMP v2.0中,当每一个主机离开某一个组播组时,需要通知子网组播路由器,组播路由器立即向IP子网中的所有组播组询问,从而减少了系统处理停止组播的延时。

2.独立组播协议(PIM)

  该协议实现对各种组播应用的支持,有密集模式PIM-DM和稀疏模式PIM-SM两种。在Foundry产品上,加载PIM会自动启用IGMP。

  PIM由IDMR(域间组播路由)工作组设计,顾名思义,PIM不依赖于某一特定单播路由协议,它可利用各种单播路由协议建立的单播路由表完成RPF检查功能,而不是维护一个分离的组播路由表实现组播转发。由于PIM无需收发组播路由更新,所以与其它组播协议相比,PIM开销降低了许多。 PIM的设计出发点是在Internet范围内同时支持SPT和共享树,并使两者之间灵活转换,因而集中了它们的优点提高了组播效率。 PIM定义了两种模式:密集模式(Dense-Mode)和稀疏模式(Sparse-Mode)。

3.距离矢量组播路由协议(DVMRP)

  该协议属于密集模式,它根据自己的算法建立组播路由表。在Foundry产品上,加载DVMRP也会自动启用IGMP。

  要想在IP网络上召开交互式视频会议或发布视频新闻,就需要利用IP网络组播的密集模式,并且启动PIM或DVMRP协议。在Foundry产品上启动这些协议时,不同的VLAN配置方法可产生不同的效果。

  DVMRP由单播路由协议RIP扩展而来,两者都使用距离向量算法得到网络的拓扑信息,不同之处在于RIP根据路由表前向转发数据,而DVMRP则是基于RPF。为了使新加入的组播成员能及时收到组播数据,DVMPR采用定时发送数据包给所有的LAN的方法,然而这种方法导致大量路由控制数据包的扩散,这部分开销限制了网络规模的扩大。另一方面,DVMRP使用跳数作为计量尺度,其上限为32跳,这对网络规模也是一个限制。目前提出了分层DVMRP,即对组播网络划分区域,在区域内的组播可以按照任何协议进行,而对于跨区域的组播则由边界路由器在DVMRP协议下进行,这样可大大减少路由开销。

组播的具体机制 :组播IP地址到底是谁的IP

任播

任播是与单播、广播和组播不同的方式。

在单播中,在网络位址和网络节点之间存在一一对应的关系。

在广播和组播中,在网络位址和网络节点之间存在一对多的关系:每一个目的位址对应一群接收可以复制资讯的节点。

  在任播中,在网络位址和网络节点之间存在一对多的关系:每一个位址对应一群接收节点,但在任何给定时间,只有其中之一可以接收到传送端来的资讯。

  任播通信从目标群中选择一台最符合网络条件的主机作为目标主机发送消息 。所被选中的那台特定主机将返回一个单播信号,随后发送端主机会只跟这台主机进行通信

在互联网中,通常使用边界网关协议来实现任播。

FullNAT

NAT与FULL NAT的区别

NAT与FULL NAT的区别
杜老师说分发:LVS 中 NAT 和 FullNAT 的区别
到底什么时候需要用fullnat呢

  • LVS 当前应用主要采用 DR 和 NAT 模式,但这 2 种模式要求 RealServer 和 LVS在同一个 vlan中,导致部署成本过高;
  • TUNNEL 模式虽然可以跨 vlan,但RealServer上需要部署 ipip 模块等, 网络拓扑上需要连通外网,较复杂,不易运维。   为了解决上述问题,我们在 LVS 上添加了一种新的转发模式:FULLNAT

  该模式和 NAT 模式的区别是: Packet IN 时,除了做 DNAT,还做 SNAT(用户 ip->内网 ip),从而实现LVS-RealServer 间可以跨 vlan 通讯, RealServer 只需要连接到内网

FULLNAT 将作为一种新工作模式(同 DR/NAT/TUNNEL),实现如下功能:

    1. Packet IN 时,目标 ip 更换为 realserver ip,源 ip 更换为 内网 local ip;
    1. Packet OUT 时,目标 ip 更换为 client ip,源 ip 更换为 vip; 注: Local ip 为一组内网 ip 地址; 性能要求,和 NAT 比, 正常转发性能下降<10%; image.png FullNAT 模式和 NAT 模式差不多,但是与 NAT 不同的是 NAT 模式只做了两次地址转换,FullNAT 模式却做了四次。

Udp/tcp校验和的算法

TCP UDP 校验算法

算法流程

  IP、ICMP、UDP和TCP报文头都有检验和字段,大小都是16bit,算法基本上也是一样的。在发送数据时,为了计算数据包的检验和。应该按如下步骤:
1、把校验和字段设置为0;
2、把需要校验的数据看成以16位为单位的数子组成,依次进行二进制反码求和;
3、把得到的结果存入校验和字段中

在接收数据时,计算数据包的检验和相对简单,按如下步骤:
1、把首部看成以16位为单位的数字组成,依次进行二进制反码求和,包括校验和字段;
2、检查计算出的校验和的结果是否为0;
3、如果等于0,说明被整除,校验和正确。否则,校验和就是错误的,协议栈要抛弃这个数据包。

  虽然说上面四种报文的校验和算法一样,但是在作用范围存在不同:IP校验和只校验20字节的IP报头;而ICMP校验和覆盖整个报文(ICMP报头+ICMP数据);UDP和TCP校验和不仅覆盖整个报文,而且还有12个字节的IP伪首部,包括源IP地址(4字节)、目的IP地址(4字节)、协议(2字节)、TCP/UDP包长(2字节)。另外UDP、TCP数据报的长度可以为奇数字节,所以在计算校验和时需要在最后增加填充字节0(填充字节只是为了计算校验和,可以不被传送)。

  在UDO传输协议中,校验和是可选的,当校验和字段为0时,表明该UDP报文未使用校验和,接收方就不需要校验和检查了!那如果UDP校验和的计算结果是0时怎么办?书上有一句话:“如果校验和的计算结果为0,则存入的值为全1(65535),这在二进制反码计算中是等效的”

1. 什么是二进制反码求和

  对一个无符号的数,先求其反码,然后从低位到高位,按位相加,有益处则向高位进1(和一般的二进制法则一样),若最高位有进位,则向最低位进1.

2. 为什么使用二进制反码求和呢,而不是直接使用原码或者是补码呢?

  • a、 不依赖系统是大端小端。即无论你是发送方计算机或者接收方检查校验和时,都不要调用htons或者ntohs,直接通过上面的算法就可以得到正确的结果。这个问题你可以自己举个例子,用反码求和时,交换16位数的字节顺序,得到的结果相同,只是字节顺序相应地也交换了;而如果使用原码或者补码求和,得到的结果可能就不同。
  • b、 计算和验证校验和比较简单、快速。

socket,http/2,httpsocket,websocket的区别和联系

  • http:目前绝大多数是http1.1版本,最原始的web协议,默认80端口,基于TCP协议。
  • https:加密的http协议,默认443端口,基于TCP协议。
  • http2:第二代http协议,相较于HTTP1.x,大幅度的提升了web性能。在与HTTP/1.1完全语义兼容的基础上,进一步减少了网络延迟和传输的安全性,基于TCP。
  • websocket:服务端推送,实现服务端客户端全双工通信,基于TCP。
WebSocket是HTML5中的协议,支持持久连接;
首先HTMl5指的是一系列新的API,或者说新规范,新技术。WebSocket是HTML5中新协议、新API;  
但是WebSocket是由http先发起的,然后再转为websocket连接;ServerSent的方式,
可以使服务端的开发依然应用以前的方式,但是其工作方式与Comet类似。
而WebSocket的方式,则对服务端的开发有着较高的要求,但其工作方式是完全的推送。
  • HTTP 协议有一个缺陷:通信只能由客户端发起,做不到服务器主动向客户端推送信息。
  • WebSocket 协议 它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种

一、HTTP 协议

  http 为短连接:客户端发送请求都需要服务器端回送响应.请求结束后,主动释放链接,因此为短连接。通常的做法是,不需要任何数据,也要保持每隔一段时间向服务器发送"保持连接"的请求。这样可以保证客户端在服务器端是"上线"状态。 HTTP连接使用的是"请求-响应"方式,不仅在请求时建立连接,而且客户端向服务器端请求后,服务器才返回数据。

二、websocket协议

  • 基于Http协议的扩展,支持长连接,用于建立客户端和服务器的双向通道。
  • 传统的轮询方式(即采用http协议不断发送请求)的缺点:浪费流量(http请求头比较大)、浪费资源(没有更新也要请求)、消耗服务器
  • CPU占用(没有信息也要接收请求)。
  • WebSocket是保证只要在服务端和客户端建立连接后任何一端发起消息,相互推送消息,效率也是极大的提高了,并且服务端和客户端之间的标头信息很小,可以降低服务端的资源浪费。

三、Socket 连接

TCP 三次握手:握手过程中并不传输数据,在握手后服务器与客户端才开始传输数据,理想状态下,TCP 连接一旦建立,在通讯双方中的任何一方主动断开连接之前 TCP 连接会一直保持下去。

Socket 是对 TCP/IP 协议的封装,Socket 只是个接口不是协议,通过 Socket 我们才能使用 TCP/IP 协议,除了 TCP,也可以使用 UDP 协议来传递数据。

创建 Socket 连接的时候,可以指定传输层协议,可以是 TCP 或者 UDP,当用 TCP 连接,该Socket就是个TCP连接,反之。

Socket 原理

Socket连接,至少需要一对套接字,分为 clientSocket,serverSocket 连接分为3个步骤:
(1) 服务器监听: 服务器并不定位具体客户端的套接字,而是时刻处于监听状态;
(2) 客户端请求: 客户端的套接字要描述它要连接的服务器的套接字,提供地址和端口号,然后向服务器套接字提出连接请求;
(3) 连接确认: 当服务器套接字收到客户端套接字发来的请求后,就响应客户端套接字的请求,并建立一个新的线程,把服务器端的套接字的描述发给客户端。一旦客户端确认了此描述,就正式建立连接。而服务器套接字继续处于监听状态,继续接收其他客户端套接字的连接请求.

Socket为长连接:通常情况下Socket 连接就是 TCP 连接,因此 Socket 连接一旦建立,通讯双方开始互发数据内
容,直到双方断开连接。在实际应用中,由于网络节点过多,在传输过程中,会被节点断开连接,因此要通过轮询高速
网络,该节点处于活跃状态。很多情况下,都是需要服务器端向客户端主动推送数据,保持客户端与服务端的实时同
步。若双方是 Socket 连接,可以由服务器直接向客户端发送数据。若双方是 HTTP 连接,则服务器需要等客户端发
送请求后,才能将数据回传给客户端。因此,客户端定时向服务器端发送请求,不仅可以保持在线,同时也询问服务器
是否有新数据,如果有就将数据传给客户端。

总计:

  • 传输层的TCP是基于网络层的IP协议的,
  • 而应用层的HTTP协议又是基于传输层的TCP协议的,
  • 而Socket本身不算是协议,就像上面所说,它只是提供了一个针对TCP或者UDP编程的接口.

websocket 和socket区别

  • websocket是应用层的协议,而socket是传输控制层的协议.

websocket 和http区别

相同点:

  • 都是应用层的协议
  • 都是基于tcp,并且都是可靠的协议

不同点:

  • websocket是持久连接的协议,而http是非持久连接的协议.
  • websocket是双向通信协议,模拟socket协议,可以双向发送消息,而http是单向的.
  • websocket的服务端可以主动向客服端发送信息,而http的服务端只有在客户端发起请求时才能发送数据,无法主动向客户端发送信息. 详细请查阅: http,websocket和socket详解
    Http、Socket、WebSocket之间联系与区别

TCP的几个特殊状态

image.png