TCP/UDP解析

时间:2024-10-11 09:15:11

文章目录

    • 主要特点
      • 1.1运用场景:
      • 1.2UDP首部信息
    • 主要特点
    • 的报文格式
    • 的可靠传输
      • 4.1TCP连接的两个端点都有两个窗口:
      • 4.2发送缓冲区和接收缓冲区
    • 的流量控制
      • 5.1流量控制介绍
      • 5.2死锁问题及解决
    • 的效率问题
      • 6.1 TCP的3种发送时机
      • 6.2 TCP的效率问题
      • 6.3糊涂窗口综合症
    • 7.拥塞控制
      • 7.1 拥塞控制概述
      • 7.2 拥塞控制与流量控制
      • 7.3 拥塞控制的原理
      • 7.4 拥塞出现的指标
      • 7.5 拥塞通知的传递
      • 7.6 TCP拥塞控制方法
        • 7.6.1 慢开始算法
        • 7.6.2 拥塞控制流程
        • 7.6.3 快重传
        • 7.6.4 快恢复算法
    • 的连接
      • 8.1 TCP的连接建立
        • 8.1.1 TCP连接建立过程中要解决的3个问题
        • 8.1.2 三报文握手建立连接
        • 8.1.3为什么两报文不行
        • 8.1.4 三报文的原因
        • 8.1.5 三报文握手建立TCP连接的各种状态
    • 连接释放
      • 9.1为什么客户端要等2MSL才关闭
      • 9.2 保活计时器

主要特点

1.不需要建立连接。

2.尽最大努力交付。

3.面向报文交付。

4.没有拥塞控制。

5.支持多种交互通信。

6.首部开销小仅有8字节。

7.应用程序必须选择合适的报文如果报文太长则需要IP分片,太小降低效率。

1.1运用场景:

1.可以重复请求信息的情况下例如:RIP,DNS,DHCP等

2.一次性传小量数据的应用

3.实时应用

4.多媒体应用。

1.2UDP首部信息

1.源端口(2)

2.目的端口(2)

3.长度(2)

4.检验和(2)(首部+伪首部+数据)

在这里插入图片描述

这个检验和是交给上层应用程序检查的,它就相当于你拆快递先检查收货地址(IP地址),再检查是不是你的名字(端口),再检查里面收件是不是错的(里面的数据)。

主要特点

1.面向连接:

TCP连接只能有两个端点,TCP连接是一对一的。

TCP提供可靠连接服务。TCP提供全双工通信。

2.面向字节流:

TCP和应用程序交互是一次一个数据块进行交互。但是TCP会把应用程序交下来的数据块看成一串无结构的字节流。

TCP报文收发之间的数据块不一定相同(因为我不一定一次接受多少受网络情况,拥塞情况控制)但是字节流一定相同。

TCP根据对方的接受能力和网络拥塞情况将字节流分成大小不同的段发送给接受缓存

在这里插入图片描述

的连接套接字连接两端的插口包含IP和端口号。全双工抽象连接。

的报文格式

在这里插入图片描述

1.源端口,目的端口各占两个字节是运输层与应用层交互的接口。

2.序号(4B):seq,字节序号本报文段所携带数据的第一个字节的序号。

3.确认号(4B):ack,期望对方下次发来数据的第一个字节的序号。

4.数据偏移(4bit):标志着报文段数据部分起始位置距离报文段起始位置的距离即首部长度。

(1B),紧急位置1,立刻将TCP发送缓存中的字节流打包成报文发送出去

(1B),ACK = 1代表确认号有效。

(1B),PSH = 1,接收方立刻将接收缓存数据上交给应用进程。

(1B),RST = 1,TCP连接中出现严重差错必须释放连接然后在重新建立运输连接。

(1B),SYN = 1,表示这是一个连接请求或连接接受的报文。

(1B),FIN = 1,用来释放一个连接。FIN为1表明报文段发送端已发送完成,并要求释放连接。

11.窗口(2B),告诉对方从确认号开始接收方目前允许对方发送的数据量。

12.检验和(2B),类似于UDP首部和数据这两部分计算时要在TCP报文段之前加上伪首部。

13.紧急指针,16位,当URG = 1时,这部分记录了紧急数据的大小把它放在数据部分的最前面发出去。

14.选项字段:长度可变最大报文段数据部分长度MSS,MSS告诉对方TCP我缓存最大能接受的长度为MSS。

MSS太大IP层分片只要有一片出错就得重传。

MSS太小效率低下。

15.其它选项:

窗口扩大选项:占3字节,其中一个字节S为窗口扩大的位数,比如(16+S)但是最大值不能超过30位

时间戳选项:1.计算往返时延。2.防止序号回绕。

在这里插入图片描述

发送时打一个时间戳放在timestamp中,收到确认报文后再打一个时间戳此时将之前的timestamp中的时间放在timestamp echo中然后将收到确认报文的时间戳放在timestamp中二者相减可以得到RTT。

2.防止序号回绕:由于序号编码空间是32位的所以一共是2的32次方。对于高带宽的网络很容易消耗完,也就是说接收