网络编程OSI介绍
网络编程
软件开发架构
c/s架构(client/server)
c:客户端
s:服务端
客户端和服务器端架构,这种架构是从用户层划分的,一般客户端就是在用户电脑上安装的应用程序,而服务端就是公司里的运行的主机。
b/s架构(browser/server)
b:浏览器
s:服务器
浏览器与服务器端架构,这种架构也是从用户层面划分的,只是这个客户端不需要大家去安装什么应用程序,而是在浏览器上通过HTTP请求服务器相关的资源。
补充:bs架构的本质也是cs架构,bs架构现在正在被广泛应用,如微信小程序等等。
服务端:24小时不间断提供服务
客户端:什么时候体验服务,就去找心仪的服务端寻求服务。
网络编程的发展史
无论是早期通过电话线的电话,还是之后通过网线传输的大屁股电脑,以及有网卡的笔记本电脑。
从这些例子中我们看到要想实现远程通信除了有物理连接介质之外还需要有一套公共的标注/协议。
OSI协议

1.物理连接层
基于电信号传输010101001010二进制数据
2.数据链路层
①.规定的电信号的分组方式
②.规定了任何一台接入互联网的计算机都必须有一块网卡
ps:每一块网卡上都刻有世界上独一无二的编号,12位16进制数(mac地址)
前6位是厂商编号
后6位是流水线编号
交换机:基于以太网协议通信,不能跨局域网通信。

基于以太网协议的通信:
广播:一台计算向局域网内所有计算机发送消息,然后它们进行比对,比对错误的不予回复。
单播:通过比对之后确认是发给自己的那台计算机单独对发送广播的计算机回复。
广播风暴:所有计算机同时在局域网内发广播。
互联网是有N多个局域网彼此之间连接而成的。
路由器:连接不同的局域网。
3.网络层
IP协议
就是规定了接入互联网的计算机都必须有一个IP地址
ip地址特点:点分十进制
ip地址最小:0.0.0.0
ip地址最大:255.255.255.255
ip地址目前有两个版本:IPV4 IPV6(由于IPV4已经不够表示目前存在的计算机了,所以推出了IPV6版本)
IP地址是动态分配的。
通过IP可以解析到对方的mac地址。
4.传输层
TCP/UDP都是基于端口工作的协议
端口(port)
计算机与计算机之间其实是计算机上的应用程序与应用程序之间的通信
端口:用来唯一标识一台计算机上的某个应用程序
端口号的范围:0~65535
注意:0~1024这些都是操作系统默认使用的端口号
建议:使用8000之后的端口
MySQL默认端口:3306
Redis默认端口:6379
django默认端口:8000
flask默认端口:5000
端口号是动态分配的,比如你第一次打开QQ分配的是9898,然后你将qq关闭之后再次启动端口号可能就变了。
总结:
ip地址:用来唯一标识接入互联网的一台计算机
port端口:用来唯一标识一台计算机上的某个应用程序
ip+port:唯一标识接入互联网一台计算机上的某个应用程序
5.应用层
HTTP协议
FTP协议
TCP协议
流式协议,可靠协议
基于TCP协议通信,必须先建立双向通道
TCP协议传输数据之所以可靠的原因就是在于有双向通道???
答:不对,TCP协议可靠的原因是因为它有一个反馈机制(每次发送数据必须等到对方的回复才会将自己内存中的数据清除,否则会在一定时间内每隔一段时间发送一次,直到很长一段时间之后如果还没有响应则清除数据)。
三次握手四次挥手(*****)

三次握手建连接

三次握手的过程如下:
1.客户端发送syn=n报文给服务器端,进申请建立连接
2.服务器端收到syn报文,回应一个syn=k,ack=n+1报文,同意建立连接,并申请也建立连接
3.客户端收到服务器端的syn报文,回应一个ack=k+1报文,两边的连接建立完成。
三次握手完成之后TCP客户端和服务器端成功连接,开始传输数据。
四次挥手断连接

