趣谈网络协议学习笔记[计算机网络]

在极客时间上学习刘超老师的趣谈网络协议这门课,听看的时候嗯。。。觉得自己已经很懂了,理解得也还行。但是当自己整理时会发现有好多小知识点并没有完全理解。。。这篇博客呢就是在听课后再加上谷歌搜索整理得来。权当学习笔记了,顺便巩固记忆,以后忘了还可以再翻翻。(ps: 未完结。。。持续更新ing)
目录

    • 一. 网络请求过程详述
    • 二. 网络分层
      • 为什么网络要分层?
      • TCP在三次握手的时候,IP层和MAC层在做什么?
      • 二层设备
      • 三层设备
    • 三. ifconfig
      • ifconfig 和 ip addr的区别
      • 五类IP的划分
      • 无类型域间选路(CIDR)
        • 广播地址、子网掩码与网络号
        • 公有IP地址和私有IP地址
      • 组播地址
      • MAC地址
      • 网络设备的状态标识
      • 本章小结
      • 本章拓展

一. 网络请求过程详述

当你在浏览器中输入一个网址并按回车之后到浏览器页面显示的过程中间发生了什么呢?

1.浏览器通过地址簿协议DNS或HTTPDNS(更加精准)查找该网址对应的ip地址。
2.浏览器使用HTTP或HTTPS协议打包请求并通过socket编程交给传输层。
趣谈网络协议学习笔记[计算机网络]_第1张图片
3.传输层的协议有无连接的UDP和面向连接的TCP。那么何为面向连接呢?就是如果请求的传输过程中出现问题不需要浏览器再进行请求打包,传输层会自己默默地重新请求,直到传输过程没问题为止。TCP头包含两个端口,客户端浏览器监听端口和目标服务器监听端口。
趣谈网络协议学习笔记[计算机网络]_第2张图片
4. 传输层将包封装后,浏览器将包交给操作系统的网络层,网络层的协议是ip协议。IP头包含客户端浏览器的IP地址和目标服务器的IP地址。
趣谈网络协议学习笔记[计算机网络]_第3张图片
5. 如果目标IP是非本地IP, 操作系统找网关,网关的默认地址为192.168.1.1。操作系统找网关的协议是ARP协议。广播给局域网内的所有主机。网关收到后返回给操作系统网关的MAC地址。于是操作系统就将IP包交给MAC层。
趣谈网络协议学习笔记[计算机网络]_第4张图片
6. MAC层封装IP包,使其包含客户端电脑MAC和网关的MAC。网卡再通过网关的MAC地址将包发给网关。网关收到包后,会根据自己的知识,判断下一步该怎么走,网关往往是一个路由器,到某个IP地址应该怎么走会有一个路由表来提供的。
7. 找对应IP所在的网关的沟通协议是路由协议,常用的有OSPF和BGP。当他到达最后一个网关,网关会给他目标IP对应MAC地址。通过这个MAC地址就能找到目标服务器。
8. 目标服务器接收到这个MAC包后发现是自己的MAC地址,就取下MAC头发送给操作系统的网络层。发现IP也是自己的,就取下IP头发送给传输层即TCP协议的那层。
9. 在TCP层,对于每个收到的包,都会有一个回复的包说明收到了。这个回复会沿着刚才来的方向走回去。如果发送端的TCP层没有收到这个回复,就会重新发送请求包。
10. 当网络包平安到达TCP层后,TCP头中有目标端口号,知道了这个端口号,操作系统往往通过远程调用的方式来发给目标网站的对应进程,然后对应进程就收到的请求的内容,并根据自己的程序进行处理。当处理完毕,就会回复一个对应的HTTP或HTTPS包,像来的时候一样回复给发送端。

协议三要素:语法,语义,顺序

用到的协议
应用层 DHCP, HTTP, HTTPS, RTMP,P2P, DNS,GTP,RPC
传输层 UDP, TCP
网络层 ICMP, IP, OSPF, BGP, IPSec, GRE
链路层 ARP, VLAN, STP
物理层 网络跳线

二. 网络分层

为什么网络要分层?

因为网络包的格式很复杂, 这个程序也很复杂。复杂的程序都要分层,这是程序设计的要求。

TCP在三次握手的时候,IP层和MAC层在做什么?

对于TCP协议来说,三次握手也好,重试也好,只要想发出去包,就要有IP层和MAC层,不然是发不出去的。只要是在网络上跑的包,都是完整的。可以有下层没上层,但绝对不能有上层没下层。

二层设备

一个HTTP协议的包经过一个二层设备,二层设备收进去的是整个网络包。这里面HTTP, TCP, IP, MAC都有。二层设备就是只是把MAC头摘下来,看看到底是丢弃、转发,还是自己留着。

