一文搞懂传输层TCP和UDP

 

一、TCP报文:

当一台计算机想要与另一台计算机通讯时,两台计算机之间的通信需要畅通且可靠,这样才能保证正确收发数据。例如,当你想查看网页或查看电子邮件时,希望完整且按顺序查看网页,而不丢失任何内容。当你下载文件时,希望获得的是完整的文件,而不仅仅是文件的一部分,因为如果数据丢失或乱序,都不是你希望得到的结果,于是就用到了TCP。

TCP(Transmission Control Protocol)协议全称是传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,由 IETF 的RFC 793定义。TCP 是面向连接的、可靠的流协议。流就是指不间断的数据结构,你可以把它想象成排水管中的水流。

报文格式:

TCP报文由首部和数据两部分组成。首部一般由20-60字节(Byte)构成,长度可变。其中前20B格式固定,后40B为可选。

因为,TCP报文还得传给下层网络层,封装成IP包,而一个IP包最大长度为65535,同时IP包首部也包含最少20B,所以一个IP包或TCP包可以包含的数据部分最大长度为65535-20-20=65495B。

TCP报文中数据部分是可选的,即TCP报文可以不包含数据(同理IP包也可以不包含数据)。不含数据的TCP报文通常是一些确认和控制信息类的报文,如TCP建立连接时的三次握手和TCP终止时的四次挥手等。

1、源端口号(Source Port)

16位的源端口字段包含初始化通信的端口号。源端口和IP地址的作用是标识报文的返回地址。

2、目的端口号(Destination Port)

 16位的目的端口字段定义传输的目的。这个端口指明接收方计算机上的应用程序接口。

3、序列号(Sequence Number)

该字段用来标识TCP源端设备向目的端设备发送的字节流,它表示在这个报文段中的第几个数据字节。序列号是一个32位的数。

4、确认号(Acknowledge Number)

  TCP使用32位的确认号字段标识期望收到的下一个段的第一个字节,并声明此前的所有数据已经正确无误地收到,因此,确认号应该是上次已成功收到的数据字节序列号加1。收到确认号的源计算机会知道特定的段已经被收到。确认号的字段只在ACK标志被设置时才有效。

5、首部长度

长度为4位,用于表示TCP报文首部的长度。用4位(bit)表示,十进制值就是[0,15],一个TCP报文前20个字节是必有的,后40个字节根据情况可能有可能没有。如果TCP报文首部是20个字节,则该位应是20/4=5。

6、保留位(Reserved)

长度为6位,必须是0,它是为将来定义新用途保留的。

7、标志(Code Bits)

长度为6位,在TCP报文中不管是握手还是挥手还是传数据等,这6位标志都很重要。6位从左到右依次为:

        • URG:紧急标志位,说明紧急指针有效;

        • ACK:确认标志位,多数情况下空,说明确认序号有效; 取1时表示应答字段有效,也即TCP应答号将包含在TCP段中,为0则反之。

        • PSH:推标志位,置位时表示接收方应立即请求将报文交给应用层;

        • RST:复位标志,用于重建一个已经混乱的连接,用来复位产生错误的连接,也会用来拒绝错误和非法的数据包。

        • SYN:同步标志,该标志仅在三次握手建立TCP连接时有效

        • FIN:结束标志,表示发送端已经发送到数据末尾,数据传送完成,发送FIN标志位的TCP段,连接将被断开。

8、窗口大小(Window Size)

长度为16位,TCP流量控制由连接的每一端通过声明的窗口大小来提供。

9、检验和(Checksum)

长度为16位,该字段覆盖整个TCP报文端,是个强制性的字段,是由发送端计算和存储,到接收端后,由接收端进行验证。

10、紧急指针(Urgent Pointer)

长度为16位,指向数据中优先部分的最后一个字节,通知接收方紧急数据的长度,该字段在URG标志置位时有效。

11、选项(Options)

长度为0-40B(字节),必须以4B为单位变化,必要时可以填充0。通常包含:最长报文大小(MaximumSegment Size,MSS)、窗口扩大选项、时间戳选项、选择性确认(Selective ACKnowlegement,SACK)等。

12、数据

可选报文段数据部分。

补充:

源端口(Source port)和目的端口(Destination port)

各16 bits。IP地址标识互联网中的不同终端,端口号标识终端中的不同应用进程,具有本地意义。32位IP + 16位端口号 = 48位插口。

端口由互联网数字分配机构(Internet Assigned Numbers Authority,IANA)分配,TCP和UDP端口号列表。

著名端口号(Well-known)

注册端口号(Registered)

动态端口号(Dynamic)

0~1023

1024~49151

49152~65535

IANA统一分配

向IANA申请注册

本地分配

链接(握手)过程和断开(挥手)过程:

    1. 创建连接的三次握手过程
      1. client向server发起连接请求(第一次握手)
        1. SYN置1, seq=x
      2. server收到了client发送的数据包后,会向client发送一个应答,同时发送一个序号(第二次握手)
        1. ACK=1, ack=x+1, seq=y
      3. client收到server的应答后,向server发送最后的应答(第三次握手)
        1. ACK=1, ack = y+1

    1. 连接断开四次挥手过程
      1. client向server发送请求断开的数据包(第一次挥手)
        1. FIN = 1, seq = m
      2. server收到了client请求断开的数据包后,会向client端发送应答(第二次挥手)
        1. ACK = 1, ack = m + 1
      3. 当server数据交换完成,也不需要通讯的时候,向client发送断开数据包(第三次挥手)
        1. FIN = 1,seq = n
      4. client最后向server发送应答(第四次挥手)
        1. ACK = 1, ack = n + 1

