网络编程(2):TCP、UDP协议详解

来源:互联网 发布:水电费软件 编辑:程序博客网 时间:2024/06/07 06:19

  1. UDP协议
    1. UDP Header、UDP伪 header、校验和
    2. UDP协议特点:差错检测
    3. IP分组与重组
  2. TCP协议
    1. TCP Header
    2. TCP协议特点
      1. 差错检测
      2. 差错纠正
      3. 队列管理
      4. 重复消除
      5. 流量控制
      6. 拥塞控制
    3. TCP生命周期器
      1. TCP三次握手连接(三次握手)
      2. TCP四个握手断开连接(四次分手)
      3. TCP数据传输



1、UDP协议
     UDP是面向无连接、不可靠的传输层协议,它本质上就是在IP协议上添加了差错检测、超时重传、IP分组与重组等轻量级的功能组成的。
     它的传输速度十分快,但不考虑网络的状态与对其他用户网络的消极影响。但它也非常适合应用于实时要求高的场景。
     它是面向无连接的、不可靠的,因为数据报文是直接发送,并且不关心是否发送成功,而接收端则关心是否能收到数据包和数据报文正确与否。

1.1、UDP头、UDP伪头、校验和
UDP头 & UDP伪头:

UDP头的定义如下结构:

UDP Header一共8个字节,也比较简单。因为是传输层是面向端口传输编程,所以头里面有源端口号、目的端口号用于表明是哪个程序在收发。


UDP头 & UDP伪头的结构:

伪头的作用只是仅仅是用户校验和的的计算,实际上不传送出去(传送到别的层),让UDP层能验证数据是否正确到达目的地。

校验和:

发送方通过UDP头和UDP伪头生成校验和,接收方通过同样的数据生成校验和,通过比对两个校验和是否一致,可得出是否发生传输错误。
若发生传输错误,则舍弃整个报文,或者发起重启。

1.2、差错检测
UDP Header具备一个UDP校验和,通过校验和可以得知数据是否正确地传输,这就是UDP的差错检测。

NOTE:
校验和在IPV4是默认开启,但可关闭。
校验和在IPV6中是强制开启。

1.3、IP分组与重组

当报文超过数据链路层的MTU(max transfer unit)时,会将报文切分层若干IP报文发送,然后在接收端进行重组。而且只有一个IP报文会有UDP头。

重组失败的情况:
在IP层,当收到第一个UDP IP报文后,系统会启动计时器,若在计时器设定的时间内,都没有接收完完整的UDP报文,那么就会UDP重组失败。


2、TCP协议
{
  1. TCP协议
    1. TCP Header
    2. TCP协议特点
      1. 差错检测
      2. 差错纠正
      3. 队列管理
      4. 重复消除
      5. 流量控制
      6. 拥塞控制
    3. TCP生命周期器
      1. TCP三次握手连接(三次握手)
      2. TCP四个握手断开连接(四次分手)
      3. TCP数据传输
}
TCP协议是面向连接、可靠的单播协议。与UDP的数据模型是数据报文不一样,TCP的数据模型是字节流。

TCP Header

TCP的标准头部长度为20字节,若有附加的可选项就另算。
  • 端口:从有源端口和目的端口这点可以看出,TCP也是端口与端口通信的传输层协议。
  • 序列号字段:用于表示报文的顺序,是一个32位的上升方法的无符号数,到了2的32次方后再循环回到0。
  • 确认号字段:确认号包含的字段是该确认号的发送方期待的下一个序列号。
  • 标志位
    • CWR:拥塞窗口减(发送方降低发送速率)
    • ECE:ECN回应(发送方接收到一个更早的拥塞通告)
    • URG:紧急指针有效(很少被使用)
    • ACK:确认(确认字段有效,连接建立后一直有效)
    • PSH:推送(接收方应该尽快给应用程序传送这个数据—没被可靠地实现或者用到)
    • RST:重置连接(取消连接,通常是因为错误)
    • SYN:用于初始化一个连接的同步序列号
    • FIN:该报文段的发送方已经结束向对方发送数据
  • 窗口大小:16位定义窗口大小,同时允许发送多少IP报文
  • TCP校验和:用于差错检测
  • 紧急指针:略

TCP协议特点:
  1. 差错检测
  2. 差错纠正
  3. 队列管理
  4. 重复消除
  5. 流量控制
  6. 拥塞控制
差错检测 & 差错纠正:

TCP同样是使用校验和与CRC来检测分组里的差错。当TCP检测到分组里又差错的时候,会使用重传的方式实现差错纠正,具体流程如下:
(1)因为TCP是一个面向连接的协议,所以每一个数据包的发送成功都会得意一个ACK响应,当某一个ACK丢失了,发送方无法根据其判断出是丢失了那个组,所以只能通过重传所有数据实现差错纠正
(2)同样的,若某一个分组被校验和检测出发生传输错误,那么接收方就不会回应ACK,让发送方超时,从而启动重传。
(3)若发生重传,那必定会有重复分组存在,所以得根据序列号进行去重操作。
队列管理 & 重复消除:

TCP能根据序列号与相应好来轻松实现IP切块与重组。
若发生重传,那必定会有重复分组存在,所以得根据序列号进行去重操作。
流量控制 & 拥塞控制:

TCP是通过变量窗口来实现流量控制和拥塞控制的。
因为TCP是面向连接的协议,能根据ACK的响应速度,改变窗口大小(令牌数量)从而改变IP数据包的发送数量,从而能在恶劣的网络环境保持通信的质量。

TCP生命周期器:
  1. TCP三次握手连接(三次握手)
  2. TCP四个握手断开连接(四次分手)
  3. TCP数据传输
TCP三次握手连接(三次握手):
TCP四个握手断开连接(四次分手):
TCP数据传输:








0 0
原创粉丝点击