协议(TCP/IP,TCP)【详】

前言

  如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
  而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!


协议(TCP/IP,TCP)【详】

1、协议的分层模型(协议族(TCP/IP))

概述:
TCP/IP 不是TCP和IP这i两个协议的合称,而是因特网整个TCP/IP整个协议族,从协议分层来讲分为
【网络接口层】,【网络层】,【传输层】,【应用层】
协议的分层模型:

序号 模型 概念 作用
1 网络接口层 主机必须使用某种协议与网络相连。 【这是TCP/IP软件的最低层】,负责接收IP数据包并通过网络发送之,或者从网络上接收物理帧,抽出IP数据报,交给IP层。
2 网络层 其功能是使主机可以把分组发往任何网络,并使分组独立地传向目标。 【TCP/IP协议族中非常关键的一层】,主要定义了IP地址格式,从而能够使得不同应用类型的数据在Internet上通畅地传输,IP协议就是一个网络层协议。
3 传输层 使源端和目的端机器上的对等实体可以进行会话。在这一层定义了两个端到端的协议:传输控制协议(TCP)和用户数据报协 议(UDP),除了基本的数据传输外,它还有可靠性保证、流量控制、多路 复用、优先权和安全性控制等功能。 提供应用程序间的通信(TCP,UDP)
4 应用层 包含所有的高层协议,包括:虚拟终端协议(TELNET,TELecommunications NETwork)、文件传输协议(FTP,File Transfer Protocol)、电子邮件 传输协议(SMTP,Simple Mail Transfer Protocol)、域名服务(DNS,Domain NameService)、网上新闻传输协议(NNTP,Net News Transfer Protocol)和超文本传送协议 (HTTP,HyperText Transfer Protocol)等 所有用户所面向的应用程序的统称

2、TCP协议

在这里插入图片描述

2.1、TCP 传输前

TCP 传输前进行三次沟通,简称为【三次握手】
知识点:

1、当建立一个新的连接时, 【SYN】 标志变 1
2、【顺序号 seq】( 32 位):用来标识从 TCP 源端向 TCP 目的端发送的数据字节流,它表示在这个 报文段中的第一个数据字节的顺序号。如果将字节流看作在两个应用程序间的单向流动,则TCP 用【顺序号】对每个字节进行计数
3、【确认号 ack】( 32 位):包含发送确认的一端所期望收到的下一个顺序号。因此,确认序号应当 是上次已成功收到数据字节顺序号加 1 。只有 【ACK】 标志为 1 时确认序号字段才有效。
4、【SYN 】同步序号为 1 表示连接请求,用于建立连接和使顺序号同步( synchronize )

【第一次握手】【主机 A】 发送位码为 syn=1,随机产生 seq number=1234567 的数据包到服务器, 【主 机 B】
由 SYN=1 知道, 【主机 A】 要求建立联机;
【第二次握手】【主 机 B】 收 到 请 求 后 要 确 认 联 机 信 息 , 向 【主机 A】发 送 ack number=( 【主机 A】 的 seq+1),syn=1,ack=1,随机产生 seq=7654321 的包
【第三次握手】【主机 A】 收到后检查 ack number 是否正确,即第一次发送的 seq number+1,以及位码 ack 是否为 1,若正确, 【主机 A】 会再发送 ack number=(主机 B 的 seq+1),ack=1【主 机 B】 收到后确认seq 值与 ack=1 则连接建立成功。

在这里插入图片描述

2.2、TCP 传输完数据断开时

知识点:

【FIN】 :用于释放连接,为 1 表示发送方已经没有数据发送了,即关闭本方数据流。

1) 关闭客户端到服务器的连接:首先客户端 A 发送一个 FIN,用来关闭客户到服务器的数据传送, 然后等待服务器的确认。其中终止标志位 FIN=1,序列号 seq=u
2) 服务器收到这个 FIN,它发回一个 ACK,确认号 ack 为收到的序号加 1。
3) 关闭服务器到客户端的连接:也是发送一个 FIN 给客户端。
4) 客户段收到 FIN 后,并发回一个 ACK 报文确认,并将确认序号 seq 设置为收到序号加 1。
首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
在这里插入图片描述
四次挥手描述:

