TCP UDP详解

TCP和UDP

简介

TCP(Transmission Control Protocol) 传输控制协议
UDP(User Datagram Protocol) 用户数据报协议

TCP和UDP都是OSI模型中的运输层的协议,运输层向上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能的最底层。从运输层的角度来看,通信的真正的端点并不是主机而是主机中的进程。

网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信

UDP

UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立刻按照原样发送到网络上的一种机制。

UDP有两个字段:数据字段和首部字段构成。

首部字段8字节,由4部分组成:

  • 源端口
  • 目的端口
  • 长度
  • 检验和

TCP

TCP协议比较复杂

TCP报文段的首部格式

TCP首部的前20个字节是固定的,后面有4n字节是根据需要而增加的选项。

tcp首部

  • 源端口和目的端口:各占两个字节。
  • 序号:占4个字节,mod(1<<32) 运算。表示本报文段第一个数据的字节序号,也叫报文段序号
  • 确认号:占4个字节,是期望对方下一个报文段第一个数据字节的序号。若确认号 = N,则表示,到序号N-1为止所有数据都正确收到
  • 数据偏移(offset):占4位,指出TCP报文段的数据起始处距TCP报文段起始处有多远
  • 保留:占6位
  • 标志位:TCP flags
    • 紧急URG,当URG为1时,表示紧急指针字段有效。它告诉系统此报文段中有紧急数据,应当尽快传送,而不是按照原来的排队顺序传送,这需要与首部中的紧急指针配合使用,把紧急数据插入到本报文段数据的最前面。
    • 确认ACK,ACK = 1,确认号字段为有效。TCP规定,在连接建立后,所有传送的报文段都必须把ACK置为1。
    • 推送PSH,当两个进程进行交互式通信时,有时在一端的进程希望键入一个命令时立刻得到响应,这时候就需要置PSH位1。这样得到消息之后,不必等缓冲区慢直接交付应用程序。
    • 复位RST,当RST = 1时,表明TCP连接中出现了严重的差错,必须释放连接,然后重新建立运输连接。
    • 同步SYN,在连接建立时用来同步序号。当SYN = 1,而ACK = 0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使用SYN = 1,ACK = 1。因此,SYN置为1就表示这是一个连接请求或者连接接受报文。
  • 窗口:占2字节。窗口值为[0,(1<<16)-1]之间的整数。窗口值告诉对方:从本报文首部中的确认号算起,接收方目前允许对方发送的数据量。窗口值处于经常动态变化的状态。
  • 检验和:占2字节。检验和字段检验的范围包括首部和数据这两个部分。计算检验和时需要在TCP报文段之前加上12个字节的伪首部。
  • 紧急指针:占2字节。仅在URG为1时有效,指出了报文段中的紧急数据字节数(紧急数据结束之后是普通数据)。
  • TCP选项:长度可变,最长达到了40字节。如果没有选项时,TCP的字节长度为20字节。最初规定了一种选项即,MSS(Maximum Segment Size)最大报文段长度。

TCP的连接

每条TCP的连接都有两个端点,TCP连接的端点叫做套接字(socket)或者插口

  • 套接字socket = (IP 地址:端口号)
  • TCP连接 ::={socket1,socket2} = {(IP1:port1),(IP2:port2)}

TCP可靠传输的实现

TCP通过滑动窗口实现可靠的数据传输。TCP滑动窗口技术通过动态改变窗口大小来调节两台主机间数据传输。每个TCP/IP主机支持全双工数据传输,因此TCP有两个滑动窗口:一个用于接受数据,一个用于发送数据。

  • 发送窗口由如下构成
    • 已发送收到确认:窗口移动
    • 已发送但是未收到确认
    • 允许发送但是尚未发送
  • 接受窗口由如下构成
    • 按序到达的
    • 未按序到达的

TCP使用滑动窗口机制。发送窗口里面的序号表示允许发送的序号。发送窗口后沿的后面部分表示已发送且已收到了确认。而发送窗口前沿的前面部分表示不允许发送的。发送窗口的后沿变化情况有两种可能,即不动(没有收到新的确认)和前移(收到了新的确认)。发送窗口的前沿通常是不断向前移动的。

其他重要概念

停止等待协议

停止等待协议能够在不可靠的传输网络上面实现可靠的通信。每发送完一个分组就停止发送,等待对方确认。在收到确认后再发送下一个分组。分组需要编号。

超时重传是指:只要过了一段时间仍然没有收到确认,就重传前面发送过的分组。因此每发送完一个分组需要设置一个超时计时器,其重传时间应比数据在分组传输的平均往返时间长一些。这种自动重传方式常称为自动重传请求ARQ.

在停止等待协议中,若接收方收到了重复分组,就丢弃该分组,但同时还需要发送确认。

连续ARQ协议可以提高信道利用率。发送方维持一个发送窗口,凡位于放送窗口内的分组都可以连续的发送出去,而不需要等待对方的确认。接收方一般采用累积确认,对按序到达的最后一个分组发送确认,表明到这个分组为止所有分组都已经正确收到了

拥塞控制

在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏。这种情况就叫做拥塞。

为了进行拥塞控制,TCP的发送方要维持一个拥塞窗口 cwnd的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且在动态的变化中。发送方让自己的发送窗口取为拥塞窗口和接受方的接受窗口之中较小的一个。

TCP的拥塞控制采用了四种算法,即慢开始,拥塞避免,快重传和快恢复。在网络层,也可以使路由器采用适当的分组丢弃策略(如早期随机检测RED)

区别

  • TCP面向连接(如打电话要先拨号建立连接),UDP是无连接的,即发送数据之前不需要建立连接
  • TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
  • TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
    UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
  • 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
  • TCP首部开销20字节;UDP的首部开销小,只有8个字节
  • TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值