传输层中TCP和UDP

简介: 主要学习了TCP和UDP协议TCP和UDP报文格式三次握手四次挥手

TCP协议介绍(传输层)


TCP(Transmisson Control Protocol)、(传输控制协议):是面向连接的、可靠的进程到进程通信协议。TCP提供双工服务,即数据可在同一时间双向传输,每一个TCP都有发送缓存和接受缓存,用来临时存放数据。


TCP报文格式


TCP将若干字节构成一个分组,叫包文段(Sement)

TCP报文段封装在IP数据报中

image.png

TCP报文的首部长度20~60个字节、内容如下

image.png

**源端口号:**为发送方进程对应的端口好。

**目标端口号:**对应的是接受端的进程,接受端接受到数据段后,根据这个端口号来确定把数据送给那个应用的进程。

序号当TCP从进程接受数据字节时,就把他们存储在发送缓存中,并对每一个字节进行编号。当数据到达目的后,接收端会按照这个序号把数据重新排列,保证数据的正确性。

**确认号:**确认号是对发送端的确认信息,用它来告诉发送端这个序列号之前的数据段都已经收到

**首部长度:**用它可以确定首部数据结构的字节长度。

**保留:**这部分保留位作为今后扩展功能用。

**URG:**紧急指针有效位。

**ACK:**只有当ACK=1时,确认序列号字段才有效;当ACK=0时,确认序列号字段无效

**PSH:**标志位位1时要求接收方尽快将数据段送达应用层。

**RST:**当RST值为1时通知从新建立TCP连接。

**SYN:**同步序列号,TCP需要建立连接时将这个值设为1。

**FIN:**发送端完成发送任务,当TCP完成数据传输需要断开连接时,提出断开连接的一方将这个值设为1。

**窗口值:**说明本地可接收数据端的数目,这个值的大小是可变的

**校验和:**要来做差错控制。若两次的校验和一致,这说明数据基本是正确的,否者将认为数据以损坏,接受端将丢弃数据。

**紧急指针:**和URG配合使用,当URG=1时有效。

**选项:**在TCP首部可以有多达40字节的可选信息。


三次握手


1、第一次握手:客户端给服务器发送一个 SYN 报文。

2、第二次握手:服务器收到 SYN 报文之后,会应答一个 SYN+ACK 报文。

3、第三次握手:客户端收到 SYN+ACK 报文之后,会回应一个 ACK 报文。

4、服务器收到 ACK 报文之后,三次握手建立完成。

image.png

为什么三次握手不能两次进行连接?


第一次握手:客户端发送网络包,服务端收到了。

这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。

第二次握手:服务端发包,客户端收到了。

这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。

第三次握手:客户端发包,服务端收到了。

这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。


四次挥手


1、第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于FIN_WAIT1状态。


2、第二次握手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 + 1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT状态。


3、第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态。


4、第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 + 1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态


5、服务端收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态。

image.png


为什么断开连接是四次挥手不是三次挥手?


ack是为了让对方闭嘴。结束,1)A不停的说,我想结束,不再发了。2)B收到后,但是还有数据没处理完,就发ack让A闭嘴。等我处理完再说。3)B终于处理完了,不停对A说,满足你结束吧。4)A

知道B要结束了,给B说,可以闭嘴了,我结束B收到结束,不再发送确认,进入关闭态

网络的可靠性不可预知,当服务端发起第三次挥手,进入 LAST-ACK 后,它需要等一个反馈,即客户端接收到了自己的消息,而不是在传输过程中丢了。这就是需要第四次握手的原因。当然,假设不需要第四次握手,第三次握手后,服务端就直接 CLOSED 了,那这个第三次握手的报文如果客户端没收到, 对于客户端来说,就以为服务端的数据还没传完,就会一直等待在 FIN-WAIT-2 这个阶段。因为第三次握手是服务端发送 FIN报文的。TCP 是一种可靠的传输层协议,这是设计上的原则


如果已经建立链接,但是客户端突然出现了故障应该怎么办?


TCP还设有一个保活计时器Q,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时问通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。


UDP协议


UDP是一个无连接、不保证可靠性的传输层协议,也就是说发送端不关心发送的数据是否到达目标主机、数据是否出错。


UDP首部报文格式


image.png

**源端口号:**用来标识数据发送端的进程

**目的端口号:**用来标识数据接受端的进程

**UDP长度:**用来指出UDP的总长度,为首部加上数据。