主机 A 发送 FIN 后,进入终止等待状态, 服务器 B 收到主机 A 连接释放报文段后,就立即 给主机 A 发送确认,然后服务器 B 就进入 close-wait 状态,此时 TCP 服务器进程就通知高 层应用进程,因而从 A 到 B 的连接就释放了。此时是“半关闭”状态。即 A 不可以发送给 B,但是 B 可以发送给 A。此时,若 B 没有数据报要发送给 A 了,其应用进程就通知 TCP 释放连接,然后发送给 A 连接释放报文段,并等待确认。A 发送确认后,进入 time-wait,注 意,此时 TCP 连接还没有释放掉,然后经过时间等待计时器设置的 2MSL 后,A 才进入到 close 状态。

2.3 TCP与UDP的比较

序号 TCP UDP
1 TCP面向有链接的通信服务 UDP面向无连接的通信服务
2 TCP提供可靠的通信传输 UDP不可靠,会丢包
3 TCP保证数据顺序 UDP不保证
4 TCP数据无边界 UDP有边界
5 TCP速度慢 UDP速度快
6 TCP面向字节流 UDP面向报文
7 TCP一对一 UDP一对多
8 TCP报头至少20字节 UDP报头8字节
9 TCP有流量控制,拥塞控制 UDP没有
10 TCP对比UDP来说不安全 UDP对比TCP来说较安全

2.4 关于TCP与UDP的问题

2.4.1、为什么TCP比UDP可靠?

因为UDP没有确认机制,对于TCP来说,只有建立连接后才会发送数据,
而UDP是不管对方存不存在都会发送数据,而且TCP有确认机制,对于接收端来说,接收端每接受一个数据包,都会回复给客户端, 对于客户端来说,超时,或者数据包不完整的时候会重传,而UDP没有确认机制,有可能会丢包。

2.4.2、为什么TCP要比UDP稳定?

因为UDP数据传输时如果网络不好,很可能会丢包,对比UDP,TCP有确认机制,三次握手等机制,而UDP是面向无连接的,没有TCP这些机制,在数据传输时如果网络不好,很可能会丢包

2.4.3、为什么UDP比TCP快?

因为对比TCP,UDP是一对多的,不像TCP是一对一,为了保持可靠、稳定,TCP相比UDP,要做很多机制来达到这个目的
如传入数据前要进行三次握手;
传输数据时,要进行确认机制(确认、重传、拥塞等会消耗大量时间以及CPU和内存等硬件资源);
传入数据完,要进行四次挥手;
自然TCP的消耗就比UDP更多,因此UDP比TCP传输速率更快

2.4.4、为什么TCP无边界,而UDP有边界?

因为TCP有缓存区,而UDP无缓存区
TCP有缓存区,客户端分多次发送数据给服务器,只要服务器的缓冲区够大,那么服务器端会在客户端发送完之后一次性接收过来,所以是无边界的。
而UDP无缓存区,也就是说客户端每发送一次,服务器端就会接收一次,发送多少次就会接收多少次,因此是有边界的。

2.4.5、为什么UDP比TCP较安全?

因为UDP是面向无连接的,不存在连接状态,不易被利用攻击,而TCP有确认机制,三次握手等机制,因此存在被人模仿,攻击,而UDP没有TCP这样的机制,自然被人利用的漏洞就少了,因此相比于TCP来说,UDP更加安全。

2.4.6、:为什么TCP关闭要四次挥手,而不是三次挥手。?

这是由于 TCP 的半关闭造成的。因为 TCP 连接是全双工的(即数据可在两个方向上同时传递)所以进行关闭时每个方向上都要单独进行关闭。【这个单 方向的关闭就叫半关闭】。当一方完成它的数据发送任务,就发送一个 FIN 来向另一方通告将要终止这个 方向的连接。

猜你喜欢

转载自blog.csdn.net/weixin_38316697/article/details/114314060