第一讲 为什么要学网络协议

协议三要素

  • 语法,就是这一段内容要符合一定的规则和格式。例如,括号要成对,结束要使用分号等。
  • 语义,就是这一段内容要代表某种意义。例如数字减去数字是有意义的,数字减去文本一般来说就没有意义。
  • 顺序,就是先干啥,后干啥。

常用的协议

  • 应用层(数据封装格式)

    • DHCP
    • HTTP
    • HTTPS
    • RTMP
    • P2P
    • DNS
    • GTP
    • RPC
  • 传输层 (会话连接机制、端口号)
    • UDP
    • TCP
  • 网络层
    • ICMP
    • IP
    • OSPF
    • BGP
    • IPSec
    • GRE
  • 链路层
    • ARP
    • VLAN
    • STP
  • 物理层
    • 网络跳线

浏览器输入网址后发生了什么事情

  • 浏览器输入 www.kaola.com
  • 查找目标IPd地址
    • 一般通过DNS协议查找,或者HTTPDNS查
    • 结果得到目标ip地址:106.114.138.24
  • 打包请求
    • 此处用了https协议, 无论使用什么协议都会有正文部分
    • 应用层:在http头:请求方式,url地址,协议版本号,正文格式,正文长度
    • 传输层:tcp头:浏览器端口号,电商服务器端口号
    • 网络层:ip头:客户端IP,电商服务器ip
    • 链路层:MAC头:客户端的mac地址,电商服务器的mac

第二讲 网络分层的真实含义是什么

问题:二层设备、三层设备、四层LB、七层LB是什么?

二层设备的处理是mac层的东西,就是只把MAC头摘下来,看看到底是丢弃、转发、还是自己留着 三层设备就是把MAC头摘下来之后,再把IP头摘下来,看看到底是丢弃、转发、还是自己留着

只要是在网络上跑的包,都是完整的。可以有下层没上层,绝对不可能有上层没下层。

第三讲 ifconfig:最熟悉又陌生的命令行

windows:ipconfig
linux:ifconfig、 ip addr

root@test:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether fa:16:3e:c7:79:75 brd ff:ff:ff:ff:ff:ffinet 10.100.122.2/24 brd 10.100.122.255 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::f816:3eff:fec7:7975/64 scope link valid_lft forever preferred_lft forever
复制代码

IP地址是一个网卡在网络世界的通讯地址,相当于我们现实世界的门牌号码。

以上内容,IP地址为:10.100.122.2。

32的IP地址被分成了5类,A、B、C类主要分两部分,前面一部分是网络号,后面一部分是主机号。

无类型域间选路(CIDR)

把IP地址一分为二,前面的是网络号,后面的是主机号。

10.100.122.2/24,前面24位是网络号,后面8位是主机号

广播地址 10.100.122.255

子网掩码 255.255.255.0

网络号 将子网掩码和IP地址按位计算AND,就可以得到网络号:10.100.122.0

公有IP地址和私有IP地址

装换公式

ip=>机器号、网络号 先看CIDR,如果是8的整数倍,则不需要转换成2进制,前部分为机器号,后部分为网络号;如果不是8的整数倍,则需要把分界十进制转换成2进制,同样,前部分为机器号,后部分为网络号 ip=>第一个地址 前部分+ 1(二进制) ip=>子网掩码 前部分(1)+ 后部分(0)如:255.255.<111111><00>.00 => 255.255.252.0 ip=>广播地址

算一个IP地址的求一下这个网络的第一个地址、子网掩码和广播地址

16.158.165.91/22

  • /22 不是8的倍数,要转换成2进制
  • 16.158.165.91 =》 16.158.<101001><00>.91,则网络号为16.158.<101001>,机器号是<00>.91
  • 第一个地址16.158.<101001><00>.1,即16.158.164.1
  • 子网掩码是255.255.<111111><00>.0,即255.255.252.0,
  • 广播地址16.158.<101001><11>.255,即16.158.167.255

MAC 地址

link/ether fa:16:3e:c7:79:75 brd ff:ff:ff:ff:ff:ff

是一个网卡的物理地址,用十六进制,6个byte表示 MAC地址更像是身份证,是一个唯一的标识

网络设备的状态标识

eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

叫做net_device flags,网络设备的状态标识

  • UP标识网卡处于启动状态
  • BROADCAST标识这个网卡有广播地址,可以发送广播包
  • MULTICAST 标识可以发送多播包
  • LOWER_UP 标识 启动,即网线是插着的
  • mtu 1500 最大传输单元MTU(MAC层)为1500,这是以太网的默认值
  • qdisc pfifo_fast qdisc全称queueing discipline中文叫排队规则。

总结

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

