主要内容:

  • 1.客户端 \ 服务端架构
  • 2.网络通信的整个流程
  • 3.DNS服务器
  • 4.交换机,路由器和网关(含DHCP)
  • 5.初识socket

1.客户端 \ 服务端架构

   客户端英文名称:Client,服务端英文名称Server, 所谓C\S架构就是说Client\Server

  • 硬件C\S架构:打印机
  • 软件C\S架构:QQ,微信,优酷,浏览器 (其中浏览器又比较特殊,很多网站是基于浏览器来进行访问的,浏览器和各个网站服务端进行的通讯方式又常被成为B\S架构(浏览器英文名称:Browser)

2.网络通信的整个流程

  以本地的电脑上的浏览器去访问的京东网站的整个流程这种B\S架构来举例

(1)网卡和mac 地址

  • 电脑插网线的地方就叫做网卡,网卡提供了网络的接口,这是硬件上面的,关于电脑的网卡,并不是Ip地址,而是全球唯一的mac地址,专门给网络设备设定,电脑出厂的时候给定的
  • head中包含的源和目标地址由来:ethernet规定接入internet的设备都必须具备网卡,发送端和接收端的地址便是指网卡的地址,即mac地址。   
  • mac地址:每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)

通信工程架构 通信工程流程_通信工程架构

(2) IP地址

(1)IP地址的格式

编码的回顾: 一个字节等于8位,8个2进制的数可以表示256个字节此处IP地址是由点分割的四个十进制的数,而十进制的数在计算机中是由二进制表示的,即

  • 0.0.0.0--255.255.255.255                   (十进制)
  • 0000000.00000000.00000000.00000000 -- 11111111.11111111.11111111.11111111   (二进制)

(2)网络配置的大致方法

通信工程架构 通信工程流程_服务器_02

通信工程架构 通信工程流程_IP_03

通信工程架构 通信工程流程_IP_04

 

 配置好自己电脑的网络信息之后,我们就有了身份证(mac地址)和名字(IP地址),通过他们,我们就在网络中有了自己的身份,只要有网,我们就可以正大光明的和别人进行通信了

(2)网络通信流程

arp协议功能:广播的方式发送数据包,获取目标主机的mac地址

通信工程架构 通信工程流程_IP_05

流程:

第一步:打开浏览器,想要请求访问京东,在地址栏输入了网址:www.jd.com。(www.jd.com是域名就是一个IP地址的名称,IP地址不好记,所有有了域名。)

 第二步:先将请求信息发给了交换机,然后交给了路由器,路由发给DNS服务器,通过DNS协议去找我们要访问的京东的IP地址:

 

通信工程架构 通信工程流程_服务器_06

第三步:查到的京东服务器对应的IP地址之后,路由器通过路由协议找到一个路由转发的最优路径,将你的请求信息还送给这个IP地址的京东的路由器

第四步:京东的路由器发给了京东网站的服务器上

第五步:京东网站服务器按照来的时候的路径,在返回给你他自己的网站

第六步:当你打开浏览器的时候,你的电脑给你的浏览器这个运行起来的程序给了一个编号,叫做端口号,当你的电脑收到京东发送过来的消息的时候,你的电脑通过端口号找到你的浏览器,你的浏览器拿到了京东的网站信息,然后将网站呈现在了自己的浏览器上

 (3) 内网和外网

  • 所谓内网就是我们平常说的局域网。局域网就是在固定的一个地理区域内由2台以上的电脑用网线和其他网络设备搭建而成的一个封闭的计算机组,它可以是邻居之间的2台电脑,也可以是一幢100层大楼里的1000台电脑。局域网可以是独立封闭运行的,也可以是和外网相连接的。
  • 所谓外网,也就是广域网。是一种地域跨度非常大的网络集合。它是由无数个局域网+独立服务器构成的。注意,此处所说的局域网既可以是小型的广域网,也可以是局域网。

