计算机网络--传输层

传输层概述

从通信和信息传输的角度来看,运输层向上边的应用层提供通信服务,它属于面向通信的最高层,也是用户功能的最底层,当网络边缘的俩个主机进行通信时,只有主机的协议栈才有运输层,而网络核心部分的路由器只用到了下三层
两台主机间的通信,真正通信的实体是,主机中的进程通信,是一台主机的进程和另一台主机的进程之间的通信,IP协议虽然把数据送到了主机,但是这个数据还停留着网路层,而没有交付到应用进程,从运输层来看,通信的真正端点不是主机,而是主机中的应用进程。

主机A中的应用进程AP1和主B中的应用进程AP3进行通信,与此同时主机AP1中的应用进程AP2和主机B的应用进程AP4进行通信,这就表明运输层有一个重要的功能,分用和复用,这里的复用指的是,多个应用进程可以用同一个运输层传输数据,这里的分用指的是,同一个运输层可以把收到数据,正确的分发到不同的应用进程
在这里插入图片描述
这里可以看出网络层和运输层之间的区别,网络层为主机之间提供逻辑通信,运输层为应用进程之间提供逻辑通信

运输层的俩种协议
(1)用户数据报协议UDP
传送的数据单位称作UDP用户数据报
UDP提供不可靠的面向无连接服务,传输之前不需要建立连接,远地主机的运输层收到UDP报文后,不需要给出任何确认,虽然UDP不提供可靠交付,但是在某些情况下UDP确实一种有效的工作方式
(2)传输控制协议TCP
传送的数据单位是TCP报文段
TCP则提供可靠的面向连接服务,在传送数据之前必须先建立链接,数据传输结束后要释放链接,因为TCP提供可靠面向连接服务,所以不可避免的增加了许多开销

下面的图片给出了,应用层的协议使用的运输层协议
在这里插入图片描述
运输层端口
运输层该如何把数据交给正确的进程呢?
解决这个问题的方法就是在运输层使用协议端口号,通常简称为端口,这就是说,虽然通信的端点使应用进程,但是只要把传送的报文交给目的主机合适的端口,那么剩下的工作(即交付目的进程)就由TCP和UDP完成
注意这种在协议栈中抽象出来的协议端口是软件端口,和路由器交换机上的硬件端口是俩码事,TCP和UDP的首部都会有源端口和目的端口重要字段。
由此可见,俩个主机进程之间的通信,除了知道对方的IP地址(为了找到对方的计算机),还要知道端口号(为了找到对应的进程),端口号只具有本地意义,他只是为了标志计算机应用层的各个进程和运输层交互时的接口,不同计算机相同的端口没有任何意义

UDP

UDP概述
(1) UDP是面向无连接的,即发送之前不需要建立连接,减少了开销和发送数据之前的延迟
(2)UDP使用最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表
(3)UDP使面向报文的,发送方的UDP把应用程序交下来的报文,添加首部后就下交付IP层,UDP对应用层下交的数据,既不拆分,也不合并,也就是说,应用层传下来多大,UDP就发送多大,因此应用程序必须选择合适大小的报文,报文太长或者太短都会影响IP层的效率
(4)UDP没有拥塞机制,因此网络的拥塞不会影响源主机发送效率的降低,这对某些实时应用很重要(如IP电话,实时视频会议),要求源主机以恒定的速率发送数据,允许在网络拥塞时丢失一些数据,但不允许数据有太大的延迟
(5)UDP支持一对一,一对多,多对一的通信
(6)UDP的首部开销比较小,只有8个字节

UDP的首部格式
用户数据报UDP有俩个字段,数据字段和首部字段,首部字段很简单,只有8个字节,由四个字段组成,每个字段的长度都是俩个字节
(1)源端口:源端口号,需要对方回信时选用
(2)目的端口:目的端口号,在终端交付报文必须使用
(3)长度:UDP用户数据报的长度,其最小值是8
(4)检验和:检测UDP用户数据报在传输中是否有错,有错的话就丢弃
在这里插入图片描述

TCP

TCP特点
(1)TCP是面向链接的运输协议,这就是说,应用程序在使用TCP之前,需要建立TCP链接,在传送数据完毕后,必须释放已经建立对 TCP链接
(2)每一条TCP只能有俩个端点,每一条TCP只能是点对点一对一
(3)TCP提供可交付的服务,通过TCP链接传输出去的数据,无差错,不丢失,不重复,并按序到达
(4)TCP提供双全工通信,TCP允许通信双方的应用进程,任何时候都能发送数据,TCP链接的俩端都设有发送缓存和接受缓存,在发送时,应用程序只需要把数据发送给TCP缓存之后,就可以做其他事情了,而TCP在合适的时候把数据发送出去,接受也一样
(5)面向字节流,TCP中的流指的使流入进程或进程流出的字节序列
(6)TCP和UDP发送数据的方式不同,TCP并不关心应用进程一次把多长的报文发送到TCP缓存,而是根据对方给的窗口值和当前网络阻塞的程度,来决定一个报文段有多少个字节(UDP发送的报文长度使进程给定的),如果TCP给的报文太长,那么TCP就把他划分短一些在传送,如果TCP给的报文太短,TCP可以等到足够多的时候在发送

