网络编程简介(OSI七层协议,TCP协议原理,三次握手与四次挥手)

一笑奈何 提交于 2019-12-01 17:18:57

# 网络编程

网络编程简介(OSI七层协议,TCP协议原理,三次握手与四次挥手)

软件开发架构

软件开发架构分为两种:
​ C/S架构
​ B/S架构

### C/S架构

​ 客户端与服务器端架构,这种架构也是从用户层面(也可以是物理层面)来划分的。

C/S架构:
Client: 客户端
Server: 服务端
优点:
软件的使用稳定,并且可以节省网络资源。
缺点:
1.若用户想在同一个设备上使用多个软件,必须下载多个客户端。
2.软件的每一次更新,客户端也必须跟着重新下载更新。
C/S架构的软件:
例如: 电脑上的QQ、Pycharm等...手机端(移动端)的微信、王者荣耀等...
 c:客户端:一般泛指客户端应用程序exe,程序需要先安装后,才能运行在用户的电脑上,对用户的电 脑操作系统环境依赖较大。

img
s:服务端:只要访问服务端就会不间断的给我们返回数据。

### B/S架构

​ 浏览器端与服务器端架构,这种架构是从用户层面来划分的。

Browser: 浏览器(客户端)
Server: 服务端
优点:
以浏览器充当客户端,无需用户下载多个软件,也无需用户下载更新软件版本,
直接在浏览器上访问需要使用的软件。

缺点:
消耗网络资源过大,当网络不稳定时,软件的使用也会不稳定。
  b:浏览器:其实也是一种Client客户端,只是这个客户端不需要大家去安装什么应用程序,只需在浏览器上通过HTTP请求服务器端相关的资源(网页资源),客户端Browser浏览器就能进行增删改查;
s:服务器:用户通过浏览器上的HTTP请求服务器的相关资源,服务器经过某些处理,匹配给用户指定的数据。

img

手机端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地址。

交换机:基于以太网协议通信, 可以让多台电脑连接到一起,不能跨局域网通信

img

互联网是有n多个局域网彼此之间连接而成的

img

### 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协议的客户端向服务端发送请求,建立一个通道,用于标识请求,服务端确认并接收到请求,向客户端回复也是唯一标识,这时客户端和服务端的单向通道就建立好了,然后服务端向客户端也发送了请求,客户端接受之后,并再次回复服务端,之后服务端到客户端的通道就建立好了由于服务端第一次接受请求与再次向客户端发送请求是同时建立的,两次乐意合并成一次,所以称为三次握手。

img

### 数据传输
发送数据:
1)write
2)read
客户端往服务端发送数据,数据存放在内存中,需要服务端确认收到,数据才会在内存中释放掉。

img

### 四次挥手断连接

TIME_WAIT: 时间等待

在客户端和服务端不在进行数据交互时,双方均可断开请求,以客户端为例,如果客户端向服务端发送断开请求,服务端回复客户端确认,此时,客户端到服务端的通道断开了,而服务端还需要一定的延迟,判断是否当时还有数据正在传输,如果有,服务端会发送数据直到完毕,然后向客户端发送断开请求,客户端回应,自此服务端与客户端之间的通道断开,两者通信结束。

img

### TCP协议传输数据可靠的原因
TCP协议传输数据之所以可靠是因为两者基于双向通道发消息,只有当收方确认收到消息并反馈发方,才删除内存中数据,如果没有反馈发方,在一定时间内,发方会每隔一段时间向收方发送一次,直到确认收方收到消息。否则,超过一定时间,发方认为收方宕机或其他故障,删除内存中存储的数据,不会再发。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!