1)基本知识
TCP 协议的作用是:保证数据通信的完整性和可靠性,防止丢包。(可靠地协议,面向连接的协议)
TCP和UDP在传输层
TCP 是以太网协议和 IP 协议的上层协议,也是应用层协议的下层协议。
以太网协议解决了局域网的点对点通信。
IP在网络层,IP 协议可以连接多个局域网。IP 协议定义了一套自己的地址规则,称为 IP 地址。它实现了路由功能,允许某个局域网的 A 主机,向另一个局域网的 B 主机发送消息。IP 协议只是一个地址协议,并不保证数据包的完整。如果路由器丢包(比如缓存满了,新进来的数据包就会丢失),就需要发现丢了哪一个包,以及如何重新发送这个包。这就要依靠 TCP 协议。
TCP/IP不是一个协议,而是一个协议族的统称。
2)运输连接:
1.建立连接:
名词解释:
Seq:序号,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
ack:确认序号,用他告诉发送端这个序列号之前的数据段都收到了,比如确认号为X,则表示前X-1个数据段都收到了,只有当ACK=1时,确认号才有效,当ACK=0时,确认号无效,这时会要求重传数据,保证数据的完整性
ACK:确认序号有效
SYN:同步序列号,发起一个新连接。SYN置1就表示这是一个连接请求或连接接受报文。
在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1
FIN:释放一个连接,发送端完成发送任务后,当TCP完成数据传输需要断开时,提出断开连接的一方将这位置1
RST:重置连接。
URG:紧急指针(urgent pointer)有效。
1)客户端A通过向服务器B发送一个含有同步序列号的标志SYN的数据段给服务器B
2)服务器B收到客户端A的请求后,用一个带有确认应答ACK和同步序列SYN标志的数据段响应客户端A,也告诉客户端A两件事:我已经收到你的请求了,你可以传输数据了;你要用那个序列号作为起始数据段来回应
3)客户端A收到这个数据段后,再发送一个确认应答ACK,确认已经收到主机B的数据段“我已经收到回复,我现在要开始传输实际数据了”
2.数据传送
3.连接释放
1)客户端A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求
2)当服务器B收到FIN后对其作出响应,确认这一方向上TCP连接关闭,将ACK置1
3)由服务器B再提出反方向的关闭请求,将FIN置1
4)客户端A对服务器B的请求进行确认,将ACK置1,双方向的关闭结束
连接建立的作用:
(1)要使每一方能够确知对方的存在。
(2)要允许双方协商一些参数(如最大报文段长度,最大窗口大小,服务质量等)。
(3)能够对运输实体资源(如缓存大小等)进行分配。
为什么不能用两次握手进行连接?
三次握手的目的是“为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误”。
为了保证服务端能收接受到客户端的信息并能做出正确的应答而进行前两次(第一次和第二次)握手,为了保证客户端能够接收到服务端的信息并能做出正确的应答而进行后两次(第二次和第三次)握手。
假如是两次握手,客户端给服务器发送一个请求,服务器接收请求建立连接完成,可是因为阻塞所以客户端第一次消息没有发完,当第二个消息发送过去的时候,服务器会等待客户端发送建立连接的请求,可是客户端会认为这是第一个的消息,所以不会在建立连接,那么客户端就会一直一直等下去。造成服务器的等待和资源的浪费。
为什么要四次挥手
TCP是全双工模式,每个方向都需要一个FIN和ACK,当一端发送了FIN包之后,处于半关闭状态,此时仍然可以接收数据包。