运输层(传输控制协议TCP、用户数据报协议UDP)

运输层有一个很重要的功能:复用和分用

  • 复用:在发送方不同的应用进程都可以使用同一个运输层协议传输数据。
  • 分用:接收方的运输层在剥去报文的首部后能够把这些数据正确交付给目的应用进程。
  • 应用层所有的应用进程都可以通过传输层再传到IP层(网络层),这就是复用。(运输层相当于邮递员,收信)
  • 运输层从IP层收到数据后必须交付指明的应用进程,这就是分用。

在这里插入图片描述

一、进程之间的通信

  • 两个主机之间的通信:是主机中的一个进程和另一个主机的一个进程在交换数据。两个主机进行通信就是:两个主机的应用进程互相通信。
  • 网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。
  • 运输层为应用层提供通信服务。端到端的通信是应用进程之间的通信,IP层(网络层):通信的两端是两个主机。
  • 面向连接的TCP和无连接的UDP、

两个计算机中的进程要相互通信 不仅必须知道对方的IP地址(找到对方的计算机),还需要知道对方的端口号(找到对方计算机的应用进程)。客户端发送通信请求时,必须先知道对方服务器的IP地址和端口号。

运输层的端口号分成两大类:

  • 服务器端使用的端口号:HTTP端口号80,DNS:53
  • 客户端使用的端口号:在客户进程运行时动态选择,当服务器收到客户进程的报文时,就知道了客户进程所使用的端口号。通信结束,客户的端口号不存在,这个端口号给其他客户进程使用。

二、TCP与UDP的区别

UDP

  • 面向无连接的(发送数据前不需要建立连接)
  • 尽最大努力交付(不保证可靠传输)、
  • 面向报文(对应用层传下来的报文,添加首部后交给IP层,IP层传来的报文,去掉首部后交给应用层,所以选择报文长度要适中。)
  • 没有拥塞控制
  • 支持一对一、一对多、多对一、多对多的交互通信。
  • UDP首部开销小,只有8字节,TCP是20字节。

TCP

  • TCP面向连接,应用程序在使用TCP协议前,必须先建立TCP连接,传送数据完毕后,释放TCP连接。
  • 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的。
  • TCP提供可靠交付的服务。
  • TCP提供全双工通信,TCP允许通信双方的应用程序在任何时候都能发送数据,TCP连接的两端设有发送缓存和接受缓存。用来临时存放双向通信的数据。发送时,应用程序在把数据传送给TCP的缓存后,就去做自己的事了,TCP选择合适的时候把它发出去。接受时,TCP把收到的数据放入缓存,上层的应用程序在合适的时候读取缓存中的数据。
  • 面向字节流。虽然应用程序和TCP的交互式一次一个数据块,但TCP把应用程序交下来的数据堪称仅仅是一连串的无结构的字节流。

区别

  • TCP提供面向连接的、可靠的数据流传输 UDP提供的是无连接的、不可靠的数据流传输
  • TCP传输单位:TCP报文段,UDP传输单位:用户数据报
  • TCP注重数据安全性,UDP数据传输快,安全性一般

三、TCP连接

  • TCP连接的端点叫套接字。套接字socket=(IP地址:端口号)
  • TCP连接={socket1,socket2}={(IP1:port1),(IP2:port2)}
    TCP 连接两个套接字
  • 同一个IP地址可以有多个不同的TCP连接,同一个端口号也可以出现在不同的TCP连接中。

四、TCP可靠传输的工作原理

  • TCP发送的报文段是交给IP层传输的,但IP层只提供尽最大努力服务,网络层提供的是不可靠的传输。因此TCP必须采用适当的措施才能使两个运输层之间的通信更可靠。
  • 以字节为单位的滑动窗口,假定A收到了B发来的确认报文段,其中窗口时20字节,确认号时31(表明B期望收到的下一个序号是31)
    在这里插入图片描述
    选择确认:ASCK

