【计算机网络总结二】TCP/UDP协议、



【计算机网络总结二】TCP/UDP协议、_第1张图片

图片可以点击放大查看。高清图片下载地址:GitHub。

TCP简介:

Transmission Control Protocol 传输控制协议,TCP和UDP都是属于传输层协议。

TCP 用于应用程序之间的通信。

当应用程序希望通过 TCP 与另一个应用程序通信时,它会发送一个通信请求。这个请求必须被送到一个确切的地址。在双方“握手”之后,TCP 将在两个应用程序之间建立一个全双工 (full-duplex) 的通信。

这个全双工的通信将占用两个计算机之间的通信线路,直到它被一方或双方关闭为止。

UDP 和 TCP 很相似,但是更简单,同时可靠性低于 TCP。

TCP协议的特点 :

1 TCP 提供一种面向连接的、可靠的字节流服务。需要建立连接、形成传输数据的通道。

2 TCP传输数据大小不受限制。

3TCP 使用校验和,确认和重传机制来保证可靠传输

4面向字节流,也就是说仅仅把上层协议传递过来的数据当成字节传输。

为了实现TCP上述的特点,TCP协议需要解决的是面向连接(建立连接和关闭连接的方式)、可靠传输(错误确认和重传)、流量控制(发送方和接收方的传输速率协调)、拥塞控制四个方面。

注意:TCP 并不能保证数据一定会被对方接收到,因为这是不可能的。TCP 能够做到的是,如果有可能,就把数据递送到接收方,否则就(通过放弃重传并且中断连接这一手段)通知用户。因此准确说 TCP 也不是 100% 可靠的协议,它所能提供的是数据的可靠递送或故障的可靠通知。

TCP可靠传输是如何实现的?

(1)应用数据分割成TCP认为最适合发送的数据块。这部分是通过“MSS”(最大数据包长度)选项来控制的,通常这种机制也被称为一种协商机制,MSS规定了TCP传往另一端的最大数据块的长度。值得注意的是,MSS只能出现在SYN报文段中,若一方不接收来自另一方的MSS值,则MSS就定为536字节。一般来讲,在不出现分段的情况下,MSS值还是越大越好,这样可以提高网络的利用率。     

(2)重传机制。设置定时器,等待确认包。     

(3)对首部和数据进行校验。     

(4)TCP对收到的数据进行排序,然后交给应用层。     

(5)TCP的接收端丢弃重复的数据。     

(6)TCP还提供流量控制。(通过每一端声明的窗口大小来提供的)


TCP协议建立一个连接(三次握手)


【计算机网络总结二】TCP/UDP协议、_第2张图片

TCP协议中,主动发起请求的一端称为『客户端』,被动连接的一端称为『服务端』。不管是客户端还是服务端,TCP连接建立完后都能发送和接收数据。

1.刚开始客户端和服务端都处于关闭状态。 

第一次握手: (SYN=1, seq=x):

客户端发送一个 TCP 的 SYN 标志位置1的包,指明客户端打算连接的服务器的端口,以及初始序号 X,保存在包头的序列号(Sequence Number)字段里。发送完毕后,客户端进入 SYN_SEND 状态。

第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1):

服务器发回确认包(ACK)应答。即 SYN 标志位和 ACK 标志位均为1。服务器端选择自己 ISN 序列号,放到 Seq 域里,同时将确认序号(Acknowledgement Number)设置为客户的 ISN 加1,即X+1。 发送完毕后,服务器端进入 SYN_RCVD 状态。

第三次握手(ACK=1,ACKnum=y+1)

客户端再次发送确认包(ACK),SYN 标志位为0,ACK 标志位为1,并且把服务器发来 ACK 的序号字段+1,放在确定字段中发送给对方,并且在数据段放写ISN的+1发送完毕后,客户端进入 ESTABLISHED 状态,当服务器端接收到这个包时,也进入 ESTABLISHED 状态,TCP 握手结束。

【计算机网络总结二】TCP/UDP协议、_第3张图片


TCP四次挥手过程


【计算机网络总结二】TCP/UDP协议、_第4张图片

第一次挥手(FIN=1,seq=x)

假设客户端想要关闭连接,客户端发送一个 FIN 标志位置为1的包,表示自己已经没有数据可以发送了,但是仍然可以接受数据。发送完毕后,客户端进入 FIN_WAIT_1 状态。