**校验和:**用来完成对UDP数据的差错校验,这是UDP提供的唯一可靠机制。


总结


主要学习了TCP和UDP协议

TCP和UDP报文格式

三次握手四次挥手


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
4天前
|
监控 网络协议 网络性能优化
不再困惑!一文搞懂TCP与UDP的所有区别
本文介绍网络基础中TCP与UDP的区别及其应用场景。TCP是面向连接、可靠传输的协议,适用于HTTP、FTP等需要保证数据完整性的场景;UDP是无连接、不可靠但速度快的协议,适合DNS、RIP等对实时性要求高的应用。文章通过对比两者在连接方式、可靠性、速度、流量控制和数据包大小等方面的差异,帮助读者理解其各自特点与适用场景。
|
14天前
|
存储 网络协议 安全
用于 syslog 收集的协议:TCP、UDP、RELP
系统日志是从Linux/Unix设备及网络设备生成的日志,可通过syslog服务器集中管理。日志传输支持UDP、TCP和RELP协议。UDP无连接且不可靠,不推荐使用;TCP可靠,常用于rsyslog和syslog-ng;RELP提供可靠传输和反向确认。集中管理日志有助于故障排除和安全审计,EventLog Analyzer等工具可自动收集、解析和分析日志。
|
29天前
|
网络协议 网络性能优化 数据处理
深入解析:TCP与UDP的核心技术差异
在网络通信的世界里,TCP(传输控制协议)和UDP(用户数据报协议)是两种核心的传输层协议,它们在确保数据传输的可靠性、效率和实时性方面扮演着不同的角色。本文将深入探讨这两种协议的技术差异,并探讨它们在不同应用场景下的适用性。
71 4
|
29天前
|
监控 网络协议 网络性能优化
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
59 3
|
1月前
|
网络协议 算法 网络性能优化
|
1月前
|
网络协议 SEO
TCP连接管理与UDP协议IP协议与ethernet协议
TCP、UDP、IP和Ethernet协议是网络通信的基石,各自负责不同的功能和层次。TCP通过三次握手和四次挥手实现可靠的连接管理,适用于需要数据完整性的场景;UDP提供不可靠的传输服务,适用于低延迟要求的实时通信;IP协议负责数据包的寻址和路由,是网络层的重要协议;Ethernet协议定义了局域网的数据帧传输方式,广泛应用于局域网设备之间的通信。理解这些协议的工作原理和应用场景,有助于设计和维护高效可靠的网络系统。
43 4
|
1月前
|
缓存 负载均衡 网络协议
面试:TCP、UDP如何解决丢包问题
TCP、UDP如何解决丢包问题。TCP:基于数据块传输/数据分片、对失序数据包重新排序以及去重、流量控制(滑动窗口)、拥塞控制、自主重传ARQ;UDP:程序执行后马上开始监听、控制报文大小、每个分割块的长度小于MTU
|
3月前
|
存储 网络协议 算法
UDP 协议和 TCP 协议
本文介绍了UDP和TCP协议的基本结构与特性。UDP协议具有简单的报文结构,包括报头和载荷,报头由源端口、目的端口、报文长度和校验和组成。UDP使用CRC校验和来检测传输错误。相比之下,TCP协议提供更可靠的传输服务,其结构复杂,包含序列号、确认序号和标志位等字段。TCP通过确认应答和超时重传来保证数据传输的可靠性,并采用三次握手建立连接,四次挥手断开连接,确保通信的稳定性和完整性。
116 1
UDP 协议和 TCP 协议
|
2月前
|
网络协议 前端开发 物联网
TCP和UDP区别?
本文首发于微信公众号“前端徐徐”,详细介绍了TCP和UDP两种传输层协议的核心概念、连接性和握手过程、数据传输和可靠性、延迟和效率、应用场景及头部开销。TCP面向连接、可靠、有序,适用于网页浏览、文件传输等;UDP无连接、低延迟、高效,适用于实时音视频传输、在线游戏等。
73 1
TCP和UDP区别?
|
2月前
|
Web App开发 缓存 网络协议
不为人知的网络编程(十八):UDP比TCP高效?还真不一定!
熟悉网络编程的(尤其搞实时音视频聊天技术的)同学们都有个约定俗成的主观论调,一提起UDP和TCP,马上想到的是UDP没有TCP可靠,但UDP肯定比TCP高效。说到UDP比TCP高效,理由是什么呢?事实真是这样吗?跟着本文咱们一探究竟!
72 10