type
status
date
slug
summary
tags
category
password
icon
TCP/IP 协议族
概念
一系列协议族所组成的一个网络分层模型
为什么要分层?
首先因为网络的不稳定性,发送数据和接收数据的过程中都会存在数据丢失的问题。数据丢失了,需不需要重新传输?
另外发送较大的数据时,一但中途发生数据丢失,需要整体重新发送,造成的流量损失也比较大,是不是还需要分块传输。分块传输的话,数据就需要拆分和组装。
那么是不是需要专门有一层决定是否需要重传,分块和组装。
再者,重传和分块传输,都建立在传输的基础上,那么是不是需要有一层专门负责传输。

具体分层:
- Application Layer 应⽤层:HTTP、FTP、DNS
- Transport Layer 传输层(是否重传,分块,组装):TCP、UDP
- Internet Layer ⽹络层(寻址,路由,传输):IP
- Link Layer 数据链路层:以太⽹、Wi-Fi
TCP 的连接
TCP 是一种有状态的长连接。
什么叫做有状态?
即每次发送消息不用确认身份,在连接的时候发送双方已经互相知晓彼此的状态,互相认识了。
什么叫做连接?
通信双⽅建⽴确认「可以通信」,不会将对⽅的消息丢弃,即为「建⽴连接」
另外同一个主机可以通过 TCP 建立多个连接,多个连接应该怎么区分呢?
这里就需要使用端口(Socket,套接字),通行双方都暴露出一个端口,双方通过自己的端口向对方的端口发送消息。
什么是 Socket?

TCP 连接的建立
TCP 连接的关闭
为什么要关闭?
为了省资源,TCP 有状态的,连接时,端口被占用,也保存了状态的信息。当不需要连接时,就需要释放这些资源
长连接
为什么要长连接?
因为移动⽹络并不在 Internet 中,⽽是在运营商的内⽹,并不具有真正的公⽹ IP,因此当某个 TCP 连接在⼀段时间不通信之后,⽹关会出于⽹络性能考虑⽽关闭这条 TCP 连接和公⽹的连接通道,导致这个 TCP 端⼝不再能收到外部通信消息,即 TCP 连接被动关闭。
虽然 TCP 是长连接,不会主动断开,但是由于网络中的链路由很多网关控制,当一个 TCP 连接长时间没有传输数据,网关会认为连接有一方或者双方都出现异常,就把双方的端口都关闭掉,然后整个连接都被关闭。
长连接的实现方式
⼼跳。即在⼀定间隔时间内,使⽤ TCP 连接发送超短⽆意义消息来让⽹关不能将⾃⼰定义为「空闲连接」,从⽽防⽌⽹关将⾃⼰的连接关闭。
- 作者:shuouyang
- 链接:https://notion-tree.vercel.app/article/fc005abf-e199-48a0-b1eb-ddbc2a17fdb4
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。