关于IP地址

你知道怎么查看 IP 地址吗?
Windows 上是 ipconfig,在 Linux 上ipconfigipipconfig是 ifconfig。大部分的网卡都会有一个 IP 地址,当然,这不是必须的。在后面的分享中,我们会遇到没有 IP 地址的情况。IP 地址是一个网卡在网络世界的通讯地址,相当于我们现实世界的门牌号码。

10.100.122.2 就是一个 IP 地址。这个地址被点分隔为四个部分,每个部分 8 个 bit,所以 IP 地址总共是 32 位。这样产生的 IP 地址的数量很快就不够用了。

因为当时设计 IP 地址的时候,哪知道今天会有这么多的计算机啊!因为不够用,于是就有了 IPv6,这个有 128 位,现在看来是够了,但是未来的事情谁知道呢?

无类型域间选路(CIDR)
于是有了一个折中的方式叫作无类型域间选路,简称CIDR。这种方式打破了原来设计的几类地址的做
法,将 32 位的 IP 地址一分为二,前面是网络号,后面是主机号。从哪里分呢?你如果注意观察的话

可以看到,10.100.122.2/24,这个 IP 地址中有一个斜杠,斜杠后面有个数字 24。这种地址表示形式,就是 CIDR。后面 24 的意思是,32 位中,前 24 位是网络号,后 8 位是主机号。

伴随着 CIDR 存在的,一个是广播地址,10.100.122.255。如果发送这个地址,所有 10.100.122 网络里面的机器都可以收到。另一个是子网掩码,255.255.255.0。

将子网掩码和 IP 地址进行 AND 计算。前面三个 255,转成二进制都是 1。1 和任何数值取 AND,都是原来数值,因而前三个数不变,为 10.100.122。后面一个 0,转换成二进制是 0,0 和任何数值取
AND,都是 0,因而最后一个数变为 0,合起来就是 10.100.122.0。这就是网络号。将子网掩码和 IP地址按位计算 AND,就可得到网络号。

表格中的 192.168.0.x 是最常用的私有 IP 地址。你家里有 Wi-Fi,对应就会有一个 IP 地址。一般你家里地上网设备不会超过 256 个,所以 /24 基本就够了。有时候我们也能见到 /16 的 CIDR,这两种是最常见的,也是最容易理解的。

不需要将十进制转换为二进制 32 位,就能明显看出 192.168.0 是网络号,后面是主机号。而整个网络里面的第一个地址 192.168.0.1,往往就是你这个私有网络的出口地址。例如,你家里的电脑连接 WiFi,Wi-Fi 路由器的地址就是 192.168.0.1,而 192.168.0.255 就是广播地址。一旦发送这个地址,整个192.168.0 网络里面的所有机器都能收到。

MAC 地址

网卡的物理地址,用十六进制,6 个 byte 表示。

一个网络包要从一个地方传到另一个地方,除了要有确定的地址,还需要有定位功能。而有门牌号码属性的 IP 地址,才是有远程定位功能的。

MAC 地址更像是身份证,是一个唯一的标识。它的唯一性设计是为了组网的时候,不同的网卡放在一个
网络里面的时候,可以不用担心冲突。从硬件角度,保证不同的网卡有不同的标识。

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

三个波段(band)的优先级也不相同。band 0 的优先级最高,band 2 的最低。如果 band 0 里面有数据包,系统就不会处理 band 1 里面的数据包,band 1 和 band 2 之间也是一样。

数据包是按照服务类型(Type of Service,TOS)被分配多三个波段(band)里面的。TOS 是 IP 头里面的一个字段,代表了当前的包是高优先级的,还是低优先级的。

关于网络分成

网络为什么要分层?因为,是个复杂的程序都要分层,这是程序设计的要求,比如,复杂的电商还会分数据库层、缓存层、Compose 层、Controller 层和接入层,每一层专注做本层的事情。

揭秘层与层之间的关系

知道了这个过程之后,我们再来看一下原来困惑的问题。
首先是分层的比喻。所有不能表示出层层封装含义的比喻,都是不恰当的。总经理握手,不需要员工在吧,总经理之间谈什么,不需要员工参与吧,但是网络世界不是这样的。正确的应该是,总经理之间沟通的时候,经理将总经理放在自己兜里,然后组长把经理放自己兜里,员工把组长放自己兜里,像套娃娃一样。那员工直接沟通,不带上总经理,就不恰当了。

现实生活中,往往是员工说一句,组长补充两句,然后经理补充两句,最后总经理再补充两句。但是在网络世界,应该是总经理说话,经理补充两句,组长补充两句,员工再补充两句。

那 TCP 在三次握手的时候,IP 层和 MAC 层在做什么呢?当然是 TCP 发送每一个消息,都会带着 IP 层和 MAC 层了。因为,TCP 每发送一个消息,IP 层和 MAC 层的所有机制都要运行一遍。

TCP 三次握手了,其实,IP 层和 MAC 层为此也忙活好久了。
这里要记住一点:只要是在网络上跑的包,都是完整的。可以有下层没上层,绝对不可能有上层没下层。所以,对 TCP 协议来说,三次握手也好,重试也好,只要想发出去包,就要有 IP 层和 MAC 层,不然是发不出去的。

程序是如何工作的?

如果你是一个网络包处理程序,你不需要process_http(buffer),而是应该交给应用去处理。交给哪个应用呢?**在四层的头里面有端口号,不同的应用监听不同的端口号。**如果发现浏览器应用在监听这个端口,那你发给浏览器就行了。至于浏览器怎么处理,和你没有关系。

浏览器自然是解析 HTML,显示出页面来。电脑的主人看到页面很开心,就点了鼠标。点击鼠标的动作被浏览器捕获。浏览器知道,又要发起另一个 HTTP 请求了,于是使用端口号,将请求发给了你。

你应该调用send_tcp(buffer)。不用说,Buffer 里面就是 HTTP 请求的内容。这个函数里面加一个 TCP的头,记录下源端口号。浏览器会给你目的端口号,一般为 80 端口。

然后调用send_layer3(buffer)。Buffer 里面已经有了 HTTP 的头和内容,以及 TCP 的头,在这个函数里面加一个 IP 的头,记录下源 IP 的地址和目标 IP 的地址。然后调用send_layer2(buffer)。Buffer 里面已经有了 HTTP 的头和内容、TCP 的头,以及 IP 的头。**这个函数里面要加一下 MAC 的头,记录下源 MAC 地址,得到的就是本机器的 MAC 地址和目标的 MAC地址。**不过,这个还要看当前知道不知道,知道就直接加上;不知道的话,就要通过一定的协议处理过程,找到 MAC 地址。反正要填一个,不能空着。

万事俱备,只要 Buffer 里面的内容完整,就可以从网口发出去了,你作为一个程序的任务就算告一段落了。

第一,MAC 层是用来解决多路访问的堵车问题的;
第二,ARP 是通过吼的方式来寻找目标 MAC 地址的,吼完之后记住一段时间,这个叫作缓存;
第三,交换机是有 MAC 地址学习能力的,学完了它就知道谁在哪儿了,不用广播了。

从物理层到MAC:

第一层(物理层)
第二层(数据连接层)
接下来要解决第一个问题:发给谁,谁接收?这里用到一个物理地址,叫作链路层地址。但是因为第二
层主要解决媒体接入控制的问题,所以它常被称为MAC 地址。
解决第一个问题就牵扯到第二层的网络包格式。对于以太网,第二层的最开始,就是目标的 MAC 地址和源的 MAC 地址。一个广播的网络里面接入了 N 台机器,我怎么知道每个 MAC 地址是谁呢?这就是ARP 协议,也就是已知 IP 地址,求 MAC 地址的协议。

协议:

语法,语义,顺序

语法,就是这一段内容要符合一定的规则和格式。例如,括号要成对,结束要使用分号等。

语义,就是这一段内容要代表某种意义。例如数字减去数字是有意义的,数字减去文本一般来说就没有意义。

顺序,就是先干啥,后干啥。例如,可以先加上某个数值,然后再减去某个数值。

要想打造互联网世界的通天塔,只教给一台机器做什么是不够的,你需要学会教给一大片机器做什么。这就需要网络协议。只有通过网络协议,才能使一大片机器互相协作、共同完成一件事。

你先在浏览器里面输入 https://www.kaola.com ,这是一个URL。浏览器只知道名字是“www.kaola.com”,但是不知道具体的地点,所以不知道应该如何访问。于是,它打开地址簿去查找。可以使用一般的地址簿协议DNS去查找,还可以使用另一种更加精准的地址簿查找协议
HTTPDNS。

无论用哪一种方法查找,最终都会得到这个地址:106.114.138.24。这个是IP地址,是互联网世界的“门牌号”。

知道了目标地址,浏览器就开始打包它的请求。对于普通的浏览请求,往往会使用HTTP协议;但是对于购物的请求,往往需要进行加密传输,因而会使用HTTPS协议。无论是什么协议,里面都会写明“你要买什么和买多少”。

DNS、HTTP、HTTPS 所在的层我们称为应用层。经过应用层封装后,浏览器会将应用层的包交给下一层去完成,通过 socket 编程来实现。下一层是传输层。

传输层有两种协议,一种是无连接的协议UDP,一种是面向连接的协议TCP。对于支付来讲,往往使用 TCP 协议。所谓的面向连接就是,TCP 会保证这个包能够到达目的地。如果不能到达,就会重新发送,直至到达。

