IP服务


IP基础知识

IP概念

IP是英文 Internet Protocol的缩写,意思是“网络之间互连的协议”,也就是为计算机网络相互连接进行通信而设计的协议。在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。

IP作用

IP位于TCP/IP参考模型的第三层网络层,实现主机与主机之间的点对点通信,例:

image-20220811213511120

IP与MAC地址

  1. IP负责在没有直连的两个网络之间进行数据通信
  2. MAC负责实现直连的两个设备之间的通信

image-20220811213733503

区别

  1. MAC地址的长度为48位(6个字节);而IP地址为32位。
  2. MAC地址应用在OSI第二层,即数据链路层;IP地址应用于OSI第三层,即网络层。
  3. MAC地址的分配是基于制造商;IP地址的分配是基于网络拓朴。

IP地址的构成

  • IP地址(IPv4)由32bit二进制组成,使用点分十进制表示,8个bit为一组,共4组,使用点分割,大概支持43亿设备连接,如:

    image-20220811213938970

  • 实际IP地址是以网卡为标准进行配置

    image-20220811214028305

IP地址的分类

  • IP地址 = 网络号(网段地址)+主机号(主机地址)
  • 网络号:设备所在区域的唯一标识,网络号相同的设备允许相互通信
  • 主机号:同一网段中不同设备的唯一标识,不允许重复
  • IP地址共分为5类:A类、B类、C类、D类、E类,如:

image-20220811214353778

地址的第一个字段的十进制值

主机数 = 2的主机号位数的次方-2(全0和全1)

  • A类:1-126 ,16777214台主机,如:10.1.2.3,A类地址的范围为:1.0.0.1-126.255.255.254
  • B类:128-191,65534 台主机,如:144.12.3.77,B类IP地址的范围:128.0.0.1-191.255.255.254
  • C类:192-223,254台主机,如:192.168.1.1,C类IP地址的范围:192.0.0.1-223.255.255.254

特殊IP地址

网络地址

作用:标识网络唯一位置及名称

计算:网络地址 = 网络号+0 组成

例1:ip=192.168.1.125 C类 net:host 3:1 网络地址=192.168.1.0

例2:ip=16.1.3.8 A类 net:host 1:3 网络地址=16.0.0.0

注意:网络地址不同的设备不能相互通信

广播地址

  1. 本地广播:用于同一个链路中相互连接的主机之间发送数据包

image-20220811220224427

本地广播地址通过 255.255.255.255 发送

  1. 直接广播地址:在不同网路之间进行的广播,对方的IP网络号+255,如:

image-20220811220325855

  1. 多播地址:将数据包发送给网络中特定组的所有主机,如:

img

多播使用D类地址,从 224.0.0.0~239.255.255.255 范围内进行多播,划分为三类

  • 224.0.0.0~224.0.0.255 预留的组播地址,只能用于局域网LAN中,路由器不转发

  • 224.0.1.0~238.255.255.255 组播地址,用于 internet

  • 239.0.0.0~239.255.255.255 为本地管理组播地址预留,供网络内部使用

回环地址

同一台计算机内的程序之间进行网络通信时使用的默认地址,使用127.0.0.1作为标准默认回环地址,与回环地址具有相同意义的主机名称为 localhost,使用该ip及主机名时,数据包不会流向网络

本地IP地址

作用:本地LAN内部使用的IP地址

区间192.168.x.x10.x.x.x

IP地址的优缺点

优点:简单明了,使用方便

缺点

  1. 同一个网络下没有层次划分,缺少灵活性
  2. 不能很好的与现实网络匹配