TCP的链接
TCP链接作为最基本的抽象,TCP的许多特性都与TCP面向链接这个基本特性有关,因此我们需要对TCP链接要有更清楚的了解
前面所过每个TCP都有俩个端点,那么TCP链接的端点是什么呢?不是主机,不是主机的IP,也不是应用进程,不是端口号,TCP链接的端点叫做套接字(Socket)或插口,根据定义:端口号拼接到IP地址即为套接字,因此套接字是在点分十进制IP后写上端口号,中间用冒号隔开,如果IP为196.1.2.3,端口号为80,那么套接字为196.1.2.3:80
在这里插入图片描述
IP1和IP2是来个主机的IP地址,port1和port2分别是两个主机的端口号,TCP链接俩个套接字就是socket1和socket2

TCP可靠传输的原理
由于IP层只提供给最大努力的交付服务,也就是说TCP一下的网络是不提供可靠传输的,因此,TCP必须采用适当的措施才能使得两个运输层之间的通信变的可靠。
理想传输条件有两个特点,(1)传输通道不产生差错(2)不管对方以多快的速度发送数据,接收方总来得及处理收到的数据
然而并不存在这样的理想条件,但我们可以使用可靠地传输协议,当发送失败后进行重传,来不及处理数据的时候,及时的告诉对方降低传输速率,这样就实现了可靠地传输,首先我们先讲停止等待协议

停止等待协议
我们假设A向B发送数据,A时发送方,B是接收方,我们把发送的数据叫做分组,停止等待就是说,每发完一个分组就停止发送,等待对方的确认,在收到确认后,再发送下一个分组

无差错情况
图a,就是无差错情况,没当收到确认后,再发下一个分组
在这里插入图片描述
图b是有差错情况,当B接受M1除了差错,就丢弃M1,其他什么也不做(不通知A收到有差错分组),那么A每过一段时间没有收到确认,就认为刚才的分组丢失,而重新传前面发送过得分组,这就叫超时重传

确认丢失或确认迟到
图5-10a说的是另一种情况,B发送对M1的确认丢失,那么A在一定时间内没有接受到数据,就重新传M1,这时B又收到了M1,这时需要采取俩个行动
第一:丢弃这个重复的分组M1,不向上层交付
第二:向A发送确认,不能一位已经发送过就不再发送

图5-10b说的是另一种情况,传输过程没有差错,但是B对M1的分组迟到了,A会收到重复的确认,对于这个重复的确认处理很简单,收到后就丢掉,B仍然会收到重复的M1,需要丢弃掉M1,并重传确认
在这里插入图片描述
停止等待协议,优点是很简单,缺点是信道利用率太低,为了提高通道利用率,发送方可以不使用停止等待协议,而是采用流水线传输,流水线传输就是,发送方可以连续发送多个分组,不必每次发送完就停顿下来等待确认,这样可以使信道的利用率提高
使用流水线传输,就用到了连续ARQ协议

连续ARQ协议
图5-13a 表示发送方维护的发送窗口,他的意义是位于窗口的5个分组都可以发送出去,不用等待确认,这样信道利用率就提高了,ARQ协议规定,每当收到一个确认就把窗口向前移动一个位置,这样就可以发送第6个分组了,

在这里插入图片描述

