网络编程基础

一.软件开发的架构

我们所了解的涉及的到两个程序之间通讯应用大致可以分为两种:

第一种是应用类:qq  微信  网盘

第二种是web类:百度,知乎,博客园等使用浏览器就可以访问的桌面应用

这些应用本质都是两个程序之间的通讯.而这两个分类对应了两个框架

1.c/s架构:

  clience 与server,客户端与服务端架构,这种架构也是用户层面来划分的,这里的客户端一般泛指客户端应用程序EXE,程序需要先安装后,才能运行在用户的电脑上,对用户的电脑操作系统环境依赖较大。

 

2.b/s架构

  B/S即:Browser与Server,中文意思:浏览器端与服务器端架构,这种架构是从用户层面来划分的。 Browser浏览器,其实也是一种Client客户端,只是这个客户端不需要大家去安装什么应用程序,只需在浏览器上通过HTTP请求服务器端相关的资源(网页资源),客户端Browser浏览器就能进行增删改查。

 

二.网络基础 

1.tcp协议和 udp协议

(1)TCP协议是面向连接的,可靠地协议,传输效率低全双工通信(发送缓存&接受缓存).面向字节流.应用:Web浏览器,电子邮件,文件传输程序.

(2)UDP不可靠的,无连接服务的,传输效率高(发送前延时小),一对一,一对多,多对一,面向报文,尽最大努力服务,无拥塞控制,使用UDP的应用:域名系统(DNS);视频流;IP语音.

2.TCP协议的三次握手四次挥手

(1)三次握手

socket客户端向服务端发起连接请求:三次握手

client.concent()

  客户端 服务端
第一次 我要来了  
第二次   你来吧
第三次 好的,我这就来  

 

(2)四次挥手

  客户端 服务端
第一次 我要走了  
第二次   走就走,但是我处理一些事
第三次   我处理完了,你走吧
第四次 我走了  

 

3.基础概念 

(1)osi七层模型:网络数据传输

物理层:建立.维护.断开物理连接(将数据转化成电信号发送)

数据链路层:逻辑链接.进行硬件地址寻址,差错校验等(MAC)

网络层:进行逻辑寻址,实现不同网络之间的路径选择(IP)

传输层:定义传输数据的协议端口号,及流控和差错效验(TCP/UDP)

会话层:建立,管理,终止会话 (保持登录或链接状态)    应用偷偷携带一点其他数据: cookies/session

表示层:数据的表示,安全,压缩(看到数据,如图片和视频)       生产数据:session/cookies

应用层:网络服务与最终用户的一个接口(使用软件)    打开软件

首先,计算机A和B之间要有物理层的连接,可以是有线比如同轴电缆或者双绞线通过RJ-45的电路接口连接,也可以是无线连接例如WIFI。先简化一下,考虑局域网,暂不讨论路由器和交换机以及WIFI热点。这些物理层的连接建立了比特流的原始传输通路。

接下来,数据链路层登场,建立两台计算机的数据链路。如果A和B所在的网络上同时连接着计算机C,D,E等等,A和B之间如何建立的数据链路呢?这一过程就是物理寻址,A要在众多的物理连接中找到B,依赖的是计算机的物理地址即MAC地址,对就是网卡上的MAC地址。以太网采用CSMA/CD方式来传输数据,数据在以太网的局域网中都是以广播方式传输的,整个局域网中的所有节点都会收到该帧,只有目标MAC地址与自己的MAC地址相同的帧才会被接收。A通过差错控制和接入控制找到了B的网卡,建立可靠的数据通路。

那IP地址呢? 数据链路建立起来了,还需要IP地址么?我们FTP 命令中制定的是IP地址而不是MAC地址呀?IP地址是逻辑地址,包括网络地址和主机地址。如果A和B在不同的局域网中,中间有着多个路由器,A需要对B进行逻辑寻址才可以的。物理地址用于底层的硬件的通信,逻辑地址用于上层的协议间的通信。在以太网中:逻辑地址就是IP地址,物理地址就是MAC 地址。在使用中,两种地址是用一定的算法将他们两个联系起来的。所以,IP是用来在网络上选择路由的,在FTP的命令中,IP中的原地址就是A的IP地址,目标地址就是B的IP地址。这应该就是网络层,负责将分组数据从源端传输到目的端。

A向B传输一个文件时,如果文件中有部分数据丢失,就可能会造成在B上无法正常阅读或使用。所以需要一个可靠的连接,能够确保传输过程的完整性,这就是传输层的TCP协议,FTP就是建立在TCP之上的。TCP的三次握手确定了双方数据包的序号、最大接受数据的大小(window)以及MSS(Maximum Segment Size)。TCP利用IP完成寻址,TCP中的提供了端口号,FTP中目的端口号一般是21。传输层的端口号对应主机进程,指本地主机与远程主机正在进行的会话。

会话层用来建立、维护、管理应用程序之间的会话,主要功能是对话控制和同步,编程中所涉及的session是会话层的具体体现。表示层完成数据的解编码,加解密,压缩解压缩等,例如FTP中bin命令,代表了二进制传输,即所传输层数据的格式。 HTTP协议里body中的Json,XML等都可以认为是表示层。应用层就是具体应用的本身了,FTP中的PUT,GET等命令都是应用的具体功能特性。

