type
status
date
slug
summary
tags
category
password
icon

TCP/IP 协议族

概念

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

具体分层:

  • Application Layer 应⽤层:HTTP、FTP、DNS
  • Transport Layer 传输层(是否重传,分块,组装):TCP、UDP
  • Internet Layer ⽹络层(寻址,路由,传输):IP
  • Link Layer 数据链路层:以太⽹、Wi-Fi

TCP 的连接

TCP 是一种有状态的长连接。
💡
什么叫做有状态? 即每次发送消息不用确认身份,在连接的时候发送双方已经互相知晓彼此的状态,互相认识了。 什么叫做连接? 通信双⽅建⽴确认「可以通信」,不会将对⽅的消息丢弃,即为「建⽴连接」 另外同一个主机可以通过 TCP 建立多个连接,多个连接应该怎么区分呢? 这里就需要使用端口(Socket,套接字),通行双方都暴露出一个端口,双方通过自己的端口向对方的端口发送消息。 什么是 Socket?
notion image

TCP 连接的建立

notion image

TCP 连接的关闭

💡
为什么要关闭? 为了省资源,TCP 有状态的,连接时,端口被占用,也保存了状态的信息。当不需要连接时,就需要释放这些资源
notion image
 

长连接

💡
为什么要长连接? 因为移动⽹络并不在 Internet 中,⽽是在运营商的内⽹,并不具有真正的公⽹ IP,因此当某个 TCP 连接在⼀段时间不通信之后,⽹关会出于⽹络性能考虑⽽关闭这条 TCP 连接和公⽹的连接通道,导致这个 TCP 端⼝不再能收到外部通信消息,即 TCP 连接被动关闭。
💡
虽然 TCP 是长连接,不会主动断开,但是由于网络中的链路由很多网关控制,当一个 TCP 连接长时间没有传输数据,网关会认为连接有一方或者双方都出现异常,就把双方的端口都关闭掉,然后整个连接都被关闭。
长连接的实现方式
⼼跳。即在⼀定间隔时间内,使⽤ TCP 连接发送超短⽆意义消息来让⽹关不能将⾃⼰定义为「空闲连接」,从⽽防⽌⽹关将⾃⼰的连接关闭。
登录和授权编码、加密、压缩、Hash、序列号和字符集
Loading...
shuouyang
shuouyang
android开发 ReactNative开发 小程序开发
最新发布
AOSP 环境搭建
2025-3-29
View 绘制流程-源码解析
2025-3-12
HTTP
2025-3-4
JVM 虚拟机
2025-2-28
蓝牙-BLE-基础
2025-2-28
从 OkHttp 的原理来看 HTTP
2025-2-19
公告
🎉热点信息🎉
--- 1 ---
Jet Brains 推出新的跨平台支持 Kotlin MultiPlatform
--- 2 ---
新的小巧便捷的依赖注入框架 Koin
--- 3 ---
新一代 API 查询语言 GraphQL