TCP 协议里面会有两个端口,一个是浏览器监听的端口,一个是电商的服务器监听的端口。操作系统往往通过端口来判断,它得到的包应该给哪个进程。

传输层封装完毕后,浏览器会将包交给操作系统的网络层。网络层的协议是 IP 协议。在 IP 协议里面会有源 IP 地址,即浏览器所在机器的 IP 地址和目标 IP 地址,也即电商网站所在服务器的 IP 地址。

操作系统既然知道了目标 IP 地址,就开始想如何根据这个门牌号找到目标机器。操作系统往往会判断,这个目标 IP 地址是本地人,还是外地人。如果是本地人,从门牌号就能看出来,但是显然电商网站不在本地,而在遥远的地方。

操作系统知道要离开本地去远方。虽然不知道远方在何处,但是可以这样类比一下:如果去国外要去海关,去外地就要去网关。而操作系统启动的时候,就会被 DHCP 协议配置 IP 地址,以及默认的网关的IP 地址 192.168.1.1。

操作系统如何将 IP 地址发给网关呢?在本地通信基本靠吼,于是操作系统大吼一声,谁是 192.168.1.1啊?网关会回答它,我就是,我的本地地址在村东头。这个本地地址就是MAC地址,而大吼的那一声是ARP协议

通讯变化

2g,模拟信号(电话网络)
3G网络:到了3G时代,主要是无线通信技术有了改进,大大增加了无线的带宽。

移动网络的发展历程从2G到3G,再到4G,逐渐从打电话的功能为主,向上网的功能为主转变;

请记住4G网络的结构,有eNodeB、MME、SGW、PGW等,分控制面协议和数据面协议,你可以对照着结构,试着说出手机上网的流程;即便你在国外的运营商下上网,也是要通过国内运营商控制的,因而也上不了脸书。

每一条规则至少包含这三项信息。
目的网络:这个包想去哪儿?
出口设备:将包从哪个口扔出去?
下一跳网关:下一个路由器的地址。
通过 route 命令和 ip route 命令都可以进行查询或者配置。

路由

路由分静态路由和动态路由
静态路由可以配置复杂的策略路由,控制转发策略;

动态路由主流算法有两种,距离矢量算法和链路状态算法。基于两种算法产生两种协议,BGP 协议和OSPF 协议。

www构成:

客户机和服务器
HTTP,URL,DNS
web语言

client:主要是浏览器
server:主要提供web服务

常见web服务器软件
IIS(windows)
Apache(开源),
Tomcat(jsp),
nainx(占有内存少,并发能力强)

TCP、IP,port

五层协议:

应用层(FTP,HTTP,SSH,POP3)

传输层(TCP,UDP)

网络层(IP)

数据链路层(wifi协定,以太网协定)

物理层(设备线缆)

IP,32位地址码
TCP传输控制协议
多路复用(多个程序使用一个IP地址)
通过port实现

TCP端口 服务
21 FTP
22 SSH
23 telent
25,110 email(SMTP,POP3)
80 WEB(HTTP)

DSN,域名系统
URL,统一资源定位器
每个文件都有唯一的url

http://www.baidu.com/info
protool host path

http://ctec.xjtu.edu.cn:8080#a1
port anchor

HTTP:超文本传输协定
get :下载
post:表单提交到服务器
put:上传文件到服务器

相关组织:
IETF(协定)
W3C(web标准制定)
ICANN(顶级域名分配)

ISO,网络标准化组织。

网络资源的表示
网络管理信息的表示
系统的结构

算法:“是否会编程序”(有穷规则)
本质是能否想出解决问题的算法
有穷性,确定性,输入输出,能行性(机器执行)

比特币(区块链)
去中心化
数据公开
自治性:共识
匿名(地址关联)

木马(具有隐蔽性)

操作系统,常见威胁:
机密性 (军事,企业核心)
窃听,主机系统,数据
后门,天窗,系统访问权(木马)
间谍软件
隐蔽通道

完整性威胁:

计算机病毒:“熊猫烧香”
计算机欺骗:“钓鱼网站”,“伪基站”

可用性威胁:
拒绝服务器攻击Dos

