linux网络tcpudp详解,Linux网络编程-TCP头部与UDP头部结构对比

UDP头部结构

UDP是面向数据报的简单传输层协议,不需要建立服务器与客户端的连接就能传输数据报,数据报是指从发送方到接收方的一个信息单元。正因为不需要建立连接所以它不能及时的返回传输状态,也不能确定数据是否到达发送方。

UDP头部的结构:

16位源端口号:标识发送方应用程序

16位目的端口号:标识接收方应用程序

16位UDP数据报长度:表示发送方传输数据报的大小

16位检验和:校验数据报是否完整,不完整是重发数据

UDP首部共为8字节 (16+16+16+16)/ 8 = 8字节

UDP头部结构图如下:

cce580397a13a9dfd5f5bf370f1f8b33.png

TCP头部结构

TCP是面向连接的协议,因此数据传输之前必须先建立连接,通过连接来传输数据,当数据传输完成后断开连接,因此TCP相比UDP可以保证数据的可靠稳定。

TCP头部的结构:

16位源端口号:标识发送方应用程序

16位目的端口号:标识接收方应用程序

32位序列号:数据按照序列号传输,如果接收方接收后的数据序列号出现错误,可以根据此序列号进行重排

32位确定序列号:接收方接收到信号后,对发送方进行确认,此确定号为接收到的序列号+1

4位头部长度:标识TCP头部有多少个4字节,最大为1111(15)

6位保留长度:暂时没有标明用途

6位标志:

URG:紧急指针,让中间层尽快处理数据

ACK:确定信号,让确认序列号有效

PSH:push操作,数据到达接收方后立即送入应用程序,不进入缓存区

RST:复位连接,用来复位错误的连接

SYN:同步信号,在建立连接的三次握手中会用到

FIN:发送方数据发送完成,在断开连接的四次挥手中会用到

16位窗口大小:是接收方用于告诉发送方TCP缓冲区还能容纳多少字节

16位检验和:检验数据在发送过程中是否损坏

16位紧急指针:当URG为1时,表示此序列号开始到此序列号+紧急指针之间的数据为紧急数据

TCP头部通常占20个字节,也是必有字节(可能TCP头部超过20字节但以上自己必有)(16+16+32+32+4+6+1+1+1+1+1+1+16+16+16)/ 8 = 20字节

TCP头部结构如下图:

805e6ea328cca1183f9ff5a41bb60a36.png

UDP与TCP对比

如果需要在应用程序使用UDP时,那么进程可以创建一个Internet域内的SOCK_DGRAM类型的套接字。每次用此套接字发送数据时必须制定目的地址的IP地址和端口号。用此套接字介绍数据时,接收的数据保中包含源ipd地址和端口号。

UDP不能保证数据的可靠传输,如果想要实现这个功能,则必须在应用程序中实现

UDP发送的是UDP数据报,因此每个数据报都有一个长度值。可以从UDP的头部结构中能看出。而TCP是字节协议,没有长度限制

UDP没有传输过程中的流量控制,传输数据只根据发送发的速率,不管接收方的缓冲区大小。

由于UDP不面向连接,因此同一个套接字可以向不同目标发送数据报,同样,一个套接字也可以介绍不同发送方的数据

TCP与UDP对比

与UDP相比,TCP采用了确定机制,超时重传机制和流量控制机制

确定机制:TCP接收方接收到数据后需要向发送发反馈确认信息。如果发送方没有收到确认的信息则重新发送数据。反馈信息的TCP头部用到了32位确认序列号和ACK。TCP的确认信号是对已接收的连续序号最后一个字节确认,其值为希望下次接收的序列号。例如接收到序列号为100,大小100的数据,则发送的确定序列号为201,在比如201在发送时候出错了,此时的确认信号仍然为201,则需要再次发送。

超时重传机制:TCP发送方在发送数据过后并没有把数据删除,仍然把数据保留在发送缓冲区,直到接收到确认后才删除。如果在一段时间内没有收到确认信号,则重新发送一个数据包,如此循环,直到收到确认,或者到达一定限制后,放弃发送数据。返回对方不可达。

流量控制机制:TCP接收方能够告诉发送发自己还能接收多大的数据量,称为通告窗口。窗口可以动态标识还能接收多少空间的数据,从而保证不会溢出。16位的窗口大小就是用来表示接收方TCP缓冲区还有多少空间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值