运输层协议TCP和UDP
一、用户数据报协议 UDP
1.1.UDP 概述
- UDP 只在 IP 的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能。
- 虽然 UDP 用户数据报只能提供不可靠的交付,但 UDP 在某些方面有其特殊的优点。
1.2.UDP的主要特点
-
UDP 是无连接的,即发送数据之前不需要建立连接。
-
UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。
-
UDP 是面向报文的。UDP 没有拥塞控制,很适合多媒体通信的要求。
-
UDP 支持一对一、一对多、多对一和多对多的交互通信。
-
UDP 的首部开销小,只有 8 个字节。
-
**UDP 是面向报文的 **
1.3.UDP 首部的格式
- 可以看到UDP的首部没有“编号”字段,因为UDP协议只需要传输一个数据包,所以不需要编号。
- 用户数据报 UDP 有两个字段:数据字段和首部字段。首部字段有 8 个字节,由 4 个字段组成,每个字段都是两个字节。
- 在计算检验和时,临时把“伪首部”和 UDP 用户数据报连接在一起。伪首部仅仅是为了计算检验和。
1.4.计算 UDP 检验和的例子
明确需要计算“校验和”来检验UDP报文的准确性即可。
二、传输控制协议TCP
在网络中传输数据,有的数据比较小,一个数据包就可以传完,这时使用UDP协议;有的数据比如电影500M比较大,这就要求把数据分段传输,分成的每个段就是一个数据包,依次传输和接收。传输的过程中有可能丢包,这就导致某些数据包缺失接收端无法打开整个文件,但是网络层不负责保证可靠传输,这就要依靠传输层的TCP协议来实现可靠传输。
再者,TCP协议还要有一个流量控制的功能,简单点说,服务器功能强大发数据很快,接收端无法及时处理就会给服务器发信息,告诉服务器减缓发送数据的速度。
还必须要有避免网络拥塞的功能。
2.1.TCP概述
-
TCP 是面向连接的运输层协议。即传输数据前需先建立连接确保网络通畅。
-
每一条 TCP 连接只能有两个端点(endpoint),每一条 TCP 连接只能是点对点的(一对一,一个发一个收)。
-
TCP 提供可靠交付的服务。
-
TCP 提供全双工通信,A与B通信,A发数据给B,B要给A发送返馈信息,表示数据是否收到。
-
面向字节流。
2.2.TCP面向字节流的概念
应当注意:
- TCP 连接是一条虚连接而不是一条真正的物理连接。
- TCP 对应用进程一次把多长的报文发送到TCP 的缓存中是不关心的。
- TCP 根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP 发送的报文长度是应用进程给出的)。
- TCP 可把太长的数据块划分短一些再传送。TCP 也可等待积累有足够多的字节后再构成报文段发送出去。
2.3.TCP 的连接
- TCP 把连接作为最基本的抽象。
- 每一条 TCP 连接有两个端点。
- TCP 连接的端点不是主机,不是主机的IP 地址,不是应用进程,也不是运输层的协议端口。TCP 连接的端点叫做套接字(socket)或插口。
- 端口号拼接到(contatenated with) IP 地址即构成了套接字。即端点=IP地址+端口号。
- 每一条 TCP 连接唯一地被通信两端的两个端点(即两个套接字)所确定。即:
socket 多种不同的意思
- 应用编程接口 API 称为 socket API, 简称为 socket。
- socket API 中使用的一个函数名也叫作 socket。
- 调用 socket 函数的端点称为 socket。
- 调用 socket 函数时其返回值称为 socket 描述符,可简称为 socket。
- 在操作系统内核中连网协议的 Berkeley 实现,称为 socket 实现。