TCP协议的特点

  • 面向连接
  • 仅支持单播传输

每条TCP传输连接只能有两个端点,只能进行点对点的数据传输,不支持多播和广播传输方式。

  • 面向字节流

TCP不像UDP一样那样一个个报文独立地传输,而是在不保留报文边界的情况下以字节流方式进行传输。

  • 可靠传输
  • 提供拥塞控制

当网络出现拥塞的时候,TCP能够减小向网络注入数据的速率和数量,缓解拥塞

  • TCP提供全双工通信

TCP允许通信双方的应用程序在任何时候都能发送数据,因为TCP连接的两端都设有缓存,用来临时存放双向通信的数据。当然,TCP可以立即发送一个数据段,也可以缓存一段时间以便一次发送更多的数据段(最大的数据段大小取决于MSS)

二、UDP报文:

UDP(User Datagram Protocol)协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。

报文格式

UDP数据报由首部和数据两部分组成,其中首部只有8B(字节)。

1、源端口号(Source Port)

长度为16位,指明发送数据的进程。

2、目的端口号(Destination Port)

长度为16位,指明目的主机接收数据的进程。

3、长度

长度为16位,该字段值为报头和数据两部分的总字节数。

4、检验和(Checksum)

长度为16位,UDP检验和作用于UDP报头和UDP数据的所有位。由发送端计算和存储,由接收端校验。

5、数据

UDP特点:

1. 面向无连接

首先 UDP 是不需要和 TCP一样在发送数据前进行三次握手建立连接的,想发数据就可以开始发送了。并且也只是数据报文的搬运工,不会对数据报文进行任何拆分和拼接操作。

具体来说就是:

  • 在发送端,应用层将数据传递给传输层的 UDP 协议,UDP 只会给数据增加一个 UDP 头标识下是 UDP 协议,然后就传递给网络层了
  • 在接收端,网络层将数据传递给传输层,UDP 只去除 IP 报文头就传递给应用层,不会任何拼接操作

2. 有单播,多播,广播的功能

UDP 不止支持一对一的传输方式,同样支持一对多,多对多,多对一的方式,也就是说 UDP 提供了单播,多播,广播的功能。

3. UDP是面向报文的

发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。因此,应用程序必须选择合适大小的报文

4. 不可靠性

首先不可靠性体现在无连接上,通信都不需要建立连接,想发就发,这样的情况肯定不可靠。

并且收到什么数据就传递什么数据,并且也不会备份数据,发送数据也不会关心对方是否已经正确接收到数据了。

再者网络环境时好时坏,但是 UDP 因为没有拥塞控制,一直会以恒定的速度发送数据。即使网络条件不好,也不会对发送速率进行调整。这样实现的弊端就是在网络条件不好的情况下可能会导致丢包,但是优点也很明显,在某些实时性要求高的场景(比如电话会议)就需要使用 UDP 而不是 TCP。

5. 头部开销小,传输数据报文时是很高效的

三、TCP和UDP的区别

  1. 连接性

    • TCP
      • TCP是面向连接的协议,通信前需要进行三次握手建立连接,通信结束后需要四次挥手释放连接。
      • 提供可靠的数据传输,通过序列号、确认应答、重传机制等确保数据的完整性和顺序性。
    • UDP
      • UDP是无连接的协议,发送数据包时不需要建立连接,也没有连接维护的开销。
      • 不提供可靠性保证,数据包可能丢失、重复或乱序,应用层需要自行处理。
  2. 数据传输方式

    • TCP
      • TCP采用字节流传输方式,将数据分割成小的数据段进行传输,并在接收端重新组装。
      • 保证数据的完整性和顺序性,避免了数据包的拆分和重组。
    • UDP
      • UDP采用数据报传输方式,每个数据包独立发送,没有拆分和重组的过程。
      • 每个数据包都是一个完整的消息,没有顺序性要求,也没有重传机制。
  3. 可靠性

    • TCP
      • TCP提供可靠的数据传输,通过确认应答、重传机制、校验和等手段确保数据的正确性。
      • 数据包在传输过程中如有丢失或损坏会被重新发送,保证数据的完整性。
    • UDP
      • UDP不提供数据传输的可靠性保证,数据包可能会丢失或乱序,应用层需要自行处理错误情况。
  4. 开销

    • TCP
      • TCP协议有较多的控制信息和机制,如确认、流量控制、拥塞控制等,导致通信开销较大。
      • 适用于对数据传输可靠性要求高的场景,如文件传输、网页浏览等。
    • UDP
      • UDP协议没有连接管理和重传机制,通信开销较小,适用于实时性要求高的应用,如音视频传输、在线游戏等。

综上所述,TCP和UDP在连接性、数据传输方式、可靠性和开销等方面存在明显的区别,选择合适的协议取决于具体的应用需求和网络环境。

以上是小编的一些理解如有错误还请各位大佬不吝赐教,感谢!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值