子网掩码

  • 组成:与IP地址相同,32bit组成,点分十进制表示,如:255.255.255.0

  • 子网掩码中0映射的IP地址表示主机1映射的IP地址表示网络

    ip:192.168.1. 234

    netmask: 255. 255.255.0

  • 作用

    1. 网络地址与主机地址分离网络地址 = IP 地址 AND 子网掩码 ,例:

      image-20220812161326619

      ​ 192.168.129.10 1100 0000 0000 1010

      & 255.255.255.0 1111 1111 0000 0000

      net:192.168.129.0

    2. 子网划分

  • 子网划分

    1. IP地址 = 网络号 + (子网地址 + 子网主机号)

    2. 默认子网掩码:A类 255.0.0.0 B类 255.255.0.0 C类 255.255.255.0

    3. 子网划分原则:子网掩码二进制状态下将表示主机的0更改为1,原来表示主机的数据现在表示子网,如:

      255.255.255.0 1111 1111 1111 1111 1111 1111 00 00 0000

      改为:255.255.255.192 1111 1111 1111 1111 1111 1111 11 00 0000

      1111 1111 1111 1111 1111 1111表示网络号,11表示子网号,00 0000表示主机号

    4. 例1:有网络地址192.168.1.0 ,子网掩码为255.255.255.192,分析网络构成:

      • 第一点:划分几个子网:2的n次方 n:子网掩码的0变为1的个数,当前示例:2的2次方 -> 4 个子网

      • 第二点:每个子网的合法主机数:2的n次方-2 n:子网掩码中剩余0的个数,当前示例:2的6次方-2 -> 62 台

      • 第三点:每个合法的子网号:

        ip: 1111 1111 1111 1111 1111 1111 xx xx xxxx

        netmask 1111 1111 1111 1111 1111 1111 11 00 0000

        2个1 则IP地址最后一个字节的可能数据:

        1. 00 00 0000 -> 0
        2. 01 00 0000 -> 64
        3. 10 00 0000 -> 128
        4. 11 00 0000 -> 192

        合法的子网号

        1. 192.168.1.0
        2. 192.168.1.64
        3. 192.168.1.128
        4. 192.168.1.192
      • 第四点:每个子网的广播地址:下一子网号-1

        1. 第一个子网广播地址:192.168.1.63
        2. 第二个子网广播地址:192.168.1.127
        3. 第三个子网广播地址:192.168.1.191
        4. 第四个子网广播地址:192.168.1.255
      • 第五点:每个子网合法的主机号范围:掐头去尾

        1. 第一个子网主机地址:192.168.1.1~192.168.1.62
        2. 第二个子网主机地址:192.168.1.65~192.168.1.126
        3. 第三个子网主机地址:192.168.1.129~192.168.1.190
        4. 第四个子网主机地址:192.168.1.193~192.168.1.254
    5. 例2:有网络地址192.168.1.0 , 子网掩码为255.255.255.240,分析网络构成:

      子网掩码的二进制表示:1111 1111 1111 1111 1111 1111 1111 0000

      • 第一点:划分几个子网:2的n次方 n:子网掩码的0变为1的个数,当前示例:2的4次方 -> 16 个子网

      • 第二点:每个子网的合法主机数:2的n次方-2 n:子网掩码中剩余0的个数,当前示例:2的4次方-2 -> 14 台

      • 第三点:每个合法的子网号:

        ip: 1111 1111 1111 1111 1111 1111 xx xx xxxx

        netmask 1111 1111 1111 1111 1111 1111 1111 0000

        2个1 则IP地址最后一个字节的可能数据:

        1. 0000 0000 -> 0
        2. 0001 0000 -> 16
        3. 0010 0000 -> 32
        4. 0011 0000 -> 48
        5. 0100 0000 -> 64
        6. 0101 0000 -> 80
        7. 0110 0000 -> 96
        8. 0111 0000 -> 112
        9. 1000 0000 -> 128
        10. 1001 0000 -> 144
        11. 1010 0000 -> 160
        12. 1011 0000 -> 176
        13. 1100 0000 -> 192
        14. 1101 0000 -> 208
        15. 1110 0000 -> 224
        16. 1111 0000 -> 240

        合法的子网号

        1. 192.168.1.0
        2. 192.168.1.16
        3. 192.168.1.32
        4. 192.168.1.48
        5. 192.168.1.64
        6. 192.168.1.80
        7. 192.168.1.96
        8. 192.168.1.112
        9. 192.168.1.128
        10. 192.168.1.144
        11. 192.168.1.160
        12. 192.168.1.176
        13. 192.168.1.192
        14. 192.168.1.208
        15. 192.168.1.224
        16. 192.168.1.240
      • 第四点:每个子网的广播地址:下一子网号-1

        1. 第一个子网广播地址:192.168.1.15
        2. 第二个子网广播地址:192.168.1.31
        3. 第三个子网广播地址:192.168.1.47
        4. 第四个子网广播地址:192.168.1.63
        5. 第五个子网广播地址:192.168.1.79
        6. 第六个子网广播地址:192.168.1.95
        7. 第七个子网广播地址:192.168.1.111
        8. 第八个子网广播地址:192.168.1.127
        9. 第九个子网广播地址:192.168.1.143
        10. 第十个子网广播地址:192.168.1.159
        11. 第十一个子网广播地址:192.168.1.175
        12. 第十二个子网广播地址:192.168.1.191
        13. 第十三个子网广播地址:192.168.1.207
        14. 第十四个子网广播地址:192.168.1.223
        15. 第十五个子网广播地址:192.168.1.239
        16. 第十六个子网广播地址:192.168.1.255
      • 第五点:每个子网合法的主机号范围:掐头去尾

        1. 第一个子网主机地址:192.168.1.1~192.168.1.14
        2. 第二个子网主机地址:192.168.1.17~192.168.1.30
        3. 第三个子网主机地址:192.168.1.33~192.168.1.46
        4. 第四个子网主机地址:192.168.1.49~192.168.1.62
  • 子网掩码精简表示法

    • 结构:IP地址/子网掩码二进制中1个数
    • 例:192.168.1.0/24 24表示子网掩码有24个1,一共32位,剩余位0,则十进制:255.255.255.0

