计算机网络

1. 协议

协议包含三要素:

  1. 语法。这一段内容要符合一定的规则和格式。
  2. 语义。这一段内容要代表某种意义。
  3. 顺序。先干啥,后干啥。

例如:
HTTP 协议:

HTTP/1.1 200 OK
Date: Tue, 28 Mar 2018 13:30:24 GMT
...

<!DOCTYPE html>
<html>
<head>
...
</head>
<body>
...
</body>
</html>

上述 HTTP 协议满足协议的三要素:

  1. 符合语法。HTTP 协议的格式是状态、首部、内容,只有按照上面的格式来,浏览器才认可。
  2. 符合语义。比如约定状态 200 是网页成功返回。404 就代表网页不成功。
  3. 符合顺序。一点击浏览器,就发出一个 HTTP 请求,然后才有上面一串 HTTP 返回的东西。???

2. Windows 查看网络设置

Win 10 打开网络设置:
Win 10 网络设置

3. 分层

网络为什么要分层?因为所有复杂的程序都要分层,每一层专注做本层的事情。
而且,只要是在网络上跑的包,都是完整的,可以有下层没上层,绝对不能有上层没下层,有哪一层,就表示需要哪一层的程序来处理这一层。

二层设备:就是把网络包中的 MAC 头摘下来,看看到底是丢弃、转发、还是自己留着处理后发送给自己的上层程序。
三层设备:就是把网络包中的 MAC头、IP 头摘下来,看看到底是丢弃、转发、还是自己留着处理后发送给自己的上层程序。

4. 物理层

两台电脑直接通过网线连在一起:

  1. 这时的网线要改为 1-3、2-6 交叉接法。在物理层实现一端发送信号,另一端收到信号。
  2. 两台电脑配置 IP、子网掩码、默认网关,配置在同一个子网内,两台电脑就可以通过应用层程序来通信了。

集线器(Hub)是在物理层工作的设备,会将收到的每一个字节,都复制到其他端口上去。

5. 数据链路层

数据链路层要解决的问题:

  1. 发给谁,谁接收:用到链路层地址,也叫做 MAC地址
  2. 谁先发,谁后发,防止产生混乱,即解决多路访问的问题,方式有:
    1. 信道划分:分多个车道
    2. 轮流协议:今天单号出行,明天双号出行,轮着来
    3. 随机接入协议:有事儿先出门,发现特堵就回去。以太网用的就是这种方式
  3. 发送时出现错误:数据包中的 CRC(循环冗余检测)来解决

数据链路层数据包格式:
数据链路层数据包
交换机是二层设备,工作在数据链路层,因为交换机会取下 MAC 头,决定转发到哪个端口,会使用转发表记下每个端口连接的设备的 MAC 地址。

多个交换机相连可能会出现环路问题,使用 STP 协议解决。环在数据结构中是图,然后破环形成树,就是 STP 算法。

5.1 MAC 地址

fa:16:3e:c7:79:75
MAC地址用 6 个 byte,十六进制表示。
MAC 地址全局唯一,更像是一个身份证。
为什么不能只用 MAC 地址来进行通信呢?
网络包从一个地方到另一个地方,除了要有明确的地址,还需要有定位功能。IP 地址才具有远程定位功能,MAC 地址也具有一定的定位功能,但是范围有限,如在子网内通信可以用 MAC 地址定位,但是跨子网需要 IP 定位。

参见:https://time.geekbang.org/column/article/7772 中 MAC 地址的讲解。

6. IP 层

IP 数据报
路由器是工作在三层的设备。
网络包经过路由器后,srcMAC、dstMAC要变化,而且在公网 IP 和私网 IP 切换时,srcIP 或者 dstIP 要变,而且是内网 ip:port --> 外网 ip:空闲port

配置路由策略,即路由表,在路由器上,配置一条一条规则,表示要访问一个地址从哪个口出去:

  1. 静态路由
  2. 动态路由
    每个路由是知道全局路由信息的。

