网络编程-TCP/IP协议栈-IP协议

协议

  • 协议就是约定的一种规则,例如扑克游戏中约定好的各种规则,2<3<4<5<…等,以此作为游戏规则。当所有人都遵循这个规则,那么久可以不需要任何多余的交流就可以进行游戏,这个方式形成的约定就是一种协议。

TCP/IP协议簇

  • 互联网早期无法进行大规模的通信使用,因为大家虽然都懂计算机的链接原理,但是每个人的链接方式都不同,所以造成这种情况。当时就衍生出了很多为了解决当前问题的协议,比如TCP协议约定大家使用TCP链接时候传输的一种协议,HTTP协议则约定了文本传输的一种协议。

  • TCP/IP协议并不是指某一个具体的协议,它是指一系列的协议栈,因此也叫TCP/IP协议栈或者TCP/IP协议簇

  • 在TCP/IP协议簇中,定义了包含对应OSI模型的每一层,上一篇中有过一个简单模型的说明。以下对OSI模型层做了细化说明处理,如下图:
    在这里插入图片描述

  • 如上图中OSI模型的七层协议,在TCP/IP中使用四层代替。

  • 在TCP/IP协议簇中每一层都有对应的协议,最终组成协议簇,上一篇也有解释,但是是一个简单版本的,一下图列出了TCP/IP四层中的每个协议所在位置:
    在这里插入图片描述

  • 如上图所示,我们常看到的TCP,UDP在协议栈的传输层,而IP协议则在协议栈的网际层,还有出现次数特别多的HTTP协议是在协议栈的应用层。

  • TCP/IP协议栈被分作多个层级,目的是为了整理硬件之间通信时的一个通用的模型,每一个层级都按照指定的协议与上下层进行信息交换,上一篇中也有一个简单的说明,我们用如下图来表示
    在这里插入图片描述

  • 通过上图归纳来一下上一篇中介绍的几个层级,也就是TCP/IP协议的总体概念,但是气内部还有很多的协议,我们介绍几个比较常见的

    • IP协议
    • TCP协议
    • UDP协议
    • HTTP协议

IP协议

  • IP协议处于TCP/IP协议簇的网际层。它提供不可靠的,无连接的服务,而且必须依赖其他层协议进行差错控制。在局域网环境,IP协议往往被封装在以太网帧中传送。而所有的TCP,UDP,ICMP,IGMP数据都被封装在IP数据报中传送。在IP协议中,有两个重要的内容,一个是IP地址概念,一个是IP协议报头
IP地址
  • 对应IP地址我们日常中接触到很多,他给每个接入互联网的计算器一个地址,从而使得其他计算机能够访问到他。与此同时,当计算机有了地址之后,才能遵循IP协议,和其他计算机进行数据的传递。

  • IP现有目前有两种IPV4,IPV6,IPV4占用32bit,而IPV6则是32字节,128bit,IPV6可用的数量是比较大的,用来解决IPV4 不够用的情况。以IPV4 为案例

  • IPV4的32bit地址中分为两个部分:网络号和主机号。同时根据不同开头可以分为五类A,B,C,D,E
    在这里插入图片描述

  • 网络号用于区分不同的网络点,比如我们公司就是一个网络的集群,我们可以通过他的网络号码确认该公司的网关,在通过主机号码确认每一台计算机。

  • 例如一个C类IP地址类型,包含21为网络号码,实际就能区分2^21 个网络号码,而每一位网络号可以区分2 ^ 8 - 2 = 254个主机(起始网络地址和最后一个为广播地址都不可用于主机)每个网络好修改一位,即使后面八位一样 那也是表示在不同网络号码下的不同主机,只不过这些主机的编码正好相同罢了,还是在不同的IP地址下。如果一个网吧采用这种方式,那么他最多能安装254台机器,如果想要更多的主机号,应该延长主机号的位数,但是相应网络号的也会减少,因为总长度是不变的

  • 我们通过子网掩码能够改变网络号的主机号尾数。通常的掩码类似:

255.255.255.0

二进制表示:

11111111.11111111.11111111.00000000
  • 如果一个IPV4地址:192.168.1.1,那么IP地址和掩码经过与(&)运算后的结果为:192.168.1.0(192.168.001.000),这个就是我们常说的网关。
//IP 地址二进制表示 192.168.1.1 -> 
11000000.10101000.00000001.00000001
//&运算后还是得到原值 11000000.10101000.00000001.00000001
  • 从192.168.1.1~ 192.168.1.254 都可以作为主机号码,也即是这个网关下,可以容纳254台机器,如果将掩码改为:
255.255.254.0
//二进制表示
11111111.11111111.11111110.00000000
  • 那么与ip192.168.1.1 进行与(&)运算的结果: 192.168.0.0,这个时候使用的主机号码变成来192.168.0.0~192.168.1.254 ,即可以容纳510 台机器。