公有IP与私有IP

  1. 公有IP地址是由固定组织部门统一分配,互联网范围中必须唯一
  2. 私有IP地址是在LAN中自行分配使用,可以重复
  3. 公有IP地址是由ICANN(互联网名称与数字地址分配机构)组织下的IANA负责分配互联网的IP地址,按照洲划分,中国是由CNNIC机构管理,如:

image-20220812171751467

IPv6

  • 原因:IPv4是32位,提供的地址数量不足

  • IPv6地址是128bit二进制组成,以16位一组,每组使用冒号分割,若出现连续的0,可以省略并用两个冒号隔开(一个IP地址只允许出现一次2个连续的冒号),如: fe80::22da:22ff:fe7a:2a87

  • 特点

    1. IPV4与IPv6 不能兼容

    2. IPv6可以自动分配IP地址,不需要DHCP服务器支持,实现即插即用

    3. IPv6数据包的包头采用固定的40字节长度,去掉了包头校验等简化了包头结构,减轻了路由器的符合,提高传输速度

    4. IPv6地址:单播地址(一对一)、组播地址(一对多)、任播地址 ,没有广播地址,如:

      image-20220812172124299

IP的分片与重组

  • 原因:由于数据链路层到达的目的不同,且每种链路最大的传输单元不同,则导致IP数据报发送时需要分片接收时需要重组

  • MTU:数据链路层的最大传输单元,如图:

    image-20220812172222213

  • 重组:IP数据报在目的主机完成片段重组,可能出现乱序、丢失的现象,路由器不负责重组,如:

    image-20220812172232200

IP地址与路由控制

  • 路由转发原理:IP数据报到达路由器时,路由器根据数据报的目的地址来查询路由表,根据查询结果将数据报转发给下一投递路径,该过程称为IP路由

  • 分析:

    image-20220812173524457

    1. 主机A将IP数据报发送给直连路由器1
    2. 路由器1收到后,计算目的地址的网络地址拿到路由表中查询,得到转发结果为:10.1.0.2即路由器2
    3. 路由器2收到后,查询路由表找到匹配项,最终转发给目的主机10.1.2.1,结束通信
  • 路由表

    • 路由表记录IP数据报在下一跳应该转发的地址

    • 跳:Hop,它是网络的一个区间,IP数据报在网络中跳跃转发,在每一个区间决定IP数据报的下一条路径即为路由算法,图:

      image-20220812174402267

    • 路由表生成方式有两种,一种为手动设置即静态路由,另一种为路由器之间通过交换信息自行刷新的称为动态路由(OSPF)

