本文主要是介绍还不懂 TCP 三次握手和四次挥手,吃屎啦你,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前置芝士
在讲解 TCP 三次握手和四次挥手之前,我们先来简单的讲解 TPC 的基础知识,这样更有助于我们后面的理解。
首先我们得知道什么是 TCP ?
TCP 是面向连接的、可靠的、基于字节流的传输层通信协议,中文叫传输控制协议。下面简单的解释一下:
- 面向连接:一定是一对一才能连接,不能像 UDP 协议 可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的。
- 可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端。
- 字节流:消息是没有边界的,所以无论我们消息有多大都可以进行传输。并且消息是有序的,当前一个消息没有收到的时候,即使它先收到了后面的字节已经收到,那么也不能扔给应用层去处理,同时对重复的报文会自动丢弃。
TCP 一般用于文件传输、发送和接收邮件、远程登录等场景
那为什么需要 TCP 呢?
由于 IP 层是不可靠的,它只是尽力的去传输,不保证网络包的交付、不保证网络包的按序交付、也不保证网络包中的数据的完整性。(什么,还不懂 IP ,等我 🤪🤪🤪)
如果需要保障网络数据包的可靠性,那么就需要由上层(传输层)的 TCP
协议来负责。因为 TCP 是一个工作在传输层的可靠数据传输的服务,它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的。
下面我们看看分层模型:
在讲解 TCP 连接之前,我们还需要知道 TCP 报文的头格式,接下来我们就看看 TCP 报文头:
下面我们简单的介绍一下我们下面会用到的字段,(其他的字段如果不懂的话,等我 🤪🤪🤪)
序列号(Sequense Number,SN):在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次数据,就累加一次该数据字节数的大小,用来解决网络包乱序问题。
确认应答号:指下一次期望收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收,用来解决不丢包的问题。
控制位:
-
ACK:该位为
1
时,确认应答的字段变为有效,TCP 规定除了最初建立连接时的SYN
包之外该位必须设置为1
。 -
RST:该位为
1
时,表示 TCP 连接中出现异常必须强制断开连接。 -
SYN:该位为
1
时,表示希望建立连,并在其序列号的字段进行序列号初始值的设定。 -
FIN:该位为
1
时,表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换FIN
位置为 1 的 TCP 段。
我们暂且先了解上面的这些字段的意思,对后面的阅读很有作用,这里我们简单的介绍一下 TCP 和 UDP 区别:
用户数据报协议 UDP(User Datagram Protocol):
- UDP 在传送数据之前不需要先建立连接,远程主机在收到 UDP 报文后,不需要给出任何确认,而且
这篇关于还不懂 TCP 三次握手和四次挥手,吃屎啦你的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!