一、传输层的功能及服务
二、多路复用与并发操作
三、传输层协议
四、UDP协议
五、DNS系统同:从应用层穿越整个协议栈
一、传输层的功能与服务
1、网络层VS传输层VS应用层- 网络层:分组交换,数据报方式存在不可靠(丢失,乱序,延迟(主要是因为路由器表可能是不断变化的))
- 传输层:为应用层提供链接或无连接的服务,差错及流量控制
- 应用层:各类业务,或要求保证可靠性或实时性
- 寻址:定位应用进程
- 复用:在一个主机上支持多个任务
- 连接建立与释放:提供面向连接的服务
- 差错控制与流量控制
- 拥塞控制:辅助网络层解决拥塞问题
- 崩溃恢复
- 流量控制:流量控制是端到端的控制,解决的是发送方和接收方速率不匹配的问题,发送方发送得太快导致接收方来不及处理。 其一般通过链路层上的滑动窗口进行解决。
- 拥戴是因网络过载导致性能严重下降,拥塞控制就是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不至于过载。 拥塞控制是一个全局性的过程,涉及到所有的主机、路由器、与降低网络性能有关的所有的因素
- 主要是网络层进行解决,包括发送抑制报文,逐跳后压,随机早期检测(RED)
- 传输层中的拥塞控制只是辅助,并且是面向连接的时候才有拥塞控制,例如TCP中的显示拥塞通知
b、多路复用:
- 复用:主机只有一个地址但是有多个应用,这些应用都使用一个地址
- 反向复用:如果主机由多条网络路径,而一个应用需求高于其中任意路径,则可以轮询多条路径.例如多个用户访问一个网站, 一个应用使用一个带宽不够
二、多路复用与并发操作:服务器如何为多个用户提供服务
- 方案一
- 服务器在固定的端口上监听,不同端口提供不同的服务
- 所以不管有没有用户的请求,服务器都会在个端口上等待连接请求
- 存在的问题是资源的浪费,即使没有相应的请求也一直监听
- 方案二
- 端口映射;用户与端口映射器建立连接,发送消息指定其所需要的服务器名,得到服务器相应的TSAP;然后再与 服务器建立连接;类似于查号台
- 当有请求的时候,服务器才启动新的服务进程,而服务器继续监听,按需常见服务,节省服务器资源
三、传输层协议
1、传输层向上提供可靠和不可靠逻辑信道:- 使用TCP协议:全双工可靠信道
- 使用UDP协议:不可靠信道
- 传输层提供的是字节流的通道,差错、流量控制等都是基于字节流的
- 链路层提供的是数据报的通道,差错、流量控制是基于数据报的
- UDP在传送数据之前不需要建立连接。传输层在受到UDP报文后,也不发送确认
- TCP提供面向连接的可靠的服务。TCP服务增加了很多的开销,如协议的首部更长,采用拥塞窗口控制,超时重传机制等,算法更复杂
- 端口号占16比特
- 两类端口:一类是熟知端口号,其数值一般为0~1023;另一类是一般端口号,用来随机分配给请求通信的进程
- IP地址与端口组成socket或套接字,网络编程的时候使用。
- socket=(IP地址:端口号)
- TCP协议是面向连接的,所以一个TCP链接唯一被一对套接字确定,TCP连接::={socket1,socket2}={(IP1::port1),(IP2,port2)}
- 进程通过套接字接入网络
- 服务器端:
- 创建一个socket
- 绑定IP地址和端口信息
- 设置允许的最大的连接数(因为一个服务器可能同时为多个用户提供服务)
- 接收客户端上来的连接
- 收发数据
- 关闭网络
- 客户端:
- 创建socket
- 设置要连接的对方的ip地址和端口号
- 连接服务器
- 收发数据
- 关闭网络连接
- 总之面向连接的服务,一般都是创建连接,进行通信,通信结束之后关闭连接
- 网络编程的时候的socket就是一对地址
- 无连接服务:
- 基本就是按照以上的网络的socket的编程的步骤进行
- 特殊点是无连接的服务一个服务器可以同时对多个客户进行服务
- 其没有连接的过程
- 面向连接的服务:
- 服务器创建套接字之后,进行绑定,然后进行监听
- 客户端创建套接字之后,进行连接,服务端监听到并且接受之后,双方开始通信
- 通信开始,由于是面向连接的服务,所以服务器端只能与一个进程进行通信,此时其需要fork一个子进程
- 该子进程关闭listen,负责与客户端进行数据传输
四、用户数据报协议UDP
1、UDP- UDP在IP数据报上增加端口和差错检测功能,没有流量控制、拥塞控制和重传机制
- UDP值提供不可靠的交付,有点是:
- 不需要建立连接,简单、易于实现
- 头部开销少,只有8个字节的首部开销
- 网络拥塞时也不降低发送速率,适于传输实时业务,短时突发数据
- 基于UDP的应用:DNS、TFTP(简单文本传输协议),RIP(路由信息协议),DHCP(动态主机配置协议), SNMP(简单网络管理协议),NFS(网络文件系统),RTP(实时传输协议),IGMP(互联网组管理协议)
- 检验和:在计算检验和时,临时把“伪首部”和UDP用户数据报连接在一起,伪首部仅仅是为了计算检验和
- UDP数据报包括首部和数据部分,其中首部为8字节,包括2字节的源端口,2字节的目的端口,2字节的长度,2字节的检验和
- 而伪首部是为了计算检验和,是12字节,包括4字节的IP源地址,4字节的IP目的地址,1字节为0,1字节为17(为UDP的类型), 2字节的UDP长度
- 网络层加上IP首部就构成了IP数据报
五、DNS系统
1、使用DNS系统的原因- IP地址不容易记
- 域名便于理解并记忆
- 当更换一个服务器的时候,其IP地址可能需要改变(如因位置的改变),但域名不变,方便用户使用
- 可以为服务器及主机定义别名:一个主机由多个名字,虽然只有一个IP地址
- 负载分配:多个服务器共用一个域名,也就是多个IP地址可以使用同一个域名,只要解析的过程中进行相应的设置就可以了。 这通常是针对该服务器的任务量很大的情况,例如各大门户网站,搜索引擎网站
- DNS域名系统
- 域名是主机的别名,采用层次的结构
- 域名服务器负责域名到IP地址的解析,域名服务器采用分布式结构,由若干个域名服务器负责名字解析
顶级域名TLD包括国家顶级域名和通用顶级域名。 4、DNS如何工作
- DNS采用分布式结构是因为集中式存在如下的问题:
- 单点失效问题:指的是整个系统的工作因为一个单点(服务器)的失败而停止了所有的工作
- 性能可扩展性,大量请求使DNS服务器成为瓶颈
- 服务器与客户机距离远,引入延迟较大
- 单个数据库的容量巨大,平凡更新不便于管理
- DNS采用分布式层状结构,DNS分类:
- ROOT DNS跟服务器
- TOP_LEVEL DNS顶层服务器
- AUTHORITATIVE授权服务器
- 本地服务器
- 为了提供更好的可扩展性,数量巨大的DNS服务器组成了遍布全球的一个树形结构。一个DNS服务器并没有包含所有的域名到IP地址的映射。全球总共有13个 根域名服务器,下设TLD服务器,在根域名服务器中有顶级域名服务器的IP地址,这样就可以根据顶级域名找到相应的TLD服务器进而进行解析域名
- 各级服务器的功能:
- 顶级域名服务器(TLD):负责顶级域名及国家域名的解析,当收到DNS查询请求的时候,就给出相应的回答
- 权限域名服务器:负责一个去的域名服务器,保存DNS记录。当一个权限DNS不能给出最后的查询回答时,就会响应下一步应当查询的权限DNS
- 本地域名服务器:当一个主机发出DNS查询请求时,首先发送给本地的DNS;每个ISP都会有一个本地DNS,称为缺省的DNS;实质上就是一个代理, 负责转发查询请求给分布的DNS
- DNS的具体的工作流程:
- 根域名服务器:知道所有的顶级域名服务器及IP地址
- 互联网上共有13个根域名服务器
- 本地DNS在对域名进行解析若无法解析,就首选求助于根域名服务器(所以虽然域名包括的是从顶级域名开始的,正常是从顶级域名服务器开始,但是如果本地无法解析, 那么也就是不知道顶级域名服务器的IP地址,那么就求助于根域名服务器,因为根域名服务器保存了顶级域名服务器的IP地址)
- 根域名服务器并不直接把域名转换为IP地址,而是在使用迭代查时,把下一步要找的顶级域名服务器的IP地址告诉本地DNS
- DNS解析的过程:
- 主机向本地DNS的查询一般是递归查询。如果本地DNS无法解析域名,则以DNS客户的身份,向其ROOT DNS继续发出查询请求报文. 递归查询:本地DNS代替主机处理域名解析工作,直到返回完整的答案
- 本地DNS向根DNS的查询通常是迭代查询。当根DNS收到本地DNS的迭代查询请求报文时,给出IP地址或“下一步要查询的域名服务器” 迭代查询:根DNS的查询只是反馈部分答案并移动到下一次查询过程,而由本地DNS继续发起下一次请求
- 提供DNS的可靠性:
- 设置主域名服务器、辅助域名服务器
- 当主域名服务器出故障时,辅助域名服务器可以保证DNS的查询工作不会中断
- 主域名服务器定期把数据复制到辅助域名服务器中,而更改数据只在主域名服务器中进行,这样就保证了数据的一致性
- 每个域名服务器维护一个高速缓存,存存放最近用过的名字以及从何处获得名字映射信息的记录
- 减轻根域名服务器的负载,是DNS查询请求和应答报文的数量大大减少
- 为保持高速缓存中内容正确,DNS为没想内容设置计时器,并处理超过时限的项
- 当权限域名服务器回答一个查询请求时,在相应中都指明绑定有效的时间值,对于时间值的确定有一个权衡关系: 如果增加时间值可以减少网络开销,而减少时间值可提高域名转换的准确性
- DNS的查询和相应采用的UDP,端口为53,用户主机和域名服务器都是这样
- DNS客户机为收到响应,则重新查询;若仍然失败,则向另一个服务器发送查询(域名服务器采用主备方式)
- DNS查询报文含有16为的标识符,响应的报文含有对应的标识符,这样就可以将查询和响应进行对应
- 通过发送ICMP ping(其仅仅是发端发给收端,收端收到原封不动将收到的发送回来)报文攻击13个跟服务器(因为对于PING应该是本地DNS中没有的,那么就要向根服务器求助)
- 发送大量的DNS请求报文给顶级服务器
- 伪造目标主机向权限DNS发送DNS请求;导致目标主机接收大量的相应信息
- 中间人攻击:截获主机请求报文,伪造应答,使主机重定向到错误的网址。因DNS查询没有认证机制,容易被篡改,通过对UDP端口53上的DNS查询进行检测,发现与关键词想匹配 的请求,则伪装成目标DNS向查询者返回虚假结果
- 从上可以看出攻击的方式包括对根服务器灯的攻击,顶级域名服务器的攻击(使这两个服务器接收大量的无用查询),对主机(伪造主机发送请求,使主机接收很多的相应), 对主机(中间人冒充,使主机到达错误的IP地址)
- ARP:查询及响应,实现IP-MAC的映射
- ARP缓存中毒:攻击者对目标设备进行ARP缓存中毒攻击,之后将拦截DNS查询请求,然后就能够发送欺骗性的DNS响应报文,导致主机访问错误的网站;根源在于未对目标主机认证。 但是根据域名解析的过程可知认证的过程又是非常困难的