ARP(Address Resolution Protocol)

  • 作用:将IP地址解析为MAC地址

  • 工作原理:

    1. ARP请求:主机通过广播发送ARP请求,如:

      image-20220812175018391

    2. ARP响应:当链路中所有设备收到ARP请求后,会拆开ARP请求包,若其中目的IP与自己IP相同则就将本机的MAC地址塞入ARP响应包中返回给发送方主机,图:

      image-20220812175118344

    3. 更新ARP缓存表:主机A收到ARP响应包后将主机C的IP地址与MAC地址记录到ARP缓存表中,下次在发送数据时,直接读取缓存信息

  • 查询命令:arp -a

  • RARP:将已知MAC地址转为IP地址

MAC地址

  • 作用:用来确认网络设备位置的位址

  • 组成:使用48bit二进制组成,十六进制表示,使用横杠作为间隔符,两两一组,如:20-da-22 - 7a-2a-87,其中,20-da-22为厂商识别码 7a-2a-87为内部识别码,IP地址的分配基于网络的拓扑结构,而MAC地址的分配基于制造商。

  • MAC地址直接写入(烧录)在网卡的rom芯片中,只读属性,原则上不可修改,用于LAN中表示目的设备位置

DNS域名解析

  • 作用:

    1. 域名管理
    2. 域名解析:将域名网址转换为IP地址
  • 域名管理

    1. 使用层级关系管理组织域名系统

    2. 地址名称解释: http:// www . baidu . com / index.html。其中,http:为协议名,www . baidu . com为域名,index.html为目录及文件名+

    3. 域名中越靠右侧的域名级别越高

    4. 最右侧为根域即顶层,使用树状组织关系:如:com 商业组织 gov 政府部门 edu 教育机构 cn 中国

      image-20220812195923996

  • 域名解析

  1. 作用:由于域名对于使用者来说使用方便但计算机设备不识别,IP地址计算机识别但不方便人使用和记忆,则就有一组即独立又协作服务器来完成域名地址与IP地址的转换
  2. 解析方式:递归解析、反复解析
  3. 工作流程
    1. 本地处理:浏览器查看缓存是否有域名与IP映射关系,若没有则向操作系统缓存要,若还没有则检查本机域名hosts文件,若无信息则向DNS服务器提出查询(hosts文件位置:C:\Windows\System32\drivers\etc)
    2. 外网查询:客户端向本地DNS服务器发出DNS请求->服务器收到请求查询本机缓存,若有则返回,若无此信息则向上级DNS服务器提出请求->……->本地DNS将IP地址返回给客户端,客户端与目的建立连接

DHCP协议

  • 作用:动态获取IP地址

  • DHCP客户端使用68号端口,DHCP服务器使用67端口监听

  • 工作原理:四步

    image-20220812200347395

    1. 客户端发起DHCP请求,由于客户端无IP地址也不知道DHCP服务器的IP地址,则通过UDP广播(255.255.255.255)发送请求
    2. DHCP服务器收到请求后,依然通过广播将相应信息(IP、网关、掩码等)发送给网络
    3. 客户端收到后,向服务器发送确认信息,并回显配置参数
    4. 最后服务端响应后应答后续参数
  • 注意

    • IP地址有租期概念,快到期时会重新发送请求报文,同意则延长租期
    • DHCP响应时间比自行设置要慢

NAT技术

  • 原因:IPV4的地址非常紧缺,使用NAT地址转换方法缓解地址耗尽问题

  • 作用:NAT可以将私有地址转换为公有地址,如:

    image-20220812200511805

  • 实际使用中使用IP地址+端口号一起进行转换,NAT变为NAPT(网络地址与端口转换协议),图:

    image-20220812200530221

    1. 图中两个客户端192.168.1.10 与192.168.1.11同时与服务器183.232.231.172进行通信,两个客户端端口号都是1025
    2. 此时,两个私有ip都需要转换为公有IP(120.229.175.121),通过公有地址的不同端口号来区分
    3. 路由器生成NAPT转换表,使用同一个公有IP和不同端口号与私有IP进行映射,实现通信

