Android开发知识学习——TCP / IP 协议族

news2024/9/26 3:22:58

文章目录

  • 学习资源来自:扔物线
  • TCP / IP 协议族
  • TCP连接
    • TCP 连接的建立与关闭
      • TCP 连接的建立
        • 为什么要三次握手?
      • TCP 连接的关闭
        • 为什么要四次挥手?
      • 为什么要⻓连接?
  • 常见面试题
  • 课后题

学习资源来自:扔物线

TCP / IP 协议族

  • 一系列协议所组成的一个网络分层模型
  • 为什么要分层?
    因为网络的不稳定性
    在这里插入图片描述
  • Application Layer 应用层:HTTP、FTP、DNS,提供了网络应用程序之间的通信机制
  • Transport Layer 传输层:TCP、UDP,提供可靠的端到端的数据传输服务的层次
  • Internet Layer 网络层:IP,网络中所有数据传输的入口和出口
  • Link Layer 数据链路层:以太网、Wi-Fi,处理与传输媒介(如双绞线、光纤、无线电波等)的物理接口细节
    在这里插入图片描述

TCP连接

什么叫做连接
通信双方建立确认「可以通信」,不会将对方的消息丢弃,即为「建立连接」

TCP 连接的建立与关闭

TCP 连接的建立

在这里插入图片描述

① 首先客户端向服务器发送一个 SYN 包,并等待服务器确认,其中:

  • 标志位为 SYN,表示请求建立连接;
  • 序号为 Seq = x(x 一般取随机数);
  • 随后客户端进入 SYN-SENT 阶段。

② 服务器接收到客户端发来的 SYN 包后,对该包进行确认后结束 LISTEN 阶段,并返回一段 TCP 报文,其中:

  • 标志位为 SYN 和 ACK,表示确认客户端的报文 Seq 序号有效,服务器能正常接收客户端发送的数据,并同意创建新连接;
  • 序号为 Seq = y;
  • 确认号为 Ack = x+ 1,表示收到客户端的序号 Seq 并将其值加 1 作为自己确认号 Ack 的值,随后服务器端进入 SYN-RECV 阶段。

③ 客户端接收到发送的 SYN + ACK 包后,明确了从客户端到服务器的数据传输是正常的,从而结束 SYN-SENT 阶段。并返回最后一段报文。其中:

  • 标志位为 ACK,表示确认收到服务器端同意连接的信号;
  • 序号为 Seq = x + 1,表示收到服务器端的确认号 Ack,并将其值作为自己的序号值;
  • 确认号为 Ack= y + 1,表示收到服务器端序号 seq,并将其值加 1 作为自己的确认号 Ack 的值。
  • 随后客户端进入 ESTABLISHED。
    当服务器端收到来自客户端确认收到服务器数据的报文后,得知从服务器到客户端的数据传输是正常的,从而结束 SYN-RECV 阶段,进入 ESTABLISHED 阶段,从而完成三次握手
为什么要三次握手?

检查当前这个网络的情况是否满足可靠传输的基本条件
为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

具体例子:“已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。

TCP 连接的关闭

当客户端和服务器通过三次握手建立了TCP连接以后,当数据传送完毕,肯定是要断开TCP连接的啊。那对于TCP的断开连接,这里就有了神秘的“四次挥手”。

在这里插入图片描述

