为何学习网络编程

  1. 掌握互联网协议基本原理,掌握各种应用的工作机制,http,smtp,dns,ftp,抖音,微信等
  2. 掌握开发一个c/s架构的互联网软件能力

    因特网起源和发展

    最早的计算机是不能联网的。1946年,冯诺依曼计算机模型。
    1969年 四点连接 军方
    1981年 OSI七层模型 每层都有自己的作用
    1974年 TCP/IP

    OSI七层模型

    TCP/IP网络协议精讲 - 图1TCP/IP网络协议精讲 - 图2

    一条消息怎么发送到对方的电脑

    邮信:

  3. 装信封 tcp包首

  4. 信封-》地址、邮编 ip包首
  5. 邮票+邮局章 以太网包

拆信:

  1. 对方所住附近邮局
  2. 邮递员送达手里
  3. 打开信封

    TCP/IP模型各层介绍

    物理层 传递二进制电信号介质 光纤、双绞线、无线电波
    链路层 单纯传递01010没有意义,必须表示每组电信号的特征,分组按顺序发出去
    以太网协议,一组电信号就是一个数据包,一个数据包又成为一帧。
    46~1500字节,一个数据包最多1500个字节
    包首固定14个字节 mac地址、源地址
    mac地址 相当于现实生活中的身份证信息,表示全世界每台电脑的唯一地址
    mac地址的作用:唯一表示每台电脑
    网络层
    路由器

IP地址 住址
mac 身份证号

消息怎么真正的发给对方?

在一个局域网里,通信 靠 广播 所有连接到交换机的设备都可以收到消息,然后他们会解包这个消息,检查包头里的目标mac地址,如果不是找自己的,就丢弃。
黑姑娘收到消息,会处理消息
通过广播会造成流量浪费,网络拥堵 广播风暴
解决方案:

  1. 每个人先做一个自我介绍
  2. 班委记下每个人的信息,记在小本本上
  3. 以后,再找人,先找班委,班委查一下小本本,告诉对方这个人在哪

交换机有mac地址表,存着本网络所有电脑的mac地址,通信变成单播

路由器作用

  1. 对不同网络进行隔离,防止广播风暴
  2. 不同网络之间的数据转发

路由器要实现不同网络间数据转发的功能,就必须知道所有人的mac地址

IP地址 住址
mac 身份证号

IP地址构成规则相关

IP地址是一个32位bit构成的地址,4个字节,用4个十进制数表示,每个字节用.隔开
只要想上网就需要IP地址。 0.0.0.0 ~ 255.255.255.255
一共有多少个IP? 2**32 = 43亿 ipv4
中国一共有3.38亿个IPV4地址 为了解决IP地址不够用的问题,提出两个方案:

  1. 研发出IPV6 128bit 2**128
  2. 通过NAT端口映射技术实现了IP共享 IP+端口

IP地址分类

192.168.11.4
网络位是用来标识网段的 192.168.11.0 一个网段
主机位是用来标识具体主机的 4 是主机位
192.168.11.0 网段 包含的主机 2**8=256, 但是0不能用,255也不能用 一共有254个主机
IP地址分类: ABCDE五类

IP地址这个东西玩电脑的都知道,大家也天天在说,但是你知道IP地址是干什么的吗?你知道为什么要有IP地址这个东西么?现在国家也在推广IP V6,IP V6和传统的IP V4又是什么关系呢?

IP地址

在网络不发达的时候,电脑数据是独立不共享的,两台机器传输数据可以通过数据线传输。
TCP/IP网络协议精讲 - 图3
如果是三台,或者更多的机器
TCP/IP网络协议精讲 - 图4
那现在满世界的N台电脑,怎么进行数据交互呢,你怎么看到淘宝网的商品呢。
所有的机器都能够接入互联网,通过互联网互相转发数据
TCP/IP网络协议精讲 - 图5
那这里就要明确,每台机器的地址,否则数据发给别人可咋办,为了准确发送数据,就要给每台电脑添加门牌号与地址信息。
因此IP地址,就是用于标记机器在网络中的地址信息,保证数据不会发错给别的人。
比如向192.168.1.100机器发数据,肯定不会发送到192.168.1.105上

ip划分

ip地址主要分为四类

  • A类,ip范围0.0.0.0~126.255.255.255,A类地址主要分配给超大型网络环境的公司,例如苹果公司。
  • B类,ip范围128.0.0.0~191.255.255.255,主要分配给有大规模局域网数量的公司
  • C类,ip范围192.0.0.0~223.255.255.255,主要分配给如校园网等小型局域网
  • D类和E类地址比较特殊,D类属于广播地址,E类属于保留地址

