1. TCP/IP
TCP/IP(Transmission Control Protocol/Internet Protocol)作为Internet的核心协议。它是个协议族,包含多种协议,按照层次划分,共四层:应用层,传输层,互连网络层,网络接口层。(分层的基本想法是每一层都在它的下层提供的服务基础上提供更高级的增值服务,而最高层提供能运行分布式应用程序的服务。)
1.1. 和osi的区别
TCP/IP协议中的应用层协议,对应于OSI中的应用层,表示层,会话层。TCP/IP中有两个重要的协议,传输层的TCP协议和互连网络层的IP协议。如下图所示:
发送请求:从最顶层(应用层)出发,每一层负责封装属于自己的信息到请求中,最后将一整个请求发送给对方。
接收请求:从最底层(网络接口层)开始,每一层的协议负责解析属于自己的东西,比如网际层(IP)处理ip信息,传输层(TCP)处理点对点的端口,应用层(HTTP)处理Request或Response的Line\Header\Body。
1.2. 三次握手和四次挥手
整个过程如下图所示:
建立连接的过程
首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。
断开连接的过程
断开连接端可以是Client端,也可以是Server端。
假设Client端发起中断连接请求:
先发送FIN报文
Server端接到FIN报文后,但是如果还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以服务器端先发送ACK,告诉Client端:请求已经收到了,但是我还没准备好,请继续等待停止的消息。
这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。
当Server端确定数据已发送完成,则向Client端发送FIN报文,告诉Client端:服务器这边数据发完了,准备好关闭连接了。
Client端收到FIN报文后,就知道可以关闭连接了,但是他还是不相信网络,所以发送ACK后进入TIME_WAIT状态,
Server端收到ACK后,就知道可以断开连接了。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭
最后,Client端也可以关闭连接了
至此,TCP连接就已经完全关闭了。
四次挥手后为什么要等待2MSL
报文段最大生存时间MSL,它是任何报文段被丢弃前网络内的最长时间。
A发出ACK,等待ACK到达对方的超时时间MSL,等待FIN的超时重传,也是MSL,所以如果2MSL时间内没有收到FIN,说明对方安全收到FIN。
1.3. TCP和UDP的区别
传输层最主要的协议就是TCP和UDP协议。两则的区别在于TCP协议需要接收方反馈,UDP协议不需要接收方反馈。 因此,TCP传输比UDP传送更可靠,但是TCP传输的效率不如UDP高。在不可靠的网络传送过程中一般选择TCP传送方式。在讲求效率,或者不在乎传送失误的情况下可以选择UDP方式来提高传输速率。
1、TCP 是面向连接的协议,UDP 是无连接协议
TCP 发送数据前使用三次握手建立连接,UDP 发送数据前不需要建立连接。
2、TCP 可靠,UDP 不可靠
TCP 丢包会自动重传,UDP 不会(任何必需的可靠性必须由应用层来提供)。 TCP 可靠性由三个机制保证:1. 序号(TCP 报文的序号)2. 确认(ACK 机制)3. 重传(超时或者冗余的 ACK)
3、TCP 有序,UDP 无序
消息在传输过程中可能会乱序,后发送的消息可能会先到达,TCP 会对其进行重新排序,UDP 不会。
4、TCP 无界,UDP 有界
TCP 通过字节流传输,UDP 中每一个包都是单独的。
5、TCP 有流量控制(拥塞控制),UDP 没有
TCP 协议的流量控制是基于滑窗协议实现的。 拥塞控制和流量控制不同,流量控制是点对点的通信量抑制,抑制发送端发送速率,使得接收端来得及接收。
6、TCP 传输慢,UDP 传输快;
因为 TCP 需要建立连接、保证可靠性和有序性,所以比较耗时。 这就是为什么视频流、广播电视、在线多媒体游戏等选择使用 UDP。
7、TCP 是重量级的,UDP 是轻量级的
TCP 要建立连接、保证可靠性和有序性,就会传输更多的信息,如 TCP 的包头比较大。
8、TCP 的 头部比 UDP 大
总结:
- TCP 是面向连接的、可靠的、有序的、速度慢的协议;UDP 是无连接的、不可靠的、无序的、速度快的协议。
- TCP 开销比 UDP 大,TCP 头部需要 20 字节(不算可选项),UDP 头部只要 8 个字节。
- TCP 无界有拥塞控制,UDP 有界无拥塞控制,网络拥堵不会影响发送端的发送速率 。
- TCP是一对一的连接,而UDP则可以支持一对一,多对多,一对多的通信。
- TCP面向的是字节流的服务,UDP面向的是报文的服务。
TCP | UDP | |
---|---|---|
连接性 | 面向连接 | 无连接 |
可靠性 | 可靠 | 不可靠 |
有序性 | 有序 | 无序 |
有界性 | 有界 | 无界 |
拥塞控制 | 有 | 无 |
传输速度 | 慢 | 快 |
量级 | 重量级 | 轻量级 |
头部大小 | 大 | 小 |
2. TCP流量控制和拥塞控制
2.1. TCP协议如何保证可靠传输
1、确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传。
2、数据校验:TCP报文头有校验和,用于校验报文是否损坏
3、数据合理分片和排序:
UDP:IP数据报大于1500字节,大于MTU.这个时候发送方IP层就需要分片(fragmentation).把数据报分成若干片,使每一片都小于MTU.而接收方IP层则需要进行数据报的重组.这样就会多做许多事情,而更严重的是,由于UDP的特性,当某一片数据传送中丢失时,接收方便无法重组数据报.将导致丢弃整个UDP数据报.
tcp会按MTU合理分片,接收方会缓存未按序到达的数据,重新排序后再交给应用层。
4、流量控制:当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。
5、拥塞控制:当网络拥塞时,减少数据的发送。
2.2. TCP流量控制
1、利用滑动窗口实现流量控制
因为发送端希望在收到确认前,继续发送其它报文段。比如说在收到0号报文的确认前还发出了1-3号的报文,这样提高了信道的利用率。但可以想想,0-4发出去后可能要重传,所以需要一个缓冲区维护这些报文,所以就有了窗口。
2、必须考虑传输速率
可以用不同的机制来控制TCP报文段的发送时机。
2.3. TCP拥塞控制
拥塞控制:拥塞控制是作用于网络的,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况。
常用的方法就是:慢开始、拥塞避免、快重传、快恢复。
UDP没有拥塞控制
参考资料:
https://www.cnblogs.com/deliver/p/5471231.html
https://blog.csdn.net/yechaodechuntian/article/details/25429143