第八章 传输层
作者:xuan97916
功能: 可靠传输(超时丢包重传)
拥塞避免(发送自动感知网络是否拥塞)
流量控制(接收端控制发送端的发送速度)
8.1 传输层协议应用场景
TCP (TransmissionControl Protocol 传输控制协议)
需要多个数据包来进行数据传输(分段编号组装成完整内容)
应具有可靠传输流量控制拥塞控制的功能
客户端与服务器需要进行TCP连接(参数协商:确认性选择,最大报文)通信结束后释放链接
e.g. QQ传文件
UDP (Uesr DatagramProtocol 用户数据报协议)
一个数据包就可以完成数据的传输如DNS,QQ文字聊天(应用程序实现可靠性)
QQ视频聊天(保证实时性)
UDP传输不需要分段流量控制传输成功与否由应用层来进行判断,本身不提供可靠传输
优点:不需要建立连接,节省服务器资源
传输层协议和应用层协议的关系:使用传输层协议+端口号
http=tcp+80
ftp=tcp+21
SMTP=TCP+25
POP3=TCP+110
DNS=TCP/UDP+53
RDP=TCP+3389
Windows共享文件夹=TCP+445
MSSQL=TCP+1433
MYSQL=TCP+3306
TELNET=TCP+23(测试远程端口是否打开)
服务和端口的关系:服务的运行需要TCP或者UDP来侦听客户端的请求
web Tcp+80
ftp tcp+21
smtp tcp+25
POP3 tcp+110
http:tcp+80
https:tcp+443
windows上的服务分为两类:(服务占用的端口不能冲突)
为本系统提供服务(不需要网络连接)
为网络中其他计算机提供服务(需要TCP/UDP进行某个端口侦听客户端)
cmd命令
Netstat -an查看本地侦听端口
-n 查看本地建立的tcp连接
-b - 显示在创建每个连接或侦听端口时涉及的
可执行程序。在某些情况下,已知可执行程序承载
多个独立的组件,这些情况下,
显示创建连接或侦听端口时
涉及的组件序列。在此情况下,可执行程序的
名称位于底部 [] 中,它调用的组件位于顶部,
直至达到 TCP/IP。注意,此选项
可能很耗时,并且在你没有足够
权限时可能失败。
Net user usernamepassword 来指定远程桌面的账户名密码
telnet 测试到远程服务器的端口是否打开 telnet ip地址端口号
Msconfig 查看服务
使用端口扫描工具(superscan3.0)进行扫描来确定开放的端口号
数据包:具有目标端口和源端口(客户端随机指定的端口,且服务器和客户端在本地唯一)
可以更改网络使用的端口来保证网络安全
终端服务客户端 mstsc
端口和网络安全
1、如果在网络设备封掉TCP/UDP的某个端口,就不能访问其对应的服务,通过只开放必要的端口的方式来保证网络安全
2、可以在网络设备上控制端口,在路由器上设置防火墙来控制内网访问的端口
Windows防火墙中实现网络安全
只拦截进入服务器的流量,出去的流量不拦截且允许进入
单方向ping有可能是防火墙设置的问题
使用TCP/ip筛选来保证网络安全
8.2 UDP协议
特点:
(1)UDP协议是无连接的,发送数据之前不需要建立连接,减少了开销和发送数据之前的时延
(2)UDP使用最大努力交付,不保证可靠交付,不需要维持复杂的连接状态表,通信两端不用保持连接,节省系统资源。
(3)UDP协议是面向报文的,发送方的UDP对应用程序交下来的报文在添加首部后就向下交付给网络层,不进行报文的合并拆分,而是只保留报文的边界。
应用层 传输层
应用层报文——>UDP用户数据报的数据部分+UDP首部
(4)UDP没有拥塞控制功能,网络的拥塞不会使源主机发送速率降低。(对某些实时应用很重要 e.g.QQ)
(5)支持一对一、一对多(多播数据流)、多对一(多个多播数据对一个计算机)和多对多的交互通信
拒绝服务式***(DDoS)使用UDP数据包
(6)UDP的首部开销小(8字节),TCP有20个字节
UDP报文的首部:
共有4个字段,每个字段的长度都是两个字节:
伪首部:源ip地址+目标ip地址+0(UDP数据长度)+17(DEC)/0x11(HEX)(协议类型),协议类型只有一个字节,但需要补充一个0x00.构成12个字节
(伪首部)源端口目标端口长度(首部+数据部分的长度和)检验和
UDP计算校验和
12字节伪首部+8字节UDP首部+7字节数据
将每个都分为16位二进制,发送前对所有的二进制反码运算求和,先将校验和写为全0,然后计算出后发送,接收方收到后对其同样做二进制反码求和,如果结果位全1则说明数据没有差错。
8.3 TCP协议
8.3.1 TCP协议的主要特点
(1)TCP面向连接,TCP先建立连接,数据传输完毕之手,TCP释放已经建立的连接(可以实现双向连接)
(2)TCP连接只能有两个端点,只能使点到点的连接方式
(3)TCP提供可靠交付服务,TCP连接进行的传输使无差错(发现有错误接收端丢弃)不丢失(如果确认时间过期则重新发送)不重复且按顺序送达的(首先到达的会等待迟到的数据包)
(4)TCP提供全双工通信:建立一个Tcp连接就可以实现双向通讯,它允许通信双方的应用进程在认识时候都能发送接收数据,TCP连接的两段都有发送缓存和接收缓存,用来临时存放双向的数据。
(5)面向字节流:TCP中的流(steam)是流入到进程或从进程流出的字节序列。传输层负责接收或者发送由应用层的字节流,传输层将其分组打包或解包,TCP接收和给上层应用程序提供的是连续的字节流,应用层不关心传输层的打包以及分装方式。
(6)速度协商:发送会根据接收方的接收速度来动态调整数据包的大小来匹配两者速度。
8.3.2 TCP协议的报文格式
源端口/目标端口:可用范围1—2^16(1-65536),共计65535个
序号(4字节,序号范围0-2^32-1,超过之后从0开始循环):该报文首字节在整个文件中的第多少个字节
确认号:下一个报文的首字节在整个要传送文件中的第多少个字节,也是下一个报文的序号
数据偏移(占4位二进制,最大为15):因为有可选字段,所以TCP的报文长度不是固定的,数据偏移指明了TCP报文段的首部位置。主要:数据偏移的单位为4个字节,所以能表示15*4=60的数据,即TCP首部的长度不能超过60字节(TCP的固定长度为20字节,则变长字节最大为40字节)
8.3.3 TCP的可靠传输——停止等待协议
发送方M1向M2发送数据包后,等待M2收到回复以后,M1继续向M2发送数据包,具有自发
超时重传机制
当确认数据包丢失时,重传上一个数据包,传输回的数据包删除。
当确认数据包迟到时,M1重新发送,M2收到迟到的数据包但什么也不做。
缺点:发送数据效率太低,发送方需要等待时间长。
停止等待协议也叫做自动重传请求(ARQ)
8.3.4 改进版停止等待协议——连续ARQ协议和滑动窗口协议
选择性确认(SACK selectiveacknowledgement)
改进的协议存在问题,一组发送多个数据包时(确认发一个数据包),其中某个数据包出现问题,给发送端的请求是收到了前面的数据包而后面的数据包没有收到,要求后面的数据包重发,这样会造成数据的浪费,应该也确认后面的数据包也已经到达。要达成这一要求,需要表明确认数据包的边界,这就是选择性确认。选择性确认时在建立tcp连接后自动协商的。
确认数据包(sack)格式
数据包声明(1字节)+选项长度(1字节)+左边界(4字节)+右边界(4字节)
左边界写的是已收到的字节块的第一个字节号,右边界是收到最后一个字节加一
因为在tcp首部中的数据长度是4字节,所以两个边界也是4字节,每个选择性确认的数据包最多指示38||8=9个字节块
确认数据包没有数据部分,只有tcp首部(包括选项)
8.3.5 超时重传
在局域网中超时重传时间几乎是固定的,但是在广域网中不固定,是动态变化的
TCP往返传输时间(round trip time RTT)的测量:
1.TCP Timestamp选项(现在不用)
TCP时间戳选项可以精确的测量RTT,发送方发送报文文段时吧当前时间值放在时间戳字段中,接收方在确认报文段把时间戳字段复制到时间回送回答字段,因此在发送方收到数据后,使用RTT=当前时间-数据包中timestamp选项的回复时间
2.重传队列数据包的TCP控制块
在TCP发送窗口中保存着发送而未被确认的数据包,数据包skb中的TCP控制块包含着一个变量tcp skb cb->when。记录了该数据包第一次发送时间,当收到数据包确认,就可以计算出RTT,RTT=当前时间-When。这就意味着发送端收到第一个确认,就能计算出新的RTT
往返时间的计算:在wireshark中,用两个时间差进行计算RTT
8.3.6 流量控制
发送端给接收端发送数据时,发送端根据接收端的接受能力调整的,在发送端发送确认数据时,同时发送接受窗口的变化和该发送的字节数
(发送端的发送窗口大小由接收端设定)
8.3.7 拥塞控制
拥塞窗口的设定发送端的发送窗口
网络中所有的适用TCP的计算机共同参与拥塞控制。
在理想情况下,当输入的流量多余最大吞吐量时,多余的流量会被丢弃。
在实际状态下,输入的负载迫近于最大吞吐量时,丢包数开始增加(轻度拥塞)
当超过最大吞吐量时,丢包数越来越多。
所以拥塞控制就是避免数据吞吐量接近最大吞吐量
拥塞避免方法:
(1)慢开始算法:一开始发送2^0,2^1,2^2·….个数据包进行试探,直到出现丢包后,开始适用拥塞避免算法进行发送
MSS :最大报文段长度(MSS实际长度为1460=MTU-20-20)
Cwnd:拥塞控制窗口
(2)拥塞避免算法
在前几次的轮次中,使用慢开始算法以指数增长的方式增加数据包的发送个数,当达到慢开始门限(ssthresh)时,则第一次使用拥塞避免算法进行加法增大(每次加1),当出现网络拥塞(出现丢包)后,使用乘法减小(将出现拥塞时的拥塞窗口的值除以2,得到新的慢开始门限的值 )的方式减少单词发送数据包的值,之后再以满开始的方式从1开始增加,到达新的慢开始门限之后以加法增加的方式增加单次传送的数据包的数量.
(3)改进的拥塞控制方法——快重传-快恢复算法(目前正在应用)
a.快重传:首先要求接收方每收到一个失序的分组后就立即发出重复确认(目的时使发送方及早知道有的分组没有到达对方),而不要等待自己发送数据使才进行捎带确认。其规定发送方只要一连收到3个重复确认就立即重传对方尚未收到的报文段M3(如果M3没有收到就重复确认上一个数据包),而不必继续等待为M3设置的重传计时器到期
b.快恢复:
在前几次的轮次中,使用慢开始算法以指数增长的方式增加数据包的发送个数,当达到慢开始门限(ssthresh)时,则第一次使用拥塞避免算法进行加法增大(每次加1),当出现网络拥塞(出现丢包)后,使用乘法减小(将出现拥塞时的拥塞窗口的值除以2,得到新的慢开始门限的值 )的方式减少单词发送数据包的值,之后直接从满开始门限进行加法增大
8.3.7.1 各种窗口之间的关系
发送窗口=min【接收窗口,拥塞窗口】
8.3.8 TCP的连接管理
客户端先向服务器发起连接建立请求,请求中带有客户端的接收窗口大小,MSS大小,是否支持SACK,之后服务器向客户端发送TCP连接确认,携带着服务器的接收窗口MSS,SACK等。之后客户端再向服务器发送确认的确认。至此,两者可以双向通讯。
通讯结束后,服务器和客户端要释放连接。
8.3.8.1 TCP的三次握手
次数 方向 标记
1 客户端->服务器(请求建立连接) SYN
2 服务器->客户端(服务器向客户端确认连接) SYN
3 客户端->服务器(确认确认连接已经收到,可以建立连接) ACK
建立连接请求的数据包和数据确认的数据包的特征:SYN标记都是1(确认的确认和其他数据包都是0),序号与确认号均为0
TCP请求 SYN=1,ACK=0
TCP连接确认 SYN=1,ACK=0
确认的确认传输数据的TCP数据包 SYN=0
次数 客户机状态 服务器状态
1 CLOSE->SYN-SENT CLOSE->LISTEN
2 SYN-SENT->ESTABLISHED LISTEN->SYN-RCVD
3 ESTABLISHED SYN-RCVD-> ESTABLISHED
8.3.8.2 SYN***
恶意客户机A向计算机S大量发送指向其他计算机的TCP连接请求,S需要回应TCP连接请求,向其他计算机发送连接请求确认,由于其他计算机没有向S发送连接请求,所以S的请求确认无效,s需要等待一定时间来释放连接,等待的过程消耗了S的资源,达到了***的目的。
8.3.8.3 LAND***
A计算机向B计算机发送TCP连接请求,其中的TCP连接请求的源地址和目标地址均为B计算机,因为B计算机没有给自己发送请
求,又等待自己的确认数据包,所以B计算机宕机。
8.3.9 TCP的连接释放
TCP协议通信结束后,需要释放连接,TCP连接释放过程比较复杂,我们仍结合双方状态的改变来阐明连接释放的过程。
数据传输结束后,通信的双方都可释放连接。如图8-74所示,现在A和B都处于ESIABLISHED状态,A的应用进程先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接。A把连接释放报文段首部的FIN置1,其序号seq=u,它等于前面已传送过的数据的最后一个字节的序号加1。这时A进入FIN-WAIT-1(终止等待l)状态,等待B的确认。
转载于:https://blog.51cto.com/xuan97916/1942645