TCP协议特点:(Transmission Contrrol Protocol 传输控制协议)面向连接,可靠的流式服务
面向连接:在每次的发送数据之前先要建立连接。就是说在客户端执行connect() 发起连接的时候,开始进行三次握手。
可靠:TCP协议有应答确认和超时重传机制,数据丢了可以重发,而且报头中含有字节序列号,也不怕乱序和重复的报文出现。
TCP通过给所发送的数据的每一个字节关联一个序列号进行排序。例如,假设一个应用进程写2048字节到一个TCP套接口,导致TCP发送两个分节,第一个分节所含有的数据序列号为1~1024,第二个分节的序列号为1025~2018(分节是指TCP传递给IP的数据单元)。如果这些分节费顺序到达,接收方得TCP将会根据他们的序列号进行重新排序,再把结果数据传递给应用进程。如果TCP接收到重复的数据,他可以根据数据的序列号来判断是冲虚的,从而将他丢掉。同时TCP还拥有应答确认、超时重传机制、滑动窗口等控制流量的手段
应答确认:TCP向另一端发送数据是,它要求对方返回一个确认。如果确认没有收到,TCP自动重传数据并等待更长的时间。
超时重传机制:TCP协议在发送一段数据之后,每一个报文段都会有一个定时器,在定时器指定的时间内接收端对于这个报文段的确认报文如果没有到达,则会重新发送一次,而且时间是上次时间的两倍
滑动窗口:是TCP流量控制的一种手段。这里的窗口是指接受通告窗口,也就是说他会告诉对方本端TCP缓冲区还能容纳多少字节的数据,对方就可以控制发送数据的速度。窗口之处缓冲区中的可用空间,从而请确保发送方发送的数据不会溢出缓冲区。窗口时刻动态变化着。当接收发送方的数据时,窗口ode大小减小,而当接收方应用进程从缓冲区中读取数据的时候,窗口大小增大。窗口的大小减小到0 是有可能的;当TCP的接受缓冲区满,它必须等待应用进程从这个缓冲区读取数据后才能再进行接收数据。
拥塞控制机制:为了防止网络的拥塞现象,主要依赖于一个拥塞窗口来控制。一般原理:发生拥塞控制的原因:资源(带宽、交换节点的缓存、处理机)的需求>可用资源
慢启动:
拥塞避免:
快速重传:
快速恢复:
流式服务:数据依次发送,对方依次进行接收,发送的次数可以和接受的次数不一致,只要把数据全部读完就行。这个特点容易导致粘包问题。
TCP的连接是全双工的,这就意味着在给定的链接上应用进程在热河时刻即可以发送也可以接受数据。因此,TCP必须跟踪每个方向数据流的状态信息,比如序列号以及通告窗口。
UDP协议特点:无连接不可靠的数据报服务
无连接:不需要建立连接就可以直接发送数据,能不能成功它也不保证,只是尽最大的努力传。
不可靠:UDP每一个sendto都要对应一个recvfrom,一个sendto不可能被俩个recvfrom接受,所以必须保证接收数据时,一次能把一个报文读完,不然剩下的数据就丢了。因为下一次接收的可能就是下一个数据包了。
IP协议特点:无连接 不可靠 无状态
无状态:数据的发送,传输,接收时相互独立的,没有上下文关系,接收端接受的数据有可能重复和乱序
IP提供的是不可靠,无连接的数据报传送服务。
无状态:IP通信双方不同步传输数据的状态信息,因此IP数据报的发送,传输和接收都时相互独立的,没有上下文关系。这种服务的最大的缺点就是无法处理乱序个重复的IP数据报。虽然IP数据报头部提供了一个标识字段用来唯一标识一个IP数据报,但是它是被用来处理IP分片和重组的,而不是用来指定顺序的。
不可靠:是指他不能保证IP数据不能成功的到达目的地。IP仅提供最好的传输服务。如果发生某种错误,例如,某个路由器暂时用完了缓冲区,IP有一个简单的错误处理算法:丢弃该数据报,然后发送ICMP消息给信源端。要求的可靠性必须要由上层来进行提供。
无连接:IP通信双方都不长久的维持对方的任何信息,也就是说,IP并不维护任何关于后续数据包的状态信息,每个数据包的处理都是相互独立的。上层协议每次发送数据的时候都必须制定对方的IP地址。这也说明,IP数据报可以不按照发送顺序接收。
书籍的话可以咨询《UNIX网络编程》《linux高性能服务器编程》