网络编程01
软件架构的两种方式:
c/s架构:client(客户端)------->基于网络--------->server(服务端)
b/s架构:browser(客户端)------->基于网络--------->server(服务端)
ps:1.服务端和客户端都必须有唯一的地址,但是服务端的地址必须是绑定的
2.服务端必须要24小时对外提供服务
3.服务端要能支持并发
网络编程的发展史:
现在任何先进的技术都是来源于军事的
通信的发展:
1.早期的电话----->电话线连接,中间需要转接员
2.老式电脑----->需要插网线
3.笔记本电脑 无线电话------>网卡
总结以上发现想要实现远程的通信都需要一个物理连接介质
计算机和计算机之间实现远程通信方式:网线------->物理连接层基于电信号------->信息传输为二进制数(010011010111010101)----->如何解析这些数据(从哪断句????读出的是啥??怎么读??)
综上所以就有了OSI协议(OSI七层协议)
OSI七层协议:
1.应用层
2.表示层
3.会话层
4.传输层
5.网络层
6.数据链路层
7.物理连接层
1.物理连接层
基于电信号01011010的二进制
2.数据链路层
以太网协议(Ethernet):
1.规定了电信号的组合方式(数据报(报头和数据))
2.规定每个接入互联网的计算机都必须有网卡
ps:在每块网卡上都有一个独一无二的编号(mac地址)
mac地址:一个12位16进制数,其中前6位表示出产的厂家,后六位表示流水线号
局域网:
一个局域网就类似一个孤岛,我们只能在这个孤岛中通信,通信的方式位"吼",也就是广播的形式.当我们想要在这个局域网中找到某个人,我们会先将信息发至交换机,交换机会把这个信息在局域网内播放,也就是在这个局域网内的每个人都会收到,但是只有被找寻的那个人才会打开信息,这个过程叫广播.
当被找寻的人返回他的信息的给交换机,至发起人的手上这个过程叫单播.
ps:广播风暴就是局域网内的人在同一时刻全都开始发起请求,造成混乱
3.网络层
IP协议:
规定了只要介入互联网的计算机就必须有一个ip地址
每个IP地址的格式为:点分十进制数入:192.168.0.1
IP地址的范围:0.0.0.0 到255.255.255.255
IP地址的两个版本:IPV4和IPV6,之所有存在IPV6是因为IPV4的范围已经满足不了使用了,所以才加了IPV6
ps:不同局域网内的计算机想要通信必须借助路由器,路由器就是将一个个局域网进行连接,当局域网1内的计算机想要访问局域网2内的某个计算机,会先将信息交给局域网1的网关,然后通过路由器的连接给局域网2的网关,进而找到目标计算机
ps:IP都是动态随机分配的
4.传输层
tcp/udp协议
ps:tcp和udp都是基于端口工作的
端口(port):用来唯一标识计算机上的某个应用程序(端口是随机分配的,当运行的程序结束运行后,再次开启端口号会改变)
ps:端口的范围是0-65535,其中最好使用8000之后的端口,0-1024的端口是操作系统可能占用的
补充:MySQL默认端口是:3306
Redis默认端口是:6379
django默认端口是:8000
flask默认端口是:5000
TCP协议(建立双向通道):流式协议,可靠协议
ps:TCP协议之所以可靠是因为有一个反馈机制.反馈机制:在客户端发送一个申请后,系统会在内存中存储这个信息不会立即删除,只有等到服务器给出明确的收到信息后才会删除,如果没有收到确认消息会在限定的时间内规律的发送,直至最后还没回应才会删除.
三次握手:
ps:在这之中将中间的2次握手合并成一次是因为这样可以提高反应速度,且在逻辑上合理,因为通道时双向的,我可以借此来减少中间的时间损耗.其中用syn=n来标识请求通道建立,用ack=n+1来唯一标识我要建立通道的对象是谁
四次挥手:
ps:在断开连接的过程中我们为什么不向建立连接的时候一般将中间的2个合并呢?
因为在断开连接的时候,一般都是客户端想要断开和服务端之间的连接,但是当客户端发送(syn=n)请求断开后,服务端回复我收到你想断开连接的消息了(ack=n+1),但是在这之中我要看看还有没有什么东西是你之前申请的我还没来得及给你,所以有一段延时在回复你没东西在我这了,同意断开连接(syn=i),之后客户端回复收到(ack=i+1)这就断开了双向通道
ps:这就类似分手,男的对女的讲咱分了吧(syn=n),女的说我知道了(ack=n+1),我考虑下,然后这之中过了段时间,找了个富二代直接就回复了分就分吧(syn=i),少了你我还找了个更好的,男的回复那祝你幸福(ack=i+1)
ps:ip地址:用来唯一标识接入互联网的一台计算机
port端口:用来唯一标识一台计算机上的某个应用程序
ip+port:唯一标识接入互联网一台计算机上的某个应用程序
5.应用层
http协议
ftp协议
原文地址:https://www.cnblogs.com/z929chongzi/p/11311451.html
- HDUOJ-----4510 小Q系列故事——为什么时光不能倒流
- HDUOJ----4509湫湫系列故事——减肥记II
- HDUOJ-----4506小明系列故事——师兄帮帮忙
- HDUOJ---4503 湫湫系列故事——植树节
- HDUOJ----4504 威威猫系列故事——篮球梦
- 推荐一款MySQL优化工具
- HDUOJ----4502吉哥系列故事——临时工计划
- HDUOJ----4004The Frog's Games(二分+简单贪心)
- HDUOJ----4006The kth great number(最小堆...)
- HDUOJ----4501小明系列故事——买年货(三维背包)
- message 弹出窗口
- HDUOJ---1862EXCEL排序
- HDUOJ-----3591The trouble of Xiaoqian
- HDUOJ-----2571跳舞毯
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- laravel 中某一字段自增、自减的例子
- php统计数组不同元素的个数的实例方法
- PHP实现单条sql执行多个数据的insert语句方法
- PHP的JSON封装、转变及输出操作示例
- php 策略模式原理与应用深入理解
- 解决在Laravel 中处理OPTIONS请求的问题
- PHP使用观察者模式处理异常信息的方法详解
- php判断目录存在的简单方法
- 怎么优雅的使用 laravel 的 validator验证办法
- Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
- php设计模式之适配器模式原理、用法及注意事项详解
- php基于Redis消息队列实现的消息推送的办法
- tp5框架无刷新分页实现方法分析
- PHP与SQL语句写一句话木马总结
- golang实现php里的serialize()和unserialize()序列和反序列办法详解