网络协议 - TCP和UDP

159 阅读3分钟

TCP/IP网络模型是互联网基础, 它是一系列网络协议的总称,这些协议可以分为四概念层:链路层、网络层、传输程、应用程.
TCP/IP中具有代表性的在传输层的具有代表性的协议:TCP和UDP

一.UDP

全称用户数据协议,和TCP一样处理数据包, 是一种无连接的协议.不具备对数据包分组、组装和对数据包排序等功能,也就是发送报文后无法得知是否完全完整送达.
1.面向无连接
不会向TCP那样通过三次握手去进行连接, 想发就发, 发送端和接收端都不对报文进行拆分和拼接.
2.面向报文
在发送端,UDP将应用层交下来的报文仅添加头部后就向下交给IP层,即UDP对报文既不合并也不拆分而是保留报文边界, 因此发送端必须控制报文大小. 3.有单播、多播、广播功能
不仅支持一对一的传输方式, 还支持一对多,多对一,多对多的方式
4.不可靠性
体现在无连接上, 并且收到什么数据就传递什么数据,无备份,不关注发送状态, 无堵塞控制, 容易丢包.
5.头部小,高性能
仅8字节头部数据:源端口和目标端口, 报文长度, 数据报文的检验

二.TCP

TCP 是面向连接的、可靠的流协议。流就是指不间断的数据结构,你可以把它想象成排水管中的水流。

特点
面向连接, 面向字节流, 仅支持单播传输, 可靠(拥有堵塞控制), 相对性能弱

三次握手

  • 第一次:客户端向服务端发送SYN报文,报文包含初始化序号(ISN_c),此时客户端处于SYN_SEND状态
  • 第二次:服务端收到报文后, 会发送ACK报文, 报文中也包含服务端的初始化序号(ISN_s), 此时服务端是SYN_RECEIVED状态
  • 第三次:客户端收到报文后, 也会发送ACK报文,发送报文后客户端为ESTABLISHED状态,服务器收到这次ACK报文后也会进入到ESTBLISHED状态 两次ACK报文的值都是对方的ISN+1, 第三次握手可以携带应用数据,

四次挥手

  • 第一次: 客户端发送FIN报文,随后进入到FIN_WAIT1状态
  • 第二次: 服务端收到报文后,发送ACK报文, 随后进入到CLOSE_WAIT状态。 客户端收到ACK进入到FIN_WAIT2状态
  • 第三次: 服务端也发送FIN报文, 随后进入到LAST_ACK状态
  • 第四次: 客户端收到FIN后, 同样发送ACK报文, 客户端进入到TIME_WAIT状态,此状态维持一段时间后进入到CLOSED状态, 当服务端收到ACK报文后也进入到CLSED状态. FIN报文的值都是自身的序列号, ACK报文则是序列号+1。TIME_WAIT状态是为了确保上述客户端收到了FIN报文并且服务端收到了ACK报文,否则服务端会重新发送FIN报文。