计算机网络总结|运输层

运输层:将网络层的两个端系统之间的交付服务扩展到运行在不同两个端系统上的应用进程的交付服务

0 引言

         运输层为运行在不同主机上的应用进程之间提供逻辑通信;应用进程使用运输层提供的逻辑通信功能彼此发送报文;运输层把应用层的报文划分为报文段,传递给网络层。

         网络层提供了主机间的逻辑通信,运输层提供了应用进程间的逻辑通信;运输层协议只工作在端系统中;运输层的协议有两种:UDP和TCP(udp不可靠、无连接、轻量级的协议,而tcp是可靠的、有链接、耗时的协议);

       运输层有多路复用和多路分解:1、把运输层报文段中的数据交付给正确的套接字为多路分解;2、从源主机不同的套接字中收集数据,并把每个数据封装上首部信息成报文段,然后将报文段传递给网络层被称为多路复用;多路复用要求:1、套接字有唯一标示符、每个报文段有特殊字段来标示该报文段要交付给的套接字;

0.1 UDP的套接字标示和TCP的套接字标示

1、udp:一个主机能运行多个进程,每个进程都有自己的udp套接字,主机通过检查报文段中的目的端口号,将每个报文定向分解到对应套接字;一个udp套接字由一个二元组全面标示:目的ip 地址和目的端口号;如果两个报文段要去一个套接字,那么他要排队;

2、tcp:tcp的套接字由四元组标示:源ip地址、源端口号、目的ip地址和目的端口号;两个具有不同源ip地址和源端口号的到达tcp报文段会被定向到两个连接套接字(因为tcp会建立连接,每个主机都会再产生一个独有的连接套接字);这就是为什么tcp要使用四元组标示(即使当使用udp和tcp时,服务器都能在收到请求后标记出源地址,为什么tcp还要用四元组标示)?因为来自不同源的tcp报文段在第一次建立过连接后,会生成不同的套接字,那么在接下来继续传输的报文段中,需要根据报文段所携带源信息去找到他对应进程间已经确立好的套接字位置;udp不需要,因为udp的接收方只有一个套接字,不需要定位;简而言之是因为tcp是建立连接的,有多个不同的套接字、因此需要定位; 

3、什么是线程:例如web服务器通常只使用一个进程,但是为每个新客户连接创建一个具有新连接套接字的新线程;

1 无连接运输:udp

特点:因为没有拥塞控制,所以应用层只要一来数据,udp就会立即传递给网络层;无需建立连接;无状态连接;分组首部开销少;

1.1、udp报文段结构:

 注意!报文段字段不是套接字标示

1.2、udp检验和

发送方对udp报文段中所有16比特字的和进行反码运算,求和时遇到任何溢出都被回卷;为什么连链路层协议也提供差错检验,udp还要检测?因为不能保证发送方到接收方之间每一段的链路都能提供差错检测,以上被称为端到端原则;但是udp只能检测,不能恢复差错。

2. 有链接运输:tcp

2.1可靠传输的基本原理

首先学习可靠传输的基本原理,以及相关的方法;

2.1.1可靠信道传输 reliable data transfer: rdt2.0 - 3.0(停等协议)

1、经具有比特差错信道的可靠数据传输:rdt2.0

功能:差错检测、接收方反馈(ACK.NAK)、重传、序号;

rdt2.0是一个停等协议,是因为只有发送方接收到接收方的ACK 之后,他才会发一个新的数据;如果一直没有等来ACK或者NAK她就一直等,要是NAK,她就会重发这个数据;在引入重传机制后,有可能会出现冗余分组(接收方收到了数据但他回送的ACK丢失了),这时候需要引入序号,在停等协议中只需要0和1 两个数就够用了;

2、经具有比特差错的丢包信道的可靠数据传输:rdt3.0 

相比于rdt2.0引入了定时器,超时没检测到ack会自动重发。rdt3.0也是停等协议

2.1.2流水线可靠数据传输协议

特点:增加分组序号(每个运输分组都有自己唯一的序号,因为不再停等了,大家一起发送)、增加发送(接收端)缓存(发送方缓冲已经发送但没确认的分组,接收方缓存已经正确接受的分组)、差错恢复(回退N步、选择重传)

1、回退N步(GBN)协议

特点:重传所有的,如果丢失了报文段2,那么即使收到报文段3/4,也会丢弃,并不断发送ack1;

技术包括:序号、累计确认、检验、超时/重传;

2、选择重传(SR)

特点:个别、按需重传;会对乱序的分组先进行缓存,但并不进行交付,接受方窗口和发送方窗口不同步,发送方只有把有序序号最小的报文段正确无误的发送过去(即正确的接收到了接收方的ack),他才会把窗口向后移;与gbn不同,失序后面的报文段不会全部重发,sr会跳过整个窗口发送新的。

技术:窗口长度必须小于序号空间大小的一半:因为太大的话,接收方无法判断是分组重传还是初次传送

3、可靠的传输机制中的各项用途

检验和-----用于检查传输分组中的比特错误;

定时器-----用于超时重传

序号------检测冗余分组

确认号------确认信息

窗口-------控制拥塞程度,控制报文缓存能力

2.2面向连接的运输:TCP

1、tcp连接是一条逻辑连接,总是点对点的,只存在于单个发送方和单个接收方之间的连接。