IP寻址
  • 当一个IP包从一台计算器被发送,他会到达一个IP路由器。
  • IP路由器负责将这个包路由到他的目的地,直接或者通过其他路由器中专。
  • 在一个相同的通信中,一个包进经过的路径可能会和其他包不一样。而路由器负责根据通信量,网络中的错误,或者其他参数来进行正确寻址
IP协议的报头
  • 上面的数据分层中,我们看到IP协议的构成实际上是IP报头 + TCP协议内容,
  • 因此决定一个IP协议属性的关键是IP报头的内容。
  • 下面我们来看IP协议的组成,IPV4 中普通的IP首部长20字节,其中32位的源IP地址和32位目的IP地址
  • TTL生存时间,代表数据包可以进过最多路由次数,比如TTl是10 ,意思是经过10此路由转发还没到到达,则报文丢弃。
  • 8位上层协议指的是传输层承载的协议
  • 16数据报长度:指IP数据包的最大长度,16bit那么最长可以65535字节。但是通过链路的MTU不会有这么大,因此,如果数据包长度超过MTU,数据包会被分片。如果发生来分片,则需要用到16位表示以及13位分段偏移来找到分片的报文
    在这里插入图片描述

上一篇 网络编程-网络分层的意义
下一篇 网络编程-TCP/IP协议栈-TCP协议

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/310570.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET项目升级手记:可为空引用

c# 8引入了新特性&#xff1a;“可为空引用”&#xff08;详情&#xff09;&#xff0c;这个功能个人觉得挺好的&#xff0c;能够非常明确的表现程序设计者的意图&#xff0c;编译器能够进行检查&#xff0c;尽最大可能减小NullReferenceException错误。如果是新项目&#xff0…

.NET与鲲鹏共展翅,昇腾九万里(一)

2019年1月7日&#xff0c;华为推出鲲鹏920处理器&#xff0c;便宣告了构建鲲鹏生态系统的开始。据官方介绍&#xff0c;鲲鹏是一个包含了鲲鹏计算单元、AI处理单元、智能管理、智能网卡的片上系统SoC&#xff0c;在此之上加上服务器操作系统&#xff0c;从而形成一个生态的闭环…

网络编程-TCP/IP协议栈-TCP协议

TCP协议 TCP协议作用 TCP协议位于协议栈的传输层。当应用层向TCP层发送用于网间传输的&#xff0c;用8字节表示的数据流&#xff0c;TCP则吧数据流分割成适当长度的报文段&#xff0c;最大传输段大小&#xff08;MSS&#xff09;通常受到改计算机连接的网络数据链路层的最大传…

互联网10年,激战如梦

— 1 —1969年&#xff0c;美国国防部研究计划署第一次将互联网应用于军事连接。随后美国西南部四所名校的四台计算机通过这项技术连接起来。谁也没想到&#xff0c;这项计划会对人类的命运产生如此重大影响。1993年&#xff0c;互联网真正诞生。美国白宫宣布开始提供「在线服务…

网络编程-TCP/IP协议栈-UDP/HTTP协议

UDP协议 UDP协议全称是用户数据报协议&#xff0c;在网络中她与TCP协议一样用于处理数据包&#xff0c;两个协议同处于协议栈的传输层&#xff0c;和TCP不同的是&#xff0c;UDP是一种无连接的协议栈。 因为UDP是无连接的&#xff0c;所以相对来说&#xff0c;UDP的报头比TCP要…

十问十答 Ms-PL 许可证

Microsoft 公共许可证&#xff08;The Microsoft Public License&#xff09;是微软为释出开源项目而编写和发布的自由开源软件许可证。如果你用 .NET 开发&#xff0c;你会经常碰见 Ms-PL。在微软的自由开源项目托管地 Codeplex&#xff08;已寿终正寝&#xff0c;微软已战略转…

网络编程-HTTPS协议的实现原理

HTTP传输协议缺点 之前几篇文章中详细讲解了TCP/IP协议栈中的几个协议&#xff0c;其中个就有对HTTP做了一个比较详细的讲解。HTTP是基于TCP进行传输的&#xff0c;其中传输的内容都是明文报文数据&#xff0c;如果我是一个黑客&#xff0c;我会想办法获取这个HTTP消息体&…

从案例角度解析建模平台动态规则引擎

源宝导读&#xff1a;明源云ERP建模平台提供了强大的页面联动规则引擎&#xff0c;原来需要编写代码完成的联动控制逻辑&#xff0c;现在只需要点点鼠标&#xff0c;通过配置完成。本文从实际案例的角度出发&#xff0c;介绍原始的代码逻辑如何转化为引擎规则的过程。一、背景明…

