TCP、UDP 太过爱你忘了你带给我的痛 2022-05-30 02:24 199阅读 0赞 TCP:TCP是面向连接的,可靠的流协议。(流就是指不间断的数据) 实行:顺序控制,重发控制,流量控制,拥塞控制,提高网络的利用率 UDP:UDP是不可靠的无连接的数据包协议,尽自己最大的努力交付数据。(高速性,实时性) **TCP协议建立连接:三次握手** **TCP协议关闭连接:四次挥手****:** 名词解释: ACK TCP报头的控制位之一,对数据进行确认.确认由目的端发出,用它来告诉发送端这个序列号之前的数据段 都收到了.比如,确认号为X,则表示前X-1个数据段都收到了,只有当ACK=1时,确认号才有效,当ACK=0时,确认号无效,这时会要求重传数据,保证数据的完整性. SYN 同步序列号,TCP建立连接时将这个位置1 FIN 发送端完成发送任务位,当TCP完成数据传输需要断开时,提出断开连接的一方将这位置1 **三次握手:** ![20180302111907126][] ### 第一次握手 ### 当客户端向服务器发起连接请求时,客户端会发送同步序列标号SYN到服务器,在这里我们设`SYN`为m,等待服务器确认,这时客户端的状态为`SYN`\_SENT。 ### 第二次握手 ### 当服务器收到客户端发送的`SYN`后,服务器要做的是确认客户端发送过来的`SYN`,在这里服务器发送确认包`ACK`,这里的`ACK`为m+1,意思是说“我收到了你发送的`SYN`了”,同时,服务器也会向客户端发送一个`SYN`包,这里我们设`SYN`为n。这时服务器的状态为`SYN`\_RECV。 一句话,服务器端发送`SYN`和`ACK`两个包。 ### 第三次握手 ### 客户端收到服务器发送的`SYN`和`ACK`包后,需向服务器发送确认包`ACK`,“我也收到你发送的`SYN`了,我这就给你发个确认过去,然后我们即能合体了”,这里的`ACK`为n+1,发送完毕后,客户端和服务器的状态为ESTABLISH,即TCP连接成功。 在三次握手中,客户端和服务器端都发送两个包`SYN`和`ACK`,只不过服务器端的两个包是一次性发过来的,客户端的两个包是分两次发送的。 **四次挥手:** **![20180302112610467][]** 断开连接请求可以由客户端发出,也可以由服务器端发出,在这里我们称A端向B端请求断开连接。 ### 第一次挥手 ### A端向B端请求断开连接时会向B端发送一个带有`FIN`标记的报文段,这里的`FIN`是`FIN`ish的意思。 ### 第二次挥手 ### B端收到A发送的`FIN`后,B段现在可能现在还有数据没有传完,所以B端并不会马上向A端发送`FIN`,而是先发送一个确认序号`ACK`,意思是说“你发的断开连接请求我收到了,但是我现在还有数据没有发完,请稍等一下呗”。 ### 第三次挥手 ### 当B端的事情忙完了,那么此时B端就可以断开连接了,此时B端向A端发送`FIN`序号,意思是这次可以断开连接了。 ### 第四次挥手 ### A端收到B端发送的`FIN`后,会向B端发送确认`ACK`,然后经过两个MSL时长后断开连接。 MSL是Maximum Segment Lifetime,最大报文段生存时间,2个MSL是报文段发送和接收的最长时间。 TCP建立连接要进行3次握手,而断开连接要进行4次 1 当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求 2 主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1 3 由B 端再提出反方向的关闭请求,将FIN置1 4 主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束. 由TCP的三次握手和四次断开可以看出,TCP使用面向连接的通信方式,大大提高了数据通信的可靠性,使发送数据端 和接收端在数据正式传输前就有了交互,为数据正式传输打下了可靠的基础 **UDP数据报文:** **![2018030211521374][]** **各字段详细解释** ●**源、目标端口号字段**:占16比特。作用与TCP数据段中的端口号字段相同,用来标识源端和目标端的应用进程。 ●**长度字段**:占16比特。标明UDP头部和UDP数据的总长度字节。 ●**校验和字段**:占16比特。用来对UDP头部和UDP数据进行校验。和TCP不同的是,对UDP来说,此字段是可选项,而TCP数据段中的校验和字段是必须有的。 UDP协议全称是**用户数据报协议**,在网络中它与TCP协议一样用于处理数据包,是**一种无连接的协议**。在OSI模型中,在第四层的传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。**UDP用来支持那些需要在计算机之间传输数据的网络应用**。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。 **UDP协议不面向连接,也不保证传输的可靠性。**例如:发送端的UDP协议层只管把应用层传来的数据封装成段交给IP协议层就算完成任务了,如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息。接收端的UDP协议层只管把收到的数据根据端口号交给相应的应用程序就算完成任务了,如果发送端发来多个数据包并且在网络上经过不同的路由,到达接收端时顺序已经错乱了,UDP协议层也不保证按发送时的顺序交给应用层。通常接收端的UDP协议层将收到的数据放在一个固定大小的缓冲区中等待应用程序来提取和处理,如果应用程序提取和处理的速度很慢,而发送端发送的速度很快,就会丢失数据包,UDP协议层并不报告这种错误。因此,使用UDP协议的应用程序必须考虑到这些可能的问题并实现适当的解决方案,例如等待应答、超时重发、为数据包编号、流量控制等。一般使用 UDP协议的应用程序实现都比较简单,只是发送一些对可靠性要求不高的消息,而不发送大量的数据。例如,基于UDP的TFTP协议一般只用 trivial ftp TCP FTP于传送小文件,而基于TCP的协议适用于各种文件的传输。 **UDP协议的特点:**UDP使用底层的互联网协议来传送报文,同IP一样提供不可靠的无连接数据包传输服务。它不提供报文到达确认、排序、及流量控制等功能 **CRC差错校验** **TCP数据报头:** **![20180302115241393][]** **各字段详细解释** ●**源、目标端口号字段**:占16比特。TCP协议通过使用"端口"来标识源端和目标端的应用进程。端口号可以使用0到65535之间的任何数字。在收到服务请求时,操作系统动态地为客户端的应用程序分配端口号。在服务器端,每种服务在"众所周知的端口"(Well-KnowPort)为用户提供服务。 ●**顺序号字段**:占32比特。用来标识从TCP源端向TCP目标端发送的数据字节流,它表示在这个报文段中的第一个数据字节。 ●**确认号字段**:占32比特。只有ACK标志为1时,确认号字段才有效。它包含目标端所期望收到源端的下一个数据字节。 ●**头部长度字段**:占4比特。给出头部占32比特的数目。没有任何选项字段的TCP头部长度为20字节;最多可以有60字节的TCP头部。 ●**标志位字段**(U、A、P、R、S、F):占6比特。各比特的含义如下: ◆**URG**:紧急指针(urgent pointer)有效。 ◆**ACK**:确认序号有效。 ◆**PSH**:接收方应该尽快将这个报文段交给应用层。 ◆**RST**:重建连接。 ◆**SYN**:发起一个连接。 ◆**FIN**:释放一个连接。 ●**窗口大小字段**:占16比特。此字段用来进行流量控制。单位为字节数,这个值是本机期望一次接收的字节数。 ●**TCP校验和字段**:占16比特。对整个TCP报文段,即TCP头部和TCP数据进行校验和计算,并由目标端进行验证。 ●**紧急指针字段**:占16比特。它是一个偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。 ●**选项字段**:占32比特。可能包括"窗口扩大因子"、"时间戳"等选项。 1)、应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元(MTU)的限制)。 2)、TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。 3)、接收端实体对已成功收到的包发回一个相应的确认(ACK)。如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验和函数来检验数据是否有错误,在发送和接收时都要计算校验和。 TCP(TransmissionControl Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议。在因特网协议族(Internetprotocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。 **TCP和UDP的区别?** * TCP是面向连接的,UDP是无连接的 * TCP保证数据传输的可靠性,UDP并不保证,可能出现数据包丢失的问题 * TCP对系统资源消耗较大,数据传输效率低、延迟大、速度慢;UDP资源消耗较小,数据传输效率高、延迟小、速度快 * TCP是基于字节流模式传输的,UDP是基于数据报模式传输的 * 每一个TCP连接只有双方通信,是一对一的;而UDP支持一对一、一对多、多对一、多对多的交互通信 **交换机和路由器有什么区别?** 说起来也很简单交换机是在物理层主要负责的在同一个局域网之中进行信息传递,而路由器主要解决的是不同局域网之间进行数据通信的时的信息交互设备,交换机拥有一条很高带宽的背部总线和内部交换矩阵。交换机的所有的端口都挂接在这条总线上,控制电路收到数据包以后,处理端口会查找内存中的地址对照表以确定目的MAC(网卡的硬件地址)的NIC(网卡)挂接在哪个端口上,通过内部交换矩阵迅速将数据包传送到目的端口,目的MAC若不存在则广播到所有的端口,接收端口回应后交换机会“学习”新的地址,并把它添加入内部MAC地址表中。 使用交换机也可以把网络“分段”,通过对照MAC地址表,交换机只允许必要的网络流量通过交换机。通过交换机的过滤和转发,可以有效的隔离广播风暴,减少误包和错包的出现,避免共享冲突。 **集线器与路由器在功能上有什么不同?** 集线器的作用可以简单的理解为将一些机器连接起来组成一个局域网。而交换机(又名交换式集线器)作用与集线器大体相同。但是两者在性能上有区别:集线器采用的是共享宽带方式,而交换机是独享带宽。这样在机器很多或数据量很大时,两者将会有比较明显的。而路由器与以上两者有明显区别,它的作用在于连接不同的网段并且找到网络中数据传输最合适的路径。路由器是产生于交换机之后,就像交换机产生于集线器之后,所以路由器与交换机也有一定联系,不是完全独立的两种设备。路由器主要克服了交换机不能路由转发数据包的不足。 [20180302111907126]: /images/20220530/36a7ef33a34f44d58ca15fb5423d8fe6.png [20180302112610467]: /images/20220530/1e368ab4dea94e14a48532a6c640e422.png [2018030211521374]: /images/20220530/dac1ee6fa4f9491b80bcee28eca94e6e.png [20180302115241393]: /images/20220530/ef19f2c100664bd79fdd07ff6361056b.png
相关 图解TCPIP---第六章---传输层TCPUDP 哈哈哈哈哈哈哈哈 `TCPIP识别一个进行通信的应用需要5大要素` 源IP地址 目标IP地址 源端口 目标端口 协议号 ------ ╰半橙微兮°/ 2023年07月04日 08:47/ 0 赞/ 38 阅读
还没有评论,来说两句吧...