首页 > 其他 > 详细

网络编程

时间:2021-06-07 16:25:21      阅读:18      评论:0      收藏:0      [点我收藏+]

学习网络编程的目的



为了开发一个CS架构或者BS架构的软件

客户端/服务器架构

    1.硬件C/S架构(打印机)
    2.软件C/S架构
    
互联网中处处是C/S架构

  如百度网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种)

  腾讯作为服务端为你提供视频,你得下个腾讯视频客户端才能看它的视频)

C/S架构与套接字(socket)的关系:

学习套接字编程的目的式为了开发一个C/S或者B/S架构的软件

client --------------网络-------------- server

browser--------------网络--------------server

什么是网络



网络 = 物理连接设备 + 互联网通信协议(就是计算机界的统一语言)

网络通信原理

互联网的本质就是一系列的网络协议

然而internet为何物?
其实两台计算机之间通信与两个人打电话之间通信的原理是一样的(中国有很多地区,不同的地区有不同的方言,为了全中国人都可以听懂,大家统一讲普通话)

英语成为世界上所有人通信的统一标准,如果把计算机看成分布于世界各地的人,那么连接两台计算机之间的internet实际上就是一系列统一的标准,这些标准称之为互联网协议,互联网的本质就是一系列的协议,总称为‘互联网协议’(Internet Protocol Suite).

互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准。

为何要有网络



网络:信息高速公路

为了方便数据传输

OSI七层协议

互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层

技术分享图片

每一层功能



1、物理层
	
    物理层由来:孤立的计算机之间要想一起玩,就必须接入internet,言外之意就是计算机之间必须完成组网
	物理层功能:主要负责发送电信号,用高低电平模拟二进制数0101,高电平对应数字1,低电平对应数字0
    
	网线:--》1001000电信号--》从网线中传输电信号
    8个比特位是一个字节
    
2、数据链路层

	数据帧:一组电信号是一个数据帧,有头和数据部分
    
    以太网协议Ethernet:要求连入网络的计算机必要要有一块网卡,并且规定全球每一块网卡的mac地址都不一样,用12位十六进制数表示,前六位表示生产厂商,后六位表示流水线号
	以太网协议的数据传输部分分为报头和数据部分,报头有18个字节组成,前6个字节为自己的mac地址,中间6个字节是对方mac地址,后6个字节表示数据类型
    
	网卡--》mac地址--》全球唯一的--》网卡出厂少在了网卡上。
    
	48位二进制--》看到的都是16进制表示
    
	广播:
    	局域网内通信,所有人都会接收到,通过mac地址确定给谁的数据报,如果不是自己的就不处理
        
    广播风暴

3、网络层

	跨局域网通信,需要经过网络层

	网络层的由来:必须找出一种方法来区分哪些计算机属于同一广播域,哪些不是,如果是就采用广播的方式发送,如果不是,就采用路由的方式(向不同广播域/子网分发数据包),mac地址是无法区分的,它只跟厂商有关
    
    IP地址:0.0.0.0 - 255.255.255.255
    
    子网掩码:配合IP地址进行二进制的与运算,算出两个IP地址是否属于同一个局域网
    
    ARP协议:ip和mac的对照表,负责把ip解析成mac地址

4、传输层

	传输层的由来:网络层的ip帮我们区分子网,以太网层的mac帮我们找到主机,然后大家使用的都是应用程序,你的电脑上可能同时开启qq,暴风影音,等多个应用程序,那么我们通过ip和mac找到了一台特定的主机,如何标识这台主机上的应用程序,答案就是端口,端口即应用程序与网卡关联的编号。
    
    传输层功能:建立端口到端口的通信

	端口:0 - 65535 一个应用程序可以监听多个端口,但是一个端口只能属于一个应用程序

    TCP协议:可靠传输
    
    UDP协议:不可靠传输
    
5、应用层

	http,ftp,websocket...
    

常用端口号

应用程序 FTP TFTP TELNET SMTP DNS HTTP SSH MYSQL
熟知端口 21,20 69 23 25 53 80 22 3306
传输层协议 TCP UDP TCP TCP UDP TCP TCP TCP

flask框架默认端口:5000

Django框架默认端口:8000

MySQL数据库默认端口:3306

redis数据库默认端口:6379

在一台计算机上,同一时间同一端口只能有一个应用程序占用

总结:IP能唯一的表示互联网中的某一台计算机,port能唯一的表示一台计算机上的一个应用程序

ip+port=》标识全世界范围内独一无二的一个基于网络通信的软件

ARP协议:通过IP地址解析成MAC地址

DNS



DNS:把网址转换成IP地址

从浏览器发送出去的数据,都是http协议,默认都是80端口

TCP三次握手四次挥手

1、tcp可靠传输:三次握手,四次回收保证数据可靠

2、三次握手

	客户端想服务端发送链接请求
    服务端回复可以建立,并且带着跟客户端建立连接的数据包
    客户端收到后,链接建好了
    
3、这个过程后就剋有可靠传输数据

4、断开链接(4次挥手)

	客户端告诉服务端,要断开
    服务端收到,回复ok
    服务端可能还有数据在传递,暂时还没断开,要等数据传完
    服务端告诉客户端,我要断开链接
    客户端收到,回复ok
    

Socket层



1、Socket抽象层,从osi七层抽象出去的,抽象了网络层和传输层,跟语言无关,任何语言都会有socket的封装

2、专门给开发人员用的

技术分享图片

储备知识一:通信分为两大类



1、目标主机在局域网内

2、目标主机不在局域网内

储备知识二:ip地址与子网掩码



ip的作用有二:

	1、arp歇一会根据ip地址解析成mac地址
    
    2、ip+子网掩码按照位与运算会得到网络地址,以此来判断源于模板是否在一个局域网内

通信的前段是:先拿到目标的ip端口

arp协议的工作步骤:



1、根据自己的ip与子网掩码计算出自己的网络地址

2、根据对方的ip与子网掩码计算出对方的网络地址

3、判断1和2的网络地址是否一样

3.1、如果一样,证明源地址和目标地址在一个局域网内,只需要走交换机即可

	发arp协议的广播包->拿到目标主机的mac地址
    (自己的mac FF-FF-FF-FF-FF-FF) (自己的ip地址 对方的ip地址) 数据部分
    
    发送真实的数据包
    (自己的mac地址 目标主机的mac地址)(自己的ip地址 对方的ip地址) 数据部分
    
3.2、如果不一样,证明源与目标不在同一个局域网内,需要走交换机,再发给路由器,路由器再转发给运营商的环境

	发arp协议的广播包-》拿到网关的mac地址
    自己的mac FF-FF-FF-FF-FF-FF 自己的ip地址  网关的ip地址   数据部分
    
    发送真实的数据包
    自己的mac 网关的mac地址 自己的ip地址  对方的ip地址   源端口 目标端口 数据部分
    

交互机只有两种情况广播:



1、目标mac为FF-FF-FF-FF-FF-FF
    
2、目标mac地址不在mac地址表中

网络编程

原文:https://www.cnblogs.com/BaiJiaZhengMing/p/14858234.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!