image.png
私有地址
在IP地址3种主要类型里,各保留了3个区域作为私有地址,仅能在局域网种使用,其地址范围如下:
A类地址:10.0.0.0~10.255.255.255
B类地址:172.16.0.0~172.31.255.255
C类地址:192.168.0.0~192.168.255.255
回环地址:127.0.0.1 也是本机地址,等效于localhost或本机IP,一般用于测试使用。

在局域网,只能配置私有地址
要上网,必须有公有地址,除了私有地址之外的,都是公有地址。

我们电脑上配置的地址一般都是私有地址
因为IPV4不够分,全球只有42亿多个,所以通过NAT IP映射技术实现共享IP上网,即多个人共享一个IP
属于同一网段的,就叫本地网络。 不在同一网段,就叫远程网络。

特殊的B类地址网段169.254.0.0/16

这个说明没有获取到IP,是不能上网的。
在IP网络里,每台主机都需要一个IP地址,通常情况下是通过DHCP服务器自动分配。但是某些特殊情况下,DHCP分配失败或者没有DHCP服务器时,机器可以自己分配一个IP来完成这个工作。
理解:这么做的目的是为了数据格式统一,程序处理不那么容易出BUG
就好比定义一个变量,正常情况下这个变量会被赋予某个数据类型的值,但是如果赋值失败的时候,不能什么都不做,还是得给它赋值,通常是赋值为NULL,这个NULL就好比169.254/8

公网ip与局域网ip

好比寄快递,需要明确省、市、县、小区、门牌号等。
局域网
局域网的ip好比是某一个小区的门牌号,用于某一个群体内部交互数据使用的ip地址,离开这个群体,也就失效了
TCP/IP网络协议精讲 - 图7
如果这个小区名字是唯一的,全中国就一个,通过互联网系统查询,只有这一个唯一的小区门牌号,全世界大家都能找到你,这个就是一个公网IP

  • 公网ip,例如,123.206.16.61、123.206.16.62
  • 局域网ip,例如192.168.10.11,例如192.168.5.44

TCP/IP网络协议精讲 - 图8

  • 如果A公司内部机器传输资料,192.168.10.12只需发给192.168.10.11即可
  • 如果A公司的某一个电脑,要发数据给B公司的某一个电脑,就得
    • A公司某一电脑数据发给公网ip
    • 然后再发送给B公司的公网ip
    • 然后再转发给B公司的某一个局域网ip

子网掩码的作用

要上网:
A 100人 193.100.100.0 1~254
B 300人 193.100.101.0
实际情况:
A 193.100.100.180~185
B 193.100.100.193~200
发一个广播,这个网段的所有主机都能收到,如果A公司中病毒,B公司跟着遭殃
解决这个问题的思路:确保AB真正的不在一个网段 子网划分
子网划分
A 193.100.100.100
255.255.255.128
属于193.100.100.0网段 0不能用,127是广播
B 193.100.100.130
255.255.255.128
属于193.100.100.128网段 128不能用,255是广播
子网掩码 用来标识一个IP所处的网段
子网掩码如何区分连两个IP是不是在同一个网段?
拿两个IP分别跟子网掩码做与运算,得到的结果就是每个IP的网段。

子网掩码的组成

  1. 同IP地址一样,子网掩码是由长度为32位的二进制数组成的一个地址
  2. 子网掩码32位与IP地址32位相对应,IP地址如果是某位网络地址,则子网掩码为1,否则为0
  3. 如 11111111.11111111.11111111.00000000

左边连续的1的个数代表网络号的长度,右边连续的0代表主机号的长度

网关地址的作用

路由器的作用是负责不同网段的数据转发
路由器每个口都是连通一个网段,一般企业路由器有2个口

arp协议

交换机不认识IP址,交换机只认识MAC地址
路由器必须知道目标的mac地址,但是现在还不知道,那怎么办?

  1. 发了一个广播包,包含 源IP、源mac、目标IP、目标mac(空)
  2. 整个网段的机器都收到这条消息,进行解析,检查这个包里的目标IP是不是跟本机IP相同,如果不同则丢弃,如果相同则回响应一个包,这个响应包里包含IP+mac,这个包会以单播发送给源地址
  3. 当村长收到响应包之后,打开,提取出里边的mac,然后把目标的IP+mac存在本地小本本

本地的小本本指的是ARP表, 缓存表 每次发消息,先查ARP表 每个3层的网络设备,都有arp表

以上过程的慕斯是找到IP地址和mac地址的映射关系,因为在局域网通信,属于数据链路层,交换机不认识IP,只认识mac,因此需要IP与mac的映射表。

arp的工作原理

在任何时候,一台主机有IP数据报文发送给另一台主机,它都要知道接收方的逻辑(IP)地址。但是IP地址必须封装成帧才能通过物理网络。这就意味着发送发必须有接收方的物理(mac)地址,因此需要完成逻辑地址到物理地址的映射。而ARP协议可以接收来自IP协议的逻辑地址,将其映射为相应的物理地址,然后把物理地址递交给数据链路层。

