网站 托管,wordpress注册修改密码,绍兴网站建设做网站,200m网站空间多少钱IP协议详解 1.概念
1.1 四层模型
应用层#xff1a;解决如何传输数据#xff08;依照什么格式/协议处理数据#xff09;的问题传输层#xff1a;解决可靠性问题网络层#xff1a;数据往哪里传#xff0c;怎么找到目标主机数据链路层#xff08;物理层#xff09;解决如何传输数据依照什么格式/协议处理数据的问题传输层解决可靠性问题网络层数据往哪里传怎么找到目标主机数据链路层物理层数据在物理硬件层面上传输
网络层的IP协议就是让网络拥有将数据从A主机发送到B主机的能力。 注意拥有此能力并不代表每次都能成功送达即可靠性非100% 而失败的时候就需要传输层来获取发生错误的原因并进行错误重传或者超时重传等操作。
所以在从网络层获取到信息成功送达到对方的反馈之前传输层需要暂时保留已经发送的数据。如果网络层发送失败了传输层需要进行重发操作以保证可靠性。 1.2 主机、路由器、节点
主机拥有IP地址但不进行路由控制的设备路由器拥有IP地址并进行路由控制的设备节点主机和路由器的统称
2.IP报文
2.1 报文结构
IP协议的报文与TCP的报文有一定程度上的相似
下图为IPV4中报文的格式IPV6的报文和下图是不同的 四位版本号指定IP协议的版本IPV4来说就是4四位首部长度IP报头的长度和TCP的定义一样标准长度需要用四位首部长度 * 4字节即最大报头长度为15*460字节八位服务类型包含3位优先权字段已经弃用、4位TOS字段和1位保留字段必须置为0四位TOS分别表示最大吞吐量、最高可靠性、最小成本、最小延时。只能四选一需要根据具体传输层的协议要求进行选择。十六位总长度包括报头的整个报文的长度减去四位首部长度就能得出报文中数据字段的长度。十六位首部校验和使用CRC校验来判断报头是否有数据损坏八位协议上层协议类型比如tcp、udp、ssh等解决如何向上层交付的问题八位生存时间TTL用于控制IP报文能在网络层传输的时间生命周期的限制比如有些报文由于路由时出现了错误陷入了路由的死循环亦或者是路由程序出现了BUG导致没办法被正常转发到正确的主机上还有路由超时的问题。此时这个出错的报文就会在路由里面长时间游离而没办法抵达目的地好比内存泄露。规定了TTL之后可以在IP报头中中记录报文的生命周期时间当报文转发的耗时已经大于这个TTL之后就将这个报文丢弃。三十二位源地址和三十二位位目标地址表示发送端IP和接收端IP选项字段不定长最多40字节这是因为首部默认是20字节再加上首部长度最多只能表示60个字节所以选项字段就是 60-2040此处省略了几个字段会在后文的分片中说明……
IP协议的报文中没有端口号因为端口号是传输层应该解决的事情UDP和TCP的报头中才有端口号的字段IP层只关注如何将报文发送给目标主机。也就是两个主机之间如何正常通信的问题。
2.2 分片
2.2.1 认识MTU
MTU相当于发快递时对包裹尺寸的限制这个限制是不同的数据链路层对应的物理层产生的限制。
以太网帧中的数据长度规定最小46字节最大1500字节ARP数据包的长度不够46字节。要在后面补填充位最大值1500称为以太网的最大传输单元(MTU)不同的网络类型有不同的MTU如果一个数据包从以太网路由到拨号链路上数据包长度大于拨号链路的MTU了则需要对数据包进行分片(fragmentation)不同的数据链路层标准的MTU是不同的
所以数据链路层不支持过大的数据这就需要在网络层对数据进行分片。
而网络层IP协议会自动帮我们分片并在接收端组装。这个行为对传输层来说是不需要关注的在四层模型中每一层之间的功能需要进行解耦。
分片之后只要有一个分片报文丢失这个报文的整体就会认为丢失了因为没有办法拼出完整的报文数据 但这样就引出了一个问题分片会提高丢包的概率影响传输速率发一次快递和发三次快递明显三次快递丢东西的可能性更高
对于具有可靠性机制的TCP而言丢包问题不大我们可以在传输层进行重传。但UDP没有可靠性此时出现分片后丢包了就没办法找回了。
所以网络层进行分片并不是主流相比之下在传输层就进行分片才是更好的选择。
2.2.2 如何分片
在IP报头中如下字段就是用于分片和组装操作的 十六位标识 (id): 唯一的标识主机发送的报文。如果IP报文在数据链路层被分片了那么每一个片里面的这个id都是相同的三位标志字段: 第一位保留 (保留的意思是现在不用 但是还没想好说不定以后要用到)。第二位置为1表示“禁止分片” 这时候如果报文长度超过MTU IP模块就会丢弃报文。第三位表示更多分片 如果分片了的话 最后一个分片置为0 其他分片报文都是10就类似于一个分片的结束标记 十三位分片偏移 (framegament offset): 是分片相对于原始IP报文开始处的偏移。 其实就是在表示当前分片在原报文中处在哪个位置。实际偏移的字节数是这个值 * 8 得到的。因此 除了最后一个报文之外 其他报文的长度必须是8的整数倍 (否则报文就不连续了)
此时只要将三位标志字段中的更多分片置为1就代表当前报文并不是一个完整的报文而是已经被分片后的报文。 更多分片为0且分片偏移为0代表当前报文没有进行分片更多分片为1且分片偏移为0代表当前是分片后报文中的第一个更多分片为0且分片偏移不为0代表当前是分片报文中的最后一个 此时就需要根据十六位标识来确定当前分片属于哪一个“组”再将当前报文和后续收到的ID相同的报文集合在一起通过十三位片偏移来进行排序组装成完整数据
比如第一个报文的起始偏移量是0第二个是1000第三个是2000这时候就根据片偏移排序进行拼接就可以了。这只是个栗子
如何保证收完了
根据十六位标识按照片偏移进行排序排序后发现缺失了部分的报文那就代表没有被收完。因为每一个报文的偏移量该报文长度就是下一个报文的偏移量只要数据对不上那就代表丢东西了。
而开头和结尾的报文就能通过上面提到的根据更多分片标记位分片偏移来确定有没有丢。
2.2.3 如何减少分片
虽然说IP网络层会自动帮我们分片但是否分片是可以通过传输层来进行控制的
只要传输层一次交付的数据没有超过需要分片的阈值那网络层在传输的时候就不会进行分片了
减少分片的方式那就是在传输层就进行一定的分片这样能更好将丢分片报文这件事在传输层进行处理。而不是在网络层丢包后没办法在传输层失败并处理。 传输层进行限制
如果是TCP协议在三次握手的时候就会协商双方单词传输数据的大小。从而避免网络层对数据进行分片以规避数据链路层的MTU限制。同时也维护了滑动窗口如果网络层的传输出现了丢包由传输层来进行重传操作以实现可靠传输。
限制成多少好呢
一般建议将该大小设置为比网络中的最小MTU值小一些以防止出现分片 后续会补上更多信息 2.2.4 分片的限制
在上文中提到MTU的限制是最大1500字节这个数据长度是包含IP协议的报头的数据是从IP网络层向下交付给数据链路层的
假设我们有一个网络层的3000字节的数据此时网络层要进行分片并不是简单的3000/15002就能搞定了的。而是要计算上IP报头的长度20字节
每一个分片都是一个独立的IP报文都会有自己独立的IP报头否则缺少报头在接收端没有办法进行数据组装操作。
201480
201480
2020一共需要分3片才能将这网络层的3000字节的数据成功传输
但是这里就有一个问题了明明1480148020 2980并不是3000字节啊
注意上面提到的是网络层的3000字节数据。实际上传输层只向下交付了2980字节加上IP报头20字节才是网络层的3000字节数据。因为要进行分片原本这3000字节的统一报头肯定是要丢弃的我们需要操作的是传输层向下交付的2980字节数据将其正确分片并添加上每一个分片的报头再交给数据链路层。
2.3 TTL
上文提到TTL是用来控制报文的生命周期的其为了避免报文在路由中出现死循环。
比如下图中假设有一个报文路由到了路由器D原本他应该被正常交付给主机C但路由器D出现了一些问题将这个报文交付给了路由器I路由器I给JJ给HH给C路由器C又给D路由器D还是有bug又转发给了路由器I。
这时候就出现了一个报文路由的死循环。
如果没有TTL来控制生命周期报文就会一直在这个死循环中跑白白浪费路由器的性能 规定了TTL之后当报文的生命周期已经到了但却还没有发送到目的地那就需要将这个报文丢弃了。即超了TTL的时间就认为报文无效
3.网段划分
3.1 IP如何找到对方主机
IP如何找到对方主机呢
IP 目的网络 目的主机由此还衍生出网段划分
以IPV4的ip为例其格式为1.1.1.1可以认为是下面的划分
1.1.1 .1
网段 .主机这就好比你的学号前X位里面是学院的代码最后才是班级班级内编号。先找到你所在学院再找到班级最后再找到你。
反馈到IP里面就是先找到网段再找到主机。
3.1.1 发送数据的本质
IP就是先找到目的的网段再找这个网段中的目的主机。先根据目的网段进行路由找到目的网络再通过主机号找到目的主机
而查找目的主机的过程本质是一个排除的过程。
先通过网段排除一个大类再通过主机号来排除该网段中的单个主机。这样就能避免我们一个一个遍历在全网中查找主机提高了查找的效率 子网划分的目的就是提高查找目标主机的效率 这也是学校里面用学号的原因除了为了给每个学生提供一个唯一标识还能通过学号来提高查找到某一个学生的效率。
在全球互联网上同样是通过IP地址的网段来划分国家再划分到每个国家内部的不同区。这时候就会有一定IP地址资源的竞争。比如米国互联网发展早下图中谷歌的服务器IP就老整齐了不过这些服务器都在同一个地域IP很接近是合理的 3.1.2 网络号和主机号
网络号保证相互连接的两个网段具有不同的标识主机号在同一网段中主机之间具有相同的网络号但是主机号不同以进行区分
具体框架可以查看下图192.168.128就是这个局域网的网段 而最后的10和11是不同主机的两个主机标识。一般情况下网段中的1号主机就是这个网段中的路由器。 我们家里的路由器除了进行路由转发还有子网划分的功能。 如果出现了一个开头并非192.168.128的IP主机就能知道这不是当前局域网的IP于是就会将报文直接转发给192.168.128.1让路由器去找这个IP的目标主机进行跨局域网的下一层转发 就好比我们的学号是学校的教务系统派发给每一位同学的IP中的网段也被“某人”在一定程度上根据地区进行了划分。
3.2 IP地址类别划分
3.2.1 ABCDE
通过A到E类不同的划分会衍生出不同范围的IP号然后再分配给不同的国家或地区
A类 0.0.0.0到127.255.255.255
B类 128.0.0.0到191.255.255.255
C类 192.0.0.0到223.255.255.255
D类 224.0.0.0到239.255.255.255
E类 240.0.0.0到247.255.255.255依照上面的划分如果我是一个大型企业申请了一个B类的IP地址。此时就能支持我的局域网内2^16台主机的ip分配。但实际上我顶多会有2w个主机此时就出现了IP地址的浪费
3.2.2 CIDR和子网掩码
为了避免上文中出现的IP浪费问题CIDRClassless Interdomain Routing就出现了
引入一个额外的子网掩码(subnet mask)来区分网络号和主机号子网掩码也是一个32位的正整数. 通常用一串 0 来结尾一串 1 开头将IP地址和子网掩码进行 按位与 操作, 得到的结果就是网络号网络号和主机号的划分与这个IP地址是A类、B类还是C类无关
如果我们需要更多主机就可以将子网掩码中最后一个1置0就能适配更多局域网主机。
所以现在已经不用ABCDE的类别划分方式了都采用了子网掩码方式。 根据上图可见IP地址与子网掩码做与运算可以得到网络号主机号的二进制位从全0到全1就是子网的地址范围
IP地址和子网掩码还有一种更简洁的表示方法例如140.252.20.68/24,表示IP地址为140.252.20.68, 子网掩码的高24位是1也就是子网掩码255.255.255.0
3.3 基础设施
有了网段划分给不同国家和地区划分了IP之后就需要有人来建设网络的基础设施
在我们国家搞基础设施就是三大运营商移动 电信 联通
比如几年前做的“光纤入户”就是基础设施建设的一部分。
基础设施搭建好了后再通过子网掩码和已经获取到的IP的网段来划分不同省份、不同市区最终再落到每个入网用户的头上。
3.4 缓解IP地址不够用的办法
有人肯定会问了现在公网IPV4的资源那么匮乏大部分家宽都是没有公网ip的那我们平时的上网是怎么实现的
换句话说如何缓解IP地址的匮乏
可以使用动态IP分配技术只给直接接入公网的设备分配IP地址每一个设备接入网络时其获取到的IP地址不一定和上次相同。NAT技术重点IPV6但是现在普及率有待提高
IPV6使用16字节128位来标识一个IP地址目前看来2^128 位能给“地球上每一粒沙子”都分配一个IP地址了。虽然迟早也会有不够用的那一天但至少是一个很不错的解决方案。我们国家就在大力推广IPV6
通过前文的报文结构图可知IPV4的IP地址只有4字节32位 4.私有IP
4.1 特殊的IP地址
但是直接采用CIDR的方式作为局域网控制的方式就容易出现混乱。而且即便是采用了子网掩码的方式依旧可能出现IP不够用的情况一位网民很可能有多个设备 再加上各类智能终端现在需要上网的设备只会越来越多
需要注意的是CIDR只能提高IP地址的利用率并不能提高IP地址的上限。
所以就衍生出了部分特殊的IP地址。这些IP地址被规定只能用于局域网由此来减少对公网IP的地址消耗。
将IP地址中的主机地址全设为0就是该地址的网络号代表当前局域网将IP地址中的主机地址全设为1就是广播地址用于给同一个链路中相互连接的所有主机发送数据包。127.*的IP地址用于本机回环。我们通常使用127.0.0.1来进行本地服务的访问和测试该IP地址是IPv4回环地址的标准规定IPv6的回环地址为::1。
我们在计算一个局域网中有多少设备的时候需要减掉上文提到的网络号和广播地址。 以下是特殊的只能用于局域网的私有IP地址包含在这个范围中的 都称为私有IP 其余的则称为全局IP (或公网IP)
10.*, 前8位是网络号共16,777,216个地址172.16.到172.31.前12位是网络号共1,048,576个地址192.168.*前16位是网络号共65,536个地址
这里要记住2的16次方为65536在网络的知识点里面经常会接触到这个数字。
4.2 loopback环回
上文提到了127.*是用于本地环回的。下图是环回驱动程序针对IP地址的判断 在云服务器上执行ifconfig也能看到本地环回的配置项这里我们能发现本地环回的MTU是远高于网络的1500。毕竟是自己和自己通信基本不会出现丢包传输速度也是飞快也就不用担心数据包太大的问题
同时也能发现我们的云服务器被分配到的ip地址并不是云服务器的公网ip这也就表明了我们的云服务器并没有被直接暴露在公网上而是通过了云服务器厂家的入网服务器或者也叫路由器来进行公网ip的映射和数据包的转发操作。
eth0: flags4163UP,BROADCAST,RUNNING,MULTICAST mtu 1500inet 10.0.12.2 netmask 255.255.252.0 broadcast 10.0.15.255inet6 fe80::5054:ff:fec9:274f prefixlen 64 scopeid 0x20linkether 52:54:00:c9:27:4f txqueuelen 1000 (Ethernet)RX packets 277674393 bytes 80031748700 (74.5 GiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 302405663 bytes 162670581730 (151.4 GiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags73UP,LOOPBACK,RUNNING mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10hostloop txqueuelen 1000 (Local Loopback)RX packets 111135687 bytes 27644436547 (25.7 GiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 111135687 bytes 27644436547 (25.7 GiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 04.2.1 环回
上图中的环回驱动程序会直接和IP协议的接收端即IP输入函数相连当检测到 127.0.0.1 的IP访问请求的时候会直接把这个报文转发给IP输入函数而不将其插入到以太网中。
就相当于你知道 127.0.0.1 这个IP地址代表的就是你自己你想访问自己电脑上8080端口的程序即便么有接入互联网的状况下也是能正常访问的
Loopback环回接口对于测试和诊断本地主机上的网络服务和应用程序非常有用因为它可以模拟网络通信而不涉及实际的网络传输。
4.2.2 ARP
ARP是一个在局域网数据链路层通过IP获取到局域网主机MAC地址的协议具体请参考后文中的解析 4.3 访问广域网的步骤
4.3.1 说明
下图中能看到我们家用主机是怎么来进行广域网的访问的基本流程
我们家里的路由器除了进行路由转发还有子网划分的功能。可以看到左下角虽然是两个不同的家庭但其可以分配出完全一样的局域网的子网ip 192.168.1.1和不同的WAN口IPWAN口就是路由器连接互联网的口
这是因为我们的设备是直接和当前路由器相连的访问的时候也只能通过当前路由器来进行局域网IP的转发。不可能会出现我访问一个局域网IP却跑到了别人家里的设备上的情况。因为这个局域网IP访问的报文并不会被转发到上层路由器上也就不可能凭空飞到其他局域网中 图中的 122.77.241.3 就是一个公网IP的服务器当我们需要访问这个主机的时候局域网的家用路由器在检测到这个目的IP的时候发现其并不是局域网的IP地址于是就会将这个报文给转发给上层的运营商路由器。
运营商路由器是直接接入了公网IP的其就能通过网段划分主机编号来查找目标主机将报文转发给 122.77.241.3 服务器再将服务器返回的信息转发给你的家用路由器再转发到你的主机上。
这也告诉我们想绕过运营商直接获得公网IP是不可能的因为从物理层面上我们的家用路由器就不是接在公网IP上的即便是可以申请到的家用公网IP也和云服务器的入网服务器一样是运营商的路由器分配给你的。 你会发现家用申请的公网ip很多端口都是被屏蔽的比如 80/443/8080这些端口的屏蔽操作以及海外网站的「墙」也是运营商的路由器进行检测和屏蔽的 4.3.2 内网访问公网的流程
假设我们的模型如下
广域网↓
运营商路由器C 公网IP是122.77.241.4↓
家用路由器B 运营商路由器分配私有IP 10.1.1.2↓
家用主机A 家用路由器分配私有IP 192.168.1.201下面是一个家用主机A访问公网IP的主机 122.77.241.10 的具体步骤
本地主机A发送IP报文给家庭路由器B
————————————————————————
| 源IP192.168.1.201 |
| 目的IP122.77.241.10 |
————————————————————————路由器B收到报文后检测目的IP发现并不似局域网的IP
于是交付给上层的运营商路由器C
报文的源IP被修改为家用路由器B的wan口IP
————————————————————————
| 源IP10.1.1.2 |
| 目的IP122.77.241.10 |
————————————————————————运营商路由器C收到报文后发现其也不是自己所在内网 10.1.1.* 的局域网IP
于是开始执行广域网IP寻址操作找到目标公网IP的主机再将报文发送给该主机
此时发送的报文又被改成了
————————————————————————
| 源IP122.77.241.4 |
| 目的IP122.77.241.10 |
————————————————————————4.3.3 NAT技术
这种不断替换源IP来进行路由转发的过程就是NAT技术
也正是NAT技术的存在让我们能通过多级局域网来让更多的设备上网大大缓解了公网IP的不足。
也正是因为IPV4地址不足的问题被大大缓解推广IPV6就没有我们想象中的那么顺利了。毕竟IPV6的IP格式和V4完全不同需要每个层级的路由器都进行功能升级这可是一个巨大的工程 4.3.4 NAT怎么回来NAPT
当目标主机收到这个报文后他的反馈报文如下
————————————————————————
| 源IP122.77.241.10 |
| 目的IP122.77.241.4 |
————————————————————————同样是先到达运营商路由器运营商路由器需要缓存每一个转发到公网的报文的来源信息为此路由器会维护一个转换表记录着局域网主机的私有IP地址:端口号与对应的公网IP地址:NAT端口号的映射关系。
比如此次TCP链接中我将路由器公网IP的122.77.241.4:30000映射给了局域网10.1.1.2:40000当从公网收到服务器的响应报文后从转换表里面就能够查到这个映射一次通信中这个NAT映射是不会变的从而确定该报文的局域网流向。 需要注意的是NAT技术在端口映射的时候不一定会映射到和内网主机相同的端口此时不仅需要修改IP报文中的来源IP还需要进一步修改传输层比如TCP和UDP中的源端口号 确定局域网IP后就修改当前报文的目的IP继续往局域网转发后面的子路由器也是如此不再赘述。
————————————————————————
| 源IP122.77.241.10 |
| 目的IP10.1.1.2 |
————————————————————————这种IP:端口的关联关系表就是由支持NAT技术的路由器来维护的这个转换表被称为NAPT当这次链接结束后这对映射关系就会从转换表中被删除。 4.3.5 NAT和代理服务器
代理服务器看上去和NAT设备有一定类似客户端向代理服务器发送请求代理服务器将请求转发给真正需要请求的服务器服务器返回结果后代理服务器把结果传回客户端。
4.3.5.1 NAT和代理服务器的区别
从应用来说NAT是属于网络基础设置解决的是公网IP不足的问题代理服务器更贴近具体应用比如通过代理服务器进行“翻墙”和游戏加速从底层来讲NAT在网络层工作对IP地址进行替换代理服务器是在应用层工作从使用范围来讲NAT一般部署在局域网出口代理服务器既可以在局域网又可以在广域网部署从部署位置来看NAT集成在路由器或者防火墙的硬件上代理服务器本质上是一个应用层软件部署在服务器上
代理服务器应用相对来说也比较广
翻墙广域网代理负载均衡局域网代理
4.3.5.2 反向代理
代理服务器分为正向代理和反向代理这里来说说反向代理反向代理处于目标服务器和客户端之间客户端通过反向代理访问目标服务器而不会直接连接到目标服务器
通过反向代理服务器作为一个云服务器主机集群的入网服务器举例一个网站拥有10台提供服务的服务器和一台反向代理服务器域名解析到反向代理服务器反向代理服务器通过服务器监控程序获取到10台服务器中负载最低的那个并将报文转发给它反向代理服务器还会识别10台服务器中是否有宕机的服务器如果有则会告警给维护人员并不再给这个宕机的服务器转发报文反向代理服务器还可以设置黑白名单当遇到DDOS攻击的时候将来源IP放入黑名单进行屏蔽避免过多的访问让所有服务器都宕机影响业务将本公司的其他服务器放入白名单一般白名单都很短
反向代理的作用
通过反向代理服务器实现了负载均衡便于统一管理服务器集群提供统一入网服务器避免了直接将提供服务的主机IP暴露在公网上而被直接攻击的问题提高了安全性。反向代理还能对网页内容进行一定的缓存从而减轻后端服务器的负担比如缓存网页前端的静态资源当用户访问的时候由代理服务器直接返回资源而不需要去请求实际提供服务的服务器
总之好处多多
4.3.5.3 正向代理
正向代理是位于客户端和目标服务器之间的中间服务器。客户端通过正向代理来访问互联网上的资源而不是直接连接到目标服务器。正向代理的作用主要有以下几点
访问控制和过滤 正向代理可以用于限制用户访问特定网站或资源以实施访问控制策略。它可以过滤不良内容提供更好的安全性和隐私保护。隐藏客户端身份 正向代理可以隐藏客户端的真实 IP 地址从而保护用户的隐私和匿名性。目标服务器只能看到代理服务器的 IP 地址而无法获取到真正的客户端信息。缓存和加速 正向代理服务器可以缓存常用的内容从而减少对目标服务器的请求提高访问速度。突破防火墙限制 在一些网络环境中访问特定网站可能受到限制或封锁。使用正向代理可以绕过这些限制访问被封锁的资源。
4.4 ISP检测宽带账户 下文中的部分内容来自chatgpt我对里面的内容进行了补充和修改 运营商的路由器还会检测我们的账户是否还有余额。我们的家用路由器一般是通过光猫登录了自己的宽带账户也可以将光猫设置成桥接模式将接入光猫的路由器设置为宽带帐号PPPoE上网方式登录运营商提供的宽带账户和密码来接入网络。
ISP的路由器检测你的宽带账户通常是通过以下步骤来完成的
设备连接与识别 当你的计算机或其他网络设备连接到ISP提供的路由器时路由器会分配一个私有IP地址给你的设备。这个IP地址是由路由器动态分配的并且通常处于特定的私有IP地址范围比如10.11.1.0/16或10.11.1.0/24等。此时你的设备与路由器建立了一个大局域网内的连接。运营商并不会直接给你分配192.168.*这样的私有IP因为这个IP一般是用于最底层局域网的给你分配了那家庭局域网的就没IP用了认证过程 在你尝试访问互联网时ISP的路由器会引导你的设备进行认证过程。这通常涉及向ISP服务器发送你的宽带账户的登录凭据例如用户名和密码。账户验证 ISP的服务器会验证你提供的登录凭据是否与其记录中的账户匹配。如果验证成功说明你的宽带账户是有效的路由器会为你的设备分配一个公共IP地址这个IP地址是可供互联网访问的。IP地址分配 一旦认证成功ISP的路由器会为你的设备分配一个公共IP地址。这个IP地址是在互联网上唯一标识你的设备的地址使你的设备可以与其他互联网设备进行通信。数据传输 一旦有了公共IP地址你的设备就可以与互联网上的其他设备进行通信发送和接收数据。
这样通过认证和IP地址分配的过程ISP的路由器可以检测并识别你的宽带账户从而让你的设备能够访问互联网。
人话就是登录了宽带账户以后当我们路由器发送的报文交付到运营商路由器的时候该路由器就会检测你这个宽带账户的余额。如果没有余额了就会直接丢弃掉你的IP报文。我们看到的结果就是无法上网 这个操作并不是每次都会执行的只要你的路由器能稳定的接入到运营商的路由器上那就不会每次都进行宽带账户的验证否则会增加网络的负担。 具体的验证流程都是运营商路由器和你的本地光猫自动完成的。 而手机没有话费余额的时候我们依旧能拨通诸如120、119等紧急号码这也是运营商的服务对这些特殊的电话号码做了类似于免费白名单的操作手机号码可以类比公网IP来理解
5.域名
5.1 DNS服务器
上文讲述的都是关于IP协议的事情。但实际上我们日常生活中一般都不会直接使用IP地址端口号的方式来访问某一个服务而是使用域名来访问。比如
www.baidu.com
www.google.com所谓域名就是这些英文字符串和IP的映射。
比如baidu.com就是一个域名而www.baidu.com是该域名下的三级域名几级域名可以看有几个点
实际访问的时候是百度在域名注册商哪里将www.baidu.com指向了自己的服务器的地址(假设指向的是1.1.1.1) 我们访问百度实际上访问的就是 IP地址 1.1.1.1
DNS是应用层协议底层使用的是UDP系统会缓存一部分DNS的结果
在主机本地有一个hosts文件也可以用于设置主机到域名的映射在linux里面就是/etc/hosts这个文件。 在访问域名的时候操作系统会先检查自己本机器的hosts如果本地没有就请求DNS服务器来获取解析结果。
5.2 域名访问主机流程
当我们访问一个域名的时候首先会去请求特殊的DNS服务器
8.8.8.8 谷歌公司的DNS服务器
119.29.29.29 腾讯提供的公共DNS先请求这些DNS服务器服务器内会针对域名查询对应的DNS解析最后再访问该解析对应的IP地址
而使用域名的时候默认访问的是该主机的 80(HTTP)/443(HTTPS) 端口 我们也可以像IP一样在域名之后用:端口 来指定特定端口号进行访问即域名:端口。
一般情况下我们的主机都可以通过自动配置DNS从上层路由器中获取到DNS服务器的地址比如运营商会在路由器基站中内置DNS服务器
5.2.1 DNS劫持
所谓DNS污染和DNS劫持就是因为我们访问的DNS服务器的时候获取到的结果和预期不同从而导致无法访问目标网站或者访问了假的目标网站
www.baidu.com 明明应该指向 1.1.1.1
但被坏蛋劫持了DNS解析变成了指向 1.1.1.3坏蛋可以在 1.1.1.3 服务器上搭建一个和百度「看起来」一模一样的页面并将你的报文给转发到百度服务器上。此时他就通过中间转发获取到了你报文中的用户信息、密码等等参数
这时候因为这个假的服务器是直接给你提供服务了使用的HTTPS证书也是这个假服务器的证书对方可以直接通过自己的证书解密获取到你的信息再转发给百度。
5.2.2 DNS和负载均衡
对于大公司而言DNS解析还有一个重要的作用就是通过不同区域的设置来实现负载的均衡。
假设百度在每一个省份都设立了一个自己的机房那么它就可以通过DNS服务器当不同省份的用户请求服务器的时候返回他当前所处省份的机房地址。这时候就实现了每个机房的负载均衡。
在现实中就是将你的请求转接到离你最近的拥有机房的省份这样既能保证所有服务器的负载均衡又能保证你的访问能较快地获取到响应广东访问广州的服务器肯定比访问北京服务器的延迟低一些
5.3 DNS分层
DNS服务器不会存放所有已知域名的IP解析因为互联网上存在大量的域名数量庞大且不断增长单一DNS服务器无法存储和处理所有域名的IP映射。
实际上DNS服务器通过分层的架构来解决这个问题。在根DNS服务器层级有一组全球性的顶级DNS服务器它们存储顶级域名例如.com、.org、.net等的IP地址。然后在每个顶级域名下有其他DNS服务器负责管理该顶级域名下的子域名例如google.com、facebook.com等。这个过程继续向下形成了一个层级结构。
当你的设备需要解析某个域名时它首先会向本地DNS服务器通常由你的ISP即互联网服务提供商人话就是国内的三大运营商提供发起请求。如果本地DNS服务器知道所需域名的IP地址它会直接返回该IP地址给你的设备。但如果本地DNS服务器不知道该域名的IP地址它会向根DNS服务器发起请求。
根DNS服务器将指导本地DNS服务器转向相应的顶级DNS服务器。然后顶级DNS服务器可能会进一步将请求转发给负责该特定域名的授权DNS服务器。最终这个授权DNS服务器将返回所需域名的IP地址给本地DNS服务器本地DNS服务器再将其返回给你的设备。
这个层级结构允许DNS系统更高效地处理大量的域名解析请求并确保及时更新和管理域名与IP地址的映射。所以单个DNS服务器并不会存放所有已知域名的IP解析而是通过层级结构来分散和管理这些信息。
5.4 dig工具分析DNS解析过程
yum install bind-utils安装了之后就可以使用dig命令来查看域名解析过程了
dig 域名6.路由
路由的过程就是下图这样一跳一跳(Hop by Hop) “问路” 的过程
所谓 “一跳” 就是数据链路层中的一个区间。具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间。 6.1 问路栗子帮助理解
拿日常生活中问路来举例子请屏蔽现在有导航这件事一般问路会得到三种结果
我不知道我知道XXX知道我不知道但是给你乱指在路由寻址的过程中这个情况是不存在的
比如张三要去南京大学的仙林校区他飞机落地南京后不知道怎么走他找了个机场的保安问他“我是从xx省新来的大学生应该怎么去南京大学” 保安让他先坐xx路公交车去仙林大学城到哪里再去问其他人。
张三到了仙林大学城后又找到了路边的环卫工又问“我从机场过来应该怎么去南京大学。” 环卫工给他指了条明路那里就是南京大学的教学楼入口就在这附近。这时候张三获取了两个人路由器的帮助成功递达了南京大学的仙林校区目标主机。
可以看到问路和上面图示中IP报文的路由是很相似的都是一个路由一个路由的“问路”最终找到目标主机。 6.2 路由表
报文在各个路由器之间路由也是如此。当一个路由器遇到一个IP报文
他首先检测这是不是自己分配的局域网中的IP是则可以直接转发到目标主机不是则查看自己的路由表看看自己是否保存了这个IP应该往哪里走如果它自己不知道则可以和其他与自己相连的路由器通信信息同步问他们这个IP应该给谁就好比你在公司里面问某一个工作应该交给谁去做如果周边的路由旁边的路人都不知道该往哪里去则路由器会将其交付给自己的默认路由报文继续转发去下一个人那里问路了。
这样的跳跃都会有一个前提条件相邻的两个主机或路由器一定是在物理上相连处于同一局域网之中。每次的跳跃本质上是从一个子网跳到另外一个子网广域网可以认为是最大的“子网” 6.3 route命令 在windows电脑上可以使用 route print 命令打印路由表本文不关注windows平台。 在linux平台里面可以通过route命令查看当前主机的路由表在Centos8主机上命令显示如下。
可以看到路由表的名字叫做 内核IP路由表这也是linux系统中的一个内核数据结构。内部维护了路由表的目的地、Gateway网关、Genmask掩码、Flags标志位、Metric、Ref、Use、Iface接口
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default _gateway 0.0.0.0 UG 100 0 0 eth0
172.16.0.0 0.0.0.0 255.255.0.0 U 100 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-96d69eeef1ac
172.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-fa4aff4c583eFlags中U代表当前路由表的条目是有效的G代表其是一个路由器。Gateway中_gateway以及0.0.0.0代表的都是默认网关Iface中只有eth0是一个真正的物理网络接口而docker0/br-*都是docker容器虚拟出来的桥接网络接口
假设我我们有一个目的IP是 172.16.0.2获取到这个IP后系统就会将其和路由表中的子网掩码依次进行按位与
在linux环境下可以使用如下代码来进行这两个IP的按位与操作。其中inet_addr 和 inet_ntoa是linux下的两个系统调用接口。用于IP字符串到无符号整数之间的转换具体的介绍可以阅读我的 UDP博客
#include iostream
#include arpa/inet.hint main() {// 将点分十进制的IP地址和子网掩码转换为无符号整数unsigned int ipAddress inet_addr(172.16.0.2);unsigned int subnetMask inet_addr(255.255.0.0);// 进行按位与操作得到网络地址unsigned int networkAddress ipAddress subnetMask;// 将网络地址转换回点分十进制表示法并输出结果struct in_addr addr;addr.s_addr networkAddress;std::cout IP地址: 172.16.0.2 std::endl;std::cout 子网掩码: 255.255.0.0 std::endl;std::cout 网络地址: inet_ntoa(addr) std::endl;return 0;
}
// 非linux环境可以使用下方的代码进行处理
void ip_and_gmask_test() {unsigned int ipAddress 172 24 | 16 16 | 0 8 | 2; // 将 IP 地址转换为 32 位无符号整数unsigned int subnetMask 255 24 | 255 16 | 0 8 | 0; // 将子网掩码转换为 32 位无符号整数unsigned int networkAddress ipAddress subnetMask; // 按位与std::cout IP地址: 172.16.0.2 std::endl;std::cout 子网掩码: 255.255.0.0 std::endl;std::cout 网络地址: (networkAddress 24) . ((networkAddress 16) 255) . ((networkAddress 8) 255) . (networkAddress 255) std::endl;
}二者输出结果都是172.16.0.0
得到输出结果后再和路由表中该项的Destination进行对比二者相等代表当前IP就是需要通过该项进行路由那就将这个报文通过Iface接口eth0发送出去就OK了
Destination Gateway Genmask Flags Metric Ref Use Iface
172.16.0.0 0.0.0.0 255.255.0.0 U 100 0 0 eth0如果按位与的结果与Destination匹配不上那就继续往下一个条目的子网掩码进行按位与。如果整个表都按位与完毕了还没找到该去的地方那就将其通过default默认路由发送出去。
7.数据链路层
前面谈了一大堆将数据从一个主机到路由器再跨越多个路由器递达目标主机的流程。
要想实现这一点我们还需要数据链路层的帮助即实现同一局域网内两台主机在物理层面上的相互通信。
IP网络层提供跨网络找到正确路由路径并传输数据的能力数据链路层提供将数据在同一网络中传输的能力物理层实际上的数据在物理网线上传输
数据链路层也有不同的传输方式本文主要关注当前主流的以太网
需要注意的是以太网不是一种具体的网络而是一种技术标准。它即包含了数据链路层的内容也包含了一些物理层的规定比如拓扑结构和访问控制方式传输速率等。 7.1 认识局域网的基本情况
7.1.1 局域网认识
不过在认识以太网之前我们需要先知道局域网通信的一个基本情况假设下图中就是一个局域网其中包含了不同的主机 首先如果想要两台主机能够通信我们就需要先将其链接到同一根网线上在这里暂且不管WIFI其实本质上也是连在了这根网线上这就好比进程间通信的时候你需要先能看到同一份资源才能实现对这份资源的共享访问。
虽然我们认为在局域网里面通信的时候是两台主机直接交流但实际上你可以把局域网当作一个教师当张三和李四沟通的时候其实会有很多其他的吃瓜群众都能接收到你发送的这个信息。
反馈到以太网报文上因为每个主机都是知道自己的地址的所以只要检测到以太网报头中的目的地址不是自己的时候就可以丢弃掉这个报文。因为目标并不在和你说话。这就好比在教室里面你隔壁有俩人在聊天他们并没有和你交谈所以你可以不用管他们聊了什么。 这也反馈出了为什么某些公共WIFI会不安全因为只要接入了这个WIFI你就有办法检测到其他用户通过这个局域网发送了什么信息 因为局域网内的主机是通过目的地址判断有没有人和自己聊天的所以即便我们的电脑开机后什么事情都没有干在操作系统底层数据链路层其实一直都在从局域网中拿到新的数据链路层报文并检测是否是发给自己的报文
是向上交付否丢掉
7.1.2 碰撞域
由于数据链路层向下是直接交付给物理层的在物理层网线中光电信号传输是不能同时传输多个数据的这就要求我们同一个局域网的多台主机不能同时往局域网中发数据。为了解决这个问题主机引入了休眠机制通过不同时间的错开休眠来避免两台主机同时往局域网中发数据的情况。
理想情况同一时间只有一台主机在局域网中发送数据碰撞问题如果出现了同时发送数据出现冲突就需要剔除掉这部分数据
通过碰撞域解决数据冲突问题尽量达到理想情况
比如我们的交换机就有划分碰撞域的功能。接到交换机上的设备除了通过交换机进行路由转发如果在交换机的这部分设备中出现了数据碰撞那么交换机就能把碰撞控制在当前这个小的碰撞域内而不会向更大的局域网中传播。 如果一个局域网里面只有一个交换机路由器那么这整个局域网共享碰撞域 所以大公司内为了避免局域网因为碰撞问题而导致的网络卡顿一般都会将几台电脑接入一个小的交换机中来划分碰撞域。
如上是物理层面的事情软件层面上一个MAC帧不要太大否则会大大增加碰撞的概率。所以MAC帧必须要对上层交付的数据大小提一个要求不能交付太大的数据这就是MTU的由来一般都是1500字节至于为什么是1500那就是学术层面的事情了
7.2 以太网帧格式 这里需要知道一个小知识虽然MAC地址在一定程度上可以认为是全球唯一的但实际上只需要保证同一个局域网内的MAC地址是唯一的就OK了
目的地址/源地址48位的MAC地址MAC是每个主机在局域网内唯一的身份标识帧协议类型有三种值分别对应IP、ARP、RARP所以只需要2个字节帧末尾是CRC校验码4个字节
这三个就是以太网固定添加的报头在进行解包的时候我们只需要取走数据最前面的14个字节662再丢弃末尾的4个字节就能取到上层的原始数据。
7.3 认识MAC地址
MAC地址用来识别数据链路层中相连的节点MAC地址长度为48位6个字节一般用十六进制加上冒号的方式来表示例如08:00:27:03:fb:19MAC地址在网卡出场的时候就确定了不能被修改。虚拟机中的MAC地址并不是真实的MAC地址可能会和已有的冲突但虚拟机会检测冲突并及时修改不然虚拟机就上不了网了也有很少部分网卡支持用户配置MAC地址
7.3.1 MAC地址和IP协议的区别
MAC地址和IP地址的区别如下
IP地址描述的是路途总体的起点和终点MAC地址描述的是路途上每一个小路由区间的起点和终点
因为我们的主机不可能知道一个很远的内网主机的MAC地址所以就需要MAC地址在小路由区间来标识起点和终点并实现正确的数据传输。
7.4 MTU对上层的影响
7.4.1 MTU对IP的影响
在前文提到过为了避免光电信号在物理层传输的时候出现冲突需要限制网络层给数据链路层传输的单次的数据大小MTU的具体说明可以参考本文 2.2.1 认识MTU
因为MTU的存在网络层IP协议中需要对较大的数据包进行分包IP分片和组装问题在上文也谈过了这里就不重复了
但因为IP协议层分片和组装对于传输层来说是不可见的如果IP分片后出现丢包导致数据丢失那么传输层就必须得重传。所以传输层为了避免这种不受自己控制的事情最终分片的操作应该是由传输层来进行处理才是最好的
7.4.2 MTU对UDP的影响
UDP最大可以传输数据是 2^16字节也就是64KB而1500字节是1.5KB也就是说只要UDP携带的数据超过 1472 (1500 - 20 IP首部 - 8 UDP首部)那么就会在网络层被分为多个IP数据报。
一旦这个数据报中有一个IP报文丢失了那么整个UDP报文就会丢失。再加上UDP并没有超时重传机制不过可以根据具体的协议来定制应答和重传机制来保证数据可靠性UDP的报文在IP层中被分片后丢包的概率远大于TCP
7.4.3 MTU对TCP的影响
TCP的一个数据报也不能无限大还是受制于MTUTCP的单个数据报的最大消息长度称为MSS(Max Segment Size);TCP在建立连接的过程中通信双方会进行MSS协商。最理想的情况 MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的 MTU)。双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值。然后双方得知对方的MSS值之后选择较小的作为最终MSS进行数据传输MSS的值在TCP首部的40字节变长选项中 (kind2) 7.5 ARP协议
7.5.1 说明 ARP协议属于数据链路层是MAC帧协议的上层 因为在局域网内的传输时我们是用mac地址来作为不同主机的标识符的所以就必须存在一个IP地址到MAC地址的转换。
ARP协议也是包含在以太网帧格式中的其中属于他自己的正文只有28个字节因为MTU限制最小的数据长度是46字节所以在发送ARP报文的时候需要给这个28字节后面填补空位。 先来看看ARP请求/应答中的各个字段的含义吧
硬件类型标定底层使用的是以太网还是其他帧格式1为以太网协议类型指要转换的地址类型0X0800为IP地址硬件地址长度对于以太网来说为6字节这里填的是数字6所以只需要占用1个字节协议地址长度对于IP地址来说为4字节同上op字段为1表示ARP请求2表示ARP应答
当我们的主机开始发送报文之前我们的主机是不知道某一个IP对于的目标主机的MAC地址的。所以就需要用ARP协议向局域网内发送一个请求并得到目标主机的ARP响应响应中就包含了该主机的MAC地址
7.5.2 ARP请求/响应的流程
主机A需要给主机B发送数据但是不知道主机B的MAC地址它就需要发起一个ARP请求
以太网目的地址填为全F代表广播源地址填自己的MAC地址帧类型填0806代表ARP协议ARP中的OP填为1代表是ARP请求发送端以太网地址和IP地址填为主机A自己的MAC地址和自己的IP地址目的以太网地址填为全FIP地址填为目的的IP地址注意我们是知道对方IP地址的向下交付给以太网的MAC帧然后送入局域网
这个ARP请求的报文就开始在局域网内进行广播
收到这个ARP请求的主机在MAC帧收到并向上交付给自己的ARP层ARP层先通过OP为1判断是ARP的请求取出请求中的目的IP地址判断是否为本机IP地址不是则丢弃是本机的IP地址代表这个报文是发给自己的ARP请求需要构造ARP响应
于是主机B就收到了这个ARP请求并开始构造ARP响应
以太网目的地址填为ARP请求中的发送端MAC地址源MAC地址填自己的帧类型填0806代表ARP协议ARP中的OP填2代表ARP响应发送端以太网地址和IP地址填为主机B自己的MAC地址和自己的IP地址目的以太网地址填为A的MAC地址在ARP请求中得知的IP地址填为目的主机A的IP地址向下交付给以太网的MAC帧然后送入局域网
此时这个ARP的响应就开始在局域网中传输因为此时以太网的目的地址不再是全F所以各个收到这个报文的主机就可以直接通过MAC地址来判断是否是发给自己的MAC帧。如果不是就直接丢弃不交付给上层
主机A判断目的MAC帧是自己的交付给上层的ARP协议
判断ARP中的OP为2代表是ARP响应因为前面已经判断过目的MAC地址是自己的了所以这时候不需要判断ARP中的目的MAC和目的主机IP了直接取出发送端主机MAC和主机IP就能得到主机B的IP和MAC地址的映射关系
这时候主机A就得到了主机B的MAC地址可以正常进行数据的发送了
7.5.3 ARP缓存与更新
任何一台主机发出的一定是ARP的请求接收到的ARP可能是对方向往发送的ARP请求也可能是我发送的ARP请求的响应
但如果每台主机都不知道IP和MAC的映射关系岂不是每次发送数据之前都需要来个ARP请求和响应来获取对方MAC地址这样整个局域网内就得被ARP请求和响应给塞满了。
所以当我们发送了一个ARP请求后应该需要将ARP响应给暂时缓存到本机上避免下次发送的时候不知道对方的MAC地址。操作系统中就有一张ARP缓存表保存了局域网内部分主机的IP和MAC地址的映射关系。 如果一个主机想获取到局域网内所有的MAC地址就可以写个循环把局域网内的所有IP都发送一次ARP请求再将收集到的ARP响应给缓存起来因为局域网内的主机网络号都是相同的主机号都是是从1到254并不多写个循环就行了 但这里会有一个问题如果某台主机B离开了你这个局域网主机C接入后路由器给主机C分配了原本是给主机B用的IP这时候主机A里面的ARP缓存表没有更新还是填了主机B的MAC地址但主机B其实已经不在局域网里面了这时候这个报文岂不是找不到目标主机了
所以ARP不仅仅需要缓存还需要保有一定的更新机制可以设置一个定时器定时向缓存表中已有IP的主机发送一条ARP请求并得到对方的ARP响应。这时候就可以比对返回的MAC地址是否有变动有变动则更新。
如果一个ARP请求长时间没有得到响应则可以认为该IP地址目前没有对应的主机将其从缓存表中删除。
7.5.4 中间人攻击
上文讲述了ARP的请求和响应的格式假设出现了下面的这个情况
主机A想获取主机B的MAC发送ARP请求并获取到了响应主机D把自己的IP伪装成主机B的IP又给主机A发送了ARP响应此时主机A更新了ARP缓存表将主机B的IP B映射给了MAC D主机D用同样的办法将主机B的ARP缓存表中的IP A映射给了MAC D此时主机A给B发送消息填的是MAC DB给A发消息填的也是MAC D主机D在收到A和B双方通信的报文后先交付给自己的上层再转发给对方A和B的双方通信就出现了一个中间人D此时如果你的信息不是加密的那就可以被主机D所窃取
这也是为啥出现了https来避免中间人攻击
7.5.5 RARP
RARPReverse Address Resolution Protocol逆地址解析协议是一种网络协议用于在局域网LAN中通过已知的物理地址查找相应的IP地址。
与前面讲述的ARPAddress Resolution Protocol地址解析协议不同ARP用于通过已知的IP地址查找相应的物理地址通常用于将网络层IP地址映射到链路层MAC地址。RARP则执行相反的操作它允许主机在启动时使用其物理地址来请求分配给它的IP地址。
RARP协议在过去的计算机网络中用于在没有人工配置的情况下为计算机分配IP地址。当计算机启动时它会向网络发送一个RARP请求包其中包含它的物理地址MAC地址以请求分配一个IP地址。网络中的RARP服务器会接收这个请求并回复包含IP地址的RARP响应包。
然而随着时间的推移RARP的使用逐渐减少主要是因为它的局限性例如不太适用于大型网络以及需要特定的服务器来管理地址分配。现代的网络通常使用DHCPDynamic Host Configuration Protocol动态主机配置协议来实现类似的功能它更灵活且易于管理可以自动分配IP地址以及其他网络配置参数给主机。
总结
数据链路层
数据链路层的作用两个设备(同一种数据链路节点)之间进行传递数据以太网是一种技术标准既包含了数据链路层的内容 也包含了一些物理层的内容。 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等以太网帧格式理解mac地址理解arp协议理解MTU
网络层
网络层的作用: 在复杂的网络环境中确定一个合适的路径.理解IP地址, 理解IP地址和MAC地址的区别理解IP协议格式了解网段划分方法理解如何解决IP数目不足的问题, 掌握网段划分的两种方案理解私有IP和公网IP理解网络层的IP地址路由过程理解一个数据包如何跨越网段到达最终目的地理解IP数据包分包的原因了解NAT设备的工作原理
传输层
传输层的作用: 负责数据能够从发送端传输接收端理解端口号的概念认识UDP协议, 了解UDP协议的特点。认识TCP协议理解TCP协议的可靠性理解TCP协议的状态转化掌握TCP的连接管理确认应答, 超时重传, 滑动窗口, 流量控制, 拥塞控制, 延迟应答, 捎带应答特性理解TCP面向字节流, 理解粘包问题和解决方案能够基于UDP实现可靠传输理解MTU对UDP/TCP的影响
应用层
应用层的作用: 满足我们日常需求的网络程序, 都是在应用层能够根据自己的需求设计应用层协议了解HTTP协议理解DNS的原理和工作流程. 文章转载自: http://www.morning.gpmrj.cn.gov.cn.gpmrj.cn http://www.morning.dmxzd.cn.gov.cn.dmxzd.cn http://www.morning.pftjj.cn.gov.cn.pftjj.cn http://www.morning.kpzrf.cn.gov.cn.kpzrf.cn http://www.morning.wrtxk.cn.gov.cn.wrtxk.cn http://www.morning.mzhhr.cn.gov.cn.mzhhr.cn http://www.morning.ygmw.cn.gov.cn.ygmw.cn http://www.morning.gqjwz.cn.gov.cn.gqjwz.cn http://www.morning.hhxpl.cn.gov.cn.hhxpl.cn http://www.morning.lltdf.cn.gov.cn.lltdf.cn http://www.morning.jcyyh.cn.gov.cn.jcyyh.cn http://www.morning.hxcuvg.cn.gov.cn.hxcuvg.cn http://www.morning.zlchy.cn.gov.cn.zlchy.cn http://www.morning.fprll.cn.gov.cn.fprll.cn http://www.morning.pcgmw.cn.gov.cn.pcgmw.cn http://www.morning.tdmr.cn.gov.cn.tdmr.cn http://www.morning.fzlk.cn.gov.cn.fzlk.cn http://www.morning.mdnnz.cn.gov.cn.mdnnz.cn http://www.morning.swsrb.cn.gov.cn.swsrb.cn http://www.morning.ynrzf.cn.gov.cn.ynrzf.cn http://www.morning.lwsct.cn.gov.cn.lwsct.cn http://www.morning.jljiangyan.com.gov.cn.jljiangyan.com http://www.morning.lkbdy.cn.gov.cn.lkbdy.cn http://www.morning.phechi.com.gov.cn.phechi.com http://www.morning.clbzy.cn.gov.cn.clbzy.cn http://www.morning.tbnpn.cn.gov.cn.tbnpn.cn http://www.morning.pccqr.cn.gov.cn.pccqr.cn http://www.morning.qgghr.cn.gov.cn.qgghr.cn http://www.morning.gkxyy.cn.gov.cn.gkxyy.cn http://www.morning.fbxlj.cn.gov.cn.fbxlj.cn http://www.morning.kyflr.cn.gov.cn.kyflr.cn http://www.morning.gfznl.cn.gov.cn.gfznl.cn http://www.morning.pcqdf.cn.gov.cn.pcqdf.cn http://www.morning.mrskk.cn.gov.cn.mrskk.cn http://www.morning.knlgk.cn.gov.cn.knlgk.cn http://www.morning.lfcfn.cn.gov.cn.lfcfn.cn http://www.morning.nhlyl.cn.gov.cn.nhlyl.cn http://www.morning.zlff.cn.gov.cn.zlff.cn http://www.morning.mkpqr.cn.gov.cn.mkpqr.cn http://www.morning.rdkt.cn.gov.cn.rdkt.cn http://www.morning.fkmqg.cn.gov.cn.fkmqg.cn http://www.morning.xbdd.cn.gov.cn.xbdd.cn http://www.morning.nnjq.cn.gov.cn.nnjq.cn http://www.morning.szoptic.com.gov.cn.szoptic.com http://www.morning.hbqhz.cn.gov.cn.hbqhz.cn http://www.morning.lmxzw.cn.gov.cn.lmxzw.cn http://www.morning.nqyfm.cn.gov.cn.nqyfm.cn http://www.morning.yxkyl.cn.gov.cn.yxkyl.cn http://www.morning.mphfn.cn.gov.cn.mphfn.cn http://www.morning.fksyq.cn.gov.cn.fksyq.cn http://www.morning.qhtlq.cn.gov.cn.qhtlq.cn http://www.morning.grxsc.cn.gov.cn.grxsc.cn http://www.morning.rcyrm.cn.gov.cn.rcyrm.cn http://www.morning.gnkdp.cn.gov.cn.gnkdp.cn http://www.morning.lgxzj.cn.gov.cn.lgxzj.cn http://www.morning.qhln.cn.gov.cn.qhln.cn http://www.morning.ykgkh.cn.gov.cn.ykgkh.cn http://www.morning.dmzqd.cn.gov.cn.dmzqd.cn http://www.morning.mqfw.cn.gov.cn.mqfw.cn http://www.morning.ffhlh.cn.gov.cn.ffhlh.cn http://www.morning.tongweishi.cn.gov.cn.tongweishi.cn http://www.morning.qmxsx.cn.gov.cn.qmxsx.cn http://www.morning.btypn.cn.gov.cn.btypn.cn http://www.morning.ypzr.cn.gov.cn.ypzr.cn http://www.morning.zcqbx.cn.gov.cn.zcqbx.cn http://www.morning.fnkcg.cn.gov.cn.fnkcg.cn http://www.morning.mrccd.cn.gov.cn.mrccd.cn http://www.morning.lxlfr.cn.gov.cn.lxlfr.cn http://www.morning.tsflw.cn.gov.cn.tsflw.cn http://www.morning.pfnrj.cn.gov.cn.pfnrj.cn http://www.morning.mcfjq.cn.gov.cn.mcfjq.cn http://www.morning.dhbyj.cn.gov.cn.dhbyj.cn http://www.morning.pgxjl.cn.gov.cn.pgxjl.cn http://www.morning.wtsr.cn.gov.cn.wtsr.cn http://www.morning.gqfjb.cn.gov.cn.gqfjb.cn http://www.morning.rsxw.cn.gov.cn.rsxw.cn http://www.morning.ykbgs.cn.gov.cn.ykbgs.cn http://www.morning.pmftz.cn.gov.cn.pmftz.cn http://www.morning.lkthj.cn.gov.cn.lkthj.cn http://www.morning.klzdy.cn.gov.cn.klzdy.cn