传输层之TCP
传输层
计算机网络体系结构中的物理层、数据链路层以及网络层解决的是主机与主机之间的通信。
但是在实际的操作中,两台主机间的通讯实际上是两台主机进程间的通讯。就像聊QQ,肯定是两个主机上的QQ程序来相互通信的。
TCP的出现就是为了解决这个端到端的问题。
传输层还有一个很重要的作用:要保证传输数据的可靠性
TCP
全称是 Transmission Control Protocol ,这是一种 面向连接 connection-oriented 协议。
两台主机上的进程或者应用程序在进行通信之前,必须要先进行握手,这个握手是一种逻辑上的连接,并不是两个主机之间真的握手。
什么是TCP?
TCP是一种面向连接的、可靠的、基于字节流的传输层通讯协议。
- 一对一,不能像UDP协议可以一对多;
- 可靠的,不管网络链路层出现什么变化,TCP都可以保证一个报文一定能达到接收端;
- 字节流,没有边界、有序、
UDP
用户数据报协议 User Datagram Protocol
这种协议不需要建立连接们就能直接发送封装好的IP数据包。
协议非常的简单,头部只有8个字节
而且你发出去,对方到底收没收到,收到的完不完整,是没办法保证的。
TCP与UDP对比
两者的不同点:
- 连接
- TCP要先建立连接,才能通信
- UDP不需要连接,即刻传输
- 服务对象
- TCP是一对一
- UDP是一对一、一对多、多对多
- 可靠性
- TCP是可靠交付数据的,数据可以做到无差错、不丢失、不重复、按需到达
- UDP无法保证
- 拥塞控制、流量控制
- TCP都有,用于保证数据的传输的安全性
- UDP都没有,但即使网络非常拥堵,也不会影响它的发送速率
- 首部开销
- TCP较长,有一定的开销
- UDP则相对较少
两者的应用场景
- TCP因为足够可靠,所以常用于FTP文件传输;HTTP/HTTPS
- UDP因为它的实时性,所以常用于:包量较少的通信(DNS、SNMP);视频音频,广播通信。
TCP三次握手与四次挥手
三次握手
三次握手都是怎么握的?
每一次握手,都在改变着客户端与服务器端所处的状态。
为什么非要握手三次呢?
- 三次握手可以阻止历史重复连接的初始化(主要原因)
- 三次握手可以同步双方的初始序列号
- 三次握手可以避免资源浪费
四次挥手
挥手是为了断开。
为什么挥手要挥四次?
在关闭连接的时候,客户端向服务端发送FIN时,仅仅表示客户端不再发送数据了,但是还能接收数据。
服务器接收到客户端的FIN报文时,先回一个ACK应答报文,而服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送FIN报文给客户端表示同意关闭连接。