网络编程
Posted huangxuanya
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程相关的知识,希望对你有一定的参考价值。
网络编程
软件开发架构
? c/s架构
? c:客户端
? s:服务端
? b/s架构
? b:浏览器
? s:服务器
? 手机端:好像C/S架构比较火,其实不然,微信小程序,支付宝第三方接口
? 统一接口!
? pc端:b/s比较火
? 本质:b/s其实也是c/s
服务端:24小时不间断提供服务,谁来我就服务谁(服务端与客户端都需要有唯一的地址,但是服务端的地址必须固定/绑定) 并且支持并发
客户端:想体验服务的时候,就去找服务端体验服务
网络
- 网络建立的目的就是为了数据交互(通信) 网络=底层物理连接介质+互联网协议
- 如何实现通信
- 1、建立好底层的物理连接介质
- 2、有一套统一的通信标准,称之为互联网协议
- 主要掌握五层模型
- 应用层(应用层,表示层,会话层):http,ftp协议
- 传输层:tcp/udp协议
- 网络层:ip协议
- 数据链路层:ethernet以太网协议
- 物理层:发送电信号
1.物理连接层:(客户端(网卡)<--------网线-----internet(路由器....)-------网线------->(网卡)服务端)
实现计算机之间物理连接,传输的数据都是01010的二进制
电信号工作原理:电只有高低电频
2.数据链路层("以太网协议"!):
1.规定一组电信号应该称之为一组数据帧
2.规定了只要是接入物联网的计算机,都必须有一块网卡!
网卡上面刻有世界唯一的编号:
每块网卡出厂时都被烧制上一个世界唯一的mac地址,
长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)
我们管网卡上刻有的编号叫电脑的>>>mac地址
3.规定一组数据帧=head(帧头)相当于快递单+data(数据)相当于快递里的内容
head(包含固定18个字节)
发送者/源地址:6个字节
接收者/目标地址:6个字节
数据类型:6个字节
? 基于以太网协议通信(广播包只能在一个局域网内使用):通信基本靠吼!弊端:广播风暴
? 交换机:多台电脑之间的连接
3.网络层(IP协议)
规定了计算机都必须有一个ip地址
ip地址特点:点分十进制
有两个版本ipv4和ipv6 为了能够兼容更多的计算机
最小:0.0.0.0
最大:255.255.255.255
IP协议可以跨局域网传输
(ip可以变+mac一出场就规定好了)可以标识全世界范围内独一无二的一台计算机的位置
4.传输层(tcp/udp端口协议)
端口(port):唯一标识一台计算机上某一个基于网络通信的应用程序
端口范围:0~65535(动态分配,每次打开软件,操作系统分配的端口号有可能不一样)
注意:0~1024(这是操作系统自己保留的,因为软件运行在操作系统之上)
1024~65535(这是你写的应用软件给你分配的区间)
flask框架默认端口5000
django框架默认端口8000
mysql数据库默认端口3306
redis数据库默认端口6379
注意:一台计算机上同一时间一个端口号只能被一个应用程序占用
小总结:
mac地址:基于广播mac地址的这种通讯方式,只能在局域网内去发送
跨局域网:
IP地址:唯一标识全世界接入互联网的独一无二的机器(mac通常不用绑定,由arp协议:根据ip地址解析mac地 址)
port端口号:唯一标识一台计算机上的某一个应用程序
ip+port :能够唯一标识全世界上独一无二的一台计算机上的某一个应用程序(基于网络通信)
详解一到四层:
物理层(负责发送电信号,全是人为的高低电频1010..的数字,没有具体的意义)
——>数据链路层(对物理层的数字进行划分,在局域网内的两台机器可以通信,但是mac地址只能在一个局域 网内(一个小地方)发送)
——>网络层(机器获取ip ,mac+ip可以跨局域网通信,但是我们最终的目的不是机器之间的通信,而是应用 软件之间的通信)
——>传输层(获取端口prot , mac+ip+port :能够唯一标识全世界上独一无二的一台计算机上的某一个应用程序 (基于网络通信))
了解:arp协议:根据ip地址解析mac地址(在数据链路层)
两台机器想要在局域网内通信,除了自己的IP地址,还要获取对方的mac地址。所以首先要事先知道对方的IP地址,然后arp会将自己的IP和子网掩码进行按位运算得到子网地址,也将对方的ip和子网掩码进行按位运算得到子网地址,然后两个子网地址进行判断是否相同,相同就是在同一个局域网内,不相同就是跨局域网(听我录音)
重点:
TCP协议(流式协议,可靠协议)
?
三次握手:
SYN_SEND(发送链接请求)——>LISTEN(监听),SYN_RCVD(接收请求) 并且携带同意信息同时又向cilent发送链接请求——>ESTABLISHED(建立连接)同时又接收到服务端发来的请求——>ESTABLISHED(接收到客户端发来的确认信息,建立连接关系)
客户端向服务端连接(SYN代表发送请求信息 seq=x表示就是请求连接的状态,ACK=x+1表示基于上一条的请求连接的确认回复信息)
(for example:
serve get data packet will receive 变量syn=1,and know the client need a linking
the serve will answer the client (ack=1 stand for reply) and then client refer to tcp协议 to unpacked packet will see the ack=1
cleint will know one thing that the serve have agreed my requests,client received ack=1)
服务端向客户端连接(SYN代表发送请求信息 seq=y表示就是请求连接的状态),ACK=y+1表示基于上一条的请求连接的确认
回复信息)
(一条请求与回复都是确保只是一个客户)
(client——>serve serve——>clinet 双向连接)
TCP协议可靠的原因:
给对方发消息,对方必须回复确认收到传输的数据才会被删除(内存中保存着数据),否则会在一定时间间隔之内反复发送知道对方接收或者超时
四次挥手:
FIN_WAIT_1 (close())代表最先主动断开连接一方
CLOSE_WAIT代表client到serve的那条连接要断开了,服务端收到信息,服务端进入close_wait的状态
FIN_WAIT_2代表被动断开连接的一方,等待对方给我发断链接请求状态
LAST_ACK服务端发完给客户端的数据,服务端主动发送Fin信息,last_ack状态
TIME_WAIT客户端收到信息进入time_wait状态
最后所有的状态信息连接都被回收
(FIN就是代表发送断链接请求)
(这是客户端向服务端发起的断链接请求,也可以是服务端向客户端发起断链接请求)
正是由于在断开连接的时候双方都需要确认是否还有数据需要发送,所以四次挥手不能合并成三次
syn 洪水攻击:服务端大量处于接收连接请求的状态
星轨:访问量的大小
以上是关于网络编程的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段14——Vue的axios网络请求封装
VSCode自定义代码片段14——Vue的axios网络请求封装