计算机网络-TCP(传输控制协议)

简介

TCP协议全称为传输控制协议,顾名思义,就是要对数据的传输进行一定的控制

TCP协议

g3ncDI.png

应用层

运行在TCP协议上的协议:

HTTP(Hypertext Transfer Protocol,超文本传输协议),主要用于普通浏览。

HTTPS(Hypertext Transfer Protocol over Secure Socket Layer, or HTTP over SSL,安全超文本传输协议),HTTP协议的安全版本。

FTP(File Transfer Protocol,文件传输协议),由名知义,用于文件传输。

POP3(Post Office Protocol, version 3,邮局协议),收邮件用。

SMTP(Simple Mail Transfer Protocol,简单邮件传输协议),用来发送电子邮件。

TELNET(Teletype over the Network,网络电传),通过一个终端(terminal)登陆到网络。

SSH(Secure Shell,用于替代安全性差的TELNET),用于加密安全登陆用。

传输层

TCP协议报文段首部

gUxqBV.md.png

连接管理机制

正常情况下,TCP需要经过三次握手和四次挥手

三次握手

  1. 第一次:客户端 –> 服务器;建立连接时,客户端发送SYN包到服务器,并进入SYN_SENT状态,等待服务器确认
  2. 第二次:客户端 <– 服务器;服务器收到SYN包,必须确认客户的SYN,同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态;
  3. 第三次:客户端 –> 服务器客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手
四次挥手

  1. 客户端发送一个FIN报文,用来关闭客户端到服务器的数据传送,客户端进入FIN_WAIT_1状态。
  2. 服务器收到FIN报文后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务器进入CLOSE_WAIT状态。
  3. 服务器发送一个FIN报文,用来关闭服务器到客户端的数据传送,服务器进入LAST_ACK状态。
  4. 客户端收到FIN报文后,客户端进入TIME_WAIT状态,接着发送一个ACK给服务器,确认序号为收到序号+1,服务器进入CLOSED状态,完成四次挥手。
为什么建立连接是三次握手,而关闭连接却是四次挥手呢?

这是因为服务器收到建立连接请求的SYN报文后,可以直接把ACK和SYN放在一个报文里发送给客户端。其中ACK报文是用来应答的,SYN报文是用来同步的。而关闭连接时,当服务器收到的FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,”你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
  1. 保证最后一个ACK能够到达。

  2. 防止已失效的连接请求报文段出现在本连接中。

    特点

  3. 互联网由一整套协议构成。TCP是面向连接的传输层协议
    应用程序在使用 TCP 协议之前,必须先建立 TCP 连接。在传送数据完毕后,必须释放已经建立的 TCP 连接

  4. 每一条TCP连接只能有两个端点,每一条 TCP 连接只能是点对点

  5. TCP提供可靠交付的服务。通过 TCP 连接传送的数据,无差错、不丢失、不重复,并且按序到达

  6. TCP提供全双工通信;TCP 允许通信双方的应用进程在任何时候都能发送数据。TCP 连接的两端都设有发送缓存和接受缓存,用来临时存放双向通信的数据

  7. 拥塞控制

    1. 慢开始:开始传输时,传输的数据由小到大递增到一个值(即发送窗口由小到大(指数增长)逐渐增大到拥塞窗口的数值)
    2. 拥塞控制:数据发送出去,并发到接收方发回来的确认收到,拥塞窗口每次值加1地线性增大
    3. 快重传:数据传输时(数据被分成报文,每个报文都有个序号),中间的一部分丢失接收方没收到,接收方连续接到后面的数据,则发回对丢失前的数据的重复确认,这样发送方就知道有部分数据丢失了,于是从丢失出重传数据.
    4. 快恢复:快恢复是与快重传配合的算法,在发生数据丢失时,发送方收到接收方发回的三个重复确认信息时,就把每次传输的数据量减为原来的一半,拥塞窗口也修改为这个值,然后又开始拥塞避免的算法

优点

可靠,稳定

TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源

缺点

慢,效率低,占用系统资源高,易被攻击

应用场景

当对网络质量有要求时,比如HTTP,HTTPS,FTP等传输文件的协议;POP,SMTP等邮件传输的协议