网络编程

网络编程

软件开发架构

c/s架构(client/server)

​ c:客户端 什么时候想干嘛就干嘛
​ s:服务端 24小时不间断提供服务

b/s架构(browser/server)

​ b:浏览器
​ s:服务器
​ ps:bs架构本质也是cs架构
​ 手机端看上去cs架构比较火,实际上bs已经在崛起
​ 手机端之后肯定也是bs比较火

做cs架构的软件 需要学习网络编程
做bs架构的软件需要学习 并发 数据库 前端 django

网络编程的发展史
任何先进的技术最早都来源于军事

回到过去
1.早期的电话 电话线
2.大屁股电脑 网线
3.笔记本电脑 无线电话 网卡

要想实现远程通信第一个需要具备的条件是:物理连接介质

人要想实现无障碍交流必须说统一的语言 >>> 英文
计算机与计算机之间要想实现远程通信除了有物理连接介质之外还需要
有一套公共的标准/协议

OSI协议
OSI七层协议
应用层
表示层
会话层
传输层
网络层
数据链路层
物理连接层
OSI五层协议
应用层
传输层
网络层
数据链路层
物理连接层

1.物理连接层
基于电信号传输010101001010二进制数据
2.数据连接层
1.规定的电信号的分组方式
2.规定了任何一台接入互联网的计算机都必须有一块网卡
每一块网卡上面都刻有世界上独一无二的编号
12位16进制数
前6位是厂商编号
后6位是流水线编号
我们管这12数叫mac地址
ps:以上两点合称为"以太网协议"

交换机是基于以太网协议通信的,不能跨局域网通信
互联网就是有N多个局域网彼此之间连接而成的

3.网络层
IP协议
规定了只要是接入互联网的计算机都必须有一个IP地址
ip地址特点:点分十进制
ip地址最小:0.0.0.0
ip地址最大:255.255.255.255
ip地址目前有两个版本:IPV4 IPV6(由于IPV4已经不够表示目前存在的计算机了 所以推出了IPV6版本)
IP地址是动态分配的

4.传输层

计算机与计算机之间其实是计算机上的应用程序与应用程序之间的通信
TCPUDP都是基于端口工作的协议

​ 端口(port):
​ 用来唯一标识一台计算机上的某个应用程序
​ 端口号的范围:0~65535
​ 注意:0~1024这些都是操作系统默认使用的端口号
​ 建议:使用8000之后的端口
​ MySQL默认端口:3306
​ Redis默认端口:6379
​ django默认端口:8000
​ flask默认端口:5000

​ 端口号是动态分配的
​ 第一次起qq分配到的是8989
​ 将qq关闭再次启动端口号可能就变了

5.总结
ip地址:用来唯一标识接入互联网的一台计算机
port端口:用来唯一标识一台计算机上的某个应用程序

ip+port:唯一标识接入互联网一台计算机上的某个应用程序


5.应用层
HTTP协议

​ FTP协议

TCP协议
流式协议,可靠协议
基于TCP协议通信 必选先建立双向通道

​ TCP协议传输数据之所以可靠的原因就在于有双向通道???

​ 三次握手四次挥手

	因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

​ 三次握手建连接

​ 四次挥手断连接

原文地址:https://www.cnblogs.com/panyi2019/p/11351910.html