美文网首页
数据的传递:TCP/UDP数据格式

数据的传递:TCP/UDP数据格式

作者: SimpleBK | 来源:发表于2016-08-04 18:55 被阅读0次

    什么是多路复用?什么是多路分解?

    UDP和TCP最基本的任务是,将两个端系统间IP的交付服务扩展为运行在两个端系统上的进程之间的交付服务。将运输层报文段中的数据交付到正确的套接字,被称为多路分解;从源主机的不同套接字收集数据块,并为每个数据块封装上首部信息从而生成报文段,然后将报文段传递到网络层,这一工作被称为多路复用。

    多路复用/多路分解的实现

    多路复用的要求:

    1.套接字有唯一的标示符;

    2.每个报文段有特殊字段来指示该报文段要交付的套接字。

    UDP套接字是由一组二元组来标示报文段的:

    1.目的IP地址;

    2.目的端口号。

    TCP套接字是由一组四元组来标示报文段的:

    1.源IP地址;

    2.源端口号;

    3.目的IP地址;

    4.目的端口号。

    TCP 协议为终端设备提供了面向连接的、可靠的网络服务;UDP 协议为终端设备提供了无连接的、不可靠的数据报服务。从上图我们可以看出,TCP 协议为了保证数据传输的可靠性,相对于UDP 报文,TCP 报文头部有更多的字段选项。

    首先让我们来看一下 TCP 的报文头部主要字段:

    TCP报文头

    1.源端口号(source port)和目的端口号(destination port):用于标识和区分源端设备和目的端设备的应用进程。

    在TCP/IP 协议栈中,源端口号和目的端口号分别与源IP 地址和目的IP 地址组成套接字(socket),唯一的确定一条TCP 连接。

    2.序列号(Sequence number):用来标识TCP 源端设备向目的端设备发送的字节流,它表示在这个报文段中的第一个数据字节。

    如果将字节流看作在两个应用程序间的单向流动,则TCP 用序列号对每个字节进行计数。序列号是一个32bits 的数。

    3.确认序号(Acknowledgement number,32bits):既然每个传输的字节都被计数,确认序号包含发送确认的一端所期望接收到的下一个序号。

    因此,确认序号应该是上次已成功收到的数据字节序列号加1。

    4.窗口大小(windows size):TCP 的流量控制由连接的每一端通过声明的窗口大小来提供。

    窗口大小用数据包来表示,例如Windows size=3, 表示一次可以发送三个数据包。窗口大小起始于确认字段指明的值,是一个16bits 字段。窗口大小可以调节。

    5.校验和(checksum):用于校验TCP 报头部分和数据部分的正确性。

    6.可选字段:最常见的可选字段是 MSS(Maximum Segment Size,最大报文大小)。

    MSS指明本端所能够接收的最大长度的报文段。当一个TCP 连接建立时,连接的双方都要通告各自的MSS 协商可以传输的最大报文长度。我们常见的MSS有1024(以太网可达1460 字节)字节。

    UDP报文头

    相对于 TCP 报文,UDP 报文只有少量的字段:源端口号、目的端口号、长度、校验和等,各个字段功能和TCP 报文相应字段一样。

    UDP 报文没有可靠性保证和顺序保证字段,流量控制字段等,可靠性较差。当然,使用传输层UDP 服务的应用程序也有优势。正因为UDP 协议较少的控制选项,在数据传输过程中,延迟较小,数据传输效率较高,适合于对可靠性要求并不高的应用程序,或者可以保障可靠性的应用程序像DNS、 TFTP、SNMP 等;UDP 协议也可以用于传输链路可靠的网络。

    相关文章

      网友评论

          本文标题:数据的传递:TCP/UDP数据格式

          本文链接:https://www.haomeiwen.com/subject/tythsttx.html