一、初识socket
1 CS架构 服务端客户端架构:
软件CS架构:京东,淘宝,qq,微信,暴风影音,快播
硬件CS架构:打印机
服务端:提供服务的
客户端:享受服务的
BS架构:浏览器和服务端:谷歌,360,IE
2 网络通信当中遇到的名词 硬件
网卡:接收电信号
mac地址:网卡的唯一标识,全球唯一,6位点分16进制
广播 : 信息发给所有人
单播 : 单独发给某个人或者说某个设备
广播风暴 : 不安全,容易拥堵网络
IP地址 : 划分广播域
192.168.15.113 四个点分十进制
集线器 : 将所有连电脑连通起来
交换机 : 升级版集线器
DHCP协议 : 自动分配IP地址
划分广播域--> IP网段 : 192.168.15.0 - 192.168.15.255 属于同一子网
192.168.16.0 - 192.168.16.255
子网掩码 : 计算目标IP地址是否是同一网段
同一网段的:广播发送
不同网段的:发送给路由器
路由器(内网的作用) : 管理局域网
找外部网路的设备:
域名:www.jd.com --> IP地址
DNS服务器:记录着所有的域名和他网站对应的那台服务器的IP地址的对应关系,理解为一个字典
{'www.jd.com':192.168.15.12}
网关:在路由器这儿,把关你对外的请求
NAT技术: 将你的IP地址,转换为网关的IP地址
外网又称为公网 ,网关的IP地址又称为外网IP地址或者公网IP地址
路由器(外网的作用) : 转发消息
路由协议 : 计算一个最优路径,然后进行路由转发
发到京东的路由器上,京东的路由器做了端口映射
端口:标识电脑上某个应用程序,范围0-65535 0-1024 内部程序用的,我们一般使用的都是8000以后的
通过IP地址+端口:我就能唯一确定一台电脑上的某个应用程序
二、osi七层模型
物理层 -> 数据链路层 -> 网络层 -> 传输层 -> 应用层(会话层 表示层)
物理层:发送电信号
数据链路层:
定义电信号的分组方式
以太网协议: 一组电信号构成一个数据包,叫做‘帧’
每一数据帧分成:报头head和数据data两部分
head包含:源地址和目标地址
head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送
网络层:
引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址
规定网络地址的协议叫做ip协议
IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。
ip数据包也分head和data部分
以太网头 - ip头 - ip数据
arp协议: 广播的方式发送数据包,获取目标主机的mac地址
传输层: 建立端口到端口的通信(端对端通信)
TCP协议: 全双工 可靠 面向流的 面向连接的协议 传输效率低
以太网头 - ip头 - tcp头 - 数据
tcp三次握手:
客户端给服务端发送连接请求
服务端接收到请求若同意连接给客户端发出确认报文
客户端收到确认报文后给服务端再次发出确认
tcp四次挥手:
客户端向服务端发出释放报文,并停止发送数据
服务端收到断开连接报文,发出确认报文
客户端收到服务端得到确认请求后,等待服务端再次发送连接释放报文
客户端收到服务器的连接释放报文后,必须发出确认
UDP协议: 不可靠的无服务连接 传输效率高
以太网头 - ip头 - udp头 - 数据
socket.socket(type=socket.SOCK_DGRAM)
应用层:
规定应用程序的数据格式。
三、缓冲区和粘包
1、tcp:属于长连接,与一个客户端进行连接了以后,其他的客户端要等待,要连接另外一个,必须优雅的断开前面这个客户端的连接.
允许地址重用:在bind IP地址和端口之前加上,# server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # 允许(IP地址和端口)地址重用
2、缓冲区:
输入缓冲区 recv
输出缓冲区 send
3、粘包(tcp的两种粘包现象)
1) 连续发送小的数据,并且发送时间间隔较短(减少连续的小包发送)
2) 第一次服务端发送的数据比我客户端设置的一次接收消息的大小要大,那么接收不完,第二次再接收的时候,就会将第一次剩余的消息接收到
粘包的根本原因:
双方不知道对方发送消息的大小