传输模型
1.概念:
OSI模型:用来协调进程间通信标准的制订,并没有提供一个实现的方法,事实上的标准就是tcp/ip参考模型
tcp/ip模型:tcp/ip协议不是tcp和ip两个协议的合称,而是指因特网整个tcp/ip协议族
2.模型对比:
osi七层模型 tcp/ip
应用层 应用层
表示层
会话层
传输层:终端设备 传输层
网络层:路由器 网络层
数据链路层:交换机 网络接口层
物理层:网卡,网线等
tcp协议
1.概念:(传输控制协议)
tcp(transmission controlprotocol 传输控制协议)是一种面向连接的,可靠地,基于字节流的传输层通信协议
2.要点:
tcp/ip模型(常用):网络接口层,网络层,传输层,应用层
tcp协议:传输层的通信协议
应用层传输协议:http协议,ftp协议,smtp协议,基于tcp
tcp协议是面向连接的
三次握手:建立连接
四次挥手:断开连接
3.udp
互联网的传输数据主要有两个协议,tcp,udp
udp是无连接的,只管发,不考虑收不收得到,传输效率差,发送效率高
数据完整性安全高:tcp
完整性不高,效率高:udp(直播,实时视频,监控)
ip地址和端口
ip
1.概念:
ip地址是指互联网协议地址(Internet protocol address,又译为网际协议地址),ip地址是ip协议提供的一种统一的地址格式,是给互联网上的电脑的一个编号,用来表示它实际的物理地址,为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异
- 2.ip地址的格式
ip地址是32位的二进制数,通常分隔成四个八位二进制数,也就是四个字节,通常用“点分十进制”表示成(a.b.c.d),其中a,b,c,d都是0-255 之间的十进制整数,如:192.168.1.1
ip地址包含两个部分,一个网络ID,一个主机id
- 3.按照网络规模分类:
- A类地址:大型网络,支持256*256*256台计算机
- B类地址:中256*256
- C类地址:小256
4.用途;
- 公有地址:在互联网上使用的地址 浏览器查ip
- 私有地址:在局域网内使用的地址 IPv4
端口:
1.概念:设备与外界交流的出口,端口可分为虚拟端口和物理端口
物理端口:又叫接口,是可见端口,计算机背板的rj45网口,交换机路由器集线器等rj45端口
虚拟端口:计算机内部或交换机路由器内的端口,通过软件虚拟出来的,不可见,如80端口,21端口,23端口等。
- 我们主要学虚拟端口
- 计算机中有2^16个端口,端口是整数,范围:0-65535
- 一个端口只能同时被一个应用程序所占用
端口为电脑中的各种程序去提供对外的服务
2.分类:(扩展)
1.周知端口
众所周知的端口,范围0-1023,系统服务用的端口,不要随意改动和使用
2.动态端口
范围49152-65535
之所以称之为动态端口,因为它一般不分配给固定的服务,由系统随机动态的指定,比如多线程
3.注册端口
1024-49151 分配给用户进程或应用程序使用的端口
这些进程主要是用户选择安装的一些应用程序,而不是已经分配好了公认端口的常用程序
这些端口在没有被服务器资源占用的时候,可以用用户端动态选用为源端口
套接字*
套接字是计算机网络通信的基本的技术之一,如今大多属基于网络的软件,如浏览器,即时通讯工具甚至是p2p下载都是基于socket实现的
网络上两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket,应用程序通过socket向网络中发出消息,或者接受消息
socket是应用层与tcp/ip协议族的中间抽象层,它是一组接口,把复杂的tcp/ip协议族封装为几个简单的接口提供给应用层调用,实现程序在网络中的通信
本质上是接口,封装了tcp/udp,提供了发送,接收的功能,大大地简化了我们开发程序的难度
socket基于tcp或udp
用python来实现tcp_server
#创建套接字socket
import socket
#server = socket.socket(
#family=socket.AF_INET,
#type=socket.SOCK_DGRAM #代表了udp
#type=socket.SOCK_STREAM #tcp 默认
- 创建tcp服务器
1.创建socket
2.绑定端口
3.监听
4.接收连接
5.收发数据
6.循环4,5
编写一个tcp的服务端
import socket
#1.创建socket对象
tcp_server = socket.socket()
#2.绑定ip端口
#ip可以是127.0.0.1 代表只监听本地
#ip可以写局域网ip,当前局域网的其他电脑可以来访问
#ip可以写成‘ ’或者‘0.0.0.0’ ,这台电脑的所有的网卡来的数据都可以
tcp_server.bind((' ',6969))
#3.监听
#backlog代表等待队列
tcp_server.listen(5)
while True:
#4.等待链接
print("等待连接")
conn,addr = tcp_server.accept() #阻塞
#创建一个对等的socket对象,用来和客户端进行数据交互
#5.收发数据
print("有客户%s连接进来了"%addr[0])
while True:
#先接受
data = conn.recv(1024) #也是阻塞,一般设置1024字节
#收到的也是字节类型
print(data.decode("utf-8"))
info = "xiaoge"
if data:
print("从%s接受了:%s" % (addr[0],data.decode("utf-8")))
conn.send(data) #发送的也是字节数据
else:
conn.close()
print("客户%s关闭了"%addr[0])
break
#客户端,服务端收发数据的规则,流程,这个其实就是我们常说的应用协议,http,ftp,收发是最底层
创建tcp客户端
import socket
1.创建socket
client = socket.socket()
2.连接
client.connect(("127.0.0.1",6969))#访问本地
while True:
data = input(">>>:")
if data == "q":
break
3.发数据
client.send(data.encode())#发送字节类型的数据
4.收数据
res = client.recv(1024)
print(res.decode("utf-8"))
client.close()#关闭连接