Python socket网络编程(通信介绍)
socket通信介绍 |
通信介绍(一)
1.所有网络协议的基础就是:socket
2.socket对TCP与UDP协议封装,让用户进行简单操作。
3.socket只做两件事:发 send,收 receive 。
其他概念
传输协议有 TCP与UDP
TCP/IP
三次握手
1.客户端 syn--> 服务端
2.客户端 <--syn+ack 服务端
3.客户端 ack--> 服务端
OSI七层
应用层 ..
表示层 ..
会话层 ..
传出层 协议
网络层 ip
数据链路层 mac
物理层 二进制 0 1
通信介绍(二)
1.每个机器上有65535个端口(port)
2.实现通信需要IP加端口。
1.socket
1.sockt支持TCP与UDP
伪代码发送端(客户端)
#1.添加模块
import socket
#2.定义操作类型
socket.TCP/IP
#3.链接对方,不需要三次握手
connect(a.ip,a.port)
#4.发送数据
socket.send(hello)
#5.收回数据
socket.recv()
#6.关闭链接
socket.close()
伪代码接收端(服务端)
#1.添加模块
import socket
#2.定义操作类型
socket.TCP/IP
#3.监听端口
listen(0.0.0.0,6969)
#4.等待数据来
waiting()
#5.收数据
recv()
#6.发回数据
send
2.socket
(1)socket Families(地址簇)
#网络层
socket.AF_UNIX unix本机进程间通信,协议类型就是地址簇
①进程与进程之间是无法通信的
注:两个进程想通信,可以通过序列化pickle实现。
注:同过Pickle把A进程里面的内存对象存到硬盘上,
B进程在打开A进程的硬盘文件在load回来。(比较慢)
注:进程间可以访问就相当于QQ直接可以把word读出来
②如果想快速读数据可以通过AF_UNIX本机进程间通讯。
注:本机会有一个local.socket,转一次数据,完成进程间交互。
socket.AF_INET IPV4
①网络层相当于地址簇
socket.AF_INET6 IPV6
①网络层相当于地址簇
(2)socket Types
#传输层
socket.SOCK_STREAM #for tcp
socket.SOCK_DGRAM #for udp
socket.SOCK_RAW
①可以处理普通套接字处理不了的
注:原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,
而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文。
②可以伪造报IP头
注:利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。
③可以进行洪水攻击(Dos攻击)
注:通过发送大量的请求服务并发给服务,达到服务瓶颈,
导致服务无法承受负载压力。
Dos攻击:TCP三次握手,第二次握手,服务会进行syn_recve等待状态
两分钟(可修改),大量进行IP头修改可形成dos攻击。
socket.SOCK_RDM
①是一种可靠的UDP形式,即保证交付数据报但不保证顺序。
注:SOCK_RAM用来提供对原始协议的低级访问,
在需要执行某些特殊操作时使用,如发送ICMP报文。
SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。
socket.SOCK_SEQPACKET #废弃了