第二次挥手(ACK=1,ACKnum=x+1)

服务器端确认客户端的 FIN 包,发送一个确认包,表明自己接受到了客户端关闭连接的请求,但还没有准备好关闭连接。发送完毕后,服务器端进入 CLOSE_WAIT 状态,客户端接收到这个确认包之后,进入 FIN_WAIT_2 状态,等待服务器端关闭连接。

第三次挥手(FIN=1,seq=y)服务器端准备好关闭连接时,向客户端发送结束连接请求,FIN 置为1。发送完毕后,服务器端进入 LAST_ACK 状态,等待来自客户端的最后一个ACK。

第四次挥手(ACK=1,ACKnum=y+1)

客户端接收到来自服务器端的关闭请求,发送一个确认包,并进入 TIME_WAIT状态,等待可能出现的要求重传的 ACK 包。

服务器端接收到这个确认包之后,关闭连接,进入 CLOSED 状态。

客户端等待了某个固定时间(两个最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,没有收到服务器端的 ACK ,认为服务器端已经正常关闭连接,于是自己也关闭连接,进入 CLOSED 状态。

为什么建立连接是三次握手,而关闭连接却是四次挥手呢? 

这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。  

TCP的流量控制

流量控制,简单来说就是不能发送的太快,以免处理不完,也不能发送的太慢,以免浪费资源。TCP协议中,建立连接之时,B会告诉A自己接受窗口的大小,A的窗口大小不会超过这个大小。

传输过程中,B会根据自己数据缓存的情况给A返回自己的窗口大小,例如,刚开始发送数据时,B的缓冲区为空,设置窗口大小为300,A开始发送;但是由于A发送的太快,B缓冲区渐渐变满,就会将接受窗口的大小设为100;如果B的缓冲区满了,还可能将窗口大小设为0,A就停止发送,直到B重新发送了一个窗口大小。

TCP拥塞控制

拥塞控制发生在网络中负载太大,比如路由器IP包队列堆满了,就会丢弃尾部的包,从而导致TCP层数据的丢失。拥塞控制就是要避免网络数据量太大导致传输效率、速度降低。

常见的TCP拥塞控制方法包括四种:

1慢开始

2拥塞避免

3快重传

4快恢复



UDP简介:

UDP协议英文全称是 User Datagram Protocol。意思是用户数据报协议。它是一种无连接的、提供面向事务的简单、不可靠信息传送服务的协议。DNS域名解析、QQ聊天、屏幕广播、多播、广播(因为没有建立会话)都是应用了UDP协议的例子。

UDP协议的特点:

UDP 缺乏可靠性。只负责数据的发送、不需要确认对方是否能接收到;

UDP 数据报是有长度的。每个数据包的大小限制在64K以内

UDP 是无连接的。UDP 客户和服务器之前不必存在长期的关系。UDP 发送数据报之前也不需要经过握手创建连接的过程。

因为不需要连接、所以是不可靠的协议

因为不需要连接、所以传输速度相对较快

UDP协议的报文结构


【计算机网络总结二】TCP/UDP协议、_第5张图片



传输层中的 TCP 和 UDP 联系

TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP。

TCP 是面向连接的、可靠的流协议。流就是指不间断的数据结构,当应用程序采用 TCP 发送消息时,虽然可以保证发送的顺序,但还是犹如没有任何间隔的数据流发送给接收端。TCP 为提供可靠性传输,实行“顺序控制”或“重发控制”机制。此外还具备“流控制(流量控制)”、“拥塞控制”、提高网络利用率等众多功能。

UDP 是不具有可靠性的数据报协议。细微的处理它会交给上层的应用去完成。在 UDP 的情况下,虽然可以确保发送消息的大小,却不能保证消息一定会到达。因此,应用有时会根据自己的需要进行重发处理。

TCP 和 UDP 的优缺点无法简单地、绝对地去做比较:TCP 用于在传输层有必要实现可靠传输的情况;而在一方面,UDP 主要用于那些对高速传输和实时性有较高要求的通信或广播通信。TCP 和 UDP 应该根据应用的目的按需使用。

你可能感兴趣的:(【计算机网络总结二】TCP/UDP协议、)