传输模型与套接字

传输模型

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()#关闭连接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值