TCP报文段的首部格式
TCP首部20个字节是固定的,后面4n个需求是根据需要而增加的选项,因此TCP首部最小字节为20
在这里插入图片描述
(1)源端口和目的端口:各占俩个字节,作用跟上面的UDP相同
(2)序号:TCP是面向字节流的,在一个TCP连接中传送的字节流每一个字节都需要按顺序编号,起始序号需要在开始建立连接的时候设置,首部中的序号指的是本报文段发送的第一个字节的序号,比如某一报文段首部的序号是301,长度是100,这就表示最后一个字节的序号是400
(3)确认号:占四个字节,表示期望对方下一个报文段的第一个数据字节的序号,例如B收到A发送过来的一个报文段,其序号为501,长度为200(序号501–700),这表明B正确收到了A发送序号到700的数据,因此B期望收到A下一个序号为701,于是B发送给A的确认报文段中,把确认号置为701
在这里插入图片描述
(4)紧急URG:当URG=1时,表示紧急字段有效,他告诉系统文中有紧急字段,应该尽快传送,而不需要按照原来的排序传递
(5)确认ACK:仅当ACK=1时确认号才有效,当ACK=0时,确认号无效,TCP规定,当链接建立后所有的ACK必须为1
(6)推送PSH:当俩个应用程序进行交互式通信时,有时候一端的应用需要输入一个命令后立即得到对方的响应,而不再等待缓存填满后在发送
(7)复位RST:当RST=1时,表明TCP连接中出现严重的差错(由于主机崩溃或者其他原因),必须释放链接,然后重新建立运输链接
(8)同步SYN:当链接建立时用来同步序号,当SYN=1时,ACK=0,表示这是一个链接请求的报文段,如果对方统一建立链接,则在响应的报文段中回复SYN=1,ACK=1,所以SYN=1就表示这是一个链接请求,或者链接接受报文
(9)终止FIN:用来释放一个链接,当FIN=1时,表示次报文段的发送方数据已经发送完毕,并要求释放运输链接
(10)窗口:占2个字节,表示从本报文段首部的确认号开始,接收方目前允许对方发送的数据量,之所以有这个限制是因为,接收方缓存空间是有限的。
(11)紧急指针:占俩个字节,仅仅在URG=1时有用,他指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据)

TCP的运输连接管理

TCP是面向连接的协议,所以TCP运输连接的建立和释放,是每一次面向连接通信必不可少的过程

TCP连接的建立(TCP的三次握手)
TCP的链接的过程叫做握手,握手需要早在客户和服务器之间交换三个TCP报文段
在这里插入图片描述
假设主机A运行的是TCP客户端,而主机B运行的是TCP服务端程序,最初俩端的TCP进程都处于关闭状态,本例中A主动打开连接,B被动打开连接
一开始服务器B先创建传输控制模块TCB,准备接收客户端的链接请求,然后服务器就处于收听状态,等待客户端的链接请求
第一次握手
A的TCP进程首先也是先创建传输控制模块TCB,再打算建立TCP连接时,向B发出了链接请求报文段,这时首部的同部位SYN=1,同时选择了一个初始序号seq=x,TCP规定SYN报文段(也就是SYN=1的报文段),不能携带数据但是要消耗一个序号,这时TCP客户端程序进入同步已发送状态
第二次握手
B收到连接请求报文段后,如果同意建立连接,则向A发送确认,再确认报文中,应该把SYN和ACK都置为1,确认号为ack=x+1,同时也为自己选择一个初始序号seq=y,注意这个报文段也不能携带数据,但是要消耗一个序号,这时TCP服务器进程进入同步收到状态
第三次握手
TCP客户端进程收到B的确认后,还要向B给出确认,确认报文段ACK=1,确认号ack=y+1,而自己的序号为seq=x+1,TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号,这种情况下,下一个报文段的序号扔然是seq=x+1,这时TCP链接已经建立,A进入已经建立连接状态
B收到A的确认后也进入已经建立连接状态
这就是TCP连接的三次握手

TCP连接的释放(TCP的四次挥手)
在这里插入图片描述
第一次挥手
当数据传输结束后,A的应用进程先向TCP发出连接释放的报文段,并停止放数据,主动关闭TCP连接,A把连接释放的报文段首部FIN置为1,其序号seq=u,这时A进入终止等待1状态,等待B的确认,注意FIN报文段即使不携带数据也要消耗一个序号
第二次挥手
B收到连接释放的报文段后立即确认,ACK=1,确认号为ack=u+1,而这个报文段的自己的序号为seq=v,然后B就进入关闭等待状态,这时A到B方向的连接就已经释放了,这时的TCP处于半连接状态,A不可以给B发送信息,但是B可以给A发送信息,也就是说B到A的连接还没有释放
A收到来自B得确认后,就进入了终止等待2状态,等待B发出连接释放的报文段
第三次挥手
如果B向A发送的数据已经完毕,这时B发送连接释放的报文段FIN=1 ACK=1,假定B的序号为seq=w,B还需要重复上次发送过的确认号ack=u+1,这时B就进入了最后确认状态,等待A的确认
第四次挥手
A收到B的链接释放报文段,A必须对此发出确认,再确认报文段中ACK=1,确认号ack=w+1,而自己的序号为seq=u+1,然后进入到时间等待状态,这时TCP链接还没有释放掉,必须经过时间等待器设置的时间后,A才能进入关闭状态
这就是TCP的四次挥手

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值