传输层
传输层端口及套接字
传输层编址
传输层的复用和分用 常用应用进程默认的端口常用应用进程默认的端口-2 image 端口:应用层进程的标识
套接字
image无连接服务和面向连接服务
无连接服务和面向连接服务设置传输层的必要性
IP只是送到对应的主机,但是一个主机会有多个进程,传输层就是将对应的数据传输到对应的应用进程
UDP协议
UDP在IP之上增加了端口复用分用和差错控制功能
UDP特点 | TCP特点
:-:|:-:|:-:
无连接 | 面向连接的
不可靠的服务 | 可靠的服务
点到点和多点通信 | 点到点的通信
首部8字节 | 首部固定部分20字节
面向报文 | 面向字节流
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。
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)]
网友评论