震天建设集团网站,开发公司计算实际成本含土地费的税金吗,专业南京网站建设,茂名建设公司网站目录 一、IP协议基本概念二、IP协议头格式1、报头和有效载荷如何分离2、有效载荷是如何向上交付#xff08;分用#xff09;的3、具体IP报头 三、网段划分1、什么是网段划分2、如何进行子网划分#xff1f;再次理解子网划分及如何划分 3、私有IP地址和公网IP地址4、路由 四、… 目录 一、IP协议基本概念二、IP协议头格式1、报头和有效载荷如何分离2、有效载荷是如何向上交付分用的3、具体IP报头 三、网段划分1、什么是网段划分2、如何进行子网划分再次理解子网划分及如何划分 3、私有IP地址和公网IP地址4、路由 四、分片 一、IP协议基本概念
TCP所谓的“发送”是什么意思TCP是真的发送了吗向下交付IP层
一般能认识和识别TCP报文的是发送方主机和接收方主机不考虑特殊设备一个报文在网络中通信的被中间设备能认识识别的最多到IP层所以TCP层只有在发送方的TCP层和接收方的TCP层双方是能认识的而报文真正被推送到网络能被网络识别的要么就是mac和ip的有效载荷。
IP、IP地址IP能干什么 我们举个例子我感觉张三每次考试都有考100分的能力这个能力是100%能做到吗 每次都是考99分你认为他能考100分这里的能力是有较大的概率比如想让张三每次考试都是100%满分所以张三去考试第一次考了100第二次考了99分 所以这次张三拿回家他爸爸问为什么没有考100分所以他爸爸就去学校组织这次重新考要么单独考让张三还没考到100分就再考直到考了100所以你有较大的概率考100分我就要保证你100%每次考到100分如果你概率小我就不让你重考。 那么张三和他爸爸组合起来张三有较大概率考100分就保证他每次都能考100分所以真正参与考试的是张三是办事的而他校长爸爸天天在办公室干了什么呢他爸爸叫考试控制为张三考试提供策略。 IP协议提供一种能力将数据从A主机跨网络送到B主机的能力 有能力你一定能做到吗网络设备里有没有可能出现故障有没有可能一个报文长时间积压导致丢失的都有可能IP的数据包没有被对方收到但是到了网络环境里ip报文是真正办事的允许丢包不能丢的太多太多就到TCP的拥塞控制了毕竟是把将数据从A主机跨网络送到B主机所以网络当中会有一些意外情况有这个能力并不代表这个IP能把报文100%送到 所以IP提供的是有很大的概率但是我们要的不是概率是100%做到因为用户要的是100%你怎么保证ip报文 100%被对方收到多方要么收到要么没收到所以要保证这个100% 所以张三是IP他校长爸爸是TCP所以TCP是提供传输策略所以TCP/IP是将数据从A主机可靠的跨网络送到B主机
IP地址的认识 去哪里玩比如北京天安门广场我们都是先去那一座城市 1、先到景点所在的城市 2、然后到达景点 所以IP地址 目标网络 目标主机
二、IP协议头格式 4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4.4位头部长度(header length): IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大 的数字是15, 因此IP头部最大长度是60字节.8位服务类型(Type Of Service): 3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要.16位总长度(total length): IP数据报整体占多少个字节.16位标识(id): 唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个 id都是相同的.3位标志字段: 第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到). 第二位置为1表示禁 止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文. 第三位表示更多分片, 如果分片了的话, 最后一个分片置为0, 其他是1. 类似于一个结束标记.13位分片偏移(framegament offset): 是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片 在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后一个报文之外, 其他报 文的长度必须是8的整数倍(否则报文就不连续了).8位生存时间(Time To Live, TTL): 数据报到达目的地的最大报文跳数. 一般是64. 每次经过一个路由, TTL - 1, 一直减到0还没到达, 那么就丢弃了. 这个字段主要是用来防止出现路由循环8位协议: 表示上层协议的类型16位头部校验和: 使用CRC进行校验, 来鉴别头部是否损坏.32位源地址和32位目标地址: 表示发送端和接收端选项字段: 不定长, 最多40字节
1、报头和有效载荷如何分离
里面的有效载荷是TCP数据段滑动窗口交给他的4位首部长度的基本单位是4字节也就是报文对应的宽度 如何分离 先识别前20个字节然后提取报头的4位首部长度乘以4如果首部长度标准标准是204位首部长度里就是0101是5再乘以单位4就是20个字节如果报头里携带选项直接拿4位首部长度乘以4再减去20个字节剩下的字段就是选项的长度
2、有效载荷是如何向上交付分用的
8为协议代表的是自己有效载荷里承担的数据也就是自己的有效载荷承担的是什么报文也就是表示了向上层的那个协议去交付
3、具体IP报头
IP给TCP提供服务提供数据传输的服务你要怎么传所以有了8位服务类型针对不同种类的IP传输策略其中有3位是弃用的 IP不是面向数据流的是IP数据包ip要把收到的IP报文向上一个一个的交付也要区分报头和有效载荷但是有效载荷是多少所以有了16位的总长度用16位的总长度减去4位首部长度就是有效载荷的长度
8位生存时间该报文转发过程中最多经历的路由器的次数没经历一次减减 首部校验和校验首部的大小 为什么把点分10进制风格的ip地址转换成4字节IP地址因为协议需要IP报文需要你的源IP和目的IP。 为什么是4字节报头中,OS内部是用4字节32位的源IP和32位目的IP因为OS是用4字节所以你传参也要4字节
三、网段划分
1、什么是网段划分 IP地址分为两个部分, 网络号和主机号
网络号: 保证相互连接的两个网段具有不同的标识;主机号: 同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号;不同的子网其实就是把网络号相同的主机放到一起.如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致, 但是主机号必须不能和子网中的其他主机重复
我们举个例子学校的学号是有规律的 – 是学校管理者顶层设计出来的 学号是定位学生的唯一性 学校有各种各样的学院 学院有学生会主席每个学院是有各自群的 比如有一个学生张三在学校走捡到一个钱包钱包里有一串学号你只知道钱包里有学号并不知道这个人是谁现在你准备把钱包给失主有效信息就学号所以你就守在学校门口逮住一个人就问对照学号但是人很多一个一个问我也许就毕业了失主也许也毕业了这样找效率太低了所以逮住一个人就问就是遍历我们学校的所以人O(n),就是查找排除一次排除一个人,也许还会碰到同一个人钱包就相当于报文学号相当于目的IP地址我要把数据交给目标主机一个一个问效率太低了 所以张三不能这样做每个学院都有一个群有计算机学院理学院化工机械经管等等其中张三是计算机学院的在群里每个学院都有一个对应的院学生会主席院学生会主席也会加一个群群主就是院学生会主席各个院学生会主席也会建一个群叫学生会主席群。 学号是有规律的给每个学院编制计算机学院是10开头理学院是11开头化工是12开头机械是13开头经管是14开头等等 张三的学号是299所以张三对应学号是10299假如钱包里的学号是14003 所以张三一定不知道你是谁但是能辨别是不是我们学院的张三把信息扔到院学生会主席群的院学生会主席不知道每个学院的学生但是假设认识院群里的学生也一定知道学院之间的开头院学生会主席就把信息转到学生会主席群一下经管学院的院学生会主席问是不是你们学院的让他和张三联系一下 假设院学生会主席认识群里的每个学生在群里一下这个学生问是不是你的钱包联系一下张三然后他两就私下联系了一下。 所以归还钱包的效率明显提高为什么 这次查找不是以个人为单位查找的是以群为单位的查找的本质是排除的过程选择一个群就是排除了其他所以的群查找效率大大提高了所以一个一个对应的院学生会群叫子网对应的院学生会主席叫路由器学生会主席群就是转发集群也就是公网张三这些学生都叫主机 所以在进行钱包归还的过程经历了两个阶段 1、先找到目标群子网 2、在找到目标人目标主机 所以现实生活中为什么要拉群提高查找效率 所以每个主机的学号都不是乱构成的所以学号 IP地址 为了主机之间跨网络进行高效的把数据从A送到B主机必须要进行子网划分所以IP地址的构造不是一件事情的原因他是子网划分的结果为了提高全球中任何一台主机查找另一台主机的效率
国类的网络一定是被国内的运营商顶层设计的国际的是国内运营商大家商量着来我们的IP地址都是被管理的所以不是我们设计的
每一个学院都有自己的院号院号之间不一样与网络号一个道理两个网段具有不同的标识可以有相同的网络号不能有相同的主机号 比如计算机学院每个学生学号不一样但是院号是一样的 院里有各个专业专业也有群也可以带上一个路由器路由器也是可以连接两个子网的但是路由器必须配两个不同IP但是至少两张网卡网卡是不确定的
路由器的主机标识一般都是一个子网的1号 我们主机的IP地址是ipv4地址而默认网关就是路由器的ip地址 比如我的ip地址是192.168.2.102路由器的ip地址是192.168.2.1主机号是不一样的一个是102一个是01 因为构建子网都是路由器帮你构建的所以是1号。 比如你开热点给两个人分享你们三个人就构建一个子网你的手机就相当于一个路由器
所以一般合理的设计主机号和网络号就可以保证在相互连接的网络中每台主机的IP地址是不相同的 如何设计有一种技术叫DHCP路由器内自带的功能因为子网划分是路由器给我们划分的 路由器可以构建子网可以给我们分配动态ip的能力 路由器也能工作在应用层进入路由器界面就是一个表单说明用的就是http协议就是在应用层
2、如何进行子网划分 A类 0.0.0.0到127.255.255.255B类 128.0.0.0到191.255.255.255C类 192.0.0.0到223.255.255.255D类 224.0.0.0到239.255.255.255E类 240.0.0.0到247.255.255.255
A类有2的7次方的网络每个子网中可以有2的24次方个主机 B类第二个为0说明是B类有2的14次方的网络每个B类网络中可以有2的16次方个主机 C类第三个为0说明是C类有2的21次方的网络每个B类网络中可以有2的8次方个主机 申请A类网络比较少所以申请A类比较少或者很快被人拿完了 申请的时候都会申请B类网络比较多主机号也比较多可以容纳很多主机但是一个机构B类网络申请完了任何一个机构很难把2的16次方的主机用完 一个子网哪有2的16次方的主机这么多所以一定是B类申请完了但是用不完你的网络号也约束了别人别人也用不了就浪费了IP地址 所以针对父类划分方案有了新的划分方案CIDR法不考虑分类了所以有了子网掩码来区分网络号和主机号 把IP地址和子网掩码按位与就是网络号 比如默认网关路由器ip地址192.168.2.1子网掩码255.255.255.0我机器上的ipv4地址是192.168.2.102 我自己对应的目标网络号是我机器上的ipv4地址与子网掩码按位与就变成了192.168.2.0这就是我的网络号路由器的网络号也是192.168.2.0所以他们是同一个子网 我们就可以调整子网掩码中的1的个数来调整网络编号想子网本身变小点网络号变大点主机数变少点就把二进制序列中的1增多有点想子网本身变大点也就是主机数多点网络号就变小点就减少1
再次理解子网划分及如何划分
全球视角理解如何进行子网划分如何划分 所谓的子网划分谁做的是运营商也就是移动、电信、联通 公网IP地址只有2的32次方个是有限的所以IP地址的划分是有限的 子网在划分的时候并不是按国家划分的是按人口或发达与否划分的或者按组织专人专项划分的比如学校的网等待 但是我们今天就按照国家为单位划分以便理解 比如有美国、中国、印度、俄罗斯、新加坡五个国家 ip地址一共是32比特位我们就按8个比特位划分 美国的IP地址的网络号就是0000 0001…/8中国IP地址的网络号就是0000 0010…/8、印度0000 0100…/8、俄罗斯0000 0011…/8、0000 0101…/8前8个比特位作为他的网络号 假设每个国家都有国际路由器内部都会直连每个国家的网络号每个国家都有运营商为了全球通网这些运营商就商量把这些国际路由器接到同一个网络里这就是公网 接下来对于我们中国来讲有34个省比如有陕西河南、贵州等等再你拿出6个比特位来充当我们的子网掩码 陕西的网络编号0000 0010 0000 01…/14子网掩码为14位河南的网络编号0000 0010 0000 10…/14、贵州0000 0010 0000 11…/14 每个省也有省路由器把中国的国家路由器和省路由器也构建成一个大的子网在国内也叫公网只是上一个公网是全球运营商构建而这个是国内运营商构建。 河南省下也有个个市用4个比特位划分 比如贵阳市0000 0010 0000 01 0001…/18、遵义0000 0010 0000 01 0100…/18 然后把省路由器和市路由器也构建成一个大的子网这也是公网 到了贵阳在向下划分有个个区所以这要划分ip地址是不够的到贵阳这里不用公网划分了运营商就给我们构建局域网 贵阳的完整网络是0000 0010 0000 0100 0100 0000 0000 0000/18,子网掩码是18位对应0 2 0 4 4 0 0 0对应2.4.4.0/18 假设贵阳的一主机IP地址是2.4.4.23如果美国想访问这个服务美国划分的ip地址是1.开头的并不知道2.4.4.23是谁但是美国一定知道这个ip地址一定不是我的所以直接把这个报文扔到了公网上当然也包含了自己的ip地址1.2.3.4这就是源ip地址和目的ip地址这个公网路由器一定认识2开头的是谁这个公网就把报文转到我们国家的路由器口然后用0000 0010…/8与2.4.4.23按位与得到我们所对应的网络号变成了2.0.0.0所以我拿着你给我划分的网络子网掩码与你对应的目标网络按位与是我们国家的就传进来然后就把这个报文扔到我们国家的公网了然后继续向下递交就到贵阳了然后就有办法转到我们的主机上 子网掩码的个数越来越大就代表离我们越来越近了 但是并不是这样乱分的大地区就用A类小地区就用B类但是也会有浪费所以就有了子网掩码因为子网掩码可以逐比特位来调整子网掩码的位数几乎可以使IP地址达到最大使用率
为什么要有子网的能力呢 首先未来我们网络的形态是什么样子现在就是什么样子现在是被运营商精心设计过的为什么要这么干 比如学生会主席群就是公网院学生会主席群就是内网没有这些群就进行线性遍历效率很低在还钱包时必须知道归还给谁但是学生并知道这个人是谁只知道他的学号我虽然不知道这个钱包是谁的但是我知道这个钱包不是我们院的就交给院学生会主席群就由院学生会主席进行交互院学生会主席必须知道每个院的编号在公网还要选择目标会长也就是要淘汰了其他的会长正是他淘汰了很多人所以他的效率很高 所以子网划分可以提高搜索效率在学生会主席群并不会群发这个报文在学生会主席群中每个院的会长都会把自己院的名字和编号发一遍这就是路由器的交换这个消息就是群发的大家是一个群的就可以做以后就不会再发了 所以在日常生活中访问网站必须要有搜索引擎或域名 子网划分本质就是在调整整个网络的拓扑结构子网淘汰效率很高所以他的查找效率高又因为子网是改变网络的拓扑结构所以结构决定算法
每一个路由器可能会集连多个子网所以每一个路由器针对每个子网都要在自己内部的路由表中保存好他所直连的目的网络号和该网络的子网掩码因为我们要拿收到的网络IP和该子网的子网掩码进行按位与后再和自己直连的目标网络做对比是就转发不是就不转发每个子网都要有子网号和子网掩码市面上有多少子网就配了多少子网掩码。
一般在一个子网内部子网全1和全0的地址是群内也就是子网内的广播地址所以全0和全1的地址是不用的所以0到255的子网内的主机数是254个
我们举个划分子网的例子
3、私有IP地址和公网IP地址
IP地址不是按主机的台数来配的是按网卡来配的所以对应的路由器才可能有两个以上的IP和两个以上的子网所以才能转发 但是IP还是不够的那么怎么解决呢 所以有三种方案
第一、动态IP地址分配比如家里的路由器你家里的网络设备都是路由器给你动态分配的你不用这这个网络设备后路由器就回收这个IP地址回收就是这个IP不在被别人占用用的时候给你不用的时候回收所以这ip是共享的但是连接的太多了这个动态就分配不过来第二、NAT技术是和动态分配是并行的正是有了NAT技术才能动态分配这个几乎解决了IP地址不够的问题这也是阻碍了ipv6的发展第三、ipv6技术这就根本解决了IP不够的问题只有中国在内网中推广没有在公网中推广因为一个技术是需要一套技术的是需要大量时间的所以我们国家在08年就开始搞ipv6了等用的时候就瞬间能拿来用了。
运营商也有局域网如果有局域网IP地址只用于局域网内的通信而不自己连接到Internet上 所以前面我们按国家所讲的直到了广域网这个位置再分下去主机号就不够了2的16次方也不是很多一个城市的要用的IP很多到一个城市后运营商就会组一个局域网用私有IP组建
现在把网线拉到家里都是拉的光纤你在接到你的路由器上才能上网一般上网时候从硬件上都是先把数据交给路由器在硬件上把数据再交给猫的 首先家里都是有猫的猫是纯硬件的所以数据进来先是交给猫的猫再调试解调器再交给路由器再给你这就是硬件层面上的传输数据 软件上是工作人员会给我们的路由器进行配置上网不仅仅是把网线连过来就上网了工作人员还要给我们开户需要账号工作人员就先给我们开户 所以路由器配置的时候一般要配两个密码路由器里有一套账号是用来运营商来识别你的能认证你是否欠费所以运营商给你一个电话号码又怕你把卡丢了就免费送你一个手机所以第一套是为了运营商来认证你账号的所以工作人员要上门第二个是为了连接路由器上网的 i.e营业厅有个历史任务就是普及网络以前运营商大力普及网络没想到销户的问题所以销户比较困难 网络是一个系统的工程。运营商是如何把我的报文转交到公网上的 大厂的服务器一定是在某个地区的省内的交互是没问题的因为都是在同一个群里的推广到省上就能到其他地方了 私有IP在个个区域内是可以重复的 我的私有IPsrc192…200 目的IPdst122…3 路由器一般有两个IP一个是LAN口IP一个是WAN口IP一个是对内一个是对外
私有IP到了公网就回不来了所以私有IP不能出现在公网上所以运营商就给了一个方案到家用路由器时家用路由器一看你的目的IP是到公网转交时就会先做一件事情把LAN口IP转接成WAN口IP 所以会把src192…200替换成10.1.1.2发现是不是私有IP就继续交互向上交互继续替换把LAN口IP转接成WAN口IP把10.1.1.2替换成122.77.241.4就直接到了公网然后就构建响应形成响应报文src就变成了122…3dst变成122.77.241.4所以最终就可以通过公网转发就可以返回到内网了运营商子网的入口处接下来就通过方法转发到主机 所以源IP在内网环境不断被替换就是NAT技术
4、路由 我们举个例子 比如我刚上大学我去上海上大学的时候刚下火车我发现我东西丢可能也没拿东西丢了什么都没有了但是我不知道怎么走怎么把自己送到大学呢那就问人吧问人的时候通常都会有如下几个答案对不起我不知道、一般问路都会有人拒绝你也有人不知道会一直帮助你我们不考虑不帮助你的问路你一定要告诉别人你去哪里但你问大爷大爷一定会先思考拿着你的目的地址在脑中思考找到与找不到都会给你一个结果大爷这种动脑子就是查路由表如果大爷不知道是哪里但他知道谁知道就会把你推到知道的人哪里在路上你只要问同济大学怎么走而不是问同济大学18号寝室怎么走。在路上我们就是通过子网IP查找当到路口路由器处我们要的是18号宿舍楼我们就问这个路由器我们要去的目标主机在哪里。所以整个报文转发过程是先根据目的网络进行路上路由进行转发当到了目的网络目标路由器入口处再根据目标主机进行交互
我们不谈路由表的形成但是我们要知道路由表里有什么。
路由表可以使用route命令查看这台主机有两个网络接口,一个网络接口连到192.168.10.0/24网络,另一个网络接口连到192.168.56.0/24网络Destination代表这个路由器连接的子网和哪个子网连着的Gateway代表当前路由器相关的信息代表下一跳是什么类型的Genmask代表对于这个路由器针对特定的条目配的子网掩码有多少个条目就有多少个子网掩码FlagsU表示正在使用G表示Gateway他是路由器也就是和自己这台主机直接连接的缺省路由一旦我发现这台主机发送的报文我不清楚了不知道如何转发了就交给缺省路由给我们转发Iface是系统内部给我们形成的网络接口就是一种设备相当网卡的接口
转发过程例1: 如果要发送的数据包的目的地址是192.168.56.3
跟第一行的子网掩码做与运算得 到192.168.56.0,与第一行的目的网络地址不符再跟第二行的子网掩码做与运算得 到192.168.56.0,正是第二行的目的网络地址,因此从eth1接口发送出去由于192.168.56.0/24正 是与eth1 接口直接相连的网络,因此可以直接发到目的主机,不需要经路由器转发
转发过程例2: 如果要发送的数据包的目的地址是202.10.1.2
依次和路由表前几项进行对比, 发现都不匹配按缺省路由条目, 从eth0接口发出去, 发往192.168.10.1路由器由192.168.10.1路由器根据它的路由表决定下一跳地址
子网掩码是在路由器内部配置好的路由器会给每个子网配置子网掩码路由器会集连多个子网就有多个条目所以有多少个条目就有多少个子网掩码
大部分路由都是在公网里路由内网里的路由并不复杂 比如我收到一个报文192.168.56.3ip报头里包含了目的IP先拿着你的目的IP对条目中的子网掩码进行比较网络不一样就开始遍历下一个如果都没有就按缺省路由条目从eth0接口发出去
四、分片
为什么不把滑动窗口里面的范围报文之间打一个包整体发出为什么一般教材多个报文 首先IP为什么要分片tcp是这样 因为有数据链路层里面mak帧因为规定有效载荷不能超过MTU - 也就是1500字节所以倒逼着IP报文你交给我的报文整体大小不能超过1500字节不然我不帮你送 IP传多大由IP决定吗我不能决定是由TCP决定的。 比如TCP给IP说我有3000字节你给我发送出来数据链路层又不给我传所以IP层就有了分片的概念 tcp给IP交了大量的数据分片工作由IP层做数据链路层不能做因为是你的报文太大不是我的报文是TCP给你的报文我只关心这个功能到了目的组装不起来是你的问题不是我的问题我只管送 所以分片的时候必须考虑组装的问题组装的问题也是由对方的ip层做所以只能由IP来进行分片和组装 所以IP报文里有16位标识、3位标志、13位片偏移
怎么做的分片和组装 16位标识在一段时间类保证某些ip报文彼此之间是不一样的不考虑分片和组装ip报文如何区分不同呢就是用16位标识来区分 3位标志其中有一位是不用的就是保留位就还剩2个位第二位为1表示禁止分片,但是都是0所以也不考虑就只剩下一位了如果分片了最后一个标志位置为0没分片也是0因为你没有分片所以你后面也没有更多分片了如果分片了且不是最后一个分片就置为1表示后面还有更多分片就像字符串如果分片了以0结尾后面全是1就表示后面还有更多分片 13位偏移分片后每一个分片在原始报文的起始位置是哪里
每一个分片后的片的16为标识都是一样的
关于分片和组装的问题 1、在接受报文的时候携带了源IP的所以就具有了区分不同客户端的能力 2、你怎么知道分片了 a.只要片偏移不是0也可以看更多分片是否是1就提取对应的标识 b.如果我是整个报文的第一个报文呢你怎么知道我分片了此时我的片偏移就是0 如果片偏移为0第一情况是没有分片第二情况是分片了我们看更多分片为1就注定是分片的了片偏移为0更多分片为1就一定分片了的。 已经分片了片偏移为0更多分片为0这种是不存在的
已经分片了我怎么判断开始报文、中间报文、结束报文 开始报文更多分片1片偏移为0就是开始报文 中间报文更多分片1片偏移为0就是中间报文 结束报文更多分片0片偏移为0就是结束报文 片偏移为0更多分片为0就是独立报文
3、你怎么保证你把分片收全了 你保证尾没丢头没丢中间没丢 a、头尾丢失我们能知道 b、未来在组装的时候只需要进行偏移量排序第一个报文的片偏移加上这个报文自身的长度就是下一个分片的起始位置 进行排序就知道是尾丢还是头丢还是中间丢
4、收全后你怎么把他组装在一起呢 对偏移量进行排序
5、组合在一起了你怎么保证组合在一起的报文一定是对的与原始报文不一样呢 TCP里有16位校验和IP里有16位首部校验和IP的校验和是分片的时候校验他的首部有没有出问题但是内容有没有问题是你可靠性的问题是交给上层TCP来校验
不同主机还是同一个主机的16位标识是不一样的我们不用担心 IP收到数据要立马向上交互的IP没有缓冲区
a、网络中分片尽量让它成为少数情况 TCP给IP报文分片是IP做的TCP不管但是IP有两片丢了TCP是补发那两片还是整个报文呢 作为TCP发送方一定能做到给你补发IP丢的报文但是我要补发其中丢失的报文我就要知道你报文分片的情况我的设计就更复杂所以IP就一直发送 b、为什么因为过多的分片容易增加丢包率。一片丢了就是整个丢了TCP就进行重传 c、怎么做 解决分片的问题这个问题还是要交给上层我为什么会产生这么多分片是因为你交给我的数据太大所以TCP给IP发报文就不发太大了所以滑动窗口会拆成成多个报文向下交互的 所以让TCP协议尽量发送数据不要过大 但是应该是多少呢 数据链路层有效载荷是1500IP的数据是报头20加1480的有效载荷对应数据链路层的1500而TCP中的数据是报头20加1460的有效载荷对应IP层的有效载荷去 所以TCP协议发送的有效载荷的数据最大是14601460叫MSS也叫最大段尺寸TCP中的数据叫数据段IP中叫数据报数据链路层叫数据帧所以TCP中叫最大段尺寸 所以三次握手也会告诉对方的MSS滑动窗口为什么会拆成多个块也是因为有最大段尺寸
举个例子我们自己做一次分片 假设IP报文 有3000字节已经被封装的IP报文里面有20字节的报头和有效载荷加起来就是3000字节 分片也是IP报文前半部分要加报头后半部分也要报头 所以分片之后每一片都是IP报文也有报头要不然怎么组装 那么要分几片所以是3片 第一片报头加有效载荷一共1500字节是201480字节 剩下的也要拆一下所以第二片也是201480还剩20字节16位标识不变3位标志不变13位偏移量就填上1500原始报文的长度 第三片就是2020 组装后就进入到IP层正常报文的处理流程了就向上交互给TCP