计算机网络——传输层

1,传输层的功能

     为相互通信的应用程序提供了逻辑通信(使一个机器上的客户端能够找到另一个机器上的服务程序)。网络层是为主机之间提供逻辑通信(使客户端所在的机器可以找到服务端所在的机器)。传输层还要对收到的报文进行差错检测。

2,TCP协议

      TCP协议,将要传输的文件分段,可以建立会话,实现可靠传输,并且具有流量控制功能。传送大文件的时候使用TCP协议。

  • TCP报文段格式  

       TCP数据报有20个固定字节的首部,大部分TCP首部是20个字节,也有需要选项的数据报。下面分别介绍20个固定字节的含义:

       源端口:发送数据的计算机中,发送数据的服务的端口

       目的端口:接收数据的计算机中,接收数据的服务的端口

       序号:这个数据报中的第一个字节是数据源中的第几个字节(类似于偏移量的概念)

       确认号:数据接收端接收到数据报后,会发送一个数据报给数据的发送端达到确认的目的,这里面的确认号是告诉数据发送端,接下来应该发送哪个数据报(确认号的值是刚刚接收到的数据报最后一个字节的位置的下一个字节(应该发送的数据报的开始位置))。

       数据偏移:用来确认报文段从阿里开始是数据(因为TCP首部不一定是20个字节)      

       保留的6位二进制是没有用的。

       URG:这个标记位是值表示发送方传输的数据报的值是否着急,是否需要排队。1表示着急

       ACK: 0表示确认号无效,1表示确认号有效

       SYN:同步的时候使用,开始的发起会话或者第一次回应会话请求的时候值为1

       PSH:URG=1表示优先发送,如果PSH=1,表示接收端优先处理这个数据报,不在处理缓冲区中比这个数据报早到的数据。

       RST:RST = 1 表示会话出现了严重的错误,必须先建立连接在重新连接

       FIN:FIN = 1表示数据报传完了,需要释放连接了       

       窗口:告诉接收方,发送方设置的窗口大小(发送窗口的大小),为什么要通知?因为接收方需要根据这个值来设置接收窗口的大小,如果设置的小,传输过程中会出现错误。

       校验和:校验的是TCP首部和TCP数据的正确性

       紧急指针:只有当URG有效时,紧急指针才有作用,这个指针指明了需要紧急处理的数据的结束的位置。

  • TCP协议的特点

       TCP 是面向连接的传输层协议;每一条 TCP 连接只能有两个端点(endpoint),每一条 TCP 连接只能是点对点的(一对一)(TCP 连接的端点叫做套接字(socket) ,端口号拼接到IP 地址即构成了套接字);TCP 提供可靠交付的服务;TCP 提供全双工通信;面向字节流;具有流量控制功能和拥塞控制功能

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

停止等待协议:使用确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信。这种可靠传输协议常称为自动重传请求ARQ (Automatic Repeat reQuest)。 ARQ 表明重传的请求是自动进行的。接收方不需要请求发送方重传某个出错的分组 。

滑动窗口技术实现可靠传输(接近真实的方法)

          以字节为单位的滑动窗口传输技术。TCP 的可靠传输机制用字节的序号进行控制。TCP 两端的四个窗口经常处于动态变化之中。 TCP连接的往返时间 RTT 不是固定不变的。需要使用特定的算法估算较为合理的重传时间。  TCP 每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传时间到但还没有收到确认,就要重传这一报文段。

  • TCP协议如何实现流量控制

      流量控制(flow control)就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。利用滑动窗口机制可以很方便地在 TCP 连接上实现流量控制。

  • TCP协议如何避免网络拥塞

       出现资源拥塞的条件:对资源需求的总和>可用资源拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素流量控制往往指在给定的发送端和接收端之间的点对点通信量的控制,它所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。

       1)使用慢开始算法

              发送方维持拥塞窗口 cwnd (congestion window)

      发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去;             只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数

   需要注意的是这里有一个慢开始门限的使用,使用规则如下:          

慢开始门限 ssthresh 的用法如下:

cwnd < ssthresh 时,使用慢开始算法。

cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。

cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞避免算法。

拥塞避免算法的思路是让拥塞窗口 cwnd 缓慢地增大,即每经过一个往返时间 RTT 就把发送方的拥塞窗口 cwnd 1,而不是加倍,使拥塞窗口 cwnd 按线性规律缓慢增长。

当拥塞出现时,只要发送方判断网络出现拥塞(其根据就是没有按时收到确认),就要把慢开始门限 ssthresh 设置为出现拥塞时的发送方窗口值的一半(但不能小于2)。然后把拥塞窗口 cwnd 重新设置为 1,执行慢开始算法。这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕。

需要注意的是拥塞避免”并非指完全能够避免了拥塞。利用以上的措施要完全避免网络拥塞还是不可能的。“拥塞避免”是说在拥塞避免阶段把拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。

 2)快重传和快恢复算法(这里不详细介绍,留个坑)

  • TCP的传输连接管理      

传输连接有三个阶段,即:连接建立数据传送连接释放

TCP 连接的建立都是采用客户服务器方式。主动发起连接建立的应用进程叫做客户(client)。被动等待连接建立的应用进程叫做服务器(server)

通过三次握手来建立连接,过程如下图:

     其中,seq表示序号,ack表示确认号。注意,通过前两次握手就已经可以确定网络是通的,为什么还要进行第三次握手呢?这是为了确认B计算机刚才发给A的确认信息已经生效,如果不进行第三次握手的话,B计算机会释放掉前两次握手建立的信息连接。  

    数据传输结束后,通信的双方都可释放连接。 现在 A 的应用进程先向其 TCP 发出连接释放 报文段,并停止再发送数据,主动关闭 TCP 连接。 A 把连接释放报文段首部的 FIN = 1 ,其序号 seq = u ,等待 B 的确认。 B 发出确认,确认号 ack = u + 1,而这个报文段自己的序号 seq = v。TCP 服务器进程通知高层应用进程。 A B 这个方向的连接就释放了, TCP 连接 处于半关闭状态。 B 若发送数据, A 仍要接收。若 B 已经没有要向 A 发送的数据,其应用进程就通知 TCP 释放连接。 A 收到连接释放报文段后,必须发出确认。过程如下图,注意建立的连接两个方向都需要关闭后,才算连接完全关闭了。


 

3,UDP协议

      UDP协议,一个数据包就能完成数据通信的通信(或者是屏幕广播,注意,屏幕广播不是一个数据包就能完成的数据通信),不需要分段,也不需要建议会话,也不需要流量控制,使用UDP协议是不可靠传输。传送小的数据包使用的是UDP协议。UDP适用于多播或者广播。

  • UDP的特点      

UDP 是无连接的,即发送数据之前不需要建立连接;UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制;UDP 是面向报文的。UDP 没有拥塞控制,很适合多媒体通信的要求;UDP 支持一对一、一对多、多对一和多对多的交互通信;UDP 的首部开销小,只有 8 个字节(如上面的图所示,长度是指udp包的长度;检验和计算需要网络层首部的内容)。

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

      TCP协议和UDP协议加一个端口就可以标识一个应用层协议,关系图如下:

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

        http = TCP + 80;  https = TCP + 443;  RDP = TCP + 3389;ftp = TCP + 21; 共享文件夹 = TCP + 445;SMTP(发邮件的协议) = TCP + 25;DNS(域名解析协议) = UDP + 53; SQL = TCP + 1433

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

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

     1)如何查看服务侦听的端口:

               使用netstat -an 命令查看机器监听了哪些端口

               使用netstat -n 命令查看建立的会话

               使用netstat -nb查看建立会话的进程

               可以使用命令 telnet IP地址 端口号,来查看指定机器上的端口号有没有打开

                端口是用16位二进制表示的,端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。在因特网中不同计算机的相同端口号是没有联系的。熟知端口,数值一般为 01023。登记端口号,数值为1024~49151。客户端口号,数值为4915265535

 

     

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值