简介

        本文介绍TCP与UDP的相关知识。

简述TCP三次握手和四次挥手

其他网址

《计算机网络》=> 5.9 TCP的运输连接管理

三次握手

主机 A为客户端,主机B为服务端。

  • 第一次握手
  • A 发送同步报文段(SYN) 请求建立连接。
  • A进入SYN-SENT(同步已发送)状态。
  • 第二次握手
  • B 监听到连接请求, 向 A 发送针对 SYN 的确认 ACK, 同时 B 也发送自己的请求建立连接(SYN) 。
  • B进入SYN-RCVD (同步收到)状态
  • 第三次握手
  • A 收到 B 发出的 SYN,给出确认应答 ACK。
  • A 收到确认后进入 ESTABLISHED (己建立连接)状态。B 收 到 A 的确认后,也进入ESTABLISHED状态

四次挥手

  • 第一次挥手
  • 当主机 A 发送数据完毕后, 发送 FIN 结束报文段。
  • 第二次挥手
  • 主机 B 收到 FIN 报文段后, 向主机 A 发送一个确认序号 ACK(为防止这段时间内, 对方重传 FIN 报文段) 。
  • 第三次挥手
  • 主机 B 准备关闭连接, 向主机 A 发送一个 FIN 结束报文段。
  • 第四次挥手
  • 主机 A 收到 FIN 结束报文段后, 进入 TIME_WAIT 状态。 并向主机 B 发送一个ACK 表示连接彻底释放。

TCP与UDP的区别




TCP



UDP



是否连接



面向连接(如打电话要先拨号建立连接)



无连接的, 即发送数据之前不需要建立连接



可靠性



可靠。(无差错,不丢失,不重复,按序到达)

(通过校验和、重传、序号标识、滑动窗口、 确认应答等实现可靠传输)



尽力交付(不保证可靠交付)



速度(效率)



(头部20字节)



(头部8字节)



节点数目



只能一对一



支持:一对一、一对多、多对一、多对多



传输模式



面向字节流。

(实际上是TCP把数据看成一连串无结构的字节流)



面向报文。

(UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等))



占用资源



占资源多



占资源少



应用场景



传输大量数据



传输少量数据


TCP握手/挥手 次数

TCP为什么要三次握手而不是两次

如果是 2 次(即:没有第3次握手)

  1. 网络延迟导致服务端建立连接,而客户端没建立连接
  1. 客户端发出一个请求报文段,它滞留在了某个网络节点, 过了好长时间才发送到服务端, 此时服务端建立连接。 但是由于现在客户端并没有发出连接请求, 因此不会理睬服务端的确认, 而服务端以为新的连接产生, 服务端的资源被浪费。
  1. 服务端的ACK丢失导致客户端一直重试,服务端会连接大量无效连接
  1. 当服务端的确认应答 ACK 总是丢失时, 客户端以为服务端没有连接, 它将会不断地重新请求连接,而服务端会连接大量的无效连接, 给服务器增加维护成本, 服务器很容易受到 SYN 洪水攻击。

TCP为什么是四次挥手

  1. TCP 是面向连接的, 属于全双工, 断开连接是双方的事情。 所以是四次。
  2. 当客户端发送 FIN 结束报文段时,服务端并不会立即关闭 SOCKET(服务端会先通知应用进程,应用进程再关闭),所以只能先发送一个 ACK。(因为有可能此时服务端还没有发送完报文)