ICMP

  • 互联网控制报文协议

  • 作用:确认IP数据报是否成功到达目的地址、提供错误报告、改善网络设置

    image-20220812200624288

  • 例:

    1. 主机A向主机B发送数据报,由于某些原因路由器2未发现主机B的存在,此时路由器2会向主机A发送一个ICMP目标不可到达数据报,说明发送未成功
    2. 路由器2返回ICMP数据报时会通过路由器1转发,最后到达目的主机A
    3. 主机A收到后分解ICMP的首部信息及数据信息已得知发生的具体问题
  • ICMP报文的类型

    1. 诊断查询类型(查询报文类型)
    2. 通知出错原因类型(差错报文类型)

    image-20220812200710229

  • ping命令

    • 因特网包探索器命令,用于测试网络连接,ping命令发送一个ICMP请求,判断目的设备能否应答。
    • 格式: ping 目的IP地址 或 ping 目的域名
    • 参数:
      1. TTL:生存时间,由发送主机设置,不同操作系统数值不同,以防止数据报在网络中永不终止的循环发送,转发一次会减1
      2. time:一次请求时间,数值越小速度越快
      3. 丢包率:网络负载及健康程度

ISO/OSI网络参考模型

  • 网络协议分层模型意义:为了解决通信,由于一次性实现较难,则分步来解决,每一个步骤使用最恰当的技术来实现,所有步骤都完成则通信即可实现

OSI协议模型

image-20220812210330169

  • 一共分为七层

  • 是一种互联、开放、参考模型,是一种框架式的、指南性的协议,具体实现细节并未说明,是指定其它协议的参考

  • 物理层

    • 作用:连接不同的物理设备,传输比特流(二进制),为上层协议提供一个传输数据的可靠物理媒体
    • 设备:
      1. 中继器(repeater):放大器,对传输数据信号进行再次放大,延长传输距离,放大次数要受到限制
      2. 集线器:连接局域网中的不同设备(多端口的中继器)
  • 数据链路层:

    • 作用:在物理层基础上提供可靠的数据投递服务,完成差错控制、流量控制、物理地址寻址等功能

    • 传输数据的单位:,如:

      image-20220812212458802

      目的和源地址:MAC地址(6B)

      类型:标识上层协议(2B)

      数据:封装数据内容(1500B)

      CRC:循环冗余校验(4B)

  • 网络层

    • 实现两个端系统之间的数据传输,实现路由选择、连接建立、释放、终止

    • 重要设备:路由器(router),涉及到的协议:

      image-20220812212608163

  • 传输层

  • 提供端到端的连接,透明的传输报文,将数据可靠的传送到相应端口

  • 端口:使用2Bit对应用程序编号,范围:0-65535,图:HTTP 80 FTP 21 POP3 110

  • 协议:TCP UPD

  • 应用层:为操作系统或网络应用程序提供访问接口

  • 各层功能及协议总图

    image-20220812212641335

TCP/IP协议(四层)

  • OSI协议与TCP/IP协议的映射关系:

    image-20220812214211573

  • TCP/IP各层包含的子协议:

