十五、如何实现文件传输,如果文件较大如何解决
- 服务器端 把大文件分包 每一个包大小建立一个socket(对应一个线程)进行传输
- 客户端 对每一个包对应一个线程(同时对应一个socket)进行接收
- 在发送每一个包时 包前要发送这个包的大小 和对应的偏移量
- 在32位系统中要开启大文件的宏开关
- 利用pread pwrite 可以保证原子操作
十六、解决Linux文件传输中占用大量资源问题
- 缓冲队列存放待发送数据
- 定时采集流速信息
- 超过流速产生文件读取暂停事件
- 流速下降之后恢复文件读取
十七、TCP和UDP的区别,什么时候选择TCP什么时候选择UDP
总的来说
TCP协议提供可靠的服务,
UDP协议提供高效率的服务。
高可靠性的TCP服务提供面向连接的服务,主要用于一次传输大量报文的情形,
如文件传输,远程登录等;
高效率的UDP协议提供无连接的数据报服务,用于一次传输少量的报文。
即使发生传输错误,也可以重新传输并且不会为此付出多少代价。
TCP提供的是面向连接的、可靠的数据流传输,可避免数据传输错误。
面向连接的协议在任何数据传输前就建立好了点到点的连接。
而UDP提供的是非面向连接的、不可靠的数据流传输。当一个UDP数据包在网络中移动时,
发送过程并不知道它是否到达了目的地,除非应用层已经确认了它已到达的事实。
当数据传输的性能必须让位于数据传输的
完整性、
可控制性
可靠性时,
TCP协议是当然的选择。
当强调传输性能而不是传输的完整性时,
如:音频和多媒体应用,
UDP是最好的选择。
在数据传输时间很短,以至于此前的连接过程成为整个流量主体的情况下
UDP也是一个好的选择
,如:DNS交换。把SNMP建立在UDP上的部分原因是设计者认为当发生网络阻塞时,
UDP较低的开销使其有更好的机会去传送管理数据。
总结 tcp 提供可靠的服务 若强调 完整性 可靠性可控性 选择tcp
udp 提供高效的服务 若强调 传输性能 选择udp
十八、TCP是如何保证可靠数据传输
1、TCP在传输有效数据之前要求通信双方必须先握手,建立通信才可以进行数据传输!
2、TCP的接收在接收到数据包之后会发送ack(可以理解为“回复消息”)给发送方,如果发送方未收到ack,会重发一遍!
A给B发送数据,会有以下几种情况:
(1)B没有收到A发送的消息;==》B就不会给A回复ack;===>A就不会收到ack==》A会认为数据没有发送成功===》A再发一遍;
(2)B收到了A发送的消息,并且B也给A回复了ack===》ack自己丢了!==》A也会收不到ack===》A会认为数据没有发送成功
===》A会再发一遍数据 ====》B又收到了刚才的数据!(B就知道了ack信号在中途丢了)==》B给A回复一个ack===》
A收到ack之后,会认为数据发送成功!
总结:丢包重传机制!保证了数据的可靠传输!
3、TCP的有效数据内容会附带校验位,防止传输过程中数据损坏!
第二点是保证接收方可以收到数据,这一点是保证接收到的数据是正确的!
A在发送的时候会附带校验位,B收到之后计算一下校验位,如果和A传过来的相同===》数据传输是正确的!
4、TCP会根据网络带宽来自动调节发送的速度===》滑动窗口技术!
也就是说会根据接收方的接收情况,自动调节每次发送多少个数据包以及每个包里面包含多少个字节!
一秒钟发10个包丢1个,一秒钟发20个包丢3个===》赚了几个;
5、发送方会给各个分隔报文加个编号;
每次发送数据的时候不是一次性发送完毕!100M的数据分10次发送,每次10M!
十九、七层网络模型和四层网络模型
OSI七层模型 | TCP/IP 四层模型 | 网络协议 |
应用层 (Application) | 应用层 | HTTP(超文本传输协议) HTTPS(超文本传输安全协议) FTP(文件传输协议) SMTP(简单邮件传输协议) DNS(域名服务) 等等 |
表示层 (Presentation) | ||
会话层 (Session) | ||
传输层 (Transport) | 传输层 | TCP(传输控制协议) UDP(用户数据报协议) |
网络层 (Network) | 网际互连层 | IP(网际协议) ICMP(网络控制消息协议) IGMP(网络组管理协议) |
数据链路层 (Data Link) | 网络接口层 | 以太网 Wi-Fi 等等 |
物理层 (Physical) |
从字面来看,TCP/IP协议是TCP协议和IP协议的合称,但实际上TCP/IP协议是指因特网整个TCP/IP协议族。
该协议族的两个核心协议为:TCP(传输控制协议,Transmission Control Protocol)和IP(网际协议或称为互联网协议,Internet Protocol)。TCP/IP协议族(TCP/IP Protocol Suite),简称TCP/IP。
二十、使用UDP如何保证数据可靠传输
由于UDP并不保证数据传输的安全,但是QQ就是通过UDP来实现的那么它是如何完成数据的可靠传输的?
下面分别介绍三种使用UDP进行可靠数据传输的协议
1、RUDP(Reliable User Datagram Protocol)
可靠用户数据报协议(RUDP)是一种基于可靠数据协议(RDP: RFC908 和 1151 (第二版))的简单分组传输协议。作为一个可靠传输协议,RUDP 用于传输 IP 网络间的电话信号。它允许独立配置每个连接属性,这样在不同的平台可以同时实施不同传输需求下的协议。
RUDP 提供一组数据服务质量增强机制,如拥塞控制的改进、重发机制及淡化服务器算法等,从而在包丢失和网络拥塞的情况下, RTP 客户机(实时位置)面前呈现的就是一个高质量的 RTP 流。在不干扰协议的实时特性的同时,可靠 UDP 的拥塞控制机制允许 TCP 方式下的流控制行为。
为了与网络 TCP 通信量同时工作, RUDP 使用类似于 TCP 的重发机制和拥塞控制算法。在最大化利用可用带宽上,这些算法都得到了很好的证明。
2、RTP(Real Time Protocol)
RTP,实时协议被用来为应用程序如音频,视频等的实时数据的传输提供端到端(end to end)的网络传输功能。传输的模型可以是单点传送或是多点传送。数据传输被一个姐妹协议——实时控制协议(RTCP)来监控,后者允许在一个大的多点传送网络上监视数据传送,并且提供最小限度的控制和识别功能。
RTP是被IETF在RFC1889中提出来的。顺带提及,RTP已经被接受为实时多媒体传送的通用标准。ITU-T跟IETF都在各自的系统中将这一协议标准化。
3、UDT(UDP-based Data Transfer Protocol)
基于UDP的数据传输协议(UDP-based Data Transfer Protocol,简称UDT)是一种互联网数据传输协议。UDT的主要目的是支持高速广域网上的海量数据传输,而互联网上的标准数据传输协议TCP在高带宽长距离网络上性能很差。 顾名思义,UDT建于UDP之上,并引入新的拥塞控制和数据可靠性控制机制。UDT是面向连接的双向的应用层协议。它同时支持可靠的数据流传输和部分可靠的数据报传输。 由于UDT完全在UDP上实现,它也可以应用在除了高速数据传输之外的其它应用领域,例如点到点技术(P2P),防火墙穿透,多媒体数据传输等等。