计算机网络——TCP/UDP协议

目录

一、简介

1.1 TCP协议

1.2 UDP协议

二、TCP和UDP的区别

三、TCP三次握手和四次挥手

3.1 三次握手过程

3.2 四次挥手过程

四、关于三次握手、四次挥手的常见问题


一、简介

1.1 TCP协议

TCP(Transmission Control Protocol,传输控制协议)是一种用于互联网传输的通信协议。它是在IP(Internet Protocol,互联网协议)的基础上建立的,用于在计算机网络中可靠地传输数据。

TCP采用面向连接的通信方式,确保数据的可靠性、顺序性和完整性。它通过三次握手建立连接,然后通过数据包的序列号、确认应答和重传等机制来保证数据的可靠传输。TCP还具有拥塞控制和流量控制等机制,以适应网络的负载和性能。

TCP是一种面向字节流的协议,它将应用层传输的数据分割成大小不等的数据段,并在接收端重新组装。TCP还提供了可靠的数据传输机制,通过校验和、确认应答和重传来避免数据的丢失和损坏。

总而言之,TCP是一种可靠、有序和全双工的通信协议,广泛用于互联网中各种应用领域,如网页浏览、文件传输、电子邮件等。它是互联网传输的基础之一。

1.2 UDP协议

UDP(User Datagram Protocol,用户数据报协议)是一种简单的传输层协议,它位于网络协议栈中,用于在计算机网络上以无连接的方式传输数据。

UDP是一种无连接、不可靠且面向数据报的协议。它不提供确认、重传、流量控制和拥塞控制等功能。相比之下,TCP(传输控制协议)是一种面向连接的协议,提供了可靠的数据传输和错误恢复机制。

UDP主要用于那些对实时性要求较高、容忍数据丢失的应用,例如音频、视频流、在线游戏等。UDP的优势在于简单、轻量,不会为了保障数据的完整性而增加额外的开销和延迟。

由于UDP不提供可靠性机制,因此在应用中通常需要自行处理数据的丢失、重复或乱序等问题。UDP数据包具有较小的头部开销,因此在某些情况下比TCP更高效。

总结起来,UDP提供了一种快速、简单的数据传输方式,适用于一些对实时性要求较高、对数据丢失不敏感的应用场景。它在许多实时应用和流媒体领域得到广泛应用。

二、TCP和UDP的区别

TCP:

        1)tcp是可靠的传输,传输数据更安全;

        2)tcp的传输过程需要建立传输通道;

        3)tcp的传输过程有确认和超时重传机制;

                因为tcp需要提前建立传输通道,而且需求等待确认,所以通信效率低。

UDP:

        1)udp的传输效率高,但是安全性较差;

        2)系统仅仅是传输数据,无法确认对方是否收到数据;

        3)不需要建立传输通道,也不需要进行确认;

三、TCP三次握手和四次挥手

3.1 三次握手过程

作用:通信双方需要建立一个安全的传输通道,确认双方具有接收和发送的能力。

第一次握手:客户端发送SYN报文,进入SYN_SENT状态

第二次握手:服务器收到SYN报文,服务器给客户端发送ACK+SYN报文,服务器进入SYN_RECV状态

第三次握手:客户端收到SYN+ACK报文,向服务器发送ACK报文确认服务器的相应,客户端与服务器都进入ESTABLISHED状态,三次握手完成。

3.2 四次挥手过程

作用:通信双方可以安全的关闭链接,确保数据的完整性和可靠性

第一次挥手:客户端发送FIN报文,进入FIN_WAIT_1状态

第二次挥手:服务端收到客户端的FIN报文,向客户端发送一个带有ACK的报文,服务端进入CLOSE_WAIT状态

第三次挥手:服务端发送FIN报文,进入LAST_ACK状态

第四次挥手:客户端收到服务端的FIN报文,向服务端发送一个带有ACK的报文,客户端进入TIME_WAIT状态,此时TCP链接还有有释放,经过2MSL后才进入CLOSED状态,而服务器端收到客户端的确认包ACK后就进入了CLOSED状态。

四、关于三次握手、四次挥手的常见问题

为什么TCP建立链接需要三次握手,而不是两次或四次呢?

  1. 需要确认双方的收发能力
  2. 序列号可靠同步
  3. 组织重复历史连接的初始化
  4. 安全问题

 为什么建立链接握手三次,关闭链接需要四次?

TCP第二次握手的时候,客户端发送的SYN+ACK包是将SYN和ACK的包合并到一个包中,减少了一次发送,所以三次握手,而对于四次挥手,因为TCP是全双工通信,在主动关闭发送FIN后,接收端可能还要发送数据,不能立刻关闭服务器端到客户端的数据通道,所以不能将FIN和ACK包进行合并,只能先确定ACK包,等服务器不需要发送数据时再发送FIN包,所以四次挥手时必须是四次数据包的交互。

 有限状态机

1.CLOSED:不在连接状态(这是为方便描述假想的状态,实际不存在)
2.LISTEN:等待从任何远端TCP 和端口的连接请求
3.SYN_SENT:发送完一个连接请求后等待一个匹配的连接请求。
4.SYN_RECEIVED:发送连接请求并目接收到匹配的连接请求以后等待连接请求确认。
5.ESTABLISHED:表示一个打开的连接,接收到的数据可以被投递给用户。连接的数据传输阶段的正常状态。
6.FIN_WAIT_1: 等待远端TCP 的连接终止请求,或者等待之前发送的连接终止请求的确认。
7.FIN_WAIT_2: 等待远端TCP 的连接终止请求
8.CLOSE_WAIT:等待本地用户的连接终止请求
9.CLOSING:状态:等待远端TCP的连接终止请求确认。
客户端发送了FIN,但是没有收到服务器的ACK,却收到了服务器的FIN,这种情况发生在服务器发送的ACK丢包的时候,因为网络传输有时会有意外
10.LAST_ACK:等待先前发送给远端TCP 的连接终止请求的确认 (包括它字节的连接终止请求的确认)

11.TIME_WAIT:等待足够的时间过去以确保远端TCP 接收到它的连接终止请求的确认。
12.TIME_WAIT: 两个存在的理由:·可靠的实现tcp全双工连接的终止·允许老的重复分节在网络中消逝

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值