6.1 IP 地址

IP地址::= {<网络号>,<主机号>}
1. 主机号:大家都是 1 单元 301。
2. 网络号:你是南大小区,我是东大小区。

  1. 查看 IP
ipconfig  -- Windows
ifconfig   -- Linux
ip addr    -- linux

ip addr

  1. IP 地址分类
    ABCDE IP 地址
    A 类地址默认子网掩码是:255.0.0.0
    B 类地址默认子网掩码是:255.255.0.0
    C 类地址默认子网掩码是:255.255.255.0
    D 类地址是组播地址,就是加入这个组的机器都能收到
    公有 IP、私有 IP日常生活中几乎不用划分 A、B、C 类地址,只要记住上面的公有 IP、私有 IP,内网组网时从私有 IP 中选取即可。

  2. CIDR
    无类型域间选路:将 32 位的 IP 地址一分为二,前面是网络号,后面是主机号,如:10.100.122.2/24,其中:

    1. 子网掩码是前 24 位全为 1,后 8 位为0,即 255.255.255.0;
    2. 前 24 位是网络号,即 10.100.122.0,也叫做网络地址,也就是 IP 与子网掩码做 AND 运算得到的;
    3. 后 8 位是主机号;
    4. 10.100.122.255/24 叫广播地址,如果发送到这个地址,所有10.100.122.0 网络中的机器都可以收到。
    5. 10.100.122.1/24,一般是网关地址。
      组内网时,一般 /24、/16 就够用了,如一般家里的 Wifi 地址是 192.168.0.x,就是 /24。

7. 传输层

  1. TCP 是面向连接的,UDP 不是面向连接的。
    建立连接是为了在客户端和服务端维护连接而建立一定的数据结构来维护双方交互的状态。
  2. TCP 是面向字节流的,UDP是面向数据报的。
    TCP 发送的是一个流,没头没尾;UDP 是基于数据报的,一个个发,一个个收。
  3. TCP 有拥塞控制,UDP 没有
    TCP 会根据网络情况调整自己的行为;UDP 是应用让发就发,不管网络上是否洪水滔天。
  4. TCP 是有状态的,UDP 是无状态的
    TCP 会记录发送了没有、接收到没有、发送到哪个了,应该就收哪个了;UDP 不会记录什么,发出去就发出去了。

7.1 UDP

UDP数据包

7.2 TCP

TCP 数据包

  1. 三次握手
    三次握手
    A:你好,我是 A
    B:你好 A,我是 B
    A:你好 B
    不是两次握手的原因:
    1. B 回复的包,A 可能收不到,此时如果是两次握手,B 以为建立连接了,但 A 不知道
    2. B 回复的包,A 收到了,AB 建立连接、通信结束、关闭连接。此时如果是两次握手,那么 A 在建立通信过程中,因为 B 没及时回复,就重复了包,此时在 AB 关闭连接后,之前的包又到达了 B,B 建立了连接,但 A 没有通信的要求。
      不需要四次握手的原因:四次握手也是可以的,四十次都行,关键多少次都不能保证真的可靠了;只要双方的消息有去有回就基本可以了。
      三次握手时还需要传递序号:A 端的包,每次建立连接后发包序号不能都是从 1 开始,因为如果 A 要发 1、2、3 数据包,发完 1、2 挂了,再次建立连接,再发送 1、2 后,之前发送的 3 的包到达了 B,其实这个 3 包是错的,但 B 以为是正确的;对 B 而言同样如此。
  2. 四次挥手
    四次挥手
    A:B,我不想玩了
    B:你不想玩了,我知道了
    B:A,我也不想玩了,拜拜
    A:好的,拜拜

9. 一些其他协议

9.1 ICMP

互联网控制报文协议,有 2 种报文:

  1. 主动探查的查询报文:ping、telnet
  2. 异常报告的差错报文:traceroute
    ping
    telnet
    tracert

9.2 DNS

DNS 服务器分类
解析 DNS

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值