网络编程

软件开发架构

软件开发架构分为两种:
​ 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协议原理,三次握手与四次挥手)的更多相关文章

  1. TCP 中的三次握手和四次挥手

    Table of Contents 前言 数据报头部 三次握手 SYN 攻击 四次挥手 半连接 TIME_WAIT 结语 参考链接 前言 TCP 中的三次握手和四次挥手应该是非常著名的两个问题了,一方 ...

  2. TCP为什么做三次握手、四次挥手

    TCP 为什么做三次握手.四次挥手? TCP 是为了解决可靠传输出现的.为了实现可靠性,TCP 做了流量控制.拥塞控制,并且在建立.关闭连接前做些机制:三次握手.四次挥手. 三次握手是为了让客户端.服 ...

  3. 详解TCP连接的“三次握手”与“四次挥手”(下)

    上文链接: 详解TCP连接的"三次握手"与"四次挥手"(上) 四.TCP的四次挥手(Four-Way Wavehand) 0.前言 对于"三次握手&q ...

  4. 01:osi七层---基于TCP协议的套接字(socket)

    1 : osi 七层,tcp/ip 五层 1 cs架构和bs架构2 互联网3 osi七层 tcp/ip五层 -物理层   -网线.光纤        -数据链路层       -网卡        - ...

  5. 浅探网络1---tcp协议详解(三次握手和四次挥手)

    TCP协议是网络多层协议中运输层的最重要的协议之一,运输层是两台主机的进程之间的通信.除了TCP还有一个是UDP协议(用户数据包协议) TCP全称是Transmission Control Proto ...

  6. 【极客思考】计算机网络:Wireshark抓包分析TCP中的三次握手与四次挥手

    [摘要]本文重点分析计算机网络中TCP协议中的握手和挥手的过程. [前提说明] 前段时间突然看到了一篇关于TCP/IP模型的文章,心想这段时间在家里也用wireshark抓了点包,那么想着想着就觉得需 ...

  7. 转 TCP/IP的三次握手与四次挥手详解

    TCP((Transmission Control Protocol)传输控制协议,是一个面向连接的协议.在运用此协议进行数据传输前都会进行连接的建立工作(三次握手):当数据传输完毕,连接的双方都会通 ...

  8. TCP/IP的三次握手与四次挥手详解

    TCP((Transmission Control Protocol)传输控制协议,是一个面向连接的协议.在运用此协议进行数据传输前都会进行连接的建立工作(三次握手):当数据传输完毕,连接的双方都会通 ...

  9. 详解TCP连接的“三次握手”与“四次挥手”(上)

    一.TCP connection 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西: 由于TCP不存在连接的概念,只存在请求和响应,请求和响应都是数据包,它 ...

  10. 2.TCP/IP的三次握手与四次挥手

    参考文章:http://357742954.blog.51cto.com/368705/1317226 TCP(Transmission Control Protocol) 传输控制协议,是一个面向连 ...

随机推荐

  1. spring @valid 注解

    用于验证注解是否符合要求,直接加在变量之前,在变量中添加验证信息的要求,当不符合要求时就会在方法中返回message 的错误提示信息. @PostMapping public User create ...

  2. C++之用程序理解浅拷贝

    C++中的浅拷贝是产生很多问题的根本原因,其根本原因是在有指针的时候,只是拷贝了一个指针的值,多个指针指向同一块内存区域,当free内存时,造成其他指针指向的空间不存在.结合构造函数和析构函数理解浅拷 ...

  3. 协程,纤程(Fiber),或者绿色线程(GreenThread)

    纤程(Fiber),或者绿色线程(GreenThread) 面试官:你知道协程吗? 你:订机票的那个吗,我常用. 面试官:行,你先回去吧,到时候电话联系 ........ 很尴尬,但是事实是,很大一部 ...

  4. 使用PowerShell 自动安装.NET4.6.1离线包

    自动安装脚本在文章末尾 自动安装脚本在文章末尾 自动安装脚本在文章末尾 运行环境:Windows Server 2012 R2 开发环境:Win10 Microsoft .NET Framework ...

  5. Python使用pycharm导入pymysql

    file->setting->project->project interperter,双击右侧出现的pip,弹出安装包,搜索pymysql->选择第一个->Instal ...

  6. Django基础之模型层(下)

    聚合查询 关键字:aggregate from django.db.models import Max,Min,Sum,Count,Avg 统计所有书的平均价格 models.Book.objects ...

  7. 如何将本地的项目推送至git仓库

    转载:https://www.jianshu.com/p/31dea20b0084 1.cd projectName probjectName是项目文件夹的名字, 先进入项目文件夹 2.git ini ...

  8. 牛客 2B 树 (组合计数)

    传送门 大意: 给定n节点树, 求划分为不超过$k$个连通块的方案数. n,k<=300. 核心观察是每个连通块深度最低的点固定以后染色方案就固定了. 所以答案为$\sum\limits_{i= ...

  9. C++ 类类型转换函数explicit 关键字

    标准数据之间会进行  隐式类型安全转换. 转换规则: 隐式类型转换的问题: #include <iostream> #include <string> using namesp ...

  10. leetcode 1267. Count Servers that Communicate

    You are given a map of a server center, represented as a m * n integer matrix grid, where 1 means th ...