五、TCP的流量控制:使用滑动窗口实现流量控制

  • 为了让发送发的发送速率不要太快,要让接收方来得及接受。
  • 发送方的发送窗口不能超过接收方给出的接收窗口的数值。
  • TCP的窗口单位是字节

seq=1:把报文段序号的初始值设为1
ack:确认字段的值
ACK=1时,确认号字段才有意义。

六、TCP拥塞控制
若对网络中某一资源的需求超过了该资源所能提供的部分,网络的性能变坏,这种情况叫拥塞。
拥塞控制:防止过多的数据注入到网络中。

拥塞控制的方法:

(1)慢开始和拥塞避免(加法增大、乘法减小)
刚开始拥塞窗口cwnd的初始值是1,cwnd随着传输轮次指数增长,当cwnd涨到慢开始门限时,执行拥塞避免算法,线性增长,cwnd每次增1。当出现超时时,慢开始门限=拥塞窗口值得一半,cwnd设置为1,慢开始,继续。
在这里插入图片描述
(2)快重传和快恢复
刚开始拥塞窗口cwnd的初始值是1,cwnd随着传输轮次指数增长,当cwnd涨到慢开始门限时,执行拥塞避免算法,线性增长,cwnd每次增1。当发送发连续收到三个重复确认时,执行乘法减小算法:,慢开始门限=拥塞窗口值得一半,直接进行拥塞避免算法,cwnd设置为慢开始门限得值,继续假加法增大。在这里插入图片描述

七、TCP得运输连接管理

  • 运输连接有三个阶段:连接建立,数据传送,连接释放
  • 同步SYN:SYN=1,ACK=0表示连接请求报文段, SYN,ACK=1表示同意建立连接。

1.连接建立TCP三次握手
连接过程是利用客户服务器模式,A:客户端,B:服务器端
- 主机A向B发送连接请求;主机B对收到的主机A的报文段进行确认;主机A再次对主机B的确认进行确认。
同步SYN:在连接建立时用来同步序号,当SYN=1而ACK=0时,表明这是一个连接请求报文段。若对方同意建立连接,则在响应报文段中使SYN=1,ACK=1.
(1)A向B发送连接请求报文段,首部中的同步位SYN=1,初始序号seq=x, A进入SYN_SEND(同步已发送)状态
(2)B收到请求报文段后,如同意建立连接,则向A发送确认,SYN=1,ACK=1,确认号seq=x+1,初始序列号:seq=y.服务器B进程进入SYN-RCVD(同步收到)状态
(3)A收到B的确认后,还要向B确认,确认报文ACK=1,确认号ack=y+1,自己的序号seq=x+1.此时,TCP连接已建立,A进程进入**(已连接)状态**
在这里插入图片描述

  • 采用三次握手是为了防止失效的连接请求报文段突然又传送到主机B,因而产生错误。(如果A向B发送了连接请求,报文段没有丢失,而是在网络中滞留了一段时间,以致于连接释放后才到达B,本来是一个已经失效得报文段,但B收到此失效的连接后,误以为A又发了一次新的连接请求,于是向A 发送确认报文段,同意建立连接,因为现在A并没有发送建立连接的请求,所以不会理睬B的确认。B由于没有收到确认,就知道A没有要求建立连接)

2.连接释放:四次挥手
(1)客户端发送FIN包,FIN=1,请求断开连接,进入FIN-WAIT1状态
(2)服务器端收到FIN包后返回应答,ACK=1, 进入CLOSE-WAIT状态
(3)客户端收到FIN应答后进入FIN-WAIT2状态
(4)服务器发送FIN请求包,进入LAST-ACK状态
(5)客户端收到FIN请求包后,发送应答,等待2MSL(为了保证客户端发送的最后一个ACK报文段能到达B),进入TIME-WAIT状态。
(6)服务器收到ACK应答后,进入close状态。(服务器结束连接的时间要比客户端结束的要早)

在这里插入图片描述


版权声明:本文为weixin_43321444原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。