UDP在传输数据之前不需要建立连接,不提供可靠交付,但在某些情况下却是一种最有效的工作方式,例如音视频聊天,UDP面向报文,对应用层交付下来的报文既不合并也不拆分,一次交付一个完整的报文,因此应用程序必须选择合适的报文,若报文太长交付到IP层后IP层可能需要拆分,降低IP层效率,若太短,IP层首部长度占比太大,也降低IP层效率。
UDP首部只有8个字节,TCP有20个字节。
UDP首部格式:
源端口:需要对方回信时使用
目的端口:
长度:UDP数据报的长度,最小值为8(仅含有首部)
检验和:检测UDP用户数据报在传输过程中是否有错。
TCP是面向连接的,提供可靠交付全双工通信,面向字节流。TCP连接的两个端点叫做套接字(socket)或插口。
TCP可靠传输原理:停止等待协议+超时重传机制(ARQ,自动重传请求)->(进阶)连续ARQ协议和滑动窗口协议
一个窗口包含多个分组,这个窗口内的分组可以连续发送出去,提高信道利用率,接收方采用累计确认的方式,对按顺序到达的多个分组的最后一个分组发送确认,表示截至到这个分组为止所有分组都已经正确收到了,假如发送方发送了5个分组,而中间的第三个分组丢失了,那么发送方接收到前两个分组的确认,然后把后三个分组重传一遍,因此当通信链路信号质量不好时连续ARQ协议会带来负面影响,加剧信道拥塞。
可靠传输的实现:
1、确认应答,超时重传:对于按序到达的分组给予确认,未收到确认的分组超时重传;
2、流量控制:所谓流量控制,就是让发送方的发送速率不要太快,要让对方来得及接受,流量控制的实现方法:接收端将自己可接受的缓冲区大小放入TCP首部中的”窗口大小字段”,通过ACK通知发送端;窗口大小字段越大,说明网络的吞吐量越高;接收端一旦发现自己的缓冲区快满了,就会将窗口大小设置成一个更小的值给发送端;发送端接受到这个窗口之后,就会减慢自己的发送速率;如果接受缓冲区满了,就会将窗口设置为0,这时发送方不在发送数据,但是需要定期发送一个窗口探测数据段,使接收端把窗口大小告诉发送端。TCP为每一个连接设有一个持续计时器,只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器,若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带一个字节的数据),对方就在确认这个探测报文段时给出了现在的窗口值,如果仍然是0,那么收到这个报文段的一方就重新设置持续计时器;如果窗口不是0,那么死锁的僵局就可以打破。
3、拥塞控制: 拥塞控制就是防止过多的数据注入到网络中。使网络中的路由器或链路不至过载。具体方法:
慢开始、拥塞避免、快重传和快恢复。
4、主动队列管理AQM
5、三次握手和四次挥手
为什么要三次握手:为了防止服务器端开启一些无用的连接增加服务器开销以及防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。