比如客户端初始化的序列号ISA=100,服务端初始化的序列号ISA=300。TCP连接成功后客户端总共发送了1000个字节的数据,服务端在客户端发FIN报文前总共回复了2000个字节的数据。

  • 第一次挥手:当客户端的数据都传输完成后,客户端向服务端发出连接释放报文(当然数据没发完时也可以发送连接释放报文并停止发送数据),释放连接报文包含FIN标志位(FIN=1)、序列号seq=1101(100+1+1000,其中的1是建立连接时占的一个序列号)。需要注意的是客户端发出FIN报文段后只是不能发数据了,但是还可以正常收数据;另外FIN报文段即使不携带数据也要占据一个序列号。

  • 第二次挥手:服务端收到客户端发的FIN报文后给客户端回复确认报文,确认报文包含ACK标志位(ACK=1)、确认号ack=1102(客户端FIN报文序列号1101+1)、序列号seq=2300(300+2000)。此时服务端处于关闭等待状态,而不是立马给客户端发FIN报文,这个状态还要持续一段时间,因为服务端可能还有数据没发完。

  • 第三次挥手:服务端将最后数据(比如50个字节)发送完毕后就向客户端发出连接释放报文,报文包含FIN和ACK标志位(FIN=1,ACK=1)、确认号和第二次挥手一样ack=1102、序列号seq=2350(2300+50)。

  • 第四次挥手:客户端收到服务端发的FIN报文后,向服务端发出确认报文,确认报文包含ACK标志位(ACK=1)、确认号ack=2351、序列号seq=1102。注意客户端发出确认报文后不是立马释放TCP连接,而是要经过2MSL(最长报文段寿命的2倍时长)后才释放TCP连接。而服务端一旦收到客户端发出的确认报文就会立马释放TCP连接,所以服务端结束TCP连接的时间要比客户端早一些。

为什么要四次挥手?

TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。

为什么要⻓连接?

因为移动网络并不在 Internet 中,而是在运营商的内网,并不具有真正的公网 IP,
因此当某个 TCP 连接在一段时间不通信之后,网关会出于网络性能考虑而关闭这条
TCP 连接和公网的连接通道,导致这个 TCP 端口不再能收到外部通信消息,即 TCP
连接被动关闭

⻓连接的实现方式
心跳。即在一定间隔时间内,使用 TCP 连接发送超短无意义消息来让网关不能将自
己定义为「空闲连接」,从而防止网关将自己的连接关闭。

常见面试题

  • 为什么TCP连接的时候是3次?2次不可以吗?
    因为需要考虑连接时丢包的问题,如果只握手2次,第二次握手时如果服务端发给客户端的确认报文段丢失,此时服务端已经准备好了收发数(可以理解服务端已经连接成功)据,而客户端一直没收到服务端的确认报文,所以客户端就不知道服务端是否已经准备好了(可以理解为客户端未连接成功),这种情况下客户端不会给服务端发数据,也会忽略服务端发过来的数据。如果是三次握手,即便发生丢包也不会有问题,比如如果第三次握手客户端发的确认ack报文丢失,服务端在一段时间内没有收到确认ack报文的话就会重新进行第二次握手,也就是服务端会重发SYN报文段,客户端收到重发的报文段后会再次给服务端发送确认ack报文。

  • 为什么TCP连接的时候是3次,关闭的时候却是4次?
    因为只有在客户端和服务端都没有数据要发送的时候才能断开TCP。而客户端发出FIN报文时只能保证客户端没有数据发了,服务端还有没有数据发客户端是不知道的。而服务端收到客户端的FIN报文后只能先回复客户端一个确认报文来告诉客户端我服务端已经收到你的FIN报文了,但我服务端还有一些数据没发完,等这些数据发完了服务端才能给客户端发FIN报文(所以不能一次性将确认报文和FIN报文发给客户端,就是这里多出来了一次)。

  • 为什么客户端发出第四次挥手的确认报文后要等2MSL的时间才能释放TCP连接?
    这里同样是要考虑丢包的问题,如果第四次挥手的报文丢失,服务端没收到确认ack报文就会重发第三次挥手的报文,这样报文一去一回最长时间就是2MSL,所以需要等这么长时间来确认服务端确实已经收到了

课后题

1.【单选题】TCP / IP 协议族中,HTTP 协议在哪一层?
A. 应用层
B. 传输层
C. 网络互联层
D. 数据链路层

答案: A
答案解析:HTTP(Hypertext Transfer Protocol)协议是一种应用层协议,它用于在网络中传输超文本(例如网页)。在TCP/IP协议族中,HTTP协议位于最上层,也就是应用层。