实际上,从规模上来看我们很难分辨局域网与广域网,因为大小都是相对的。所以。真正局域网与广域网的分别是通过IP地址来实现的。
任何一台电脑要上网,都必须在网络上有一个唯一的IP地址。在局域网内,这个IP地址是唯一的。但是在另外一个局域网,这个IP地址仍然能够使用。(网络A里有一台IP地址为192.168.1.231的客户端,网络B里也可以有一台同样IP的电脑。那么。我们就说这2台机器分别在2个局域网里。但是在广域网内,所有的IP地址都是唯一的,不可重复)

       如果只有内网的ip地址你是不能上网的,你上网肯定要通过一个外网地址,这个外网地址又称为公网地址,这个公网地址是全球唯一的,他在你的对外出口的路由器上,也就是你的外网网关地址

 3.DNS服务器

 4.交换机,路由器和网关(含DHCP)

(1)网关

那么网关到底是什么呢?网关实质上是一个网络通向其他网络的IP地址。比如有网络A和网络B,网络A的IP地址范围为 “192.168.1.1~192. 168.1.254”,子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1~192.168.2.254”,子网掩码为255.255.255.0。在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上, TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。网络B向网络A转发数据包的过程也是如此。

(2)路由器&交换机

路由器对外部网络的通信都是通过外网接口(wan口)去转发出去的,也就是不管你是内网中的哪个电脑,你的请求都要通过路由的外网接口发送出去,别人对你的请求都是通过外网接口接收进来的,

至于路由器上对内的lan口是怎么分配IP地址给内网的,要看路由器怎么设置划分vlan也就是子网(内部局域网),每个lan口的IP地址可以是静态的,也可以是动态分配的(DHCP协议),而且可以划分网段,例如:我的1号lan口对接的网段是192.168.1.0-192.168.1.255,那么所有这个网段的电脑的信息进出都走这个lan口到路由器上,对于连接路由器的交换机来讲,主要的作用就是搭桥用的,搭桥的意思就是让连接该交换机的所有电脑都能够连接起来,只要是同一个网段的互相都可以进行通信,当然这个也要看交换机怎么配置,

(3)DHCP

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段 交换机又分二层交换机和三层交换机,二层交换机主要就是个搭桥的作用,三层交换机还兼有路由的作用,一般现在的交换机都有DHCP功能,也就是说交换机下面连接的这些电脑的子网IP或者说是局域网IP也可以由交换机来动态生成和分配,路由器和交换机所生成的子网IP都是自己在路由器和交换机上设置的,和路由器上的外网IP没有关系,具体的划分又分为24位的16位的等等,举例:24位的就是10.11.1.0-10.11.1.255这256个IP地址,0表示后面的8bit是00000000,255表示后面的8bit是11111111

 

5.初识socket

 

#编写服务端
import socket
#创建一个socket对象
server = socket.socket()    #创建一个手机
ip_port =("192.168.15.51",8900)
#绑定ip地址和端口
server.bind(ip_port)
#监听ip地址和端口
server.listen()
print("等待中...0101")
#等待客户端的连接
conn,addr = server.accept()       #阻塞住

#接受消息
from_client_msg = conn.recv(1024)
#接收的消息是bytes类型,需要转换为字符串
print(from_client_msg.decode("utf-8"))

conn.send("盖浇饭".encode("utf-8"))
conn.close()
server.close()

 

#编写客户端
import socket
client = socket.socket()
server_ip_port = ("192.168.15.51",8900)

#连接服务端
client.connect(server_ip_port)

#发消息
client.send("中午吃啥".encode("utf-8"))           #send里的消息必须是字节类型

from_server_msg = client.recv(1024)
print(from_server_msg.decode("utf-8"))

#关闭连接
client.close()

 交互式的应答:

#编写服务端
import socket
server = socket.socket()
ip_port = ("192.168.15.51",8900)

server.bind(ip_port)
server.listen()
print("等待消息中...0101")

conn , addr = server.accept()             #等待客户连接

#可以接收消息
while 1:
    from_client_msg = conn.recv(1024)
    print(from_client_msg.decode("utf-8"))
    msg = input("客服:")
    conn.send(msg.encode("utf-8"))

conn.close()
server.close()
#编写服务端
import socket
client = socket.socket()
server_ip_port = ("192.168.15.51",8900)
client.connect(server_ip_port)

#发消息

while 1:
    msg = input("客户留言:")
    client.send(msg.encode("utf-8"))
    from_server_msg = client.recv(1024)
    print(from_server_msg.decode("utf-8"))

client.close()

练习题