四次挥手过程
1.客户端发送给syn给服务端申请断开连接。
2.服务端收到syn报文,回复ack = i+1,同意断开连接。
3.在这段时间内检测是否还有未发送完的数据,然后发送syn = o给客户端断开连接。
4.客户端回复ack = o+1给服务端同意断开连接。
网络编程OSI介绍的更多相关文章
- 1.Android网络编程-HTML介绍
1.HTML介绍 超文本标记语言(HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言. 在Eclipse下则可以使用自带的浏览器浏览html: 2.H ...
- python select网络编程详细介绍
刚看了反应堆模式的原理,特意复习了socket编程,本文主要介绍python的基本socket使用和select使用,主要用于了解socket通信过程 一.socket模块 socket - Low- ...
- Socket网络编程基本介绍
一,socket的起源 socket一词的起源 在组网领域的首次使用是在1970年2月12日发布的文献IETF RFC33中发现的, 撰写者为Stephen Carr.Steve Crocker和Vi ...
- 网络编程-Socket介绍
Socket介绍 什么是socket?(5分钟) Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议 ...
- 网络编程----socket介绍、基于tcp协议的套接字实现、基于udp协议的套接字实现
一.客户端/服务器架构(C/S架构) 即C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架 ...
- Day09: socket网络编程-OSI七层协议,tcp/udp套接字,tcp粘包问题,socketserver
今日内容:socket网络编程 1.OSI七层协议 2.基于tcp协议的套接字通信 3.模拟ssh远程执行命令 4.tcp的粘包问题及解决方案 5.基于udp协议的套接字 ...
- 8.6 day27 网络编程 osi七层协议 Time模块补充知识 TCP协议
Time模块补充知识 date和datetime区别是什么? date 就是年月日 datetime就是年月时时分秒 以下代码为什么会报错? import json from datetime imp ...
- 网络编程——select介绍
一.select函数简介 select一般用在socket网络编程中,在网络编程的过程中,经常会遇到许多阻塞的函数,网络编程时使用的recv, recvfrom.connect函数都是阻塞的函数,当函 ...
- Java网络编程:OSI七层模型和TCP/IP模型介绍
OSI(Open System Interconnection),开放式系统互联参考模型 .是一个逻辑上的定义,一个规范,它把网络协议从逻辑上分为了7层.每一层都有相关.相对应的物理设备,比如常规的路 ...
随机推荐
- springboot cloud 网盘
boot https://pan.baidu.com/s/12SkGJNu_M-I-pjg-GxqHRw 5uga boot-cloud https://pan.baidu.com/s/1gO ...
- 新手学习Web前端的三个高效学习方法,基础要重视
作为新手,出于对风险的担心,不免在学习一项新技能或者转投一个新行业的时候,有所犹豫与徘徊.毕竟,在这场类似冒险的选择中,我们需要投入时间.精力以及承受相关的经济损失.但是,只有勇敢迈出第一步,才能为生 ...
- Java--Json解析
普通Json {"code":"S0000", "describe":"数据正常返回", "result&qu ...
- 第一章 mysql 的架构与历史
一.mysql 的逻辑架构 1.连接管理与安全性 2.优化与执行 二.并发控制 1.读写锁 2.锁粒度 三.事物 1.隔离级别 2.死锁 3.事物日志 四.多版本并发控制 五.Mysql 的存储引擎
- cJSON api的使用教程
背景说明:由于和后台通信,为了统一数据格式,选择使用json格式,客户端开发语言使用的是c,故需要借助第三方库来实现json格式的转化,cJSON是一个很好的第三方库, 下载链接1:https://g ...
- Python的变量和注释
变量 python的变量就像一个名字,一个变量对应一个内存地址.当我们定义一个变量时,Python解释器会在内存中开辟一片空间,用于存放各种数据(字符串.列表.元组.字典.对象....). 不同的变量 ...
- 用JS打开新窗口,防止被浏览器阻止的方法
相信做web前端或者使用JS的朋友都会遇到需要在新窗口打开页面的情况,现在浏览器大都具有弹出窗口拦截功能,所以传统的window.open()不再那么好用了.借鉴于网上查到的方法和我个人的实践,把弹出 ...
- python画图例子代码
matplotlib包,使得python可以使用类似matlab的命令 双坐标,子图例子 fig, axes = plt.subplots( 2,1, figsize=(14, 14) ) ax = ...
- mysql自定义函数初始化数据:init_data()
DELIMITER $$ USE `local_hnyz`$$ DROP FUNCTION IF EXISTS `init_data`$$ CREATE DEFINER=`root`@`localho ...
- python学习笔记(29)-操作excel
操作excel #存到excel里面,python去操作excel文件 #只支持这种后缀,xlsx ,openpyxl只支持这种格式 # from openpyxl import load_workb ...