2.【单选题】TCP / IP 协议族中,TCP 协议在哪一层?
A. 应用层
B. 传输层
C. 网络互联层
D. 数据链路层

答案: B
答案解析:TCP(Transmission Control Protocol)协议是一种传输层协议,它在TCP/IP协议族中位于传输层。TCP协议负责将数据分段并提供可靠的传输,确保数据能够在网络中正确地传输到目标地址

3.【单选题】TCP / IP 协议族中,IP 协议在哪一层?
A. 应用层
B. 传输层
C. 网络互联层
D. 数据链路层

答案: C
答案解析:IP协议(Internet Protocol)是TCP/IP协议族中的核心协议之一,它位于网络互联层。IP协议负责将数据包从一个网络发送到另一个网络,确保数据的路由和传输

4.【单选题】TCP 协议的主要作用是?
A. 进行具体的网络应用交互
B. 保证网络数据的可靠传输
C. 解决在网络上传输包的问题,例如网络寻址、以包为单位发送网络数据

答案: B
答案解析:TCP(Transmission Control Protocol,传输控制协议)的主要作用是保证网络数据的可靠传输。TCP协议是一种面向连接的协议,它提供了一种可靠的、有序的和错误校验的数据传输方式。在TCP协议中,发送方和接收方之间建立连接,然后通过确认、序列号和流量控制等机制,确保数据的可靠传输。相比之下,应用层协议(如HTTP)主要负责具体的网络应用交互,而网络层协议(如IP)主要负责解决在网络上传输包的问题,例如网络寻址、以包为单位发送网络数据。因此,TCP协议的主要作用是保证网络数据的可靠传输

5.【单选题】IP 协议的主要作用是?
A. 进行具体的网络应用交互
B. 保证网络数据的可靠传输
C. 解决在网络上传输包的问题,例如网络寻址、以包为单位发送网络数据

答案: C
答案解析:IP协议是TCP/IP协议族中的核心协议之一,它负责将数据包从一个网络发送到另一个网络,确保数据的路由和传输。IP协议通过将数据分成一个个的数据包,并在每个数据包中包含源IP地址和目标IP地址,来实现数据的路由和传输。因此,IP协议的主要作用是解决在网络上传输包的问题,例如网络寻址、以包为单位发送网络数据

  1. 【作文题】 简述 TCP 连接建立时的「三次(三向)握手」

答案: TCP 连接建立时的 “三次握手” 是指在 TCP 协议中,建立连接时需要发送三个数据包来确认连接的建立。具体过程如下:

  1. SYN:首先,客户端发送一个带有 SYN(同步)标志的数据包到服务器。这个数据包中会包含一个随机生成的序列号,假设为 X。
  2. SYN-ACK:收到 SYN 包后,服务器会向客户端发送一个带有 SYN 和 ACK(确认)标志的数据包。这个数据包中包含两个序列号,一个是服务器自己随机生成的,假设为
    Y,另一个是对客户端的确认号,这个确认号等于客户端的序列号加一,即 Y = X + 1。
  3. ACK:最后,客户端再向服务器发送一个 ACK 数据包,其序列号等于服务器的序列号加一,即 Y = X + 2。 这样,就完成了 TCP 连接的三次握手过程,从而建立了可靠的连接。
  1. TCP为什么是三次握手不是两次握手?

答案: TCP协议使用三次握手是为了确保连接建立成功、确认收到数据包和对方的初始序列号以及防止已失效的连接请求报文突然又传送到了服务器1。

如果使用两次握手,在第一次握手时,客户端发送SYN数据包,服务器收到后没有发送确认报文,客户端超时后重新发送SYN数据包,此时如果网络中存在重传机制,客户端可能会接收到旧的SYN数据包,导致连接建立错误1。

  1. 【作文题】 简述 TCP 连接关闭时的「四次挥手」

