欢迎来到计算机网络专题。 如果喜欢本文的话不妨点个赞吧,发现有讲解不准确的地方,也烦请各位大佬指正。
TCP
概念
TCP (传输控制协议)提供面向有连接的通信传输,面向有连接是指在传送数据之前必须先建立连接,数据传送完成后要释放连接。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。
在TCP/IP协议中,TCP协议提供可靠的连接服务,TCP是全双工模式 ,连接是通过三次握手 进行初始化的,,需要四次挥手关闭连接。
补充:全双工模式
通信双方可同时收发消息,信道是独立的,不会互相干扰。
定位与应用
TCP协议位于运输层,负责应用软件(比如您的浏览器)和网络软件之间的通信。
TCP包首部
概念
TCP包主要分为上一层的数据以及头部信息,其中首部信息中标定了应该如何读取数据。因此TCP包的首部在网络传输中必不可少,我们借用这张图来更加直观地看看TCP包首部在网络传输如何发挥作用。
(图片摘自zhuanlan.zhihu.com/p/108504297...
具体信息
我们再来分析一下TCP包首部中的几个关键信息,这对于我们后面分析三次握手和四次挥手有重要作用
-
源端口和目标端口
所以TCP首部预留了两个16位作为端口号的存储,而IP地址由上一层IP协议负责传递
源端口号和目地端口各占16位两个字节。
-
序号
Sequence number 缩写seq ,通过这个来确认发送的数据有序,比如我要传输一个大文件,选择分片传输,每次传输1000,现在序列号为1000,发送了1000,下一个序列号就是2000。
-
确认号
Acknowledge number 缩写ack,服务器的数据到达客户端的每个报文都有一个序号用于从服务器流线向到客户端的数据,也就是表达出了下一次通信时想要哪个序号的数据字段。
-
标志位
标志位的作用是表明本次通信的目的,常用的有以下几种:
- SYN(synchronous): 发送标志,用来建立连接。连接开始时,SYN=1,ACK=0,此时发送连接但是未被响应。当连接被响应的时候,标志位会发生变化,其中ACK会置为1,代表确认收到连接请求。
- ACK(acknowledgement):表示确认收到请求。
- FIN(finish):结束标志,表示没有其余数据要发送了
- PSH(push) :表示该数据包被对方接收后应立即交给上层应用,不经过缓冲区排队
- RST(reset):重置复位标志,用于复位对应的TCP连接。
- URG(urgent):紧急标志,用于保证TCP连接不被中断,并且督促中间设备尽快处理
三次握手
三次握手简单来说,就是建立TCP连接时,需要客户端与服务器总共发送三个报文
- 第一次握手,由客户端向服务器请求建立连接,其中的SYN标志位设置为1,我们假设Seq为J
- 第二次握手,服务端发送标志位SYN为1,ACK为1,ack为J+1,假设Seq为K的TCP包
- 第三次握手,客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。
类比一个比较形象的例子:
四次挥手
当客户端与服务器断开连接时,需要四次报文传输
- 第一次,客户端发送一个FIN报文,告诉服务器已经传输完所有内容了,请求关闭连接,我们假设此时Seq为J。
- 第二次,服务器B收到这个FIN,它发回一个ACK报文段,ack为J+1,确认请求关闭连接。
- 第三次,服务器B发送一个FIN报文,表示服务端也没有其余数据要发送了,告诉客户端自己也希望连接。
- 第四次,客户端发回一个ACK报文,确认关闭请求,至此双方的连接断开。