TCP & UDP

传输层

运输层向它上面的应用层提供通信服务。IP协议还停留在主机中的网络层,没有交付主机中的应用程序。通信的真正端点并不是主机而是主机中的进程,也就是说端到端通信是应用进程之间的通信。
运输层有一个很重要的功能——复用和分用。复用是指在发送方不同的应用进程都可以使用同一个运输层协议传递数据(当然要加上适当的首部)。分用是指接收方的运输层在剥去报文首部后能够将这些数据正确交付目的应用进程。
运输层的俩个主要协议:
(1)用户数据报协议UDP
(2)传输控制协议TCP

UDP特点

1. UDP是无连接的
发送数据之前不需要建立连接,发送数据结束之后也没有释放。
2. UDP使用尽最大努力交付
不保证可靠交付,主机不需要维护复杂的连接状态表。
3. UDP是面向报文的
发送方对应用程序交下来的报文,在添加首部之后就向下交付IP层。UDP对应用层交下来的报文既不合并也不拆分,而是保留这些报文的边界。也就是说应用层交付多长的报文,UDP就照样发送,即一次发送一个报文。
(4)UDP没有拥塞控制
这样网络出现拥塞不会使源主机的发送速率降低。允许网络在拥塞时丢失一些数据的应用是可以的。
(5)UDP支持一对一,一对多,多对一,多对多的交互通信
(6)UDP的首部开销小
只有8个字节,比TCP的20个字节的首部要短。

TCP特点

1. TCP是面向连接的运输层协议
应用程序在使用TCP协议之前必须先建立TCP连接。数据传输完之后,必须释放已经建立的连接。
2. 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一)
3. TCP提供可靠交付的服务
通过TCP连接传送的数据,无差错、不丢失、不重复、并且按序到达。
4. TCP提供全双工通信
TCP允许通信双方的应用进程在任何时候都能发送数据。TCP的两端都有发送缓存和接收缓存。
5. 面向字节流
TCP中的“流”是指流入到进程或者从进程流出的字节序列。“面向字节流”的含义是:虽然应用程序和TCP的交互是一次一个数据块(大小不等),但是TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流。
TCP并不关心应用程序一次把多长的报文发送到TCP的缓存中,而是根据对方给出的窗口值和当前网络的拥塞情况来决定一条报文段应包含多少字节(UDP发送的报文程度应该是应用进程给出的)。

拥塞控制

拥塞控制的一般原理

在计算机网络中的链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。
若网络中许多资源同时呈现供应不足,网络的性能就要明显变坏,整个网络的吞吐量将随输入负荷的增大而下降。

拥塞控制

所谓拥塞控制,就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不至于过载。
拥塞控制都有一个前提就是:网络能够承受现有的网络负荷。拥塞控制是一个全局过程。

拥塞控制方法

1. 慢开始和避免拥塞
慢开始算法思路:由小到大逐渐增大拥塞窗口值cwnd。每经过一个传输轮次,拥塞窗口值cwnd就加倍。
避免拥塞算法思路:让拥塞窗口值cwnd缓慢增大,每经过一个传输轮次就加1而不是加倍。
2. 快重传和快恢复

TCP三次握手

TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP窗口大小信息。
TCP & UDP_第1张图片

第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;
第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。
完成了三次握手,客户端和服务器端就可以开始传送数据。以上就是TCP三次握手的总体介绍。

TCP四次挥手

当客户端和服务器通过三次握手建立了TCP连接以后,当数据传送完毕,肯定是要断开TCP连接的啊。那对于TCP的断开连接,这里就有了神秘的“四次分手”。

第一次分手:主机1(可以使客户端,也可以是服务器端),设置Sequence Number和Acknowledgment Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了;
第二次分手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我“同意”你的关闭请求;
第三次分手:主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态;
第四次分手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。
至此,TCP的四次分手就这么愉快的完成了。

TCP 性能问题

  1. 握手延迟
  2. 延迟确认
  3. TCP 慢启动
  4. 拥塞控制
  5. 纳格算法
  6. TIME_WAIT与端口耗尽

TCP优化

  • keep alive

网络性能优化:TCP优化

你可能感兴趣的:(tcp)