三层设备

就是把MAC头摘下来之后,再把IP头摘下来,看看到底是丢弃、转发还是自己留着。

三. ifconfig

ifconfig 是Linux和MAC上查看IP的命令,windows上是ipconfig。 Linux上还有一个命令ip addr也可以查看IP地址。

ifconfig 和 ip addr的区别

(来自: ifconfig和ip addr的区别)
ifconfig和ip addr分别代表了ip alias 和 secondary IP两种机制。每个IP地址都有一个网卡alias,还有一个标志位表示是primary还是secondary IP.
IP的网卡alias就是/etc/networking/interfaces里那些eth0:0,eth0:1……这些虚拟的网卡名称仅仅是为了给一块网卡添加多个IP地址。secondary IP是独立的另一套机制。同一块网卡上的多个IP, 只要网络号(网段)不一样,就都是primary IP.
输入ip addr 得到的内容如下:

1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1450 qdisc pfifo_fast state UP group default qlen 1000
    link/ether fa:16:3e:f3:f8:13 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.3/20 brd 192.168.15.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fef3:f813/64 scope link 
       valid_lft forever preferred_lft forever

如上输出, 192.168.0.3就是IP地址(私有),IP地址被点分为四个部分,每个部分8个bit,所以IP地址总共是32位。在IP地址后面有个scope, 对于eth0这张网卡来讲,是global,说明这张网卡是可以对外的,可以接收来自各个地方的包。对于lo来讲,是host, 说明这张网卡仅仅可以供本机相互通信。lo全称是loopback, 又称环回接口,往往会被分配到127.0.0.1这个地址。这个地址用于本机通信,经过内核处理后直接返回,不会在任何网络中出现。
IP起初被分为五类,但这样IP肯定是不够用的,然后就有了IPv6,如上图的inet6 fe80::f816:3eff:fef3:f813/64,有128位,这个暂时是够用了。

五类IP的划分

趣谈网络协议学习笔记[计算机网络]_第5张图片

ABC三类地址所能包含的主机数量
1 A类

  • 8位用于net-id
  • 第一位必须是0
  • 全为0的地址不可分配
  • 除去第一位全为1的被设置为保留地址,不能分配

    所以A类IP地址的网络个数最大为2^7-2=126
    网络号范围为:0000 0001 ~ 0111 1110 即1 ~ 126
    IP地址范围就是0.0.0.1 ~ 126.255.255.255
    主机号占24位,但全0和全1的主机号不可分配。所以最大主机数为:2^24 - 2 = 16777214

2 B类

  • 网络号总共为16位
  • 前两位固定为10
  • 除前两位外,后面全为0的网络号不可用

    最大网络数为: 2^14-1
    网络号范围为:1000 0000 0000 0001 ~ 1011 1111 1111 即128.1 ~ 191.255
    IP地址范围就是:128.0.0.1 ~ 191.255.255.255
    主机号占16位, 同样全为0和全为1的不可分配,因些最大主机数为: 2^16 - 2 = 65534

3 C类

  • 网络号为24位
  • 前三位固定为110
  • 除前两位外,全为0的网络号不可用

    最大网络数为:2^21 - 1 = 2097151
    网络号范围为:1100 0000 0000 0000 0000 0001 ~ 1101 1111 1111 1111 1111 即192.0.1 ~ 233.255.255
    IP地址范围就是:192.0.0.1 ~ 233.255.255.255
    主机号占8位,同样全为0和全为1的不可分配,因此最大主机数为: 2^8 - 2 = 254

汇总(私有IP地址范围还不太理解是怎么来的):

类别 IP地址范围 最大主机数 私有IP地址范围
A 0.0.0.1~126.255.255.255 16777214 10.0.0.0~10.255.255.255
B 128.0.0.1~191.255.255.255 65534 172.16.0.0~172.31.255.255
C 192.0.0.1~223.255.255.255 254 192.168.0.0~192.168.255.255

无类型域间选路(CIDR)

五类IP的分类还有一个尴尬的事情, 就是C类地址能包含的最大主机 数量实在是太少了,只有254个。现在估计一个网吧都不够用了。而B类地址能包含的最大主机数量又太多了。6万台机器放在一个网络下,一般的企业基本达不到这个规模,闲着的地址就是浪费,于是就有了一个折中的方式叫做无类型域间选路。这种方式打破了原来设计的几类地址的做法,将32位的IP地址一分为二,前面是网络号,后面是主机号
举个粟子:192.168.0.3/20, 这个IP地址中有一个斜杠,斜杠后面有个数字20。这种地址表示形式就是CIDR。后面24的意思是,32位中前20位是网络号, 后12位是主机号。