网络技术摘抄(入门需知)相关推荐

  1. Java0基础学习笔记、心得-day01(Java入门需知、Java入门概述、Java语言相关知识、JDK与JRE关系,常用DOS命令、JDK的下载安装与HelloWorld案例实现与常见问题。)

    一.Java入门需知  * 1.你为什么要学习编程?--兴趣.职业.薪资?  * 2.具体Java开发岗位薪资可以参考-智联招聘 前程无忧 BOSS直聘等APP  * 3.如何进入IT行业:前端工程师 ...

  2. layuiadmin上手好难_新手自学板绘先学SAI还是PS好?零基础绘画入门需知!

    原标题:新手自学板绘先学SAI还是PS好?零基础绘画入门需知! 新手自学板绘先学SAI还是PS好?初学者如何入门绘画?学习板画难吗?怎样才能学习好绘画?想必这些都是绘画初学者们经常在想的问题吧,就是不 ...

  3. 硬件软件测试初学者,经验:硬件测试工程师入门需知

    在这个几乎人人都持有数码产品的时代,不少计算机专业毕业出来的学生在求职时都会考虑硬件测试工程师这个职位的.那么,不妨随乔布简历小编一起来看看与硬件测试工程师相关的知识吧! 想当硬件测试工程师,怎能不知 ...

  4. web前端入门必知的10个技术

    随着HTML5的发展和普及,了解HTML5将成为Web开发人员的必修课.如何把网页做得更美观,对用户更有吸引力,不仅是企业对前端开发人员要求,更是一个合格的web前端工程师的自我修行.今天小编就跟大家 ...

  5. 网络技术入门(一):网络技术基础知识系统归结

    <网络技术入门>系列文章,分别从宏观硬件和微观数据传输角度说明网络传输过程.请期待后续系列文章. 自己写文章习惯性在每一个小节上做总结,有时候方便理解可以先看总结的内容. 本章主要是总结性 ...

  6. 网络技术入门 :HTTP报文和TCP/IP数据包

    本章把HTTP报文和TCP/IP数据包放在一起.是因为: 报文是一个完成的有意义的数据. 数据包可以理解为组成报文的传输单元. 应用程序的数据一般都比较大,因此TCP会按照网络包的大小对数据进行拆分. ...

  7. 玩转python网络爬虫黄永祥pdf下载_Python网络爬虫从入门到实践pdf

    Python网络爬虫从入门到实践 内容简介 本书将介绍如何使用Python编写网络爬虫程序获取互联网上的大数据.本书包括三部分内容:基础部分.进阶部分和项目实践.基础部分(第1~6章)主要介绍爬虫的三 ...

  8. python编程入门到实践 百度云-python网络爬虫从入门到实践pdf

    python网络爬虫从入门到实践pdf是一本非常热门的编程教学.这本书籍详细讲解了Python以及网络爬虫相关知识,非常适合新手阅读,需要的用户自行下载吧. Python网络爬虫从入门到实践电子书介绍 ...

  9. 区块链技术实现只需180行go代码!

    区块链技术实现只需180行go代码! 通过本文,你将可以使用Go创建自己的区块链.理解哈希函数是如何保持区块链的完整性.掌握如何创造并添加新的块.实现多个节点通过竞争生成块.通过浏览器来查看整个链.了 ...

最新文章

  1. 大四狗找工作,持续更新
  2. android studio 插件开发 FindByTag插件 局部情况下取代ButterKnife插件
  3. Spring Cloud【Finchley】实战-04将订单微服务与商品微服务分别拆分为多模块
  4. 2.4操作系统之死锁详解(预防、避免、检测、解除)+思维导图
  5. 最短路径问题的算法实现【转载】
  6. 大牛书单 | 腾讯技术大咖推荐你五一看这些书
  7. java实现对无符号整数的支持
  8. java多线程---比较全的
  9. 【算法习作】荷兰国旗问题
  10. 织梦DedeCMS使用SQL批量替换文章标题内容
  11. ios键盘横屏_平板电脑就只能追剧玩游戏?看这款外设键盘如何让iPad爱上办公...
  12. php 获取数组第一个元素的几种方法
  13. ROS@Ubuntu16.04体验记录
  14. python2.7下安装PyQt4
  15. cs224n课程及NLP相关知识记录
  16. C语言初阶——手把手教零基础/新手入门(万字心得笔记)
  17. 安卓使用富文本编辑器html5,Android富文本编辑器,图文详细
  18. 你不会因为实施了Scrum而变敏捷
  19. 京东价格监控软件开发技术探讨十五:通过酷Q和ZeroMQ实现推送变价变库消息到QQ群
  20. 你知道 biangbiang 面和编码有什么关系吗?万字长文,手拉手带你一步步认识编码

热门文章

  1. python说话语音代码_Python文字转换语音,让你的文字会「说话」,抠脚大汉秒变撒娇萌妹...
  2. 如何更改mysql数据库的用户名和密码
  3. python挖矿木马_记一次阿里云被植入挖矿木马的事件
  4. Linux---/proc目录全讲解
  5. 智行者王肖:自动驾驶本质在于对待数据的态度、获取及应用方式 | 自动驾驶这十年...
  6. 保险知识一:续期收费与续保的区别
  7. 矮人DOS工具箱 4.2:把DOS/Ghost/分区专家集成至启动菜单
  8. 模块一:cursors模块
  9. Android Service---在前台运行服务
  10. 【计算机网络】计算机网络、互联网、互连网、因特网、万维网