传输层

作者: 丫甘九 | 来源:发表于2020-02-22 21:48 被阅读0次
    image.png

    传输层的俩个协议

    • TCP:需要将要传输的文件分段,传输,建立回话,可靠传输,流量控制
    • UDP:一个数据包就能够完成数据通信,不分段,不需要建立会话,不需要流量控制,不可靠传输,屏幕广播,多播,广播
    • 查看回话:netstart -n
    • 查看建立会话的进程:netstart -nb

    传输层协议和应用层协议之间的关系

    常见的应用层协议使用的端口

    1、http=TCP+80
    2、https=TCP+443
    3、RDP=TCP+3389
    4、ftp=TCP+21
    5、共享文件夹=TCP+445
    6、SMTP=TCP+25
    7、POP3 =TCP+110
    8、 telnet=TCP+23
    9、SQL=TCP+1433
    10、DNS=UDP+53

    服务和应用层协议之间的关系

    1、服务使用TCP或UDP的端口侦听客户端请求
    2、客户端使用IP地址定位服务器 ,使用目标端口,定位服务
    3、可以在服务器网卡上设置只开放必要的端口,实现服务器的网络安全


    image.png

    传输层--服务和端口+端口和安全

    如何查看服务侦听的端口
    • netstat -an
    • netstat - n 查看建立的会话
    • netstat -nb查看建立会话的进程
    • telnet 192.168.80.100 3389 测试远程计算机某个端口是否打开
    如何更改服务使用默认端口
    • 迷惑入侵者,使系统更安全
    如何设置Windows网络安全
    • 设置本地连接 TCP/ IP筛选

    传输层功能和端口范围

    传输层
    • 传输层为相互通信的应用进程提供了逻辑通信
    • 若在一台服务器上有web服务和ftp服务俩个服务,另外一台客户端上的一个应用想要访问服务器上的web服务,他是通过传输层的协议加一个端口号来确定访问的是服务器上的哪一个服务,传输层就是这个功能,让在一台计算机上的应用程序找到另外一台计算机上的应用程序,所以说为应用程序提供了逻辑通信
    • 网络层实现的功能就是如何把数据包从一个地址转到另外一个地址,而传输层就是如何让一个计算机上的应用程序找到另外一个计算机上的应用程序,实现方法就是TCP+端口
    • 传输层实现的功能就是程序到程序之间的连接,TCP+端口,就直接指到了服务器里面的程序了,而网络层实现的功能就是地址到地址


      image.png
      image.png
    传输层的主要功能
    • 传输层为应用进程之间提供端到端的逻辑通信(但网络层是为主机之间提供逻辑通信)
    • 传输层还要对收到的报文进行差错检测
    • 传输层提供面向连接(TCP)和无连接(UDP)的服务


      image.png
    • 协议号:TCP 6,UDP 17,IGMP 1
    TCP的端口
    • 端口是用一个16位端口号进行标志
    • 端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程,在因特网中不同计算机的相同端口号是没有联系的


      image.png
    • netstat -n | find "ESTABLISHED" 输入这个命令就可以只显示有ESTABLISHED的这一行

    UDP首部

    UDP的主要特点
    • UDP是无连接的,即发送数据之前不需要建立连接
    • UDP使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制
    • UDP是面向报文的,UDP没有拥塞控制,很适合多媒体通信的要求
    • UDP支持一对一,一对多,多对一,多对多的交互通信
    • UDP的首部开销少,只有八个字节


      image.png
      image.png
    • UDP协议他的首部在传输层只有八个字节,俩个字节代表源端口,俩个字节代表目标端口,俩个字节代表长度,这个长度指UDP的首部加数据包加伪首部的长度,俩个字节代表校验和


      image.png

    传输控制协议TCP概述

    • TCP 是面向连接的传输层协议
    • 每一条TCP连接只能有俩个端点,每一条TCP连接只能是点对点(一对一)
    • TCP提供可靠交付的服务
    • TCP提供全双工通信
    • 面向字节流
      1、在网络中传输数据有的数据比较小,一个数据包就能传完,这个时候使用UDP就可以了,但是有的数据在网上传的时候,500M或者一个电影那么大,它不可能一个数据包传完,这就要求把这个数据分段传输,分成多个段之后,一个段就是一个数据包,在网上传,到对方,对方收到,这个时候网络不稳定,有可能丢包,网络处理不过来,路由器就把处理不过来的数据包丢掉,也就是说网络层不负责可靠传输,我的文件对方要收到还要正确打开还要一个包不能丢,完完整整的传过来,不能说中间丢俩,丢了文件就打不开了,这个时候就需要TCP协议的可靠传输这种机制来实现了,
    TCP协议特点
    • TCP如何实现可靠传输
    • TCP协议如何实现流量控制
    • TCP协议如何避免网络拥塞
    面向字节流传输
    image.png image.png
    TCP的连接
    • TCP把连接作为最基本的抽象
    • 每一条TCP连接有俩个端点
    • TCP连接的端点不是主机,不是主机的IP地址,不是应用进程,也不是传输层的协议端口,TCP连接的端点叫做套接字
    • 端口号拼接到IP地址即构成了套接字


      image.png

    TCP协议是如何实现可靠传输

    可靠传输的工作原理——停止等待协议
    • 网络层只负责把一个数据从一个网段转到另一个网段,丢了就丢了,不负责可靠传输,可靠传输是靠传输层来实现的
      现有A、B俩台计算机,A要发送数据给B,B收到之后要给他一个确认,给A说我收到了,你给我发第二个数据包,A收到之后,就会发第二个数据包,B收到后会回复,以此类推。。。,


      image.png
      image.png
    可靠通信的实现
    • 使用上述的确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信
    • 这种可靠传输协议常称为自动重传请求ARQ
    • ARQ表明重传的请求是自动进行的,接收方不需要请求发送方重传某个出错的分组
    • 停止等待协议的优点是简单,但缺点是信道利用率太低


      image.png
    流水线传输
    • 发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认
    • 由于信道上一直有数据在不间断地传送,这种传输方式可获得很高的信道利用率
      1、由上图所示,若想要信道利用率增加,则要使发送数据包的时间增加就可以了,怎么使发送时间增加,A计算机发送第一个数据包给B,不等待,只要发完第一个就开始发第二个,发完第二个就发第三个,以此类推,直到第一个数据包的确认回来了,例发第十个数据包的时候第一个数据包的回信才收到,发第十一个数据包的时候第二个数据包的回信才收到,收到回信的都是以前的,最近的都没有收到,所以说通过这种机制,叫流水线传输,不等待一直发,就能获得很高的信道利用率,我们计算机现在通信,上网,下载,都是用的流水线传输
    • 流水线传输是如何实现确认的???
    连续ARQ协议
    • 这就要求我们发送方计算机维持一个发送窗口,这个窗口就是一个数字,若发送窗口是5,意味着框住了五个数据包,这五个数据包可以连续发走,不用等确认,发完第一个数据包再发第二个数据包再发第三个数据包,一直发到第五个,不能再发了,等确认,这个时候第一个数据包对方告诉他收到了,他得到确认了,得到确认之后,第一个数据包得到确认之后,窗口右移,框住的数据包就变成了2,3,4,5,6个数据包右移之后,第六个数据包就会被发出去,第一个数据包就能被从缓从里面扔掉了,发送窗口是5,那么框住的数据包就是五个数据包,以此类推,直到数据发完


      image.png
    累计确认
    • 接收方一般采用累积确认的方式
    • 优点是:容易实现,信道利用率高
    • 缺点是:不能向发送方反映出接收方已经正确收到的所有分组的信息
      A计算机向B计算机发送数据,第一个数据包发送出去,B收到了,第二个数据包发过去B也收到了,第三个数据包发过去,B也收到了,这个时候B计算机给A发了一个确认,第三个数据包我收到了,该发第四个了,这个时候,这个一,二,就不用再确认了,B计算机说收到了第三个,就说明1,2也收到了,如果再发数据的时候,发送方发了四个,接收方收到了1,2,4,3没有收到,接收方发过来确认第二个收到了,则发送方会认为从3开始没有收到,则从3开始再继续发,4也重复发一遍
      image.png
    TCP报文段的首部格式
    image.png
    • 大部分被传数据的时候首部都是20字节固定的,有些数据包不是传数据的是要商量事,就会有选项(可变长),所以有的数据包就是固定首部加上选项再加上数据,这就叫一个TCP的段
    • 目标端口和源端口:占得字节分别为俩字节,俩个字节16位
    • 序号:占用4个字节,TCP协议是面向字节流的,要传输的数据按着顺序分块在缓从里面存放,数据段会从缓从中拿出来在线路上传,序号就是指数据段的第一个字节是整个文章的第多少个字节


      image.png
    • 确认号:A计算机给B计算机传文件,A计算机的数据段传到了B计算机的缓从,B计算机一检查,1234字节都收到了,在缓从中就可以把头去掉,然后B计算机会给一个确认,说我收到的数据包是1234,现在给A计算机确认你可以发从5开始的数据包了,确认号就是让服务器开始发第多少个数据开始的数据包


      image.png
    • 数据偏移:TCP首部不是固定长度的,可能会有选项可能没有选项,计算机收到TCP报文段之后,得判断一下,首部是从哪开始有数据了呢,数据偏移就是用来记录TCP报文段是从第多少个字节开始有数据了呢,数据偏移量一共有4位二进制,写成十进制的话就是15,最大就是15了,一个1代表4个字节,4x15=60,所以首部最长就是60个字节


      image.png
    • 选项:因为首部最长60个字节,首部固定长度是20,那么选项最长也就40个字节
    抓包TCP协议
    image.png
    image.png
    TCP首部标记位
    image.png
    • URG:用来告诉计算机,这个数据段里面要传的这数据是一个比较着急的数据,要优先传,就别排队了,当URG=1时,数据包传不需要再缓存中排队,不管缓从中有多少没有传的
      例:当A计算机传数据给B计算机时,这个数据需要传十分钟,数据已经传了一分钟,忽然A计算机不想把这个再传给B计算机了,但是,再A计算机缓从中十分钟的数据全部都在缓从中了,确认不传这个数据得等到所有数据传完之后再告诉B计算机其实这个数据不用了,这种时候,URG这个标记就可以用到,只要有这个标记的数据直接传不用排队,这时候B计算机可以立马接收到这个确认不传的信息,就不用等十分钟后再知道,立马断开
    • ACK:如果ACK是零的话,确认号是无效的,如果是1的话,确认号才有效
      例:什么时候确认号是了0呢,A计算机与B计算机要建立会话,确认号是对以前接收数据的确认,现在换没有接收数据,因此ACK在确认会话的时候等于0,
    • SYN:同步的时候要用到,
      例:A计算机要与B计算机通信,A计算机要发起一个会话的请求,这个时候syn=1,说明这是一个要建立会话的请求的一个数据包,B计算机同意建立会话,这个时候SYN=1,


      image.png
    TCP如何实现可靠传输——停止等待协议
    • 以字节为单位的滑动窗口技术
    • 没有丢包情况下


      image.png
    • 发送缓存是由接收缓存控制的


      image.png
      image.png
      image.png
      image.png
      image.png
      image.png
      image.png
    • 有丢包的情况下


      image.png
    • 超时重传时间的选择


      image.png

    TCP流量控制

    image.png
    image.png

    TCP的传输连接管理

    • 传输连接有三个阶段,即:连接建立、数据传送、连接释放
    • TCP连接的建立都是采用客户服务器方式
    • 主动发起连接建立的应用进程 叫做客户(client)
    • 被动等待连接建立的应用进程叫做服务器(server)
    TCP的连接建立 用三次握手建立TCP连接
    • A计算机客户端,B计算机是一个服务器,客户端要访问服务器上的服务,客户端需要和服务器建立连接=进行通讯,这个时候,A计算机首先会给B
      计算机发一个同步数据包,同步数据包标记位TCP的首部SYN=1,表示这是一个请求建立会话的数据包,确认标记为0即ACK=0,ACK=0意味这确认号无作用,所以没有确认号,序号是X,x可能是0也可能是其他,序号表示这个数据段的第一个字节是整个文章的第x个字节,计算机B收到这样一个数据包(同步位为1,确认号为0),就能知道这是一个主动发起连接的数据包,B计算机就会发一个数据包进行回应,这个数据包TCP首部SYN也=1,确认标记变为1,序号是y,这个序号是B指定的,A计算机发给B序号为x说明B计算机收到了X这么多字节,所以需要A发X+1这么多的字节了,所以确认号就是X+1,接下来,A收到确认之后,A计算机再给B计算机发一个数据包,这个数据包就没有同步标记了,确认号是1, 序号Seq是x+1,告诉B计算机我现在给它发的就是X+1字节,确认号呢就是Y+1,因为B计算机上一个数据包发过来Y那么多字节,现在确认给A发Y+1个字节
    建立会话网络畅通就行了,为什么还要发第三次?
    • 客户端向服务器发送一个建立连接的请求,那这个服务器在给客户端回一个确认建立连接的请求,这俩个数据包足以能够证明这个网络是畅通的,并且这俩个数据包足以能够协商这俩个数据通信所需要的参数,所以为什么需要第三次握手??
    • 假如没有第三次握手,会出现这样一种场景,A计算机要发起一个建立连接的请求,这个数据包发出去之后可能选择了一个比较远的网络 扔的,比较远的网络传的时候用的时间就比较长,A计算机等了一会发现我发了一个请求没有回应,于是再发了一个,这个数据包很快,直接到达了B,B计算机收到请求之后,也很快给回应一个数据包到达A,然后就开始传数据了,过了一会,远程的数据包也到了B,B计算机一看,又来一个要建立连接的这样一个请求,B计算机又会给一个确认,这个确认到A,A不认,因为A得请求确认它刚才已经收到了,B计算机给A发了一个确认后就得等,等A计算机给它发数据通讯,A计算机根本就不搭理它,但是B计算机在等,就造成了B计算机的资源浪费,这种情况多了,B计算机可能就会瘫掉,所以得需要第三个数据包,等A计算机收到确认后再给B计算机一个确认,在正式开始通讯,只有当A计算机发了第三个确认,B计算机才认为这个是有效的,然后进行下一步的通讯,如果B计算机发了确认后,等了一段时间后,A不搭理B,则B就会释放这个连接,


      image.png
      image.png

    TCP的连接建立—用三次握手建立TCP连接的各状态

    • A计算机给B计算机发了一个建立连接的请求,A计算机的状态就变成了SYN-SENT(发送),B计算机收到之后给了A计算机一个确认,这个时候B计算机的状态就变成了SYN-RCVD,A计算机收到B计算机发过来的确认之后,A计算机的状态就变成了ESTAB-LIS HED,就是已经建立连接,当B计算机再次收到A得确认之后,B计算机的状态就变成了ESTAB-LIS HED,当AB计算机状态都变成ESTAB-LIS HED之后,再传输数据


      image.png
      image.png

    TCP的连接释放

    • 客户端首先发一个数据包给服务器,FIN标记=1.意味这我要主动关闭TCP连接了


      image.png
    • B计算机收到之后,给A发一个确认


      image.png
    • 这个时候A就不能再向B发了,但是B换可以给A发,也就是说,A给B发,我要结束了,B同意了,A就不能再给B发了,但是B没有要说结束,换可以给A发,当B把数据发完了,B发一个结束的确认,这个数据包FIN=1,意味这B也要结束了


      image.png
    • A收到之后,A给B一个确认,说我同意,他们之间就不能在发数据了


      image.png
    TCP释放连接时的状态
    image.png

    相关文章

      网友评论

          本文标题:传输层

          本文链接:https://www.haomeiwen.com/subject/wlylqhtx.html