2、tcp在握手建立连接时,会初始化一系列的状态变量:接收窗口、lastbyesent、lastbyteacked、拥塞窗口、接收缓存、发送缓存等。

3、tcp数据传送建立在字节之上,是一个无结构、有序的字节流;tcp中一个报文段的序号,是该报文段首字节的字节编号:例如:

 确认号是:主机a期待从b主机收到的下一字节的序号。比如,a已经发给b 0~535字节,b会在确认号里填入536。

4、一个tcp报文段的最大长度:受限于链路层最大传输单元(MTU,一般是1500),tcp报文段自带首部40字节,所以一般tcp的最大报文长度是1460; 首部字节+最大报文长度(MSS)=MTU

2.2.1 TCP报文段结构

 接收窗口用于流量控制,FIN SYN等标志字段用于特殊报文; 

2.2.2 三次握手 四次挥手 

1、三次握手:客户首先发出特殊的tcp报文段,将其SYN置1,随机选择初始序号(client_isn);服务器收到这条报文后,将为该tcp连接分配缓存和变量(此时是半开连接),并向客户端回送一个相应报文,其SYN也是1,ack是client_isn+1,该报文称为SYNACK报文段;客户端收到SYNACK报文段后,表明此时连接已经完全建立了,客户可以发送有效载荷报文了,这个第三次报文中SYN将被置0,并应携带一组数据

为什么是三次握手而不是两次握手?原因有二:第一,如果客户给服务器发送了一条连接请求,但该请求由于网络问题被滞留了(但并没有失效),超过一定时间后,客户重传了该连接请求,他们完成了两次握手连接。之后,滞留的请求连接此时到达了,而如果是两次握手,那么服务器将为这个请求连接分配资源(没必要),造成了资源浪费,但如果是三次握手的话,服务器将再多问客户一次还需要吗,客户回应就是需要,不回应就不需要了。第二,二次握手只能保证从客户到服务器是通畅的,无法保证从服务器到客户端是通常的。

SYN泛洪攻击:在三次握手中,如果客户吃吃没完成第三部,最终服务器会终止半开连接并回收资源,SYN泛洪攻击就是攻击者大量的发送tcp SYN报文,却不完成第三步,服务器便会不断地给这些半开连接分配资源,导致服务器资源殆尽。

2、四次挥手

当tcp连接的两个进程通信完毕后,任何一方都能终止该进程。客户发送一个FIN置1报文,服务器回发ACK,服务器再发一个FIN置一,客户再发一个ACK,至此连接关闭。

2.2.3 TCP的累计确认

当发送一个数据流时,tcp只确认该流中第一个丢失字节。

举个例子(加入往返时间来综合理解累计确认):

主机a向主机b发送报文,第一个报文段的确认报文丢失了,但是在超时事件发生内,主机a收到了第二个报文的确认号,他并不会重发第一个报文,因为tcp接收方采用累计确认,他确认了第二个报文就默认第一个报文被正确接受了。

2.2.4 快速重传和重传机制

tcp机制:当收到一个报文段的确认号三次时,不等超时,立马重传该报文段

tcp重传机制是gbn和sr风格的结合:只重传丢失的报文段,采用累计确认

2.2.6 tcp的流量控制和拥塞控制

区别流量控制和拥塞控制流量控制重在匹配速度,匹配发送方和接收方的应用程序的读取速度;而拥塞控制是,tcp发送方因ip网络拥塞而被遏制。

2.2.6.1 tcp的流量控制

创建几个变量,并追踪他:在连接两端创建接收窗口(rwnd),接收缓存(rcv buffer)和lastbyteread等;他们的关系:

 如果主机B的接收缓存满了,那么此时rwnd==0,B把这个消息告诉A,A则会继续发送只有一个字节的报文段(因为这样,B才能持续的给A发送报文,当他缓存清零时他才能告诉A,要不然A永远也不知道B什么时候清完了

2.2.2.6 tcp拥塞控制

1、拥塞代价:(时延、溢出、重传)

当分组的到达速率接近链路容量时,分组会经历巨大排队时延

发送方必须执行重传,补偿因缓存溢出而丢弃的分组;

因遇到巨大时延,导致超时重传,这是不必要的重传;

一个分组沿一条路径被丢弃时,他的上游路由器终究是白忙活了,传输容量浪费掉了;

2、拥塞控制方法:慢启动、拥塞避免、快速恢复

拥塞控制追踪一个新变量:拥塞窗口cwnd

慢启动:cwnd初始被设置为1个mss(第一次只传输1个mss长度的报文段),当首次被确认后,就成倍的增加,这样每经过一个rtt,发送速率就翻倍;结束标志:出现一个超时指示的丢包事件;解决办法:重新将cwnd设置为1重新进入慢启动,将ssthread设置为cwnd的一半,当到达ssthread时,进入拥塞避免状态;

拥塞避免:每轮rtt只增加一个mss;结束标志:出现超时丢包;解决办法:ssthread值减半;

快速恢复:对收到的每个冗余的ack,cwnd值增加一个mss,当报文丢失后,进入拥塞避免状态;

总体上:tcp的拥塞控制是,每个rtt内cwnd线性增加1个mss,当出现3个冗余的ack事件后,cwnd减半(加性增、乘性减

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值