传输层协议:TCP和UDP

  • 文中图片来自极客时间

TCP和UDP的区别

  • TCP面向连接,UDP面向无连接。建立连接是指为了在客户端和服务端维护连接,而建立的一定数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性。(TCP首部就是这个数据结构,来保证所谓的面向连接

UDP

UDP特点

  • UDP继承了IP的特性。
  • UDP不能保证是否丢失,不能保证按顺序到达。
  • UDP是基于数据报的,一个一个地发,一个一个的收。
  • UDP没有拥塞控制,只要收到发的信号,就发,不管网络环境如何。
  • UDP是无状态的,发了就不管了。

UDP包头

传输层协议:TCP和UDP

  • 当发送的UDP包到达目标机器后,发现MAC地址匹配,于是就取下来,将剩下的包传给处理IP层的代码。
  • 把IP头取下来,发现目标IP匹配,在IP头中的8位协议,表示数据包是个UDP包,即可按照UDP头进行解析。
  • 处理完传输层的事情,内核的工作基本就干完了,下面要把数据交给某个应用处理,应用程序通过端口来区分。

UDP使用场景

  • 需要资源少,网络比较好的内网,或者对于丢包不敏感的应用。
  • 不需要一对一沟通,建立连接,而是可以广播的应用。
  • 需要处理速度快,时延低,可以容忍少数丢包。但是要求即便网络拥塞,也不能退缩。

TCP

  • 天然认为网络环境是恶劣的,丢包乱序重传拥塞时常有的,一言不合就可能送达不了,所以要从算法层面保证可靠性。

TCP包头

传输层协议:TCP和UDP

  • 源端口号和目标端口号是不可少的,用来区分发给哪个应用
  • 序号是给包编的号,是为了解决乱序问题。
  • 确认序号是为了解决不丢包的问题,发出去的包要有确认,如果没收到确认,我就应该重发。
  • 连接状态位:SYN是发起一个连接,ACK是回复,RST是重新连接,FIN是结束连接等。是用来维护连接状态,带状态位包的发送,会引起双方的状态变更。
  • 窗口大小是用来做流量控制的,通信双方各声明一个窗口,标识自己的处理能力。让发送方别发太快,也别发太慢。
  • 除了流量控制,还会做拥塞控制(为了别把网络环境搞堵车)。

TCP三次握手

传输层协议:TCP和UDP

  • 三次握手除了双方建立连接外,主要还是为了沟通一件事情,就是 TCP 包的序号的问题。
  • 序号不能从1开始,比如A发送1,2,3,B收到1,2。A掉线,发了1‘,2‘,此时B收到3,会认为3是下一个包,但其实A没想发送3。

TCP四次挥手

传输层协议:TCP和UDP