计算机网络--传输层

本文详细介绍了TCP和UDP两种传输层协议的特点和区别。TCP是面向连接、可靠的,提供拥塞控制和流量控制,适合需要稳定传输的场景;而UDP则是无连接、不可靠的,适用于实时性要求高的应用。TCP首部包括源端口、目的端口、长度和校验和,而TCP首部包含了序号、确认号、数据偏移、确认ACK、同步SYN和终止FIN等字段,确保数据的可靠传输。文章还探讨了TCP的三次握手和四次挥手过程,以及TCP的超时重传和拥塞控制机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用户数据报协议UDP(User Datagram protocol)是无连接的,仅最大可能交付,没有拥塞控制,面向报文(对于应用传下来的报文不合并也不拆分,只添加UDP首部),支持一对一,一对多,多对一,多对多的交互通信。

传输控制协议TCP(Transmission Control protocol)是面向连接的,提供可靠交付,有拥塞控制,流量监控,通过双工通信,面向字节流(把应用层传下来的看成字节流,把字节流组织成大小不等的数据块),每一条TCP连接只能是点对点的(一对一)。

UDP首部格式:

首部字段只有8个字节,包括源端口、目的端口、长度、检验和。12字节的伪首部是为了计算校验和临时添加的。

TCP首部格式

序号:对于字节流进行编号,例如序号为301,表示第一个字节的标号为301,如果携带的数据长度为100字节,那么下一个报文段的序号为401.

确定号:期望收到的下一个报文的序号,例如B正确收到A发送来的一个报文段,序号为501,携带的数据长度为200字节,因此B期望下一个报文段的序号为701,B发送给A的确认报文段中的确认好为701.

数据偏移:指的是数据部分距离报文段起始的偏移量,实际上指的是首部长度。

确认ACK:当ACK=1时确认号确认号字段有效,否则无效。TCP规定,在连接建立后所传送的报文必须把ACK置1。

同步SYN:在连接建立时用来同步序号。当SYN=1,ACK=0时表示这是一个连接请求报文段。若对方同意建立连接,则响应报文中SYN=1,ACK=1.

终止FIN:用来释放一个连接,当FIN=1,ACK=0时表示这是一个连接请求报文段,若对方同意建立连接,则响应报文中SYN=1,ACK=1

窗口:窗口作为接受方让发送方设置其发送窗口的依据。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。

TCP如何保证可靠传输

  • 校验和:TCP将保证他首部和数据的校验和。这是一个端到端的校验和,目的是检测数据在传输过程中的任何变化。如果收到段的校验和有差错,TCP将丢弃这个报文段和不确认收到此报文段
  • 流量控制:TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大可变小的滑动窗口协议。(TCP利用滑动窗口来进行流量控制)。
  • 拥塞控制:当网络拥塞时,减少数据的发送(慢开始、拥塞避免、快重传、快恢复)。
  • 停止等待协议:也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后在发下一个分组。超时重传:当TCP发出一个段后,他启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

TCP的三次握手:

左边为客户端,右边为服务端:

  • 首先服务端处于监听状态,等待客户的连接请求。
  • 客户端主动打开,向服务端发送请求连接报文,SYN=1,ACK=0,选择一个初始的序号x(seq = x)。
  • 服务端收到连接请求报文,如果同意建立连接,则向客户端发送连接确认报文,SYN=1,ACK=1,确认号为x+1,同时也选择一个出事的序号y(seq=y)。
  • 客户端收到服务端的连接确认报文后,还要向服务端发出确认,确认号为y+1,序号为x+1。
  • 服务端收到客户端的确认后,连接建立。

三次握手的原因:

第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。

客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不会进行三次握手,因此就不会在打开连接。

TCP的四次挥手:

左边为客户端,右边为服务端:(注:发起断开的可以是客户端,也可以是服务端)

  • 第一次挥手,客户端发送连接释放报文,FIN=1.客户端进入FIN_WAIT_1状态,表示客户端没有数据再会发送给服务端(TCP属于于半关闭状态)。
  • 第二次挥手,服务端接收到客户端发送到的FIN报文段(进入CLOSE_WAIT状态),发出确认(ACK,seq),此时服务端还能向客户端发送数据。客户端进入TIME_WAIT_2状态。
  • 第三次挥手,当服务端不再需要连接时,服务端向客户端发送连接释放报文,FIN=1。同时服务端进入LAST-ACK状态。
  • 第四次挥手,客户端收到发出的确认返回ACK,进入TIME-WAIT状态,等待2MSL(报文最大存活时间)后如果没有收到回复,则证明服务端已经正常关闭,则释放连接。服务端收到客户端的确认后释放连接。

四次挥手的原

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值