答案: TCP 连接关闭时的 “四次挥手” 是指在 TCP 协议中,关闭连接时需要发送四个数据包来确认连接的关闭。具体过程如下:

  1. FIN:首先,客户端发送一个带有 FIN(结束)标志的数据包到服务器,用来关闭客户端到服务器的数据传送。
  2. ACK:服务器收到 FIN 后,发送一个带有 ACK(确认)标志的数据包到客户端,确认序号为收到序号加一,服务器进入 CLOSE_WAIT 状态。
  3. FIN:然后,服务器发送一个带有 FIN 标志的数据包到客户端,用来关闭服务器到客户端的数据传送,服务器进入 LAST_ACK 状态。
  4. ACK:最后,客户端收到 FIN 后,发送一个带有 ACK 标志的数据包到服务器,确认序号为收到序号加一,服务器进入 CLOSED 状态,完成四次挥手。
  1. 【作文题】 为什么 TCP 连接在断开时是四次挥手而不是三次?

答案: TCP 连接在断开时采用四次挥手而不是三次握手,主要是考虑到可靠性的问题
在三次握手的过程中,如果最后一个 ACK 数据包丢失,那么客户端会重新发送一个 FIN 数据包,而服务器会因为无法收到确认而进入 TIME_WAIT 状态。这种情况下,服务器会等待一段时间以确保所有的数据包都已发送完毕,然后才会关闭连接。然而,这段时间内服务器不能接受新的连接,造成了资源的浪费。
为了解决这个问题,TCP 协议采用了四次挥手的过程。在第四次挥手后,服务器可以立即释放连接,而不需要等待一段时间。这样,服务器可以更高效地利用资源,同时也减少了客户端和服务器之间的数据包数量。
因此,TCP 连接断开时采用四次挥手而不是三次握手是为了提高连接的可靠性并优化资源利用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1151599.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

潜力无限!深眸科技以工业视觉软硬件一体化解决方案深入应用场景

工业视觉作为智能制造的眼睛,在制造业各场景中具有广泛的应用前景,尤其是在检测、引导、定位、测量等方面应用需求不断提高。深眸科技为进一步巩固和加强技术领先优势,持续拓宽机器视觉技术的应用边界,通过先进的硬件设备和自研的…

86 最小栈

最小栈 题解1 STL大法好题解2 辅助最小栈(直观,空间换时间)题解3 不需要额外空间(!!!差值!!!) 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初…

支持「导入/导出」,应用迁移瞬间完成_三叠云

应用导入/导出 路径 应用管理 >> 创建新应用 功能简介 1. 应用程序支持「导出」功能,即将应用独立封装导出,用于三叠云系统内应用导入。 2. 应用程序支持「导入」功能,可以帮助用户将数据或文件导出到其他设备或应用程序中&#x…

思维导图在学习中的应用

思维导图在做学习中发挥着非常高效的作用,因为因为思维导图只有一页,所以需要准备和组织内容的时间会大大减少。并且思维导图的可视化的结构,可以让你瞬间将所有信息一览无余。而传统的笔记方法,会记录好几页。不仅信息冗杂&#…

【经典面试】87 字符串解码

字符串解码 题解1 递归(程序栈)——形式语言自动机(LL(1)) : O(S)另一种递归(直观) 题解2 2个栈(逆波兰式)1个栈(参考官方,但是不喜欢) 给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号内部的…

Linux 权限管理(二)

文件类型和访问权限(事物属性) linux前都会有一串这个字符,第二字符到第九字符分别表示拥有者,所属组,和other所对应的权限。那么第一个字符表示什么呢? 第一个字符表示文件类型: d&#xff1a…

开放式耳机百元价位推荐哪款比较好一点、最值得入手的开放式耳机

不知道有没有和我一样的朋友,在工作的时候喜欢带着耳机,享受音乐带来的愉悦。然而,传统的入耳式耳机在长时间佩戴时会给耳朵带来不适感,甚至损害听力。 因此我现在会使用开放式耳机,采用了开放式设计,不需…

流程封装与基于加密接口的测试用例设计

