网络编程

软件开发架构

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. 1.Android网络编程-HTML介绍

    1.HTML介绍 超文本标记语言(HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言. 在Eclipse下则可以使用自带的浏览器浏览html: 2.H ...

  2. python select网络编程详细介绍

    刚看了反应堆模式的原理,特意复习了socket编程,本文主要介绍python的基本socket使用和select使用,主要用于了解socket通信过程 一.socket模块 socket - Low- ...

  3. Socket网络编程基本介绍

    一,socket的起源 socket一词的起源 在组网领域的首次使用是在1970年2月12日发布的文献IETF RFC33中发现的, 撰写者为Stephen Carr.Steve Crocker和Vi ...

  4. 网络编程-Socket介绍

    Socket介绍 什么是socket?(5分钟) Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议 ...

  5. 网络编程----socket介绍、基于tcp协议的套接字实现、基于udp协议的套接字实现

    一.客户端/服务器架构(C/S架构)                                                即C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架 ...

  6. Day09: socket网络编程-OSI七层协议,tcp/udp套接字,tcp粘包问题,socketserver

    今日内容:socket网络编程    1.OSI七层协议    2.基于tcp协议的套接字通信    3.模拟ssh远程执行命令    4.tcp的粘包问题及解决方案    5.基于udp协议的套接字 ...

  7. 8.6 day27 网络编程 osi七层协议 Time模块补充知识 TCP协议

    Time模块补充知识 date和datetime区别是什么? date 就是年月日 datetime就是年月时时分秒 以下代码为什么会报错? import json from datetime imp ...

  8. 网络编程——select介绍

    一.select函数简介 select一般用在socket网络编程中,在网络编程的过程中,经常会遇到许多阻塞的函数,网络编程时使用的recv, recvfrom.connect函数都是阻塞的函数,当函 ...

  9. Java网络编程:OSI七层模型和TCP/IP模型介绍

    OSI(Open System Interconnection),开放式系统互联参考模型 .是一个逻辑上的定义,一个规范,它把网络协议从逻辑上分为了7层.每一层都有相关.相对应的物理设备,比如常规的路 ...

随机推荐

  1. netty 百度网盘 密码

    netty基础 https://pan.baidu.com/s/1v_ME49LIef1Kwga8z2QbDw?spm=a1z09.2.0.0.680b2e8d5LI8S0   zb7u mina n ...

  2. Java web之jsp,xml(2020.1.7)

    1.xml文档规则 xml声明 字符集 xml元素的基本规则: 合法标签名 嵌套子元素 空元素

  3. axios新手实践实现登陆

    其实像这类的文章网上已经有很多很好的,写这篇文章,相当于是做个笔记,以防以后忘记 用到的:1. vuex 2.axios 3.vue-route 登陆流程为:1.提交登陆表单,拿到后台返回的数据 2. ...

  4. linux服务器开放防火墙和端口,以及查询状态

    自己搞一个自己网站时候,购买的阿里云服务器,发现部署项目访问不到,首先需要确认入站规则是否配置. 一.安全组列表添加 1.打开安全组列表 2.添加入站规则 3.添加安全组规则 二.通过防火墙,开启端口 ...

  5. \_\_module\_\_和\_\_class\_\_

    目录 __module__和__class__ 一.__module__ 二.通过字符导入模块 三.__class__ __module__和__class__ # lib/aa.py class C ...

  6. 关于CSS中的字体尺寸设置 em rem

    常用单位 在CSS中可以用很多不同的方式来设定字体的尺寸.一般来说,这些单位被分成两大类:绝对单位(absolute)和相对单位(relative). 绝对单位在大多数情况下是相对于某些实际量度而言的 ...

  7. Python中比较特殊的几种数据类型list、tuple、dict、set

    list list(列表)是Python内置的一种数据类型,它是一种有序.可变的集合,可以随时添加和删除其中的元素. >>> classmates = ['Li', 'Tom', ' ...

  8. YOLO配置文件理解

    [net] batch=64 每batch个样本更新一次参数. subdivisions=8 如果内存不够大,将batch分割为subdivisions个子batch,每个子batch的大小为batc ...

  9. 可用的 .net core 支持 RSA 私钥加密工具类

    首先说明 MS并不建议私钥加密,而且.net 于安全的考虑,RSACryptoServiceProvider类解密时只有同时拥有公钥和私钥才可以,原因是公钥是公开的,会被多人持有,这样的数据传输是不安 ...

  10. 两种访问接口的方式(get和post)

    跨机器.跨语言的远程访问形式一共有三种:scoket发送数据包.http发送请求.rmi远程连接: http发送请求方式:分为post和get两种方式 importjava.io.IOExceptio ...