User Datagram Protocol 用户数据报协议面试
随时发送数据,无需链接缓存
单播、多播、广播安全
单播
:一台主机给一台主机发送数据网络
多播
:一台主机给多台主机中的一部分发送数据tcp
广播
:一台住距给多台主机全部发送数据ide
发送时直接添加首部。接收时直接除去首部。纯面向报文spa
因无链接,提供的是不可靠服务。即,UDP 发送方不会在乎误码、丢包,接收方不作任何处理,只管接受计算机网络
优势:3d
UDP 头部包含了如下几个数据指针
Transmission Control Protocol 传输控制协议
三次握手创建链接 -> 数据传输 -> 四次挥手释放链接
单播
发送方将数据块分割并存储在缓存,根据策略提取必定量字节,添加首部发送。接收方提取TCP报文中的数据并存储在缓存,将缓存中一部分字节流交给应用进程。纯面向字节流。
注意
接收方收到并确认无误后,会给发送方返回一个确认报文。若是发送方没有收到确认报文,会进行超时重发,直到(事实上有上限次数)收到接收端的确认报文。
TCP 会严格控制传输的正确性,一旦有某一个数据对端没有收到,就会中止下来直到对端收到这个数据。
对于 TCP 头部来讲,如下几个字段是很重要的
32位序号
Sequence number,这个序号保证了 TCP 传输的报文都是有序的,对端能够经过序号顺序的拼接报文确认序号
Acknowledgement Number,这个序号表示数据接收端指望接收的下一个字节的编号是多少,同时也表示上一个序号的数据已经收到窗口大小
Window Size,表示还能接收多少字节的数据,用于流量控制标识符
确认标志位
, 该字段为一表示确认序号字段有效。此外,TCP 还规定在链接创建后传送的全部报文段都必须把 ACK 置为一。请求或应答标志位
,当SYN=1,ACK=0时,表示当前报文段是一个链接请求报文。当SYN=1,ACK=1时,表示当前报文段是一个赞成创建链接的应答报文。结束标志位
,该字段为一表示此报文段是一个释放链接的请求报文。第一次:客户端 -> 服务端
包含字段 | 字段值 | 说明 |
---|---|---|
随机生成 Sequence number | 随机生成 假设 10000 | 返回 Seq 需从10000开始 |
SYN 标志位 | 1 |
第二次:服务端 -> 客户端
包含字段 | 字段值 | 说明 |
---|---|---|
Sequence | 假设 20000 | |
SYN 标志位 | 1 | |
ACK 标志位 | 1 | 确认消息有效 |
确认序号 Acknowledgement | 12345 | 确认序号段有效 |
客户端:已经知道我发送的消息,服务端能够收到
服务端:不知道我发送的消息,客户端是否能够收到
第三次:客户端 -> 服务端
包含字段 | 字段值 | 说明 |
---|---|---|
ACK 标志位 | 1 | |
确认序号 Acknowledgement | 20001 |
整个过程叫双工
客户端 -> 服务端
包含字段 | 字段值 | 说明 |
---|---|---|
FIN | 1 | |
Sequence | 25368 |
服务端 -> 客户端
包含字段 | 字段值 | 说明 |
---|---|---|
Acknowledgement | 25639 | |
ACK | 1 |
服务端首先响应客户端断开请求,可能这时候有别的数据请求正在处理
服务端 -> 客户端
包含字段 | 字段值 | 说明 |
---|---|---|
Sequence | 10568 | |
FIN | 1 |
客户端知道,能够断开了
客户端 -> 服务端
包含字段 | 字段值 | 说明 |
---|---|---|
ACK | 1 | |
Acknowledge | 20569 |
服务端知道,能够断开了
TCP/IP 协议是传输层的一个面向链接的安全可靠的一个传输协议,三次握手的机制是为了保证能创建一个安全可靠的链接,那么第一次握手是由客户端发起,客户端会向服务端发送一个报文,在报文里面:SYN标志位置为1,表示发起新的链接。当服务端收到这个报文以后就知道客户端要和我创建一个新的链接,因而服务端就向客户端发送一个确认消息包,在这个消息包里面:ack标志位置为1,表示确认客户端发起的第一次链接请求。以上两次握手以后,对于客户端而言:已经明确了我既能给服务端成功发消息,也能成功收到服务端的响应。可是对于服务端而言:两次握手是不够的,由于到目前为止,服务端只知道一件事,客户端发给个人消息我能收到,可是我响应给客户端的消息,客户端能不能收到我是不知道的。因此,还须要进行第三次握手,第三次握手就是当客户端收到服务端发送的确认响应报文以后,还要继续去给服务端进行回应,也是一个ack标志位置1的确认消息。经过以上三次链接,无论是客户端仍是服务端,都知道我既能给对方发送消息,也能收到对方的响应。那么,这个链接就被安全的建了。
- | UDP | TCP |
---|---|---|
命名 | User Datagram Protocol 用户数据报协议 | Transmission Control Protocol 传输控制协议 |
有无链接 | 随时发送数据,无需链接 | 三次握手创建链接 -> 数据传输 -> 四次挥手释放链接 |
通讯方式 | 单播、多播、广播 | 单播 |
对应用层报文的处理 | 发送时直接添加首部。接收时直接除去首部。纯面向报文 | 发送方将数据块分割并存储在缓存,根据策略提取必定量字节,添加首部发送。接收方提取TCP报文中的数据并存储在缓存,将缓存中一部分字节流交给应用进程。纯面向字节流。 |
是否提供可靠的传输服务 | 因无链接,提供的是不可靠服务。即,UDP 发送方不会在乎误码、丢包,接收方不作任何处理,只管接受 | 接收方收到并确认无误后,会给发送方返回一个确认报文。若是发送方没有收到确认报文,会进行超时重发,直到(事实上有上限次数)收到接收端的确认报文。 |
首部开销 | 四个字段,每一个字段2字节。共8字节 | 因为 TCP 须要实现可靠传输、流量控制和拥塞控制等服务,首部比较复杂。TCP 的首部包括 20 字节的固定首部,以及最多 40 字节的拓展首部 |