简单地,物理层到电缆连接,数据链路层到网卡,网络层路由到主机,传输层到端口,会话层维持会话,表示层表达数据格式,应用层就是具体FTP中的各种命令功能了。
具体操作

 osi 五层模型

物理层:建立.维护.断开物理连接(将数据转化成电信号发送)

数据链路层:逻辑链接.进行硬件地址寻址,差错校验等(MAC)

网络层:进行逻辑寻址,实现不同网络之间的路径选择(IP)

传输层:定义传输数据的协议端口号,及流控和差错效验(TCP/UDP)

         会话层:建立,管理,终止会话 (保持登录或链接状态)

 会话层   表示层:数据的表示,安全,压缩(看到数据,如图片和视频)

         应用层:网络服务与最终用户的一个接口(使用软件)

(2)

MAC:

MAC(Media Access Control或者Medium Access Control)地址,意译为媒体访问控制,或称为物理地址、硬件地址,用来定义网络设备的位置。在OSI模型中,第三层网络层负责IP地址,第二层数据链路层则负责 MAC地址。因此一个主机会有一个MAC地址,而每个网络位置会有一个专属于它的IP地址。

MAC地址是网卡决定的,是固定的。

IP:

IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。常见的IP地址,分为IPv4与IPv6两大类。在网络中为了区别不同的计算机,也需要给计算机指定一个连网专用号码,这个号码就是“IP地址”

(以太网发明出来的时候,IP还没有垄断网络层协议,那时还有Novell网的IPX/SPX协议、DEC公司开发的CLNP网络协议,以及Apple公司开发的Apple Talk协议,以太网需要支持这所有的网络层协议,如果没有MAC地址,势必需要网卡解读网络层协议头的地址信息,而每一种网络层的地址都大相径庭,所以增加了以太网卡的实现复杂度。

而网卡有了MAC地址,可以不依赖于任何网络层协议,可以独立判断一个以太帧是否接收(依据MAC地址匹配),这样大大简化了网卡的实现。

即使以后出现更多的网络层协议,网卡也无需太多的改变,这就是网络分层的精髓,一层的内部实现无需知晓其上层、或下层协议字段。

)

子网掩码:

内网中192.168.1.199的前三组是网络号,后一组是主机号,子网掩码就是255.255.255.0

首先要说明的是:不是某个IP的网络号和主机号决定子网掩码是什么,而是子网掩码决定了某个IP地址的网络号与主机号是什么,IP地址是要搭配子网掩码使用的。例如上面的子网掩码决定了192.168.1.199的前三段192.168.1是网络号,最后一段199是主机号。

网关:

网关实质上是一个网络通向其他网络的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转发数据包的过程

 

端口:

可以认为是设备与外界通讯交流的出口。
 (ip精确到具体的一台电脑,而端口精确到具体程序)

DNS:  

域名和ip 的对应光系在哪里找:

  先在本地找:

    本地电脑: c:\Windows\System32\drivers\etc\hosts

    linux : /etc/hosts

  然后在DNS服务器里面找,

在网上,所有的地址都是ip地址,但这些ip地址太难记了,所以就出现了域名(比如http://baidu.com)。

# 而域名解析就是将域名,转换为ip地址的这样一种行为。
# 例如:访问www.baidu.com,实质是把域名解析成IP

arp:   

ARP(地址解析协议) 其主要用作将IP地址翻译为以太网的MAC地址#在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。#在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。

#所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。

#ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。

HTCP:

动态主机配置协议(Dynamic Host Configuration Protocol,简称DHCP)是一个局域网的网络协议,该协议允许服务器向客户端动态分配 IP 地址和配置信息。

使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段,

广播:(原因不知道mac地址是什么)

局域网内MAC地址

 

 

 

 

广播风暴: 机器特别多,大家都发消息,找一个人,所有人都接收,接收到拆解判断是不是,交换机 和路由器在一定程度上避免了广播风暴

交换机与路由器:

'交换机'
用于在同一网络内数据快速传输转发,工作在数据链路层;
通过MAC寻址,不能动态划分子网;
只能在一条网络通路中运行,不能动态分配。

'路由器'
是一个网关设备,内部局域网到公网的一个关卡;
工作在网络层;
通过IP寻址,可以划分子网;
可以在多条网络通道中运行,可以动态分配IP地址。

'简单说'
交换机就是把一根网线变成多根网线;
路由器就是把一个网络变成多个网络;
如果不上外网,只是局域网,交换机即可;
如果上外网,并且给网络划分不同网段,就必须用路由器。

 三.客户端服务端(模拟ssh)

import socket
server=socket.socket()
server.bind(('192.168.13.67',8000))
server.listen(5)
while 1:
    # 服务端可以循环接收
    conn,addr=server.accept()
    while 1:
        # 可以循环接收内容
        data=conn.recv(1024)
        if data==b'q':
            break
        print(data.decode('utf8'))
    conn.close()
服务端

 

import socket
clicent=socket.socket()
clicent.connect(('192.168.13.67',8000))
while 1:
    name=input('请输入你的姓名输入Q退出')
    if name.strip().upper()=="Q":
        clicent.send(b'q')
        break
    clicent.send(name.encode('utf8'))
clicent.close()
客户端

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2018-09-10 19:11  2275114213  阅读(226)  评论(0编辑  收藏  举报