想基于K8s按需扩展应用程序,可从这几方面入手

马修赫瑟&#xff08;Matthew Heusser&#xff09;在花费了十年时间进行编程&#xff0c;测试和项目管理之后&#xff0c;Matt Heusser于2011年创立了自己的公司Excelon Development。该协会前董事会成员Matt还是软件测试人员&#xff0c;是德国波茨坦最具影响力的敏捷测试专业…

windows环境下ELK平台搭建

背景 日志系统主要包括系统日志&#xff0c;应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器的软件&#xff0c;硬件信息&#xff0c;检查配置过程中的错误以及错误发生的原因。通常分析日志可以了解服务器的负荷&#xff0c;性能安全性&#xff0c;从而及时…

EntityFramework Core 3.x上下文构造函数可以注入实例呢?

今天讨论的话题来自一位微信好友遇到问题后请求我的帮助&#xff0c;当然他的意图并不是本文标题&#xff0c;只是我将其根本原因进行了一个概括&#xff0c;接下来我们一起来探索标题的问号最终的答案是怎样的呢&#xff1f;老规矩&#xff0c;首先我们定义如下上下文public c…

SpringCloud常见问题总结(一)

Eureka常见问题 Eureka注册服务慢 默认情况&#xff0c;服务注册到Eureka Server 的过程比较慢。在开发或者测试时候&#xff0c;如果能够加速注册的过程&#xff0c;从而提升工作效率。Spring Cloud官方文档详细描述了该问题的原因并提供了解决方案&#xff1a; //原文 Why…

[剑指offer]面试题21:包含min函数的栈

面试题21&#xff1a;包含min函数的栈 题目&#xff1a;定义栈的数据结构&#xff0c;请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中&#xff0c;调用min、push及pop的时间复杂度都是O&#xff08;1&#xff09;。 栈内压入3、4、2、1之后接连两次弹出栈顶数字…

IO 模型知多少

1. 引言同步异步I/O&#xff0c;阻塞非阻塞I/O是程序员老生常谈的话题了&#xff0c;也是自己一直以来懵懵懂懂的一个话题。比如&#xff1a;何为同步异步&#xff1f;何为阻塞与非阻塞&#xff1f;二者的区别在哪里&#xff1f;阻塞在何处&#xff1f;为什么会有多种IO模型&am…

[剑指offer]面试题22:栈的压入、弹出序列

面试题22&#xff1a;栈的压入、弹出序列 题目&#xff1a;输入两个整数序列&#xff0c;第一个序列表示栈的压入顺序&#xff0c;请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5 是某栈的压栈序列&#xff0c;序列4、5、3、2、1…

Ubuntu上安装使用Docker

Docker简介 Docker是一个开源的容器引擎&#xff0c;他有助于更快的交付应用。Docker可以将应用程序和基础设施层做隔离&#xff0c;并且能将基础设施当做程序一样进行管理。使用Docker&#xff0c;可以更快的打包&#xff0c;测试以及部署应用程序&#xff0c;并且可以缩短从…

让 .NET 轻松构建中间件模式代码

让 .NET 轻松构建中间件模式代码Intro在 asp.net core 中中间件的设计令人叹为观止&#xff0c;如此高大上的设计何不集成到自己的代码里呢。于是就有了封装了一个简单通用的中间件模板的想法&#xff0c;以后有需要的时候就可以拿来即用。接口定义这里按执行的委托是同步还是异…

[剑指offer]面试题26:复杂链表的复制

面试题26&#xff1a;复杂链表的复制 题目&#xff1a;请实现函数ComplexListNodeClone&#xff08;ComplexListNodepHead&#xff09;&#xff0c;复制一个复杂链表。在复杂链表中&#xff0c;每个结点除了有一个m_pNext指针指向下一个结点外&#xff0c;还有一个m_pSibling 指…

SpringCloud + Docker

Dockerfile构建Docker 镜像 注意这里说的Dockerfile是指的一个文本文件&#xff0c;类似txt&#xff0c;只不过名字是Dockerfile&#xff0c;里面编辑Docker的一些指令&#xff0c;指令作用在于描述构建镜像的细节。如下一个简单的案例&#xff0c;用上一节中下载的nginx镜像来…

红帽借“订阅”模式成开源一哥,首创者升任总裁

4 月 6 日&#xff0c;红帽公司宣布&#xff0c;产品和技术总裁 Paul Cormier 即日起任红帽总裁&#xff0c;并兼任首席执行官。Paul Cormier 是开源商业化“订阅”模式的提出者&#xff0c;这一模式促使红帽达成连续超70个季度的盈利&#xff0c;身价升至340亿美金&#xff0c…