前端应该了解的计算机网络-TCP篇

225 阅读8分钟

TCP协议

传输控制协议。

当一台计算机要与另一台计算机通信时,两台计算机之间通信需要畅通且可靠,这样才能正确收发数据;

比如你想下载文件,下载的文件要是完整的,不能缺图少字的;这里就用到了TCP,称为传输控制协议,是TCP/IP网络中使用的主要协议之一,用来保证所有的数据按顺序接收,如果不使用TCP协议;数据可能会丢失或者乱序,看不到图像或者文字错乱;

TCP是面向连接的协议,两台计算机在通信之前,要先建立TCP逻辑连接。

  • 属于 传输层通信协议

  • 基于TCP的应用层协议有HTTPSMTPFTPTelnetPOP3

三次握手建立连接

三次握手要确认双方的两样能力:发送能力与接收的能力。三就是发送方计算机和接收方计算机相互确认的一个过程:比如

A:听得到吗?

B:听得到,你能听到吗?

A:能听到。

A和B一来一回相互确认后,才开始收发数据;

第一次握手

建立连接时,客户端发送SYN包到服务器,并进入SYN_SENT状态,等待服务器确认,其中SYN就是同步序列编号。

客户端注重发起连接,发送SYN,自己变成了SYN-SENT状态

第二次握手

服务器收到SYN包,必须确认客户的SYN,同时自己也发送一个SYN包,即是SYN+ACK包,此时服务器进入SYN_RCVD状态。

服务端收到SYN+ACK包,返回SYN+ACK(对应客户端发来的SYN),自己变成了SYN-RECD状态

第三次握手

客户端收到服务器返回的SYN+ACK包,客户端再次向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

第二次握手之后,客户端再发送ACK给服务端,自己变成ESTABLISHED状态;服务端收到ACK之后,也变成ESTABLISHED状态。

归纳

成功进行TCP的三次握手后,就建立起一条TCP连接,即可传送应用层数据

  • TCP提供的是全双工通信,故通信双方的应用进程在任何时候都能发送数据
  • 三次握手期间,任何1次未收到对面的回复,则都会重发

建立TCP连接前【TCP客户端、服务器都处于关闭状态(CLOSED)】,直到【客户端主动打开连接,服务器才被动打开连接(处于监听状态=LISTEN),等待接收客户端的请求】三次握手算完成。

过程描述状态
第一次握手客户端向服务器发送1个连接请求的报文段客户端进入同步已发送状态(SYN_SEND)
(等待服务器的确认)
第二次握手服务器收到请求连接报文段后,若同意建立连接,则向客户端发回连接确认的报文段服务器进入同步已接收状态(SYN_RCVD)
第三次握手客户端收到确认报文段后,向服务器再次发出连接确认报文段客户端、服务器端都进入已创建状态(ESTABLISHED)(可开始发送数据)

四次挥手释放连接

在通信结束后,双方都可以释放连接,共需 四次挥手。比如:

A:我不想跟你聊了。

B:你确定吗?

B:那我就不跟你聊了。

A:确定

一段时间后A和B断了联系

第一次挥手

主动关闭的一方,发送一个FIN,传送数据,用来告诉对方(被动关闭方),相当于说不会再给你发送数据了。

主动关闭的一方可以接受数据。

客户端发送释放的报文段,自此不可发送数据,可以接受数据

第二次挥手

被动关闭方 收到 FIN 包,发送 ACK 给对方,确认序号。

服务端接收后通知应用进程并向客户端发送ACK确认

第三次挥手

被动关闭方 发送一个 FIN,关闭方,说我不会再给你发数据了。(你不给我发送数据,我也不给你发送数据了)

服务端处理完后被动关闭再次向客户端发送FIN以及ACK,进入LAST-ACK状态

第四次挥手

主动关闭一方收到 FIN ,发送要给 ACK ,用来确认序号

客户端收到服务端发来的FIN后,发送 ACK 给服务端。在等待2MSL后进入CLOSED状态

归纳

成功进行TCP的四次挥手后,就断开了TCP连接,传送数据需要重新建立连接

释放TCP连接前【TCP客户端、服务器都处于已创建状态(ESTABLISHED)】,直到【客户端主动关闭TCP连接】四次挥手才算完成。

过程描述状态说明
第一次挥手客户端向服务器发送1个连接释放的报文段(停止再发送数据)客户端进入终止等待1状态(FIN-WAT-1)
等待服务器的确认
第二次挥手服务器收到连接释放报文段后,则向客户端发回连接释放确认的报文段服务器进入关闭等待状态(CLOSE-WAT)
客户端收到服务器的确认后,进入终止等待2状态(FIN-WAT-2),等待服务器发出释放连接请求
至此,客户端->服务器的TCP连接已断开,即TCP连接处于半关闭状态
即客户端=>服务器断开,但服务器=>客户端未断开
第三次挥手若服务器已无要向客户端发送数据,则发出释放连接的报文段服务器端进入最后确认状态(LAST-ACK)
第四次挥手客户端收到连接释放报文段后,则向服务器发回连接释放确认的报文段客户端进入时间等待状态(TIME-WAT)
服务器进入关闭状态(CLOSED)
此时TCP连接还未释放,须经过时间等待计时器设置的时间2MSL后,客户端才进入连接关闭状态(CLOSED)
即服务器进入关闭状态比客户端要早一些

UDP协议

用户数据报协议, 和TCP相似,也用于发送和接收数据。

不同的是UDP是无连接的,就是通信之前无需建立通讯连接;也不保证数据传输的可靠性,

当使用UDP发送数据时,他并不关心数据是否会被接收到,但也因为如此,他的传输比TCP更快;适用于实时性要求高的应用,比如语音通话,视频聊天

  • 属于 传输层通信协议

  • 基于UDP的应用层协议有 TFTPSNMPDNS

TCP与UDP区别

TCP是面向连接的、可靠的、基于字节流的传输层协议

  • 面向连接:所谓面向连接,指的是客户端与服务端的连接,在双方互相通信之前,TCP需要三次握手建立连接,而UDP没有相应的建立连接的过程

  • 可靠性:TCP可靠性主要体现在有状态,可控制

    有状态:TCP会精准记录哪些数据发送了,被对方接受了,哪些没有,而保证数据按序到达,不允许差错

    可控制:意识到丢包或者网络环境差,TCP根据具体情况调整自己的行为,控制自己发送速度或重发

  • 面向字节流:UDP数据传输基于数据报,仅仅是继承了IP层的特性,而TCP为维护状态,将IP包变成了字节流

  • 优缺点

    优:数据传输可靠

    缺:效率慢(因需建立连接、发送确认包等)

TCPUDP
是否面向连接面向连接无连接
传输可靠性可靠不可靠
传输形式字节流数据报文段
传输效率
所需资源
应用场景要求通信数据可露(如文件传输、邮件传输)要求通信速度高(如域名转换)
首部字节20-608个字节(由4个字段组成)

知识支撑

TCP/IP协议?

TCP/IP协议是一个协议簇。里面包括很多协议的,TCP、IP、UDP只是其中之一, 之所以命名为TCP/IP协议,因为TCP、IP协议是两个很重要的协议,就用他两命名了。

关于TCP/IP和HTTP协议的关系

TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据

关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:“我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP 文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”


最后一句
学习心得!若有不正,还望斧正。希望掘友们不要吝啬对我的建议。