TCP和UDP:传输层主要的两种协议
TCP:面向连接的、可靠的、基于字节流的传输层通信协议。
UDP:无连接的(无需简历连接和发送确认)、不可靠的、基于数据报的传输层通信协议。
TCP在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还需断开连接。增加了许多开销,使头部增大很多,占用许多资源。一般用于精准文件传输、发送和接收邮件、远程登录等场景。
UDP更高效,一般用于即时通信,如实时的语音、视频、直播等
三次握手:TCP建立可靠连接的过程
- 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认。
- 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。
- 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成这三次握手后,客户端和服务器端就可以开始传送数据。
四次挥手,TCP断开连接的过程
断开一个 TCP 连接则需要“四次挥手”:
- 客户端-发送一个 FIN,用来关闭客户端到服务器的数据传送
- 服务器-收到这个 FIN,它发回一 个 ACK,确认序号为收到的序号加1 。和 SYN 一样,一个 FIN 将占用一个序号
- 服务器-关闭与客户端的连接,发送一个FIN给客户端
- 客户端-发回 ACK 报文确认,并将确认序号设置为收到序号加1
TCP协议字段
目的ip:按对方ip一级一级的转发,在外网上找到对方路由器的对外ip
目的设备地址:跟网卡相关,一台设备都会有全世界唯一的设备地址,只要上网就会设备ip被记录
来源ip:告诉对面是谁发的,方便对面回复
来源设备地址:
端口号:指定电脑设备的哪一个程序接收
来源端口:电脑在上网时不同程序用不同端口,不然接收消息时不确定那个程序接收
响应和响应时间:建立三次握手只是判断信息要不要开始传,但是传递过程中,不确 定中途会不会发生意外,所以还需要响应和响应时间。
超时重发:如果超时会重发,并给出过期时间
过期时间:发送的时候会提取规定过期时间,传输过程中的每次交换都会对过期时间进行审核。防止在传输过程中,超时重发出去的和原来发送的冲突
校验码:在传的时候还会有校验码,在传输过程中,如果出现问题,那么校验码就对不上了,那么就要重传。
当遇到磁场炸蛋时,传输电线会被迫切割磁感线,根本上会产生感应电压,影响电压信号的传输,传输信息可能会报错
数据过大需要拆分:传输数据时的数据包有大小限制,如果传输的数据过大,还需要将其拆开分批次发送。如果数据包过大,要转发很久才能轮到其他人,相当于其他人的断网。
当拆分时,还需要有
顺序号和总大小,否则大数据包无法按原方式组装起来
如果传输视频的话,下载不完是不能进行观看的,因为不知道未下载的部分是原文件哪一部分的
TCP协议如何保证可靠传输:
- 应用数据被分割成 TCP 认为最适合发送的数据块。
- TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
- 校验和: TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
- TCP 的接收端会丢弃重复的数据。
- 流量控制: TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制)
- 拥塞控制: 当网络拥塞时,减少数据的发送。
- ARQ协议: 也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。
- 超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
视频加载和断点续传
视频加载技术:将大视频分成一个个小视频,每个小视频可以独立观看无需组装
首先这个
完整的原视频文件被分成多个数据包,每个数据包之间相互独立,并将包含一小段视频内容。
在发送的过程中,会
连续发送多个数据包,无需等到客户端接收之后再发送下一个。
客户端接收到足够多的数据包后,就可以开始播放视频。播放器会根据已接收到的数据包顺序,连续播放视频。等下一个小视频发送过来之后,会排队等待播放。
断点续传技术(同视频加载技术),从哪断的从哪传,下载过的无需重新下载
可以通过TCP协议实现,
当TCP连接中断时,它会重新进行连接,如果连接成功,那么就会从上次断开的地方继续传输数据。
这是由TCP的滑动窗口机制实现的。另外,也可以用HTTP的分块传输编码可以让发送端将一个大文件分成多个小块进行传输,这些小文件都会被加上序号,大文件会指定文件的总大小。客户端可以接收这些小块并重新组合成完整的文件。如果连接中断,客户端只需请求没有接收到的块。