计算机网络——运输层中的UDP和TCP协议

由于UDP和TCP协议是运输层中比较重点的内容,因此这里单独写一篇文章以帮助大家(我自己)更好理解。

1、UDP协议

UDP仅在IP的数据报服务上增加了两个最基本的服务:复用和分用以及差错检测。

使用UDP的优点:

  1. UDP无需建立连接

  2. 无连接状态

  3. 分组首部开销小

  4. 应用层能更好地控制要发送的数据和发送时间

  5. UDP支持一对一、一对多、多对一和多对多的交互通信。

1.1 UDP的首部格式

UDP数据报包含两部分:UDP首部和用户数据。UDP首部有8B,由四个字段张春光,每个字段的长度是2B。它们是:

  1. 源端口

  2. 目的端口

  3. 长度

  4. 校验和

当传输层从IP层收到UDP数据报事,就根据首部中的目的端口,把UDP数据报通过相应的端口上交给应用进程。如果接收方UDP发现收到的报文中的目的端口号不正确,那么就丢弃该报文,并有ICMP发送“端口不可达”差错报文给发送方。

1.2 UDP检验

在计算校验和时,要在UDP数据报之前增加12B的伪首部。伪首部既不向下传送也不向上递交,而只是为了计算校验和。UDO的校验和检查首部和数据部分。

UDP校验和的计算方法:

发送方首先把全0放入校验和字段并添加首部,则要在数据部分末尾填入一个全0字节(但此字节不发送)。然后按照二进制反码计算出这些16为字的和,将此和的二进制反码写入校验和字段并发送。接收方把收到的UDP数据报加上伪首部,将此和的二进制反码写入校验金额字段并发送。接收方把收到的UDP数据报加上伪首部后安二进制反码求这些16位字的和。当无差错时结果应全为1,否则表明有差错,接收方应丢弃这个UDP数据报。

2、TCP协议

TCP协议是在不可靠的IP层之上实现的可靠的数据传输协议,它主要解决传输的可靠、有序、无丢失和不重复问题。TCP是TCP/IP体系中非常复杂的一个协议,主要特点如下:

  1. TCP是面向连接的传输层协议,TCP连接是一条逻辑连接。

  2. 每一条TCP连接只能有两个端点,每一条TCP连接只能是点到点的(一对一)

  3. TCP提供可靠交付的服务,保证传送的数据无差错、不丢失、不重复且有序。

  4. TCP提供全双工通信,允许通信双方的应用进程在任何时候都能发送数据,为此TCP连接的两端都设有发送缓存和接受缓存,用来临时存放双向通信的数据

  5. TCP是面向字节流的,虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据仅视为一连串的无结构的字节流。

TCP和UDP在发送报文时所采用的方式完全不同。UDP报文的长度由发送应用进程决定,而TCP报文的长度则根据接收方给出的窗口值和当前网络拥塞程度来决定。如果应用程序传送到TCP缓存的数据块太长,TCP就把它划分得短一些再传送;如果太短,TCP也可以等到积累足够多的字节后再构成报文段发送出去。

2.1 TCP报文段

TCP传送的数据单元称为报文段。TCP报文段既可以用来运载数据,又可以用来建立连接、释放连接和应答。

一个TCP报文段分为首部和数据两部分。整个TCP报文段作为IP数据报的数据部分封装在IP数据报中。其首部的前20B是固定的。TCP首部最短为20B,后面有4N字节是根据需要而增加的选项。

【学习地址】:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发

【文章福利】:免费领取更多音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击1079654574加群领取哦~

首部的各字段为:

  1. 源端口和目的端口,各占2B。端口是传输层与应用层的服务接口,传输层的复用和分用功能都要通过端口实现。

  2. 序号,占4B。TCP连接传送的字节流中的每个字节都按顺序编号。序号字段的值指的是本报文段所发送的数据的第一个字节的序号。

  3. 确认号,4B。是期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则表明序号N-1为止的所有数据都已正确收到。

  4. 数据偏移(即首部长度),占4位它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。“数据偏移”的单位是32位(以4B为计算单位)。由于4位二进制数能表示的最大值为15,因此TCP首部的最大长度为60B。

  5. 保留,占6位。

  6. 紧急位URG。当URG=1时,表明紧急指针字段有效,表示此报文段中有紧急数据,应尽快传送。

  7. 确认位ACK,当ACK=1时,确认号字段有效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1。

  8. 推送位PSH(push)。接收方TCP收到PSH=1的报文段,就尽快交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。

  9. 复位位RST(reset)。当RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立运输连接。

  10. 同步位SYN。当SYN=1时表示这是一个连接请求或连接接受报文。

  11. 终止位FIN(finish)。当FIN=1时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接。

  12. 窗口,占2B。表明允许对方发送的数据量。

  13. 校验和,占2B。检验的范围包括首部和数据两部分。

  14. 紧急指针,占2B。当URG=1才有意义,指出紧急数据共有多少字节。

  15. 选项,长度可变。MSS是TCP报文段中的数据字段的最大长度。

  16. 填充,为了是整个首部长度是4B的整数倍。

2.2 TCP连接管理

TCP连接的端口为socket,每天TCP连接唯一地被通信的两个端点(即两个套接字)确定。

TCP连接的建立采用客户/服务器模式。主动发起连接建立的应用进程称为客户,而被动等待连接建立的应用进程称为服务器。

2.2.1 TCP连接的建立

  1. 客户机的TCP首先向服务器发送链接请求报文段。此时首部中的同步位SYN置1,同时选择一个初始序号seq=x。TCP规定,SYN报文段不能携带数据,但要消耗一个序号。

  2. 服务器的TCP收到连接请求报文段后,如同意建立连接,则向客户机发回确认,并为该TCP连接分配缓存和变量。在确认报文段中,把SYN和ACK位都置1,确认号是ack=x+1,同时也为自己选择一个初始序号seq=y。确认报文段也不能携带数据,但要消耗一个序号。

  3. 当客户机收到确认报文段后,还要向服务器给出确认,并为该TCP连接分配缓存和变量。确认报文段的ACK位置1,确认号ack=y+1,序号seq=x+1。该报文段可以携带数据,若不携带数据则不消耗序号。

成功进行以上三步后,就建立了TCP连接。值得注意的是,服务器端的资源是在完成第二次握手时分配的,而客户端的资源是在完成第三次握手时分配的,这就使得服务器易于受到SYN洪泛攻击。

(TCP释放在此不再赘述。)

3、总结:

  1. 连接建立

    • SYN=1,seq=x

    • SYN=1,ACK=1,seq=y,ack=x+1

    • ACK=1,seq=x+1,ack=y+1

  2. 释放连接

    • FIN=1,seq=u

    • ACK=1,seq=v,ack=u+1

    • FIN=1,ACK=1,seq=w,ack=u+1

    • ACK=1,seq=u+1,ack=w+1

由于篇幅原因,暂时先记录到这里~

原文链接:计算机网络——运输层中的UDP和TCP协议 - 掘金

猜你喜欢

转载自blog.csdn.net/irainsa/article/details/130414303