一.网络层IP的基本概念1.主机配有IP地址也要进行路由控制的设备2.路由器即配有IP地址又能进行路由控制。3.节点主机和路由器的统称。4.初步理解IP的作用主机是根据报文中的目的IP进行路径选择的5.IP地址的构成-路由查找目标主机的一般方法是什么IP地址目标网络目标主机类比学号学院专业班级号个人编号001 01 12 19 数字可以具有一定的指向性6.TCP vs IP对比维度IP协议网络层TCP协议传输层比喻快递单上的地址只管把包裹送到收件人楼下快递公司的客服/包装打电话确认丢了重发拆包重装核心功能寻址Routing分片提供可靠的数据传输可靠连接是否可靠不可靠尽最大努力交付丢了不管可靠有超时重传确认应答ACK机制连接性无连接每个包独立走不同的路面向连接先三次握手建立通道总结IP负责把数据包送到对方小区TCP负责把数据整理好确保对方面签且包装完好7.查找目标主机的一般方法是什么1.主机A要发数据给主机B先用自己的子网掩码与目的IP做“与运算”。2.如果运算结果等于自己的网络号直接交付即可局域网内通过ARP广播找MAC地址。3.如果不等于自己的网络号间接交付将数据包发给网关即路由器。4.路由器收到后不断查找自己的路由比啊匹配最长前缀一步步把包扔到下一个路由器直到到达目标网络最后交给目标主机。8.IP协议头格式4位版本号version指定IP协议的版本对于IPv4来说就是44位头部长度(header length):IP头部的长度是多少个32bit,也就是length4的字节数4bit表示最大的数字是15因此IP头部最大长度就是60字节。8位服务类型Type Of Service:3位优先权字段已经弃用4位TOS字段和1位保留字段必须置为04位TOS分别表示最小延时最大吞吐量最高可靠性最小成本这四者相互冲突只能选择一个对于ssh/telnet这样的应用程序最小延时比较重要对于ftp这样的程序最大吞吐量比较重要。16位总长度total lengthIP数据报整体占多少个字节。16位标识id唯一的标识主机发送的报文如果IP报文在数据链路层被分片那么每一个片里面的这个id就是相同的。3位标志字段第一位保留保留的意思是现在不用但是还没想好说不定以后要用到第二位置为1表示禁止分片这时候如果报文长度超过MTUIP模块就会丢弃报文。第三位表示更多分片如果分片了的话最后一个分片置为0其他是1类似于一个结束标记。13位分片偏移framegament offset:是分片相对于原始IP报文开始处的偏移其实就是在表示当前分片在原报文中处在哪个位置实际偏移的字节数是这个值8得到的。因此除了最后一个报文之外其他报文的长度必须是8的整数倍否则报文就不连续。8位生存时间Time To Live,TTL数据报道道目的地的最大报文跳数一般是64每次路过一个路由TTL1一直减到0还没到达那么就丢弃了这个字段主要是用来防止出现路由循环。8位协议表示上层协议的类型。16位头部校验和使用CRC进行校验来鉴别头部是否损坏32位源地址和32位目标地址表示发送端和接收端。选项字段不定长最多40字节9.在接收端准确切割报头和有效载荷1IP报头和有效载荷如何分离第一步物理分离IP报头和有效载荷如何分离在接收端你的电脑或服务器网卡收到的是一个完整的以太网帧去掉链路层头部后剩下的就是整个IP数据报首部载荷。此时分离的关键在于首部长度IHL字段。读取固定基址IP首部的前20字节是固定的。提取关键值读取第一个字节的低4位即首部长度字段单位是4字节数学计算实际首部长度首部长度值×4如果该字段值是5最常见代表首部就是5*420字节没有选项字段。接收方直接掐掉前20个字节剩下的全部是有效载荷TCP/UDP报文。如果该字段值是6-15,代表有选项Options字段首部长度是24-60字节。接收方掐掉对应字节数剩下的就是载荷。结论分离不需要固定长度只需要读开头那4个比特位就能精确计算出切割线在哪里。2有效载荷分用问题分离出有效载荷后IP层自己不处理这段数据它看不懂TCP/UDP的内容它的任务是把载荷分发给上层对应的模块。这个动作叫分用依据是首部中的8位协议字段。接收方查这个数字就知道该把数据交给内核中的哪个入口数值6交给TCP模块处理数值17交给UDP模块处理数值1交给ICMP模块处理处理ping响应数值89交给OSPF路由协议模块接收端操作系统内核中有一个固定的协议调度表Protocol Dispatch Table,IP模块出库完校验和TTL减1后最后一步就是查这张表调用对应模块注册函数把有效载荷的内存指针传过去。3接收视角的“隐藏前提(分片重组)16位标识3位标志13位片偏移这组拆分包字段。在接收视角分用交给TCP/UDP一定发生在分片重组完成之后工作顺序1.收到一堆可能被拆散的IP分片每个分片都有自己的IP首部2.根据16位标识判断哪些分片属于同一个原始数据报3.根据片偏移和标志位在内存中把分片按顺序拼回完整的载荷。4.只有拼接成完整的原始IP数据报后才会执行上述第一步切分和第二步查协议号分用。如果分片没到齐或者重组超时数据会被直接丢弃绝不会把半截载荷交给上层TCP或UDP。10.TCP/IP五层(或四层)模型TCP/IP是一组协议的代名词它还包括许多协议组成了TCP/IP协议簇TCP/IP通讯协议采用了5层的层级结构每一层都呼叫它的下一层所提供的网络来完成自己的需求.1物理层: 负责光/电信号的传递方式,比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等.集线器(Hub)工作在物理层.2数据链路层: 负责设备之间的数据帧的传送和识别,例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作,有以太网、令牌环网无线LAN等标准,交换机(Switch)工作在数据链路层:3网络层: 负责地址管理和路由选择,例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由).路由器(Router)工作在网路层.4传输层: 负责两台主机之间的数据传输,如传输控制协议(TCP),能够确保数据可靠的从源主机,发送到目标主相5应用层:负责应用程序间沟通如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等,我们的网络编程主要就是针对应用层。11.网段划分1IP地址分为两部分网络号和主机号网络号保证相互连接的两个网段具有不同的标识。相当于你居住的小区名字比如xx家园/苑主机号同一网段内主机之间具有相同的网络号但是必须有不同的主机号。相当于你在小区里的具体门牌号比如3栋101室2不同的子网其实就是把网络号相同的主机放到一起如果在子网中新增中新增一台主机则这台主机的网络号和这个子网的网络号一致但是主机号必须不能和子网中的其他主机重复。图中反复出现的/24,叫子网掩码前缀长度意思室从左边开始数前24位即前3个数字固定为网络号剩下的8位最后一个数字归主机号。例192.168.128.10/24——前24位是192.168.128后8位是10192.168.128.11/24——前24位是192.168.128后8位是113判断网络通不通的底层逻辑是什么1.同一网段内网络标识必须相同两台电脑要直接通信不经过路由器必须先确认彼此在同一个小区。图中左边的两台机器网络标识都是192.168.128所以它们属于同一网段可以直接互通比如通过交换机。2.同一网段内主机标识绝对不能重复。既然都在192.168.128这个小区里你不能给两栋楼都挂上10号的门牌。图中左边两台机器分别是.10和.11不冲突所以正常通信如果强行把一台改成.10冲突网络瘫痪——IP地址冲突。3.路由器在中间干了什么中间画了一个路由器因为定义了跨网络通信的场景左边网段192.168.128.0/24(A)右边网段192.168.144.0/24B左边的主机标识是1 1011右边的主机标识也是11011虽然主机号一样但是网络标识完全不同128 vs 144这意味着1.左边的.10和右边的.10虽然门牌号一样但不在同一个小区所以它们完全不会冲突。2.路由器的核心使命充当两个小区之间的快递中转站。当左边.10要发数据给右边.10时它发现目标网络标识144和自己128不同就会把数据包扔给路由器由路由器负责跨网段投递。4关键词IP地址逻辑上的唯一标识/24子网掩码区分哪部分是网段哪部分是主机网络标识相同同一个广播域可以直接ARP寻址主机标识不同局域网内唯一保障路由器默认网关负责不同网段间的路由转发5路由架构本质及核心思想把报文交给目标主机的本质是什么本质是一个查找工作 查找的本质是淘汰为什么要进行网段划分为了支持未来查找目标网络的过程中快速淘汰大大提高查找目标主机的效率。6IP地址分类通过合理设置主机号和网络号就可以保证在相互连接的网络中每台主机的IP地址都不相同.那么问题来了手动管理子网内的IP,是一个相当麻烦的事情· 有一种技术叫做DHCP,能够自动的给子网内新增主机节点分配IP地址避免了手动管理IP的不便.般的路由器都带有DHCP功能,因此路由器也可以看做一个PHCP服务器.过去曾经提出一种划分网络号和主机号的方案,把所有IP 地址分为五类,如下图所示(该图出 自[TCPIP])。7划分子网IP地址140.252.20.688C FC 14 44子网掩码255.255.255.0FF FF FF 00网络号140.252.20.08C FC 14 0090子网地址范围140.252.20.0-140.252.20.255IP地址140.252.20.688C FC 14 44子网掩码255.255.255.240FF FF FF F0网络号140.252.20.648C FC 14 40子网地址范围140.252.20.64-140.252.20.79可见IP地址与子网掩码做与运算可以得到网络号主机号从全0到全1就是子网的地址范围IP地址与子网掩码还有一种更简洁的表示方法例如140.252.20.68/24,表示IP地址位140.252.20.68子网掩码的高24位是1也就是255.255.255.08特殊的IP地址将IP地址中的主机地址全部设为0就成为了网络号代表这个局域网将IP地址中的主机地址全部设为1就设为广播地址用于给同一个链路中相互连接的所有主机发送数据包127.*的IP地址用于本机环回loop back测试通常是127.0.0.19IP地址的数量限制与应对方案我们知道IP地址IPV4)是一个4字节32位的正整数那么一共只有2的32次方IP地址大概是43亿左右而TCP/IP协议规定每个主机都需要有一个IP地址。问题根源IPv4地址空间有限且分配粒度是网卡而非主机实际可用地址远低于理论值CIDR无类别域间路由通过灵活划分子网掩码按需分配地址块大小减少浪费提高利用率但未突破绝对上限动态分配DHCP按需分配设备每次接入可能获得不同IP同一个MAC地址不固定占用地址资源。附动态分配IP地址只给接入网络的设备分配IP地址因此同一个MAC地址的设备每次接入互联网中得到的IP地址不一定是相同的。NAT网络地址转换私有网段内多台主机共享单个公网IP访问互联网是延缓IPV4耗尽的核心手段。IPv6IPv6并不是IPv4的简单升级版这是互不相关的两个协议彼此并不兼容IPv6用161字节128位来表示一个IP地址但是目前IPv6还没有普及。CIDR管“省着用”动态分配管“轮流用”NAT管“共用,三者叠加延缓了IPV4枯竭本质是缓解而非根治。10私有IP地址和公网IP地址如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连到Internet上,理论上 使用任意的IP地址都可以,但是RFC 1918规定了用于组建局域网的私有IP地址10.*,前8位是网络号,共16,777,216个地址172.16.*到172.31.*,前12位是网络号,共1,048,576个地址C192.168.*,前16位是网络号,共65,536个地址包含在这个范围中的都成为私有IP,其余的则称为全局IP(或公网IP);⼀个路由器可以配置两个IP地址, ⼀个是WAN⼝IP, ⼀个是LAN⼝IP(⼦⽹IP).路由器LAN⼝连接的主机, 都从属于当前这个路由器的⼦⽹中.不同的路由器, ⼦⽹IP其实都是⼀样的(通常都是192.168.1.1). ⼦⽹内的主机IP地址不能重复. 但是⼦⽹之间的IP地址就可以重复了.•每⼀个家⽤路由器, 其实⼜作为运营商路由器的⼦⽹中的⼀个节点. 这样的运营商路由器可能会有很多级, 最外层的运营商路由器, WAN⼝IP就是⼀个公⽹IP了.⼦⽹内的主机需要和外⽹进⾏通信时, 路由器将IP⾸部中的IP地址进⾏替换(替换成WAN⼝IP), 这样逐级替换, 最终数据包中的IP地址成为⼀个公⽹IP. 这种技术称为NAT(Network AddressTranslation⽹络地址转换).如果希望我们⾃⼰实现的服务器程序, 能够在公⽹上被访问到, 就需要把程序部署在⼀台具有外⽹IP的服务器上. 这样的服务器可以在阿⾥云/腾讯云上进⾏购买.三.路由路由的过程就是一跳一跳问路的过程所谓一跳就是数据链路层中的一个区间具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间。IP数据包的传输过程也和问路一样当IP数据包到达路由器时路由器会先查看目的IP路由器决定这个数据包是直接发送给目标主机还是需要发送给下一个路由器依次反复一直到达目标IP地址那么如何判定当前这个数据包发送到哪里这就依靠每个节点内部维护的一个路由表路由表可以使⽤route命令查看如果⽬的IP命中了路由表, 就直接转发即可;路由表中的最后⼀⾏,主要由下⼀跳地址和发送接⼝两部分组成,当⽬的地址与路由表中其它⾏都不匹配时,就按缺省路由条⽬规定的接⼝发送到下⼀跳地址。假设某主机上的网络接口配置和路由表如下这台主机有两个网络接口,一个网络接口连到192.168.10.0/24网络,另一个网络接口连到192.168.56.0/24网络;路由表的Destination是目的网络地址,Genmask是子网掩码,Gateway是下一跳地址,Iface是发送接口,Flags中的U标志表示此条目有效(可以禁用某些 条目),G标志表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发;转发过程例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路由器根据它的路由表决定下一跳地址;