Linux项目知识点整理(四)

十五、如何实现文件传输,如果文件较大如何解决

  1.  服务器端 把大文件分包 每一个包大小建立一个socket(对应一个线程)进行传输
  2.  客户端 对每一个包对应一个线程(同时对应一个socket)进行接收
  3.  在发送每一个包时 包前要发送这个包的大小 和对应的偏移量
  4.  在32位系统中要开启大文件的宏开关
  5.  利用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),防火墙穿透,多媒体数据传输等等。

猜你喜欢

转载自blog.csdn.net/cainiao000001/article/details/81509532