| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> TCP/IP 简介 -> 正文阅读 |
|
[网络协议]TCP/IP 简介 |
DoD 模型是 OSI 模型的精简版,它包含 4 层 进程/应用层 主机到主机层 因特网层 网络接入层 DoD 模型的进程/应用层包含大量的协议,已集成分布在 OSI 上三层(应用层,表示层和会话层)的各种活动和职责,进程/应用层定义了用于节点间应用程序通信的协议,还定义了用户界面规范. 主机到主机层的功能与 OSI 模型的传输层相同,定义了用于为应用程序提供传输服务的协议,他负责解决的问题包括进行可靠的端到端通信和确保正确的传输数据,还对分组进行排序,并确保数据的完整性. 因特网层对应 OSI?模型的网络层 ,指定了与通过整个网络对分组进行逻辑传输相关的协议.他负责对主机进行编址-给他们分配(IP)地址.还在多个网络之间路由分组. DoD 模型的最低短是网络接入层,他在主机和网络只见交换数据.网络接入层对应 OSI 模型的数据链路和物理层,他负责硬件编址,并定义了用于实际传输数据的协议. DoD 模型和 OSI模型在设计和概念上相似,且对应层的功能也类似. 进程/应用层协议 这一层的各种协议在这里不解释. 下面介绍-主机到主机层协议 主机到主机层的主要功能是对上层应用程序隐藏网络的复杂性,他告诉上层:"只需将你的数据和说明给我,我将对你的信息进行处理,为发送做好准备." TCD? TCP-传输控制协议,接收来自应用程序的大型数据块,并将其划分成数据段.他给每个数据段编号,让接收主机的TCP 栈能够按应用程序希望的顺序排列数据段.发送数据段后,发送主机的 TCP 等待来自接收端 TCP 的确认,并重传未得到确认的数据段. 发送主机开始沿分层模型向下发送数据段之前,发送发的 TCP 栈与目标主机的 TCP 栈联系,以建立连接.它们创建的是虚电路,这种通信被认为是面向连接的.在这次初次握手期间,两个 TCP栈还将就如下方面达成一致:在接受方的 TCP发回确认前,将发送的信息量.预先就各方面达成一致后,就为可靠通信铺平了道路. TCP 是一种可靠的精确协议,它采用全双工模式,且面向连接,但需要就所有条款和条件达成一致,还需进行错误检查,这些任务都不简单.TCP 很复杂,且网络开销很大,这没有什么可奇怪的,鉴于当今的网络比以往的网络可靠得多,这些额外的可靠性通常是不必要的.大多数程序员都是用 TCP,因为他消除了大量的编程工作,但实时视频和 VoIP 使用 UDP,因为他们无法承受额外的开销. TCP数据段的格式 鉴于上层只将数据流发送给传输层的协议,下面将说明 TCP 如何将数据流分段,为因特网层准备好数据.因特网称收到数据段后,将其作为分组在互联网络中路由.随后,数据段被交给接受主机的主机到主机层协议,而该协议重建数据流,并将其交给上层应用程序或协议.
TCP 报头长 20B(在包含选项时位 24). 源端口:发送主机的应用程序的端口号. 目标端口号:目标主机的应用程序的端口号 序列号:一个编号,TCP 用来将数据按正确的顺序重新排列,重传丢失或受损的数据. 确认号:TCP 期待接下来受到的额数据段. 报头长度:TCP 报头的长度,以 32 位字为单位,他指出了数据的开始位置,TCP 报头的长度为 32 位的整数倍,即使包含选项时亦如此. 保留:总是设置为零. 编码位/标志:用于建立和终止回话的控制功能. 窗口大小:发送发愿意接受的窗口大小,单位为字节. 校验和:CRC(循环冗余校验),由于 TCP 不信任底层,因此检查所有数据,CRC 检查报头和数据字段. 紧急:仅当设置了编码位中的紧急指针字段时,该字段才有效.如果设置了紧急指针,该字段表示非紧急数据段的开头位置相对于当前序列号的偏移量,单位为字节. 选项:长度为?0 或 32 位的整数倍,也就是说,没有选项时,长度为 0,然而,如果包含选项时导致该字段的长度不是 32 位的整数倍,必须填充零,以确保该字段的长度位 32 位的整数倍.? 数据:传递给传输层的 TCP协议的信息,包括上层报头. 下面来看一个从网络分析器中复制的 TCP 数据段: TCP-Transprot Control Protocol Source Port:5973 Destination Port:23 Sequence Number:1456389907 Ack Number:1242056456 Offset:5 Reserved:%000000 Code:%011000 Ack is valid Push Request Window:61320 Checksum: 0x61a6 Urget Pointer:0 No TCP Options TCP Data Area: vL.5.+.5.+.5.+.5 76 4c 19 35 11 2b 19 35 11 2b 19 35 11 2b 19 35 +. 11 2b 19 Frame Check Sequence:0x0d00000f 从报头包含的字段数量可知,TCP 的开销很大,为节省开销,应用程序开发人员可能优先考虑效率而不是可靠性,因此作为一种替代品,在传输层还定义了 UDP UDP 如果将 UDP 与 TCP 进行比较,你将会发现前者基本上是一个简化版,有时称瘦协议.与公园长凳上的瘦子一样,瘦协议占用的空间不大-在网络上占用的带宽不多. UDP 没有提供 TCP 的全部功能,但对于不需要可靠传输的信息,他在传输信息方面做得相当好,且占用的网络资源更少. 在有些情况下,开发人员选择 UDP 而不是 TCP 是绝对明智的,例如当进程/应用层已确保了可靠性时.NFS 处理了自己的可靠性问题,这使得使用 TCP 既不现实也多余,但归根结底,使用 UDP 还是 TCP 取决于程序开发人员,而不是想更快地传输数据的用户. UDP 不对数据段排序,也不关心数据段到达目的地的顺序.相反,UDP 将数据段发送出去后就不再管他们了.他不检查数据段,也不支持表示安全到达的确认,而是完全放手.有鉴于此,UDP 被称为不可靠的协议,这并不意味着UDP 效率低下,而知意味着他根本不会处理可靠性问题. 另外,UDP 不建立虚电路,也不再发送信息前与接收方联系.因此,它也被称为无连接的协议,因为假定应用程序会使用自己的可靠性方法,所以 UDP 不使用,这给应用程序开发人员在开发因特网协议时提供了选择机会:使用 TCP 确保可靠,还是使用 UDP 提高传输速度. 如果数据段未按顺序到达(这在 IP 网络中很常见),他们将被按接收到的顺序传递给OSI(DoD)模型的下一层,这可能使数据极其混乱.另一方面,TCP 给数据段排序,以便能够按正确的顺序重组他们,二 UDP 根本没有这样的功能. UDP 的开销明显比 TCP 低,UDP 在其格式中既没有使用窗口技术,也没有再 UDP 头中提供确认应答. 源端口号:发送主机的应用程序的端口号 目标端口号:目标主机上被请求的应用程序的端口号 长度:UDP 报头和 UDP 数据的总长度 校验和:UDP 报头和 UDP 数据的校验和 数据:上层数据 与 TCP 一样,UDP 也不信任底层操作并运行自己的 CRC. ? 端口号 TCP 和 UDP 必须使用端口号与上层通信,因为端口号跟踪通过网络同时进行的不同会话.源端口号是源主机动态分配的,其值不小于 1024,1023 及更小的端口号是在 RFC3232 中定义的,该 RFC 讨论了知名端口号. 对于使用的应用程序没有知名端口号的虚电路,其端口号将依据指定范围随机分配.在 TCP 数据段又,这些端口号标识了源应用程序(进程)和目标应用程序(进程) 因特网协议 在 DoD 模型中,因特网层的作用有两个:路由选择以及提供单个到上层的网络接口. 其它层的协议都没有提供与路由选择相关的功能,这个复杂而重要的任务完全有因特网层完成.因特网层的第二项职责是提供单个到上层协议的网络接口,如果没有这一层,应用程序开发人员将需要在每个应用程序中编写到各种网络接入协议的"钩子",这不仅麻烦,还将是应用程序需要有多个版本-以太网版本,无线版本等.为避免这个问题,IP 提供了单个到上层协议的网络接口,这样 IP 将和各种网络接入协议协同工作?. 在网络中,并非条条道路通罗马,而是条条道路通 IP,因特网层以及上层的所有协议都是用 IP,在 DoD 模型中,所有路径都穿越 IP,接下来介绍因特网层协议: 因特网协议(IP),因特网控制消息协议(ICMP),地址解析协议(ARP),逆向地址解析协议(RARP),代理 ARP,免费 ARP IP IP 就相当于因特网层,该层的其他协议都只是为他提供支持.IP 掌控全局,可以说"一切尽收他眼底",从这种意义上说,他了解所有互联的网络.他之所以能够这样,是因为网络中的所有机器都有一个软件(逻辑)地址,这种地址成为 IP 地址. IP 查看每个分组的地址,然后使用路由选择表判断接下来应将分组法送到哪里,从而选择最佳路径,在 DoD 模型底部的网络接入层协议不想 IP 那样胸怀整个网络,他们只处理物理链路(本地网络). 要表示网络中的设备,需要回答两个问题:设备位于哪个网络中?他在该网络中的 ID 是多少?对于第一个问题,答案是软件(逻辑)地址(正确的街道);对于第二个问题,答案是硬件地址(正确的邮箱).网络中的所有主机都有一个逻辑 ID,称为 IP 地址,它属于软件(逻辑地址),包含宝贵的编码信息,极大简化了路由选择这种复杂的任务. IP接收来自主机到主机层的数据段,并在必要时将其划分成数据报(分组).在接收端,IP 将数据包重组成数据段.每个数据报都包含发送发和接收方的的 IP 地址,路由器收到数据报户,将根据分组的目标 IP 地址做出路由选择决策. 每当上层发送用户数据时,IP 协议都将如何做,未将数据发送到远成网络做好准备.
IP 报头包含如下字段: 版本:IP 版本号 报头长度:报头的长度,单位为 32 位字 优先级和服务类型:服务类型指出应如何处理数据报.前 3 位优先级位,当前称为区分服务为. 总长度:整个分组的长度,包括报头和数据 标识:唯一的 IP分组值,用于区分不同的数据报. 标志:指出是否进行了分段 分段偏移:在分组太大,无法放入一个帧中时,提供了分段和重组功能.它还使得因特网上可有不同的 MTU(最大传输单元) 存活时间:生成分组时给他指定的存活时间,如果分组到达目的地之前 TTL 就已经到期,分组将被丢弃.这可避免 IP 分组因寻找目的地不断在网络中传输. 协议:上层协议端口(TCP 为端口 6,UDP 为端口 7),还支持网络层协议,如 ARP和 ICMP 报头和校验和:对包头执行 CRC 的结果 源 IP地址:发送方的 32 位 IP地址 目标 iP 地址:接受对方的 32 位 IP 地址 选项:用于网络测试,调试,安全等. 数据:位于选项字段后,为上层数据. 下面是网络分析器不活的一个 IP分组. IP Header - Internet Protocol Datagram Version:4 Header Length:5 Precedence:0 Type of Service: %000 Unused:%00 Total Length:187 Identifier:22486 Fragmentation Flags:%010 Do Not Fragment Fragment Offset:0 Time To Live: 60 IP Type:0x06 TCP Heade vChecksum:0xd031 Source IP Address: 10.7.1.30 Dest. IP Address: 10.7.1.10 No Internet Datagram Options 类型字段很重要,该字段通常为协议字段,但这个分析器将其视为 IP Type 字段.如果报头没有包含有关下一层的协议信息,IP 将不知道如何处理分组中的数据.在前面的示例中,类型字段告诉 IP 将数据段交给 TCP 下图说明了在网络层需要将分组交给上层协议时,他如何获悉传输层使用的协议 在这个实例中,协议字段告诉 IP 将数据发送到 TCP 端口或 UDP 端口 17.然而,如果数据是发送给上层服务或应用程序的,将要么是 UDP,要么是 TCP,数据额也可能是发送给因特网控制消息协议(ICMP),地址解析协议(ARP)或其他类型的网络层协议的 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 2:45:30- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |