UDP
- 用户数据报协议 UDP(User Datagram Protocol):无连接;尽最大努力的交付;面向报文;无拥塞控制;支持一对一、一对多、多对一、多对多的交互通信;首部开销小(只有四个字段:源端口、目的端口、长度、检验和)。UDP是面向报文的传输方式是应用层交给UDP多长的报文,UDP发送多长的报文,即一次发送一个报文。因此,应用程序必须选择合适大小的报文。
- 传输控制协议 TCP(Transmission Control Protocol):面向连接;每一个TCP连接只能是点对点的(一对一);提供可靠交付服务;提供全双工通信;面向字节流。应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序看成是一连串的无结构的字节流。TCP有一个缓冲,当应该程序传送的数据块太长,TCP就可以把它划分短一些再传送。
UDP的首部格式:

用户数据报有两个字段:数据字段和首部字段,数据字段很简单,只有8个字节,由四个字段组成,每个字段的长度都是两个字节。各字段意义如下:
- 源端口: 源端口号,在需要给对方回信时使用。不需要是可全用0.
- 目的端口号: 这在终点交付报文时必须使用。
- 长度: 用户数据报UDP的长度,最小为8(仅首部)。
- 校验和: 用于校验用户数据报在传输过程是否出错,出错则丢弃该报文。
TCP报文首部格式:

源端口和目的端口: 各占两个字节,分别写入源端口号和目的端口号。
序号 :
占4个字节;用于对字节流进行编号,例如序号为 301,表示第一个字节的编号为 301,如果携带的数据长度为 100 字节,那么下一个报文段的序号应为 401。
确认号 :
占4个字节;期望收到的下一个报文段的序号。例如 B 正确收到 A 发送来的一个报文段,序号为 501,携带的数据长度为 200 字节,因此 B 期望下一个报文段的序号为 701,B 发送给 A 的确认报文段中确认号就为 701。
数据偏移 :
占4位;指的是数据部分距离报文段起始处的偏移量,实际上指的是首部的长度。
确认 ACK :
当 ACK=1 时确认号字段有效,否则无效。TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 置 1。
同步 SYN :
在连接建立时用来同步序号。当 SYN=1,ACK=0 时表示这是一个连接请求报文段。若对方同意建立连接,则响应报文中 SYN=1,ACK=1。
终止 FIN :
用来释放一个连接,当 FIN=1 时,表示此报文段的发送方的数据已发送完毕,并要求释放连接。
窗口 :
占2字节;窗口值作为接收方让发送方设置其发送窗口的依据。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。
检验和:
占2个字节;检验和字段检验的范围包括首部和数据这两个部分。在计算检验和时,在TCP报文段的前面加上12字节的伪首部。
套接字:
TCP连接的端点叫做套接字或插口。端口号拼接到IP地址即构成了套接字。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Michael's Blog!
评论



