TCP-IP详解笔记6
TCP-IP详解笔记6
用户数据报协议和IP分片
- UDP是一种保留消息边界的面向数据报的传输层协议.
- 不提供差错纠正, 队列管理, 重复消除, 流量控制和拥塞控制.
- 提供差错检测, 端到端(end-to-end)校验和.
- 使用UDP的应用程序需要做一些数据报发送和处理的控制工作.
- 每个被应用程序请求的UDP输出操作只产生一个UDP数据报, 发送一个IP数据报.
- UDP不提供差错纠正: 它把应用程序传给IP层的数据发送出去, 但并不保证它们能够到达目的地.
- UDP有可靠性和保护性的缺失.
- 无连接的特征, 使UDP比其他的传输协议使用更少的开销.
- 广播和组播更多直接使用像UDP这样的无连接传输.
- 应用程序需选择自己的重传单元的能力.
IPv4数据报用字段用值17来标识UDP, IPv6在下一个头部字段使用相同的值.
- 越偏底层数据报的长度越长, 因为底层的协议会原封不动地封装上层的数据报.
- UDP的头部通常只有8个字节.
- 端口号相当于邮箱(mailbox), 可以帮助协议辨认发送和接收进程, 端口好为16bite(位)数据.
- 数据报的发送者不要求对方恢复, 端口号就设置为0.
- 传输协议(UDP, TCP, SCTP)使用目的端口来帮组分离从IP层进入的数据.
- 端口号在不同传输协议之间是独立的, 即TCP的端口只能用于TCP, UDP的端口号只能用于UDP.
- 两个完全不同的服务器可以使用相同的端口号和IP地址, 只要他们使用不同的传输协议.
- UDP长度(Length)字段是UDP头部和UDP数据的总长度, 以字节为单位.
- UDP的长度是冗余的, 因为IPv4和IPv6都包含了负载长度(数据长度)或数据报的总长度.
- UDP的长度都能从IP层提供的信息中计算得到.
UDP校验和
- UDP校验和是一个端到端的传输层校验和(ICMP有一个端到端的校验和, 但ICMP不是真正的传输层协议).
- UDP校验和覆盖了UDP头部, UDP数据和一个伪头部.
- 由初始的发送方计算得到, 由最终的目的方校验.
- IPv4头部中的校验和只覆盖整个头部, 在每个IP跳都要被重新计算(因为TTL字段的值在数据报转发时会被路由器减少).
- 传输协议(TCP, UDP), 使用校验和来覆盖他们的头部和数据.
- UDP的校验和是可选的, 其他传输协议是强制的.
- 在IPv6中, UDP是强制的, 因为IP层是没有头部校验和的. 必须计算校验和或者使用其他插锁检测机制.
- UDP数据报的长度可以是奇数个字节, 而校验和算法只相加16位数字.
- 奇数长度时会添加一个0当作填充字节(虚字节).
- UDP计算校验和时会包含IP层的伪头部.
- IP层伪头部的目的是让UDP层验证数据是否已经到达正确的目的地.
- 伪头部本身就违反了分层规则.
- 部分校验和(partial checksum).
UDP和IPv6
- IPv6不存在IP头部校验和, 无论是UDP还是TCP, 在IPv6中伪头部校验和都是必须的.
- Teredo隧道: 通过IPv4隧道传输IPv6.
- Teredo为没有其他IPv6链接选项的系统传动IPv6数据报. 把IPv6数据报置于UDP/IPv4数据报的负载区里.
- Teredo客户机实现了Teredo隧道接口的IPv4/IPv6主机.
- Teredo服务器帮助Teredo封装的IPv6分组建立通道以穿越NAT.
- Teredo中继器与服务器功能类似.
- 对IPv6连接来说, 使用Teredo中继器是最后的手段, 如果发现其他任何可选的IPv6连接(直接或使用6to4), 节点就会放弃使用Terredo隧道技术.
- Teredo为没有其他IPv6链接选项的系统传动IPv6数据报. 把IPv6数据报置于UDP/IPv4数据报的负载区里.
- 一个Teredo地址包含Teredo前缀(2001::/32), Teredo服务器的IPv4地址, 一个16位的标志(Flags)字段, 然后是映射的IPv4地址.
- 一旦一个已取得资格的客户机建立了自己的Teredo地址, 它就可以发送IPv6流量的.
- 有些应用程序可以容忍在发送和接收的数据里面引入的比特差错.
- UDP-Lite协议通过部分校验和来进行部分负载的校验.
- UDP-Lite用一个校验和覆盖范围(Checksum Coverage)字段取代了(冗余的)长度字段来修改UDP字段.
IP 分片
- 链路层对可传输的每个帧的最大长度有一个上限, 为了保持IP数据报抽象与链路层的一致和分离, IP引入了分片和重组.
- 如果数据报太大, IP层就会进行分片.
- IPv4中的分片可以在原始发送方主机和端到端路径上的任何中间路由器上进行.
- 数据报分片自身也可被分片. IPv6中只允许源主机进行分片.
- 当一个IP数据报被分片了, 直到它到达最终目的地才会被重组.
- 网络中不进行重组可以减轻路由器转发目标.
- 同一数据的不同分片可能通过不同路径到达相同的目的地.
- 路径上的路由器只能看到所有分片的一个子集.
- 虽然IP分片看起来是透明的, 但是如果任何一个分片丢失了, 整个数据报就丢失了.
- 只重发数据报的一个分片是不可能的.
- 当一个数据报的任何一个分片首先到达是, IP层就得启动一个定时器.
- 防止不能到达的分片导致接收方缓存的用尽.
- 一般超时重传的时间被设置为30s或60s.
- 接收任何一个分片时计时器就开始计时, 且收到新的分片也不会被重置, 定时器给出了统一数据报分片之间可被分隔的最大间隔时间.
- 采用UDP的路径MTU发现:
- IP 层经常基于每个目的地址缓存一个PMTUD(路径MTU发现机制)信息, 并且当没有更新时就让它超时.
IP分层和ARP/ND之间的交互
- ARP是用于将IP层地址映射到同一个IPv4子网里的相应的MAC层地址.
使用UDP可以看到诱导的IP分片和典型的ARP之间的关系.
- 最大UDP数据报长度:
- 系统的本地协议实现可能有一些限制.
- 接收应用程序可能没有准备好去处理这么大的数据报.
- 一台主机重组分片时要提供足够的缓存来接收至少一个576字节的IPv4数据报.
- DNS和DHCP协议对UDP数据报的大小使用了限制.
- UDP/IP能发送和接收一个给定大小的数据报并不意味着应用程序就能够读取这种大小的数据报.
- API截断(truncate)数据报, 丢弃这个数据报里超过接收应用程序这顶字节的任何超额数据.
- 一些系统把这些截断的数据放到后续的读操作中.
- 另一些则通知调用者有多少数据被截断.
- 服务器一般启动后进入休眠, 等待一个客户机请求的到达.
- 到达UDP服务器的是来自客户机的UDP数据报, IP头部包含了源和目的IP地址, UDP头部包含了源和目的UDP端口号.
- 当一个应用程序接收到一个UDP消息时, 它的IP和UDP头部已经被剥掉.
- DNS服务器是对目的IP地址敏感的一种服务器类型.
- 在创建UDP端点时都使其本地IP地址具有通配符(wildcard)的特点.
- 如果进入的UDP数据包的目的地址是一个服务器的端口, 那么在该服务器上的任何本地接口均可接收它(任何本地机器中使用的IP地址, 包含本地回路地址).
- 只有目的IP地址与指定的本地地址匹配时, 进入的UDP数据报才会被转到这个端点.
- 使用多地址:
- 在同一个端口号开启几个不同的服务器, 每个服务器使用一个不同的本地IP地址, 这是可能的.
- 可以使用sock程序在同一个UDP端口(8888)开启三个不同的UDP实例.
- 当有带通配符地址的端点存在时, 就暗示着一种优先级, 带指定IP地址的端点, 会越过通配符, 当这个指定的IP与目的IP地址匹配时, 它总是被优先选择.
- 只有当匹配不成功时才会使用带通配符的端点.
- 限制远程IP地址:
- 选择限制远端地址, 也就是说端点只接收来自指定IPv4地址和端口号的UDP数据报.
- 每端口多服务器的使用:
- 对给定的地址族(即IPv4或IPv6), 同一时间只运行一个应用程序端点与任何一个(本地IP地址, UDP端口号)对关联.
- 跨越地址族: IPv4和IPv6:
- IPv6地址能以一种互操作的方式来对IPv4地址进行编码, IPv6里的通配符绑定方式可能会接收到进入IPv4流量.
流量和拥塞控制的缺失
- 大多数UDP服务器是迭代(iterative)服务器.
- 单个服务器(或进程)在单个UDP端口处理所有客户请求.
- 一个应用程序使用的每个UDP端口均有一个大小有限的队列与之对应.
- 超额的数据报会被UDP丢弃.
- 当IP路由其的队列被填满时, 此时的网络被称为阻塞(congested).
- UDP是缺失拥塞控制(congestion control)的协议.
互联网中的UDP
- 互联网中大多数的分片流量都来自与UDP.
- 基于UDP的多媒体流量.
- 分片出现的原因:
- 粗糙封装和路径MTU发现的缺失;
- 增加了额外的头部.
- 采用可使用大消息的应用程序.
- 增加了数据报的负载(数据部分).
- 粗糙封装和路径MTU发现的缺失;
- UDP其他主要用途之一是支持DNS.
名称解析和域名系统
- 协议使用IP地址来识别参与分布式应用的主机.
- IP地址难以使用和记忆.
- 互联网支持使用主机名称(host names)来识别包括客户机和服务器在内的主机.
- 主机名称通过称为名称解析(name reslution)的过程转换成IP地址.
- 分布式数据库系统, 人们熟知的域名系统(DNS). DNS作为互联网上的应用程序, 它使用IPv4或IPv6, DNS是分层的, 是支持名称解析的服务器.
- DNS是一个分布式的客户机/服务器网络数据库, TCP/IP应用程序使用它来完成主机名称和IP地址之间的映射, 提供电子邮件路由信息, 服务命名和其他信息.
- 从应用程序的角度看, 访问DNS是通过一个称为地址解析协议(resolver)的应用程序库来完成.
DNS名称空间
- DNS中使用的所有的名称集合构成了DNS名称空间(name space). 划分为层次并且大小写不敏感的.
- DNS名称空间是一颗域名树, 位于顶部的树根未命名.
- 树的最高层是所谓的顶级域名(TLD), 包括通用顶级域名(gTLD), 国家代码顶级域名(ccTLD), 国际化国家代码顶级域名(IDN ccTLD), ARPA的基础设施顶级域名(infrastructure TLD).
- gTLD分为: 通用/通用限制和赞助. 以非常规的方式穿件一个域名有时被称为域名黑客(domain hack).
- DNS命名语法:
- DNS名称树中TLD下面的名称进一步划分成组, 称为子域名(subdomain).
- 完全限定域名(FQDN), 与系统配置中的默认域名或域名搜索列表结合使用的非限定域名(unqualified domain name).
- 一个域名包含一系列由点分开的标签(label).
- DNS名称空间的层次结构允许不同的管理机构管理名称空间的不同部分.
- 部分DNS名称空间的管理负责分配给个人或组织.
- 两台名称服务器(name server)或是DNS服务器(DNS server).
- 管理授权的单位称为区域(zone).
- 不同的区域和包含的服务其可能被访问以提供名称信息. 授权(delegation).
- 一台主服务器(primary server)在磁盘文件中包含区域数据库, 一个或多个辅助服务器(secondary server)使用称为区域传输(zone transfer)的进程, 从主服务器完整地获取该数据库的副本.
- DNS有一个专用的协议用于执行区域传输.
缓存
- 名称服务器可以从三个途径获取IP地址映射信息:
- 直接从区域数据库中获取. 具有授权信息, 授权服务器(authoritative server).
- 区域传输的结果(一个从属服务器).
- 在处理解析过程中的另一台服务器.
- 缓存的区域信息, 直到生存时间(TTL)的时间限制为止.
- 缓存同时适用于成功的解析和不成功的解析(否定缓存(negative caching)).
- 名称服务缓存进程(name service caching daemon, NSCD) 提供客户端的缓存功能.
DNS协议
- DNS协议由两个主要部分组成:
- 用于执行对DNS特定名称查询的查询/响应协议.
- 名称服务器用于交换数据库记录的协议(区域传输).
- DNS通知.
- 动态更新.
- 使用一个简单的查询/响应来查找域名对应的IPv4地址.
- DNS名称解析就是将域名映射到IPv4地址的过程.
- 通过每个站点或ISP本地部署服务器和一组特殊的根服务器(root server)构成DNS分布式基础设施, 通过基础设施支持DNS查询/响应操作.
- 通用顶级域名服务器(generic top-level domain server).
- 有一种基本的DNS消息格式, 它用于所有DNS操作(查询, 响应, 区域传输, 通知和动态更新).
. - 每个名称由一系列的标签(label)组成, 标签的类型有两种:
- 数据标签(data label). 构成一个标签的字符.
- 压缩标签(compression label). 充当指向其他标签的指针.
- 偏移量给出了距离DNS消息开始处的字节数, 在哪里可以找到一个用于代替压缩标签的数据标签(压缩目标(compression target)).
- 对TCP和UDP来说, DNS的知名端口号都是53.
- DNS消息通常封装在UDP/IPv4数据报中, 并且其长度限制为512字节.
- DNS消息通常封装在UDP/IPv4数据报中, 并且其长度限制为512字节.
- 查询名称(Query Name)是要被查询的域名, 每个问题都有查询类型(Query Type)和查询类(Query Class).
- DNS信息中的最后三个区段: 回答, 授权和额外信息, 包含RR的集合. RR可以使用通配符域名作为自己的名称.
- 名称字段是随后的资源数据对应的域名.
- Linux系统下, 使用
dig
工具可以查看名称服务器的记录.
动态更新
- 动态更新一个区域是可能的, 被称为DNS update.
- 支持指定先决条件(prerequisite)和更新请求.
- 通过向一个区域的授权DNS服务器发送动态更新的DNS消息, DNS UPDATE就可以完成.
- 更新信息(update information).
- 开放动态DNS(Dynamic DNS, DDNS) 服务器可以用来支持特殊的更新协议, 称为DNS更新API.
- 本地链路组播名称解析(Link-Local Multicast Name Resolution, LLMNR).
- 组播DNS(multicast DNS, mDNS).
- LDAP互联网应用层协议, 提供了搜索, 修改, 添加, 比较和删除基于用户选择模式的条目的能力.
- LDAP是一个目录条目的树, 每个条目包含一组属性.
TCP-IP详解笔记6的更多相关文章
- TCP/IP详解 笔记十四
TCP/IP协议(二) 连接的建立与终止 tcpdump -S输出TCP报文的格式 格式: 源>目的:标志 (标志就是tcp头部).标识首字符意义如下: 例如:telnet 某服务的输出(包括 ...
- TCP/IP详解 笔记一
概述: Tcp-ip让网络上的计算机进行通信,而不管计算机和操作系统是否一样. 分层结构: Tcp/ip协议族是多层协议的组合,而tcp和ip只是其中的两个协议而已. 一个通信举例: 注意图的右上方: ...
- TCP/IP详解 笔记十三
TCP协议(一) 概述 特点 1, 面向连接可靠的字节流服务 2, 只有两方通信,不能用于广播或多播 3, 应用数据被TCP分隔为最合适发送的数据段,传给IP协议栈 4, 发送端并启动定时器, ...
- TCP/IP详解 笔记十一
域名服务系统(DNS) DNS:名字到IP转换:电子邮件选路信息:分布式数据库 解析器:是通过gethostbyname(3)和gethostbyaddr(3)来实现的 最常用的名字服务器是BIND ...
- TCP/IP详解 笔记九
广播和多播 多播和广播只能用于UDP包,TCP明确在两个进程间建立连接. 多播:帧只传送给属于多播组的多个接口 主机对帧的过滤过程: 通常网卡只接收那些目的地址为本物理接口地址或广播地址的帧:设置为混 ...
- TCP/IP详解 笔记八
UDP协议 UDP是传输层协议,提供无连接不可靠的数据传输,其优点失效率高,确定确定是无序不可靠. 报文格式 UDP头部 TCP和UDP的端口号是独立的 UDP长度是指UDP数据报的总长度 UDP的校 ...
- TCP/IP 详解笔记
最早的 TCP 协议文档是 RFC793. TCP 提供一种面向连接的.可靠的字节流服务. 面向连接容易理解,那么什么是字节流服务呢? 答:两个应用程序通过 TCP 连接交换 8 bit 字节构成的字 ...
- TCP/IP详解 笔记十二
简单文件传送协议 TFTP 1) 初衷是为了引导无盘系统 2) 使用UDP 3) 代码都能适合只读存储器 无盘主机通过RARP获得ip地址后进行一个TF ...
- TCP/IP详解 笔记十
IGMP Internet组管理协议 IGMP的作用:让一个物理网络上的所有系统知道主机所在的多播组: 让路由器知道多播数据报应该向哪个端口转发. IGMP有固定长度,没有可选数据,在ip头部的协议值 ...
- TCP/IP详解学习笔记
TCP/IP详解学习笔记(1)-基本概念 TCP/IP详解学习笔记(2)-数据链路层 TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议 TCP/IP详解学习笔记(4)-ICMP协议, ...
随机推荐
- SpringBoot系列十:SpringBoot整合Redis
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:SpringBoot 整合 Redis 2.背景 Redis 的数据库的整合在 java 里面提供的官方工具包:jed ...
- 深入剖析Redis系列: Redis集群模式搭建与原理详解
前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...
- centos7只rsync+inotify
环境: 操作系统:centos7.4 192.168.1.238 客户端 192.168.1.239 服务端 环境准备: 1.安装以下安装包lrzsz是xshell上传下载的安装包,可以忽略. yum ...
- [模板] 积性函数 && 线性筛
积性函数 数论函数指的是定义在正整数集上的实或复函数. 积性函数指的是当 \((a,b)=1\) 时, 满足 \(f(a*b)=f(a)*f(b)\) 的数论函数. 完全积性函数指的是在任何情况下, ...
- [BZOJ 2480] [SPOJ 3105] Mod
Description 已知数 \(a,p,b\),求满足 \(a^x\equiv b\pmod p\) 的最小自然数 \(x\). Input 每个测试文件中最多包含 \(100\) 组测试数据. ...
- java并发编程实践——王宝令(极客时间)学习笔记
1.并发 分工:如何高效地拆解任务并分配给线程 同步:线程之间如何协作 互斥:保证同一时刻只允许一个线程访问共享资源 Fork/Join 框架就是一种分工模式,CountDownLatch 就是一种典 ...
- 【XSY2666】排列问题 DP 容斥原理 分治FFT
题目大意 有\(n\)种颜色的球,第\(i\)种有\(a_i\)个.设\(m=\sum a_i\).你要把这\(m\)个小球排成一排.有\(q\)个询问,每次给你一个\(x\),问你有多少种方案使得相 ...
- react native环境搭建与生命周期
1.搭建开发环境 英文文档:http://facebook.github.io/react-native/docs/getting-started.html 中文文档:https://reactnat ...
- ajax实现长连接
项目需求:需要实时的读取日志文件里的数据,并且使用Echart实时更新折线图. 使用ajax实现客户端与服务器端的数据传输. 目的:我想通过ajax与服务器建立一个长连接,服务器会不断的传输数据给前台 ...
- require.js使用教程
require.js使用教程 下载require.js, 并引入 官网: http://www.requirejs.cn/ github : https://github.com/requirejs/ ...