传输层

作者: 听你讲故事啊 | 来源:发表于2019-07-04 16:48 被阅读0次

    传输层

    传输层

    端口及套接字

    传输层编址

    传输层的复用和分用 常用应用进程默认的端口
    常用应用进程默认的端口-2 image 端口:应用层进程的标识

    套接字

    image

    无连接服务和面向连接服务

    无连接服务和面向连接服务

    设置传输层的必要性

    IP只是送到对应的主机,但是一个主机会有多个进程,传输层就是将对应的数据传输到对应的应用进程

    UDP协议

    UDP在IP之上增加了端口复用分用和差错控制功能

    UDP特点 | TCP特点
    :-:|:-:|:-:
    无连接 | 面向连接的
    不可靠的服务 | 可靠的服务
    点到点和多点通信 | 点到点的通信
    首部8字节 | 首部固定部分20字节
    面向报文 | 面向字节流

    image
    UDP协议格式

    UDP实例

    协议名称 协议 默认端口 使用UDP协议原因说明
    域名系统 DNS 53 为了减少协议的开销
    动态主机配置协议 DHCP 67 需要进行报文广播
    简单文件传输协议 TFTP 69 实现简单,文件需同时向许多机器下载
    简单网络管理协议 SNMP 161 网络上传输SNMP报文的开销小
    路由选择信息协议 RIP 520 实现简单,路由协议开销小
    实时传输协议 RTP 5004 因特网的实时应用
    实时传输控制协议 RTCP 5005 因特网的实时应用

    UDP校验

    UDP校验

    TCP协议

    TCP报文格式

    序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。
    确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号。
    确认ACK:占1位,仅当ACK=1时,确认号字段才有效。ACK=0时,确认号无效
    同步SYN:连接建立时用于同步序号。当SYN=1,ACK=0时表示:这是一个连接请求报文段。若同意连接,则在响应报文段中使得SYN=1,ACK=1。因此,SYN=1表示这是一个连接请求,或连接接受报文。SYN这个标志位只有在TCP建产连接时才会被置1,握手完成后SYN标志位被置0。
    终止FIN:用来释放一个连接。FIN=1表示:此报文段的发送方的数据已经发送完毕,并要求释放运输连接
    PS:ACK、SYN和FIN这些大写的单词表示标志位,其值要么是1,要么是0;Ack、Seq小写的单词表示序号。

    标志位的含义

    三次握手和四次挥手

    第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
    第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
    第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

    三次握手

    第三次握手是为了防止:如果客户端迟迟没有收到服务器返回确认报文,这时会放弃连接,重新启动一条连接请求,但问题是:服务器不知道客户端没有收到,所以他会收到两个连接,浪费连接开销。如果每次都是这样,就会浪费多个连接开销
    由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

    1.TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。
    2.服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
    3.服务器关闭客户端的连接,发送一个FIN给客户端。
    4.客户段发回ACK报文确认,并将确认序号设置为收到序号加1。

    四次挥手 tcp请求到结束

    SYN Flood攻击的过程在TCP协议中被称为三次握手(Three-way Handshake),而SYN Flood拒绝服务攻击就是通过三次握手而实现的。TCP连接的三次握手中,假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后(大概30秒到2分钟)丢弃这个未完成的连接, 这段时间就是SYN Timeout。服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源。

    三次不可达

    分布式拒绝服务攻击采取的攻击手段就是分布式的,在攻击的模式改变了传统的点对点的攻击模式,使攻击方式出现了没有规律的情况,而且在进行攻击的时候,通常使用的也是常见的协议和服务,这样只是从协议和服务的类型上是很难对攻击进行区分的。在进行攻击的时候,攻击数据包都是经过伪装的,在源IP 地址上也是进行伪造的,这样就很难对攻击进行地址的确定,在查找方面也是很难的。这样就导致了分布式拒绝服务攻击在检验方法上是很难做到的。

    MSS = TCP报文段长度 - TCP首部长度
    TCP数据部分的最大长度


    image

    TCP可靠传输

    序号确认机制

    [图片上传失败...(image-38f183-1562230121290)]

    若收到的报文段无差错,只是未按序号,那么应如何处理?

    • 将不按序的报文段丢弃;
    • 先将其暂存于接收缓冲区内,待所缺序号的报文段收齐后再一起上交应用层。

    超时重传机制

    超时重传时间RTO公式:

    RTO = RTT + 4× RTTD
    

    往返时延RTT公式:

    RTTnew = RTTsample (第一次测量得到的RTT样本值)
    RTTnew = α×RTTold +(l-α)×RTTsample(第二次以后的测量) 
    

    定时器

    • 重传定时器
    • 持续定时器
    • 保活定时器
    • 时间等待计时器

    详解

    TCP流量控制

    所谓的流量控制就是让发送方的发送速率不要太快,让接收方来得及接受。利用滑动窗口机制可以很方便的在TCP连接上实现对发送方的流量控制。TCP的窗口单位是字节,不是报文段,发送方的发送窗口不能超过接收方给出的接收窗口的数值。

    [图片上传失败...(image-4bb7c0-1562230121290)]

    TCP拥塞控制

    • 拥塞控制的基本功能是避免网络发生拥塞,或者缓解已经发生的拥塞
    • 为了进行有效的拥塞控制,需要通过拥塞窗口cwnd(congestionwindow)来进行衡量网络的拥塞程度
    • 发送窗口的取值依据拥塞窗口和接收窗口中的较小的值,即 Min[rwnd,cwnd]
    • rwnd在流量控制中已阐述,在下文中将只关注cwnd。

    [图片上传失败...(image-f12a95-1562230121290)]
    [图片上传失败...(image-ca55e2-1562230121290)]

    详解

    主机甲向主机乙发送一个(SYN = 1, Seq = x)的TCP段,期望与主机乙建立TCP连接,若主机乙接受该连接请求,则主机乙向主机甲发送的正确的TCP段可能是 SYN = 1, ACK = 1, Seq =y , Ack =x+1

    主机甲与主机乙之间建立一个TCP连接,主机甲向主机乙发送了两个连续的报文段,分别包含300字节和500字节的有效载荷,第一个报文段的序号为200,主机乙正确接收到两个段后,发送给主机甲的确认号为 1000

    小结

    [图片上传失败...(image-9e2149-1562230121290)]
    [图片上传失败...(image-1f14c-1562230121290)]
    [图片上传失败...(image-73db8f-1562230121290)]

    相关文章

      网友评论

        本文标题:传输层

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