Python net 通信 编程

HTTP是一个客户端服务器端请求和应答的标准(TCP)。

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。

特点 传输层使用tcp协议
1.支持客户端、服务器模式
2.灵活简单快速 
http协议几乎可以传输任意格式的数据

3.http1.0 无连接  http1.1 支持持久连接

4.无状态
不记录用户的访问信息

osi 7 层模型
是网络传输的一个标准化模型,是计算机网络体系结构发展的产物

1应用层 : 提供OSI的用户服务,例如处理程序,文件传输协议和数据管理。
2表示层 :完成数据的转换和文本压缩加密
3会话层:提供进程间的连接建立,选择使用什么样的传输层协议
4传输层 :建立网络连接,提供适合的传输服务,提供透明的传输服务,提供端到端的流量控制
5网络层 :控制分组传送,路由选择,网络互连。
6链路层 : 提供链路的交换,具体的数据发送功能
7物理层 : 物理硬件,提供具体的传输条件和传输接口规定

实际应用
网络四层模型 -- >  基于osi七层模型进行实际情况的整合
应用层  :  应用层  表示层  会话层
传输层  : 传输层
网络层  : 网络层 
物理链路层 : 链路层   物理层
协议:网络协议,是通信双方必须共同遵循的一个约定。如怎么建立连接,怎么进行识别

tcp协议 : 传输控制协议     传输层
udp协议 : 用户数据报协议   传输层
ip 协议 : 网间协议         网络层
http协议: 超文本传输协议   应用层
TCP/IP简介

IP地址实际上是一个32位整数(称为IPv4),以字符串表示的IP地址如192.168.0.1实际上是把32位整数按8位分组后的数字表示,目的是便于阅读。

IPv6地址实际上是一个128位整数,它是目前使用的IPv4的升级版,以字符串表示类似于2001:0db8:85a3:0042:1000:8a2e:0370:7334


import socket
# 获取当前主机主机名
In [2]: socket.gethostname()
# 解析服务器主机名,转变为数字地址
In [3]: socket.gethostbyname('localhost')
IP 地址
IPV4
192.168.1.  235
  网段号    主机号 (2-254)
每部分 0-255
127.0.0.1  本机回环ip  做本机的网络实验测试使用IP
0.0.0.0    局域网可用ip获取   用作自动获取可用IP
获取主机网络信息
socket.gethostbyaddr('localhost')
('localhost', [], ['127.0.0.1'])
 主机名     别名    主机IP
IP地址转换成二进制字节串
socket.inet_aton('192.168.1.1')
反向转换
socket.inet_ntoa(b'\xc0\xa8\x01\x02')

* 两个更新的函数,第一个参数可以传AF_INET AF_INET6
IP地址转换成二进制字节串
socket.inet_pton(socket.AF_INET,'192.168.1.1')
反向转换
socket.inet_ntop(socket.AF_INET,b'\xc0\xa8\x01\x02')

端口号

为了区分一台主机收到的数据包转交给那个进程处理

本质是一个整数 1--65535

1-1023 由众所周知的系统程序占用
1024 -- 10000 很多安装程序会使用 8888  9999  6666
>10000  我们自己写程序最好使用10000以上 
查看某个服务程序的端口
socket.getservbyname('mysql')
dns(域名解析器)
子网掩码:配合IP使用,过滤当前网段 
字节序
主机字节序有两种
大端序   高序字节存在低地址位
小端序   低序字节存在低地址位
网络字节序 ----》 大端序
序列转换方式 
将16位网络字节序转换为本地
socket.ntohs(8)
将16位本地字节序转换为网络字节序
socket.htons(1024)
将32位本地字节序转换为网络字节序
socket.htonl(1024)
将32位网络字节序转换为本地
socket.ntohl(8)
bcd-lsp
socket  
网络间通信的手段,是一个io接口规范。在linux下socket本身是一种文件类型 叫做 套接字文件  类似 open产生的文件描述符
套接字的分类
流式套接字(SOCK_STREAM)
提供了面向连接的传输服务,在传输层使用TCP协议通信
数据报套接字(SOCK_DGRAM)
提供了面向无连接的服务,在传输层使用UDP协议通信
原始套接字(SOCK_RAW)
针对底层协议编程的,如IP,ICMP的直接访问。我们一般用不到,主要用作交换机等偏网络设备的编程
面向连接 :可靠的传输服务,需要先建立网络之间的连接关系(三次握手)。数据无丢失,无差错,无重复,无失序
面向无连接 :数据发送前不需要先确定连接。数据的传输是不可靠的,有可能产生丢失,重复,或者失序。
TCP网络通信

适用情况:
1.传输质量要求较高
2.数据的传输量较大,并且需要可靠性支持
要求:过程能够描述,顺序能够掌握,每一步什么目的能够知晓
建立连接的过程(三次握手)
断开连接的过程(四次挥手)
socket tcp通信的过程



tcp粘包


指的是发送方发送若干数据包的时候,因为是数据流的方式导致数据粘连在一起,从缓冲区接收后后一数据紧挨着前一数据


如果是大文件分组发送时我们不需要处理,但是如果是若干不相干文件进行分别发送那么就需要处理粘包问题


处理粘包的方法:
1.格式化数据  将数据格式加以规定,可以规定字节数或者规定以什么结尾


2. 发送长度   将数据长度作为发送内容


3.每次发送后有一个短暂的延迟操作。不适合大量数据的多次的发送
交换机 : 大型路由器













  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值