arp请求

任何时候,当主机需要找出这个网络中的另一个主机的物理地址时,它就可以发送一个ARP请求报文,这个报文包好了发送方的MAC地址和IP地址以及接收方的IP地址。因为发送方不知道接收方的物理地址,所以这个查询分组会在网络层进行广播。

ARP响应

局域网中的每一台主机都会接收并处理这个ARP请求报文,然后进行验证。查看接收方的IP地址是不是自己的地址,只有验证成功的主机才会返回一个ARP响应报文,这个响应报文包含接收方的IP地址和物理地址。这个报文利用收到的ARP请求中的请求方物理地址以单播的方式直接发送给ARP请求报文的请求方。

ARP报文响应

硬件类型 协议类型
硬件长度 协议长度 操作码(请求为1,响应为2)
源硬件地址
源逻辑地址
目的硬件地址
目的逻辑地址

为社么arp需要定时过期

arip攻击,中间人攻击 泛洪攻击 网关攻击
解决方式: dhcp IP地址分配服务器
本机绑定静态的arp表

IP协议

IP协议(Internet Protocol)处于OSI模型(开放式系统互联模型(英语:Open System Interconnection Model,缩写:OSI;简称为OSI模型)中的网络层。
IP协议作用是把数据包发送到指定的目的地,这里的重要条件就是IP地址和MAC地址
IP地址是指定了机器在网络的地址信息
MAC地址是指网卡所属的固定的地址。
IP地址可以动态分配,自由变化,而MAC地址基本不会更改,一般机器的出厂后就固定了。

IP与ARP

MAC地址属于数据链路层,IP的通信依赖于MAC地址,互联网上,局域网的通信还是很少的,通常都是经过多台计算机中转才能够到达目标机器,在进行中转时,利用下一站的中转设备的MAC地址来搜索下一个中转目标,**ARP协议就是根据通信方的IP地址来解析出MAC地址。**
计算机和网络设备的中转路线,是路由器、交换机等网络设备内部工作,进行路由选择(routing)。
TCP/IP网络协议精讲 - 图9
这就好比送快递的货车,将货物送到集散中心,明确送货后,快递公司能够查询送件的目的地,明确出一条路线,下一站送往哪一个集散中心,最终的集散中心再判断能否送到客户家里。
TCP/IP网络协议精讲 - 图10

应用层

应用层(application-layer)的任务是通过应用进程间的交互来完成特定网络应用。
应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。
对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如域名系统 DNS,支持万维网应用的 HTTP 协议,支持电子邮件的 SMTP 协议等等。
我们把应用层交互的数据单元称为报文
域名系统(Domain Name System缩写 DNS,Domain Name被译为域名)是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
DNS解析系统这好比我们手机上的电话簿,名字只是便于记忆,电话才是可以找到对方地址
小张 15210134321 小红 15293843845
HTTP协议
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的 WWW(万维网) 文件都必须遵守这个标准。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。
我们能够上网,也就是因为有TCP/IP协议,且定义了互联网传输的HTTP协议,我们才能看到琳琅满目的商品网站
TCP/IP网络协议精讲 - 图11

传输层

运输层(transport layer)的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务
第一个端到端,即主机到主机的层次。传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。
此外,传输层还要处理端到端的差错控制和流量控制问题。 传输层的任务是根据通信子网的特性,最佳的利用网络资源,为两个端系统的会话层之间,提供建立、维护和取消传输连接的功能,负责端到端的可靠数据传输。在这一层,信息传送的协议数据单元称为段或报文。 网络层只是根据网络地址将源结点发出的数据包传送到目的结点,而传输层则负责将数据可靠地传送到相应的端口。
传输层主要使用如下两种协议
传输控制协议 TCP(Transmisson Control Protocol)—提供面向连接的,可靠的数据传输服务。
用户数据协议 UDP(User Datagram Protocol)—提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)。
UDP 是无连接的; UDP 使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态(这里面有许多参数); UDP 是面向报文的; UDP 没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如 直播,实时视频会议等); UDP 支持一对一、一对多、多对一和多对多的交互通信; UDP 的首部开销小,只有8个字节,比TCP的20个字节的首部要短。
TCP 是面向连接的。(就好像打电话一样,通话前需要先拨号建立连接,通话结束后要挂机释放连接); 每一条 TCP 连接只能有两个端点,每一条TCP连接只能是点对点的(一对一); TCP 提供可靠交付的服务。通过TCP连接传送的数据,无差错、不丢失、不重复、并且按序到达; TCP 提供全双工通信。TCP 允许通信双方的应用进程在任何时候都能发送数据。 TCP 连接的两端都设有发送缓存和接收缓存,用来临时存放双方通信的数据; 面向字节流。TCP 中的“流”(Stream)指的是流入进程或从进程流出的字节序列。“面向字节流”的含义是:虽然应用程