接口测试仅仅掌握 Requests 或者其他一些功能强大的库的用法,是远远不够的,还需要具备能根据公司的业务流程以及需求去定制化一个接口自动化测试框架的能力。所以,接下来,我们主要介绍下接口测试用例分析以及通用的流程封装是如何…

算法通关村第四关-青铜挑战基于链表完成栈

大家好我是苏麟 , 今天聊聊. 本期大纲 栈的基础知识栈的特征栈的操作Java中的栈 基于链表实现栈 栈的基础知识 栈的特征 栈和队列是比较特殊的线性表,又称之为访问受限的线性表。栈是很多表达式、符号等运算的基础,也是递归的底层实现。理论上递归能做…

进阶课5——人工智能数据分类

数据类型是指数据在计算机中的存储方式,根据数据的不同特征和表示方式,可以将数据分为不同的类型。在IT领域中,随着数字化信息技术的应用不断扩大,数据的种类和格式也越来越多。 从人机交互数据类型的视角来看,人工智…

RSA加密解密

生成公钥私钥: /*** RSA 生成公钥私钥*/ public class CreateSecrteKey {public static final String KEY_ALGORITHM "RSA";private static final String PUBLIC_KEY "RSAPublicKey";private static final String PRIVATE_KEY "RSAPri…

pytorch复现1_VGG

不涉及太多原理 VGG在2014年由牛津大学著名研究组VGG (Visual Geometry Group) 提出,斩获该年ImageNet竞赛中 Localization Task (定位任务) 第一名 和 Classification Task (分类任务) 第二名。 网络亮点: 1.通过堆叠多个3x3的卷积核来替代大尺度卷积核…

腾讯云轻量应用服务器“镜像”怎么选择合适?

腾讯云轻量应用服务器镜像怎么选择?如果是用来搭建网站可以选择宝塔Linux面板腾讯云专享版,镜像系统根据实际使用来选择,腾讯云百科txybk.com来详细说下腾讯云轻量应用服务器镜像的选择方法: 腾讯云轻量应用服务器镜像选择 轻量…

常熟,一座服装之城的三重升级

“姐妹你别看我瘦,我的肚子是这样,我115斤……你看我这个靴子,一穿就是会秒变大长腿的那种。” 晚上九点。大楼十层的走廊里,隐隐传来一个女性的声音。 如果你是她的157万粉丝之一,此时此刻打开抖音,就能…

8.3 矢量图层点要素单一符号使用四

文章目录 前言单一符号(Single symbol)渲染填充标记(Filled marker)QGis代码实现 总结 前言 上一篇教程介绍了矢量图层点要素单一符号中椭圆形标记(Ellipse marker)和字符标记(Font marker&…

【全志R128外设模块配置】USB外设功能配置

USB 外设功能配置 USB 功能简介 USB 功能模块包括了USB Host,USB Device 和OTG 功能。 USB Host 目前已经支持上的功能有:Mass Storage,UVC。 USB Device 目前已经支持上的功能有:ADB,UAC。 OTG 主要用作Host 与D…

极速指南:在 SpringBoot 中快速集成腾讯云短信功能

前言 今天分享一个SpringBoot集成腾讯云短信的功能,平常除了工作,很多xdm做自己的小项目都可能用到短信,但自己去看文档挺费劲的,我这边就帮你节省时间,直接把步骤给你列出来,照做就行。 实战 1、申请密…

python_PyQt5日周月K线纵向对齐显示_2_显示工具

目录 写在前面: 结果显示: 代码: 计算日数据、周数据,月数据,并返回 生成提示信息数据,同时将日周月合并到一个DataFrame中 返回K线图和成交量柱状图的数据 主界面,显示日周月对齐的K线图…

【思考】为什么要有随机分析,为什么要有频域变换

问:为什么要有随机分析,为什么要有频域变换? 答:因为原有的时域方法很难描述一些信号或噪声。 例如这样一个信号 如果要写出时域公式,简直是太复杂了,怎么描述它呢。一是从0时刻开始指数衰减。二是可以说…