广播地址、子网掩码与网络号

伴随着CIDR存在的,还有一个是广播地址、子网掩码以及网络号
1. 广播地址是网络号固定,主机号全为1构成的。如192.168.0.3/20的1广播地址就是192.168.<0000><1111>.<11111111>,即192.168.15.255。如果发送这个地址,所有在192.168.0网络里面的机器都可以收到。
2. 子网掩码是由网络号全为1,主机号全为0构成的。如192.168.0.3/20所在的网络的子网掩码就是11111111.11111111.11110000.00000000,即255.255.240.0。
3. 将子网掩码和IP地址按位计算AND, 就可得到网络号。将192.168.0.3与255.255.240.0按位与即得192.168.0.0,这就是192.168.0.3/20的网络号。

公有IP地址和私有IP地址

平时我们看到的数据中心里,办公室、家里或学校的IP地址,一般都是私有IP地址段。因为这些地址允许组织内部的IT人员自己管理、自己分配,而且可以重复。因些不同的局域网内可能有相同的私有IP。公有IP地址有个组织统一分配。如果你想要全世界的人都能访问你的网站, 那么你就需要去买一个公有IP。

组播地址

五类地址中的一类,使用这一类地址,属于某个组的机器都能收到。这有点类似在公司里面大家都加入了一个邮件组。发送邮件,加入这个组的都能收到。

MAC地址

在IP地址的上一行link/ether fa:16:3e:f3:f8:13 brd ff:ff:ff:ff:ff:ff, 这个被称为MAC地址, 是一个网卡的物理地址,用十六进制, 6个byte表示。MAC地址号称全局唯一,不会有两个网卡带着同样的MAC地址,而且网卡自生产出来,就带着这个地址。
一个网络包要从一个地方传到另一个地方,除了要有确定的地址,还需要有定位功能。而有门牌号属性的IP地址,才是有定位功能的。
MAC地址更像是身份证,是一个唯一的标识。它的唯一性设计是为了组网的时候,不同的网卡放在一个网络里面的时候,可以不用担心冲突。从硬件角度,保证不同的网卡有不同的标识。MAC地址也是有一定定位功能的,只不过范围非常有限。局限在一个子网里面。一旦跨越子网,MAC地址就不行了,需要IP地址起作用了。

网络设备的状态标识

MAC地址的上一行 mtu 65536 qdisc noqueue,叫作net_device flags, 网络设备的状态标识。

  • UP表示网卡处于启动的状态
  • BRODCAST表示这个网卡有广播地址,可以发送广播包
  • MULTICAST表示网卡可以发送多播包
  • LOWER_UP表示L1是启动的,即网线插着呢
  • mtu 65536表示最大传输单元为65536
    mtu是二层MAC层的概念。MAC层有MAC的头,mtu就表示MAC头带正文合起来,不允许超过65536个字节。正文里面有IP的头、TCP的头、HTTP的头。如果放不下,就需要分片来传输。
  • qdisc全称是queueing discipline, 中文叫排队规则。内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配置的qdisc把数据包加入队列。
    1. 最简单的qdisc是pfifo, 它不对进入的数据包做任何的处理,数据包采用先入先出的方式通过队列。pfifo_fast稍微复杂一些, 它的队列包括三个波段(band)。在每个波段里面,使用先进先出规则。
    2. 三个波段的优先级也不相同。band0的优先级最高,band2的优先级最低。如果band0里面有数据包,系统就不会处理band1里面的数据包,band1和band2之间也是一样。
    3. 数据包是按照服务类型(Type of Service, TOS)被分配到三个波段里面的,TOS是IP头里面的一个字段,代表了当前的包是高优先级,还是低优先级的。

本章小结

  • IP是地址, 有定位功能;MAC是身份证,无定位功能。
  • CIDR可以用来判断是不是本地人
  • IP分公有的IP和私有的IP

本章拓展

ifconfig 和ip addr的区别:
ifconfig来自net-tools, ip addr来自于iproute2.
net-tools起源于BSD, 自2001年起Linux社区对其停止维护,而iproute2旨在取代net-tools, 并提供了一些新功能。一些Linux发行版已经停止了对net-tools的支持,只支持iproute2.
net-tools通过procfs(/proc)和ioctl系统调用去访问和改变内核网络配置,而iproute2则通过netlink套接字接口与内核通讯。
net-tools中的工具的名字比较杂乱,而iproute2则相对整齐和直观,基本是ip命令加后面的子命令。

你可能感兴趣的:(趣谈网络协议学习笔记[计算机网络])