TCP/UDP协议

TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP 协议不仅仅指的是 TCP 和 IP 两个协议,而是指一个由 FTP、SMTP、TCP、UDP、IP等协议构成的协议簇。


1. 五层协议体系结构是什么?

OSI 体系结构采用七层协议:由下至上分别是 物理层、数据链路层、网络层、运输层、会话层、表示层、应用层。

TCP/IP 协议的体系结构采用四层协议:由下至上分别是 网络接口层、网络层、运输层、应用层。

所以,我们一般采用五层协议:由下至上分别是 物理层、数据链路层、网络层、运输层、应用层。

五层比较

物理层链路层网络层运输层应用层
定义的是什么规则相邻计算机节点之间比特流的透明传送两台主机之间的数据传输选择合适的网间路由和交换结点应用进程之间的通信提供数据传输应用进程之间的通信
数据单位比特bit(数据位)数据帧数据包数据段数据
包含的协议__IP、ICMP、ARP、RARPTCP、UDPTelent、FTP

互联网是由大量的异构网络通过路由器(router)相互连接起来的。


2. UDP协议

UDP (User Datagram Potocol) 用户数据报协议。UDP 提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。UDP协议比较简单,实现容易,但它没有确认机制,数据包一旦发出,无法知道对方是否收到。

UDP协议定义了端口,同一个主机上的每个应用程序都需要指定唯一的端口号,并且规定网络中传输的数据包必须加上端口信息,当数据包到达主机以后,就可以根据端口号找到对应的应用程序了。

由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。


3. TCP协议

TCP (Transmission Control Procotol) 即传输控制协议,是一种面向连接的、可靠的、基于字节流的通信协议。简单来说TCP就是有确认机制的UDP协议,每发出一个数据包都要求确认,如果有一个数据包丢失,就收不到确认,发送方就必须重发这个数据包。

协议 / 规则是死的,约束双方的。

那么,TCP面向的连接,到底是什么呢?

3.1 连接是什么?

连接是,双方会在各自服务器的内存里开辟资源(接收队列和发送队列),切换状态。资源和资源之间是对应的,一方的发送根据规则可以到达另一方的接收队列中。

既然TCP是可靠的,什么样子是可靠的呢?

3.2 什么是可靠的?

连接是绝对唯一的。这里,需要说一点socket。

socket 是什么?

  • socket,套接字。套接字是通信的基石,是支持TCP/IP协议的路通信的基本操作单元。可以将套接字看作不同主机间的进程进行双间通信的端点。

  • 简单的讲,socket 是对资源的包装,资源中包括接收队列和发送队列。所以,通过一对 socket 就可以通信。

  • 一个socket = IP + 端口。而通信双方需要2个socket。所以,两个socket = 源IP + 源端口 + 目的IP + 目的端口, 可以表示绝对唯一的连接。也就是说,可以理解为,连接 = 源IP + 源端口 + 目的IP + 目的端口

另外,端口号有 65535 个。

3.3 TCP如何保证传输可靠?

  1. 数据被分割。应用数据被分割成TCP认为最适合发送的数据块。
  2. 编号+排序。TCP 给发送的每个包进行编号,接收方对数据进行排序,把有序数据传送给应用层。
  3. 校验和。TCP 将保持它首部和数据的校验和。这个校验和是一个端到端的校验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 会丢弃这个报文段和不确认收到此报文段。
  4. TCP 的接收端会丢弃重复的数据。
  5. 利用滑动窗口实现流量控制。TCP 连接的每一方都有固定大小的缓冲空间,TCP 的接收端只允许发送端发送接收端能够容纳的数据。当接收方来不及处理发送方的数据,会提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。
  6. 拥塞控制。当网络拥塞时,减少数据的发送。
  7. ARQ (自动重传请求)协议。基本原理是每发完一个分组就停止发送,等待对方确认,在收到确认后再发下一个分组。
  8. 超时重传。TCP 发出一个段后,会启动一个定时器,等待接收端确认收到这个报文段。如果不能及时收到一个确认,将会重发这个报文段。

4. TCP协议三次握手

建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。

4.1 握手过程是什么样子的?

客户端C和服务端S连接的过程如下:

  1. C 跟 S 说想连接:C -> S 发送 SYN
  2. S 跟 C 说它知道了:C <- S 发送 SYN + ACK
  3. C 跟 S 说它收到 S 的消息了:C -> S 发送 ACK

其中,SYN(Synchronize Sequence Numbers) 是同步序列编号,TCP/IP建立连接时使用的握手信号。

ACK(Acknowledge character) 是确认字符,表示发送的数据已确认接收无误。

4.2 为什么要三次握手?

双方确认自己和对方的发送和接收是正常的,从而建立可靠的通信信道。

每次握手,客户端C 和 服务端S 能够确认的信息如下表所示。

客户端C服务端S
第一次握手
(C->S)
什么都不能确认确认对方发送正常;
自己接收正常
第二次握手
(S->C)
自己发送、接收正常;
对方发送、接收正常
自己接收正常;
对方发送正常;
第三次握手
(C->S)
自己发送、接收正常;
对方发送、接收正常
自己发送、接收正常;
对方发送、接收正常

4.3 第二次握手传回确认ACK,为什么要传回SYN?

接收端向发送端发送ACK:告诉发送端,我接收到你发送的信号了。表示客户端到服务端的通信时正常的。

接收端向发送端发送SYN:建立并确认从服务端到客户端的通信。


5. TCP协议四次挥手

断开一个TCP连接需要“四次挥手”。断开的是连接,也就是释放资源。

“四次挥手”,指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。断开连接时,可以由任意一方发出请求。

任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。

A和B断开连接的过程如下:

  1. A 跟 B 说想断开连接:A -> B 发送 FIN
  2. B 跟 A 说它知道了:A <- B 发送 FIN + ACK
  3. B 跟A 说它也想端口连接:A <- B 发送 FIN
  4. A 跟 B 说好,知道了:A -> B 发送 ACK

其中,FIN(Finish) 是,TCP/IP 关闭连接时使用的信号。

ACK(Acknowledge character) 是确认字符,表示发送的数据已确认接收无误。


6. TCP和UDP协议的区别

TCPUDP
是否面向连接
是否可靠可靠不可靠
数据传输形式字节流数据报
传输效率
需要的资源
应用场景要求数据通信可靠。一般是文件传输、发送和接收邮件、远程登录等要求通信速度高。一般用于即时通信,比如QQ语音、直播
首部字节20-608个字节

参考链接:
https://snailclimb.gitee.io/javaguide/#/docs/network/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值