网络编程简介(OSI七层协议,TCP协议原理,三次握手与四次挥手)
目录
网络编程
软件开发架构
软件开发架构分为两种:
C/S架构
B/S架构
C/S架构
客户端与服务器端架构,这种架构也是从用户层面(也可以是物理层面)来划分的。
C/S架构:
Client: 客户端
Server: 服务端
优点:
软件的使用稳定,并且可以节省网络资源。
缺点:
1.若用户想在同一个设备上使用多个软件,必须下载多个客户端。
2.软件的每一次更新,客户端也必须跟着重新下载更新。
C/S架构的软件:
例如: 电脑上的QQ、Pycharm等...手机端(移动端)的微信、王者荣耀等...
c:客户端:一般泛指客户端应用程序exe,程序需要先安装后,才能运行在用户的电脑上,对用户的电 脑操作系统环境依赖较大。
s:服务端:只要访问服务端就会不间断的给我们返回数据。
B/S架构
浏览器端与服务器端架构,这种架构是从用户层面来划分的。
Browser: 浏览器(客户端)
Server: 服务端
优点:
以浏览器充当客户端,无需用户下载多个软件,也无需用户下载更新软件版本,
直接在浏览器上访问需要使用的软件。
缺点:
消耗网络资源过大,当网络不稳定时,软件的使用也会不稳定。
b:浏览器:其实也是一种Client客户端,只是这个客户端不需要大家去安装什么应用程序,只需在浏览器上通过HTTP请求服务器端相关的资源(网页资源),客户端Browser浏览器就能进行增删改查;
s:服务器:用户通过浏览器上的HTTP请求服务器的相关资源,服务器经过某些处理,匹配给用户指定的数据。
手机端c/s看上去很流行,但实际上b/s正在崛起,现在很多主流软件,比如微信、支付宝、QQ等手机端应用程序中添加了很多其他的服务功能,这里只给了一个连接上服务器的链接,用户不需要再重新下载对应的软件使用相应功能,而这些服务链接都是基于b/s架构的。
网络编程的发展史
任何现进的技术最早都来源于军事。军用以后淘汰到民用;
早期打电话需要电话线,电脑需要网线,笔记本电脑、无线电话需要网卡,所以想要实现远程通信第一个需要具备的条件是:物理连接介质。
人要想实现无障碍交流必须说统一的语言 >>> 英文
计算机与计算机之间要想实现远程通信除了有物理连接介质之外还需要
有一套公共的标准/协议。
这种协议称为OSI(open system interconection),七层协议,或者OSI五层协议
互联网协议
OSI七层协议:应用层、表示层、会话层、传输层、网络层、数据链路层、物理连接层
OSI五层协议:应用层、传输层、网络层、数据链路层、物理连接层。
1.物理连接层
基于电信号传输010101001010二进制数据
2.数据链路层
数据链路层的 "以太网协议",专门用于处理基于电信号发送二进制的数据。
1)规定的电信号的分组方式;
2)规定了任何一台接入互联网的计算机都必须有一块网卡,每一块网卡上面都刻有世界上独一无二的编号;
以上两点合称为’以太网协议‘
网卡:12位16进制数表示,前6位是厂商编号,后6位是流水线编号,我们管这12数叫mac地址。
基于以太网协议(在局域网内部):
广播:在局域网内每个人都向所有进行广播,会产生广播风暴;
单播:只有一个人对所有人进行发送;
交换机:基于以太网协议通信, 可以让多台电脑连接到一起,不能跨局域网通信
互联网是有n多个局域网彼此之间连接而成的
想要跨局域网进行通信,就到了网络层(互联网)
3.网络层
IP协议
规定了只要是接入互联网的计算机都必须有一个IP地址
ip地址特点:点分十进制
最小:0.0.0.0
最大:255.255.255.255
ip地址目前有两个版本:IPV4 IPV6(由于IPV4已经不够表示目前存在的计算机了 所以推出了IPV6版本)
本机IP: 回环地址 127.0.0.1 ---> localhost
IP地址是动态分配的
4.传输层
TCP\UDP协议,都是基于端口工作的协议
端口(port) :用来唯一标识一台计算机上的某个应用程序
端口号的范围:0~65535
计算机与计算机之间的通信其实是计算机上的应用程序与应用程序之间的通信
注意:0~1024这些都是操作系统默认使用的端口号
建议:使用8000之后的端口
MySQL默认端口:3306
Redis默认端口:6379
django默认端口:8000
flask默认端口:5000
mongodb: 27017
Tomcat: 8080
端口号是动态分配的
第一次起qq分配到的是8989
将qq关闭再次启动端口号可能就变了
.总结
ip地址:用来唯一标识接入互联网的一台计算机
port端口:用来唯一标识一台计算机上的某个应用程序
ip+port:唯一标识接入互联网一台计算机上的某个应用程序
若想服务端与客户端进行通信,必须要建立连接,产生双向通道。
一条是客户端往服务端发送消息的。
另一条是服务端往客户端发送消息的。
5.应用层
HTTP协议(其后家S表示经过美国某机构认证)
FTP协议:流式协议,可靠协议,基于TCP协议通信 必选先建立双向通道
三次握手四次挥手
三次握手建链接
1) 建立双向通道,建立好连接。
2)listen: 监听
3)established: 确认请求建立连接
基于TCP协议的客户端向服务端发送请求,建立一个通道,用于标识请求,服务端确认并接收到请求,向客户端回复也是唯一标识,这时客户端和服务端的单向通道就建立好了,然后服务端向客户端也发送了请求,客户端接受之后,并再次回复服务端,之后服务端到客户端的通道就建立好了由于服务端第一次接受请求与再次向客户端发送请求是同时建立的,两次乐意合并成一次,所以称为三次握手。
数据传输
发送数据:
1)write
2)read
客户端往服务端发送数据,数据存放在内存中,需要服务端确认收到,数据才会在内存中释放掉。
四次挥手断连接
TIME_WAIT: 时间等待
在客户端和服务端不在进行数据交互时,双方均可断开请求,以客户端为例,如果客户端向服务端发送断开请求,服务端回复客户端确认,此时,客户端到服务端的通道断开了,而服务端还需要一定的延迟,判断是否当时还有数据正在传输,如果有,服务端会发送数据直到完毕,然后向客户端发送断开请求,客户端回应,自此服务端与客户端之间的通道断开,两者通信结束。
TCP协议传输数据可靠的原因
TCP协议传输数据之所以可靠是因为两者基于双向通道发消息,只有当收方确认收到消息并反馈发方,才删除内存中数据,如果没有反馈发方,在一定时间内,发方会每隔一段时间向收方发送一次,直到确认收方收到消息。否则,超过一定时间,发方认为收方宕机或其他故障,删除内存中存储的数据,不会再发。
网络编程简介(OSI七层协议,TCP协议原理,三次握手与四次挥手)的更多相关文章
- TCP 中的三次握手和四次挥手
Table of Contents 前言 数据报头部 三次握手 SYN 攻击 四次挥手 半连接 TIME_WAIT 结语 参考链接 前言 TCP 中的三次握手和四次挥手应该是非常著名的两个问题了,一方 ...
- TCP为什么做三次握手、四次挥手
TCP 为什么做三次握手.四次挥手? TCP 是为了解决可靠传输出现的.为了实现可靠性,TCP 做了流量控制.拥塞控制,并且在建立.关闭连接前做些机制:三次握手.四次挥手. 三次握手是为了让客户端.服 ...
- 详解TCP连接的“三次握手”与“四次挥手”(下)
上文链接: 详解TCP连接的"三次握手"与"四次挥手"(上) 四.TCP的四次挥手(Four-Way Wavehand) 0.前言 对于"三次握手&q ...
- 01:osi七层---基于TCP协议的套接字(socket)
1 : osi 七层,tcp/ip 五层 1 cs架构和bs架构2 互联网3 osi七层 tcp/ip五层 -物理层 -网线.光纤 -数据链路层 -网卡 - ...
- 浅探网络1---tcp协议详解(三次握手和四次挥手)
TCP协议是网络多层协议中运输层的最重要的协议之一,运输层是两台主机的进程之间的通信.除了TCP还有一个是UDP协议(用户数据包协议) TCP全称是Transmission Control Proto ...
- 【极客思考】计算机网络:Wireshark抓包分析TCP中的三次握手与四次挥手
[摘要]本文重点分析计算机网络中TCP协议中的握手和挥手的过程. [前提说明] 前段时间突然看到了一篇关于TCP/IP模型的文章,心想这段时间在家里也用wireshark抓了点包,那么想着想着就觉得需 ...
- 转 TCP/IP的三次握手与四次挥手详解
TCP((Transmission Control Protocol)传输控制协议,是一个面向连接的协议.在运用此协议进行数据传输前都会进行连接的建立工作(三次握手):当数据传输完毕,连接的双方都会通 ...
- TCP/IP的三次握手与四次挥手详解
TCP((Transmission Control Protocol)传输控制协议,是一个面向连接的协议.在运用此协议进行数据传输前都会进行连接的建立工作(三次握手):当数据传输完毕,连接的双方都会通 ...
- 详解TCP连接的“三次握手”与“四次挥手”(上)
一.TCP connection 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西: 由于TCP不存在连接的概念,只存在请求和响应,请求和响应都是数据包,它 ...
- 2.TCP/IP的三次握手与四次挥手
参考文章:http://357742954.blog.51cto.com/368705/1317226 TCP(Transmission Control Protocol) 传输控制协议,是一个面向连 ...
随机推荐
- Tensor Flow基础(2.0)
写在前面:此篇纯属自我记录,参考意义不大. 数据类型 数值型 标量Scalar:1.0,2.3等,shape为0->[] a = 1.2 向量Vector:[1.0],[2.3,5.4]等,sh ...
- vue-teach
编译器的工作过程 http://www.ruanyifeng.com/blog/2014/11/compiler.html DNS 原理入门 http://www.ruanyifeng.com/blo ...
- Column常用的参数
#encoding: utf-8 from sqlalchemy import create_engine,Column,Integer,String,DateTime from sqlalchemy ...
- java学习-2
类的定义 成员变量: 变量类型 变量名称 成员方法:public void 方法名称(){} 注意:成员变量是直接定义在类当中方法外面 创建对象使用类 导包.指出需要的类在什么位置 import 包名 ...
- [转] Python中的装饰器(decorator)
想理解Python的decorator首先要知道在Python中函数也是一个对象,所以你可以 将函数复制给变量 将函数当做参数 返回一个函数 函数在Python中和变量的用法一样也是一等公民,也就是高 ...
- Magento2入门之修改logo
本文用于学习记录用 1.主题创建是在路径 /app/design/frontend/公司名/主题名称/ 我自己创建的路径为 app/design/frontend/Bman/castle,以下操作都在 ...
- AppCan调试问题
来源:http://edu.appcan.cn/theVideoMain1.html?chapterId=248_1 第1步, 生成AppCan调试中心 第2步, 启动AppCan调试中心 第3步, ...
- Django 中事务的使用
目录 Django 中事务的使用 Django默认的事务行为 在HTTP请求上加事务 在View中实现事务控制 使用装饰器 使用context manager autocommit() commit_ ...
- JDK 监控和故障处理工具总结 (转)
出处: JDK 监控和故障处理工具总结 JDK 监控和故障处理工具总结 JDK 命令行工具 jps:查看所有 Java 进程 jstat: 监视虚拟机各种运行状态信息 jinfo: 实时地查看和调整 ...
- luogu P4755 Beautiful Pair
luogu 这题有坨区间最大值,考虑最值分治.分治时每次取出最大值,然后考虑统计跨过这个位置的区间答案,然后两边递归处理.如果之枚举左端点,因为最大值确定,右端点权值要满足\(a_r\le \frac ...