《趣谈网络协议》学习笔记相关推荐

  1. 第二行代码学习笔记——第六章:数据储存全方案——详解持久化技术

    本章要点 任何一个应用程序,总是不停的和数据打交道. 瞬时数据:指储存在内存当中,有可能因为程序关闭或其他原因导致内存被回收而丢失的数据. 数据持久化技术,为了解决关键性数据的丢失. 6.1 持久化技 ...

  2. 第一行代码学习笔记第二章——探究活动

    知识点目录 2.1 活动是什么 2.2 活动的基本用法 2.2.1 手动创建活动 2.2.2 创建和加载布局 2.2.3 在AndroidManifest文件中注册 2.2.4 在活动中使用Toast ...

  3. 第一行代码学习笔记第八章——运用手机多媒体

    知识点目录 8.1 将程序运行到手机上 8.2 使用通知 * 8.2.1 通知的基本使用 * 8.2.2 通知的进阶技巧 * 8.2.3 通知的高级功能 8.3 调用摄像头和相册 * 8.3.1 调用 ...

  4. 第一行代码学习笔记第六章——详解持久化技术

    知识点目录 6.1 持久化技术简介 6.2 文件存储 * 6.2.1 将数据存储到文件中 * 6.2.2 从文件中读取数据 6.3 SharedPreferences存储 * 6.3.1 将数据存储到 ...

  5. 第一行代码学习笔记第三章——UI开发的点点滴滴

    知识点目录 3.1 如何编写程序界面 3.2 常用控件的使用方法 * 3.2.1 TextView * 3.2.2 Button * 3.2.3 EditText * 3.2.4 ImageView ...

  6. 第一行代码学习笔记第十章——探究服务

    知识点目录 10.1 服务是什么 10.2 Android多线程编程 * 10.2.1 线程的基本用法 * 10.2.2 在子线程中更新UI * 10.2.3 解析异步消息处理机制 * 10.2.4 ...

  7. 第一行代码学习笔记第七章——探究内容提供器

    知识点目录 7.1 内容提供器简介 7.2 运行权限 * 7.2.1 Android权限机制详解 * 7.2.2 在程序运行时申请权限 7.3 访问其他程序中的数据 * 7.3.1 ContentRe ...

  8. 第一行代码学习笔记第五章——详解广播机制

    知识点目录 5.1 广播机制 5.2 接收系统广播 * 5.2.1 动态注册监听网络变化 * 5.2.2 静态注册实现开机广播 5.3 发送自定义广播 * 5.3.1 发送标准广播 * 5.3.2 发 ...

  9. 第一行代码学习笔记第九章——使用网络技术

    知识点目录 9.1 WebView的用法 9.2 使用HTTP协议访问网络 * 9.2.1 使用HttpURLConnection * 9.2.2 使用OkHttp 9.3 解析XML格式数据 * 9 ...

  10. 安卓教程----第一行代码学习笔记

    安卓概述 系统架构 Linux内核层,还包括各种底层驱动,如相机驱动.电源驱动等 系统运行库层,包含一些c/c++的库,如浏览器内核webkit.SQLlite.3D绘图openGL.用于java运行 ...

最新文章

  1. MYSQL5-7版本sql_mode=only_full_group_by问题
  2. XOOM MZ606 刷机
  3. 返回语句C语言return关键字
  4. [深度学习基础] 5. 实现细节
  5. Android 推送通知指南(转载)
  6. 【QT】QT从零入门教程(十六):QSS样式表
  7. 关于一直卡死的两段代码,望对LDD3有兴趣者戳开这个blog : )
  8. Linux的文件的权限管理
  9. Ubuntu安装google中文输入法
  10. python0309
  11. JAVASE基础模块十五(StringBuffer类)
  12. Transformer面试 GavinNLP Transformer101之41-50
  13. 避雷秘籍:iOS过审的基础条件
  14. mysql删除表的命令
  15. FX5UPLC的各种以太网通讯,SOCKET 2台PLC简单通讯 走网线
  16. 【English】《控方证人》
  17. 全局异常处理-dao-service-controller-gateway网关工程-集中处理token-登陆模块-获取用户信息-ThreadLocal-组件-项目环境推荐-swagger-knif转发
  18. oracle 中的rollback,oracle中rollback的使用
  19. SSMS(Microsoft SQL Server Management Studio 18)
  20. 操作系统实验之处理机调度

热门文章

  1. 单片机c语言视频教程bd,单片机C语言教程五
  2. mysql怎么生成sql文件_sql如何生成sql文件
  3. C语言课程设计:学生管理系统
  4. 安装matlab7.0步骤,Matlab 7.0 安装指导
  5. win10搭建无盘服务器配置,关于今天搞定网吧无盘Win10x64一包多配置到底的详细讲解 By 原来我不帅...
  6. Linux chmod 命令 设置权限
  7. python open函数关于w+ r+ 读写操作的理解
  8. 数据库操作系统——Visual FoxPro 6.0安装步骤
  9. Node.js安装教程
  10. node.js安装详细教程