PYTHON-网络通信 TCP

网络编程

应用软件的架构
1. 目标:编写一个C/S架构的软件
C/S: Client--------基于网络----------Server
B/S: Browser-------基于网络----------Server

什么是网络通讯?
在不同的计算机上 一个安装客户端 另一安装服务端 通过网络来通讯

目的: 网络建立的目的是为数据交互(通信)

如何实现通信:
1.建立好底层的物理连接介质 (网线,WIFI,光纤)
2.必须遵循相同的标准,称之为互联网协议

在计算机网络中同样需要具备这两个条件
作为应用软件开发者 不需要关心第一步 重点是通讯的标准(通讯的协议)

通信的时候,一定要获取对方的IP地址,拿到ip后,ARP协议自动将IP解析成MAC

MAC (了解)以太网地址 用广播的方式,浪费资源 去分包发包

2. 服务端需要遵循的原则:
1. 服务端与客户端都需要有唯一的地址,但是服务端的地址必须固定/绑定
2. 对外一直提供服务,稳定运行
3. 服务端应该支持并发

4. 互联网协议:就是计算机界的英语
(open system interconnection)
OSI七层协议 tcp/ip四层 (或者五层)
应用 应用层
表示
会话
传输 传输层
网络 网络层
数据链路层 网络接口层
物理

ip+mac可以标识全世界范围内独一无二的一台计算机的位置
port可以标识一台计算机之上唯一的一个基于网络通信的应用软件

ip+mac+port:可以标识全世界范围内独一无二的一个应用软件(基于网络通信)

TCP和UDP是传输层最常见的协议
主要控制传输数据的方式
TCP的传输方式
优点:通过三次握手来与服务器建立连接
可以保证数据的完整性
a机器给b机器发送数据包 要求b机器必须立即返回一个确认包
a机器会等待一段时间,如果超时还没有收到确认,则重发数据
缺点:传输效率低
使用场景: 文字聊天,支付宝转账等,
UDP
传输方式:不需要建立连接,直接发送
缺点: 不能保证数据的完整性
优点:传输效率比TCP高
使用场景:视频通话,语音通话,UDP

1、TCP 目的是建立双向通路 传输数据可靠
((好人协议)客户端发包(发请求)后,服务端一定会响应 发出确认信息)

洪水攻击 黑客模拟大量的客户端发请求,让服务端响应,虚拟的客户端 服务端无法识别 造成大量资源占用
syn_send大量涌现(公司有预谋的发起) 解决方案:增加带宽

TCP三次握手建连接,四次挥手断连接
三次握手:
c(客户端)----syn=1(请求链接) seq=x(序列号)--->s(服务端)
s----ack=1+x syn=1(请求链接) seq=y(序列号)--->c
(确认请求,并在原来序列号基础上+1)
c----ack=1+y------->s

tcp建立的是一个双向连接
c------------------>s
c<-----------------s

四次挥手:
s------fin=1(断链接请求)---------->c
c------>ack=1(确认请求)--------->s
c------>fin=1--------->s
s------>ack=1--------->c


2、socket: 学习网络编程 其实就是在学socket
是一个封装好的模块!要完成网络通讯,只需要使用系统提供的socket模块就行

socket套接字是位于应用层与传输层之间的一个抽象层
专门把传输层以下的协议封装成接口提供给应用层使用(是对底层的 TCP IP UDP 等网络协议进行封装)
应用只需要调用socket的接口或者说按照socket的标准编写
程序,写出的程序自%然是遵循tcp/ip协议

python中的socket

在使用socket的时候用户需要关心的是 ip地址,port端口, 传输协议TCP/UDP,你要发送的数据data
在写网络编程的时候,必然是有两台代码,对应着客户端和服务器
使用socket来完成TCP通讯 应该先完成服务器的代码编写



网页地址就是域名 (对应有ip 和端口port)

https:// www.cnblogs.com:80 /linhaifeng/p/7278389.html
应用层协议 域名+端口 (先把域名交给dns解析成IP地址) 路径
逻辑层面建好双向通路 ==>给应用层按http协议传输数据,封包后交给传输层,给对方,再按这条线返回
(物流层 实际上在传输层后还有网络层,数据链路层,物流层)

猜你喜欢

转载自www.cnblogs.com/du-jun/p/9898406.html