image-20220812213513243

  • 网络层IP数据报的结构

    image-20220812214246630

  • IP数据报功能分析

    • 版本:占用4b,表示IP的版本号,一般有IPV4 和 IPV6

    • 头部长度:占用4b,表示数据报报头的长度,没有可选项的数据报报头长度为20B

    • 总长度:占16b,表示整个数据报的长度,最大65535B

    • 标识:占16b,用于分片及重组,同一个分片的标识是相同

    • 标志:占3b,表示分片的信息,含义:

      image-20220812213606392

    • 分片偏移:占13b,表示分片在整个数据报的位置,以便于重组

    • 生存时间:占8b,表示数据报可以经过的中转路由器数量,每经过一个路由器TTL会减1,变为0时会丢弃数据报,避免数据报无限传播

    • 协议:占8b,表示上一层所使用的的协议(TCP/UDP)

    • 头部校验和:占16b,用来校验数据报的报头是否损坏

    • 源地址:占32b,表示发送端的IP地址

    • 目的地址:占32b,表示接收端的IP地址

    • 可选项:很少使用

    • 填充:若没有可选项,报头长度不是32b的整数倍,则需要向填充字段填充数据,保证为32b的整数倍

  • TCP报文、IP数据报、数据帧的关系:

image-20220812213659740

TCP协议的三次握手

  • 作用:建立连接

image-20220812215450345

  • 名词解释

    • seq:序列号,占4B,标记数据段顺序
    • SYN:请求同步序列号,当SYN=1 , ACK=0 时表示建立连接,握手完毕后会清零
    • ack:序列确认号,占4B,表示期望接收到的下一个字节的编号
    • ACK:标志确认号,占1b,仅当ACK=1时,ack字段才有效
  • 过程

    1. 第一次握手:建立连接时客户端向服务器端发送SYN=1包,等待服务器确认(客户端说:我请求建立连接)
    2. 第二次握手:服务器端收到了SYN包,此时再次发送确认信息表明客户端的SYN包已收到(服务器端说:我收到了你发送建立连接的请求,我可以建立连接)
    3. 第三次握手:客户端收到服务器的SYN确认包,再次向服务器发送ACK确认包,次包发送完毕,两端都进入连接成功状态,开始发送数据(客户端说:收到了你可以建立连接的消息,那就开始吧)

TCP协议的四次挥手

  • 作用:释放连接

  • 过程
    1. 第一次挥手:客户端发送释放连接报文,随后客户端进行半关闭状态,停止客户端向服务端方向的信息发送,但任然可以接收服务端传过来的信息(客户端说:我请求释放连接)
    2. 第二次挥手:服务器端确认客户端的请求已收到,服务器端进半关闭(服务器端说:收到,你需要释放连接请求我知道了)
    3. 第三次挥手:发送剩余数据,做好服务器端到客户机端方向上的连接释放准备(服务器端说:剩余数据已发送完毕,可以关闭连接了)
    4. 第四次挥手:客户机确认服务器已做好释放连接准备,客户端等待2MSL后结束(客户端说:收到,再见)

UDP协议

  • 用户数据报协议,是一种面向无连接、不可靠的数据投递服务,没有拥塞控制的一种报文传输协议

  • TCP与UDP应用区别:

    image-20220812215859320

  • TCP报文格式:

    image-20220812215911344

  • UDP报文格式:

image-20220812213839865

TCP UDP区别

TCP UDP
定义 传输控制协议 用户数据报协议
连接方式 需要建立连接,形成传输数据的通道 不需要建立连接,将数据源和目的封装到数据包中
数据传输的大小 数据大小不受限制 数据大小限制在 64K 之内
安全性 通过三次握手完成连接,可靠,安全送达 无需建立连接,故不可靠
效率性 必须建立连接,故效率低 速度快

Socket

  • Socket就是为网络服务提供的一种机制
  • 通信的两端都是Socket
  • 网络通信其实就是Socket间的通信
  • 数据在两个Socket间通过IO传输
  • Socket 抽象层是位于应用层和传输层之间的一层
  • 可以只传送数据本身而不用进行XML封装,大大降低数据传输的开销(JSON)
  • Socket允许使用长连接,允许应用程序运行在异步模式(提高效率),只有在需要的时候才接收数据
    • 常用的两种Socket类型
      • **流式Socket (SocK_STREAM)**:流式是一种面向连接的Socket,针对于面向连接的TCP服务应用
      • **数据报式Socket (SOcK_DGRAM)**:数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用

Socket 基本操作

image-20220906204611488


文章作者: Yang Shiyu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Yang Shiyu !
  目录