1、计算机网络协议模型

ios抖音直播传输协议 抖音视频传输协议_服务端

物理层

主要负责在物理线路上传输原始的二进制数据。两台计算机要通信,就得通过介质,比如光纤、电缆等,物理层就是干这些事情的,。

数据链路层

主要负责在通信的实体间建立数据链路连接。物理层它只是单纯着负责在计算机之间传输0,1这样的电信号。假如这些0,1组合的传送毫无规则,计算机是解读不了的。因此,我们需要制定一套规则来进行0,1的传送。例如多少个电信号为一组啊,每一组信号应该如何标识才能让计算机读懂啊等。数据链路层就是在物理层之上,负责给这些0,1制定传送的规则,然后另一方再按照相应的规则来进行解读。

网络层

要负责创建逻辑链路,以及实现数据包的分片和重组,实现拥塞控制、网络互连等功能。假如网络不进行细化,没有子网的话,当一台计算机发送信息时,其他所有的计算机都能收到的,然后再删选舍弃这样下去计算机是会崩溃的,网络层就是负责解决这类问题的。建立主机到主机的通信。

传输层

负责向用户提供端到端的通信服务,实现流量控制以及差错控制。虽然我们已经把数据成功从计算机传送到另一台计算机了,可是另一台计算机又怎么知道这些数据是给谁的,

这个时候,就产生了端口,也就是说,我们在从计算机A传数据给计算表B的时候,还得指定一个端口,以供特定的应用程序来接受处理。传输层的功能就是建立端口到端口的通信。

应用层

应用层是最接近用户的,用来规定应用程序的数据格式。为应用程序提供了网络服务。

2、tcp与udp的区别

 

UDP

TCP

是否连接

无连接

面向连接

是否可靠

不可靠传输,不使用流量控制和拥塞控制

可靠传输,使用流量控制和拥塞控制

连接对象个数

支持一对一,一对多,多对一和多对多交互通信

只能是一对一通信

传输方式

面向报文

面向字节流

首部开销

首部开销小,仅8字节

首部最小20字节,最大60字节

适用场景

适用于实时应用(qq聊天、在线视频、网络语音电话、视频会议、直播等即时通讯、广播通信等)

适用于要求可靠传输的应用,例如文件传输、收发邮件、远程登录

目前常见的直播方案都是上行采用rtmp;下行采用http-flv或者hls,底层都是tcp。UDP理论上更适合用于直播系统,但开发效率低,周期长。

做视频直播,用UDP好还是TCP好?为什么?做视频点播呢?

抖音底层用的什么传输协议TCP,还是UDP?:为适应弱网都基于UDP做可靠传输,本质上既不是TCP也不是UDP。

3、tcp如何实现连接

1)tcp三次握手

为了确认双方各自的接受和发送能力是否正常(服务端需要确认服务端和客户端、客户端也需要确认服务端和客户端的收发能力)

  • 第一次握手:客户端给服务器端发送一个SYN报文;
  • 第二次握手:服务器收到SYN报文之后,会应答一个SYN+ACK报文。
  • 第三次握手:客户端收到SYN+ACK报文之后,会回应一个ACK报文。
  • 服务器收到ACK报文之后,三次握手建立完成。

ios抖音直播传输协议 抖音视频传输协议_服务端_02

 

·第一次握手:客户端发送网络包,服务器收到了。服务器断就能得到结论:客户端的发送能力、服务端的接收能力是正常的。

·第二次握手:服务端发包,客户端收到了。客户端就能得出结论:服务端的接收能力、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。

·第三次握手:客户端发包,服务器端收到了。服务端得出结论:服务器自己的发送能力,接收能力正常。

2)tcp四次挥手

ios抖音直播传输协议 抖音视频传输协议_服务端_03

 

 

3)为什么TIME_WAIT状态需要经过2MSL才能返回到CLOSE状态?

第一,为了保证A发送的最后一个ACK报文段能够到达B。假设网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。在Client发送出最后的ACK回复,但该ACK可能丢失。Server如果没有收到ACK,将不断重复发送FIN片段。所以Client不能立即关闭,它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT状态。Client会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么Client会重发ACK并再次等待2MSL。所谓的2MSL是两倍的MSL(Maximum Segment Lifetime)。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被Server成功接收,则结束TCP连接。

4)为什么连接的时候是三次握手,关闭的时候确实四次挥手?

为了防止客户端没有接受到服务器的数据包。当客户端发送FIN报文后,服务器返回一个ACK报文,客户端进入等待状态,当服务端把所有报文发送完毕后,服务端向客户端发送一个FIN报文,客户端返回ACK后断开连接

 

5、如果已经建立了连接,但是客户端突然出现故障了怎么办?

TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75分钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

6、TCP协议如何保证可靠传输

确认应答机制、超时重传机制、流量控制机制、拥塞控制机制

TCP协议可靠性保证(确认应答机制,超时重传机制,流量控制,拥塞窗口)

7、同步IO、异步IO、阻塞IO、非阻塞IO

如何区分是同步IO还是异步IO呢?