python开发网络编程 OSI 七层模式 网络协议 IP地址 域名 url 端口号 传输层服务 S 七层模式 网络协议 IP地址 域名 url 端口号 传输层服务 Socket套接字编程

本文介绍了网络编程的基本概念,包括ISO的OSI七层模型及其演化后的五层模型,详细解释了TCP/IP协议的工作原理及特点。此外,还介绍了如何通过Python进行网络编程,包括创建套接字、绑定IP端口、监听连接请求等关键步骤。

网络编程

网络目的

数据的传输

网络数据传输是一个复杂的过程

ISO

 国际标准化组织

OSI 七层模式(重点)

!!!网络通信标准化流程!!!

 

包含

应用层

提供用户服务,具体内容由特定程序规定

表示层

提供数据的压缩优化

会话层

建立应用连接,选择传输层服务

传输层

提供不同的传输服务,并且提供流量控制

网络层

路由选择,网络互连(网络连接路径的选择)à路由

链路层

提供链路交换,具体消息以帧发送

物理层

物理硬件,接口,网卡,线路

OSi七层模型

优点

将功能分开,降低了网络 传输中的耦合性,每一部分完成自己的功能,可以在开发和实施的过程中各司其职。

高内聚

单个模块功能尽量单一

低耦合

模块之间尽量减少关联和影响

演化后

四层模型

应用层

应用层

表示层

会话层

传输层

传输层

网络层

网络层

物理链路层

链路层

物理层

演化后

五层模式

tcp/ip模型)

应用层

应用层

表示层

会话层

传输层

传输层

网络层

网络层

链路层

链路层

物理层

物理层

协议(网络协议)

意义

在网络通信中,各方必须遵守的规定,

包括建立什么样的连接

消息结构等

 

常见的协议

应用层

TFTP   HTTP   DNS   SMTP

传输层

TCP   UDP

网络层

IP

物理层

IEEE

 

网络基本概念

主机

“localhost” 表示本台计算机

 

网络上

1只在本地测试使用

‘localhost’    ‘127.0.0.1’

2、如果想在网络上进行测试

   ‘0.0.0.0’   ‘ ‘   ‘172.60.50.93’

查看IP网络信息

1Linux  ifconfig

2win   ipconfig

(按住winctrl Alt的中间键+r 进入之后输入cmd

获取计算机名称

socket.gethostname()

获取IP计算机地址

socket.gethostbyname('tedu')

 '127.0.1.1'

获取主机Ip

socket.gethostbyname('localhost')

安装ipython3Sudo pip install ipython3

 

IP地址

意义

在网络上用于区分一台计算机

种类

IPV4

点分十进制 e.g. 192.168.1.72   0-255

32位二进制表示

IPV6

128

网络连接测试命令

ping  ip地址)

 

 

特殊IP

172.0.0.1        本地测试IP

0.0.0.0          本地网卡通用IP

192.168.1.0      表示当前网段

192.168.1.1      表示网关

192.168.1.255    表示广播地址

获取服务主机信息

In [7]: socket.gethostbyaddr("www.baidu.com")

Out[7]: ('127.0.0.1', [],   ['119.75.213.61'])

          主机 别名   IP地址

ip十进制转化为二进制

In [12]: socket.inet_aton("192.168.1.2")

Out[12]: b'\xc0\xa8\x01\x02'

ip二进制转化为十进制

In [11]: socket.inet_ntoa(b"\xc0\xa8\x01\x02")

Out[11]: '192.168.1.2

 

 

 

 

域名

意义

网络服务器IP地址的名称www.baidu.comip地址相连接)

 

url

意义

在网络上定位某个资源位置的子串  (域名后面一串复杂的码)

 

端口号

意义

是网络地址的一部分,在一个系统中,每个网络应用都会有一个唯一的端口号,取来区别其他应用,接受发往这个端口号的信息。

 

数字范围

1—655535

建议范围:1—255 :  一些众所周知的端口

          256—1023 :系统应用

          1024---65535 : 自用

推荐: 10000   8888   9999  7777  6666

测试一个软件端口号

In [13]: socket.getservbyname('mysql')

Out[13]: 3306

 

传输层服务

 

 

 

 

 

 

 

 

 

 

 

 

面向连接的传输服务

tcp协议

 

 

 

 

 

 

 

 

 

 

 

 

传输特征

1

提供可靠

的传输服务

可靠性表现:

数据在传输过程中

无失序,无差错,无重复,

无丢失

 

 

 

 

2

传输过程中

有建立

和断开连接

的过程

!!!三次握手

建立数据传输两端的持续连续

1.客户端向服务器发起连接请求

 

2.服务端收到请求进行确定

返回报文

 

3.客服端收到服务器确定进行

连接创建

!!!四次挥手

断开连接的两端,

保证数据的传输完整

1. 主动方发送报文,告知被动方要断开连接

 

2. 被动方返回报文,告知收到请求,准备断开

 

3. 被动方再次发送报文,告知准备完毕可以断开

 

4. 主动方发送报文完成断开

使用情况

文件的上传下载,网络情况良好,需要必须保证可靠性的情况

面向无连接的传输服务udp协议

 

传输特征

1不保证传输的可靠性

2无需建立三次握手四次挥手的连接断开过程

3消息的收发比较自由,不受其他约束

 

使用情况

网络情况较差,对可靠性要求不高,收发信息的两端不适合建议固定连接

比如: 网络视频、群聊、发送广播

问题总结

1OSI模型

2、三次握手四次挥手

3tcpudp的区别

 

 

Socket 套接字编程

目的

通过编程语言提供的函数接口进行组合,

更简单的完成基于tcpudp通信的网络编程

套接字

完成上述目标的编程方法方案

 

套接字的分类

流失套接字(SOCK_STREAM):

传输层基于tcp的协议进行通信

数据报套接字(SOCK_DGRAM):

传输层基于udp的协议进行通信

底层套接字(SOCK_RAM):

访问底层协议的套接字

 

TCP套接字

TCP套接字

import socket

 

1、创建套接字

socket.socket(socket_family = AF_INET,

Socket_type = SOCK_STREAM,

Proto = 0)

功能:创建一个套接字

参数:socket_family  选择地址族类型 AF_INET 表示IPv4

      socket_type   选择套接字类型 SOCK_ATREAM 流式

                                  SOCK_DGRAM数据报

      proto          通常为0(表示选择子协议)

返回值: 

返回一个套接字对象

2、绑定IP端口

sockfd.bind()

功能:

绑定IP和端口

参数:

二元元组第一项为ip 第二项为端口号              e.g.(”192.168.1.2”,8888

3.将套接字设置为可监听

sockfd.lisen(n)

功能:

将套接字设置为监听套接字,并设置监听队列

参数:

监听对象的大小   n为大于0   的正整数

 

4.等待客户端的连接

Connfdaddr = sockfd.accept()

功能

阻塞等待客户端连接

返回值

connfd  一个新的套接字,用于和指定客户端通信

addr   连接的客户端的地址

阻塞函数:    程序运行到阻塞函数位置

如果某种预期条件没有达成暂停继续运行,直到条件达成后再继续运行

5.消息收发

(收)data = connfd.recv(buffersize)

功能

接收消息

参数

每次最多接收的消息大小   bytes

返回值

返回接收到的内容

(发)n = connfd.send(data)

功能

发送消息

参数

要发送的内容 必须是bytes格式  encode()

返回值

实际发送的字节数

6.关闭套接字

close()

功能

关闭套接字,tcp连接断开

 

新开一个终端输入

*telnet   ip  port 表示连接tcp服务端

 

tcp客户端

1.创建套接字

socket()

*通信的两端套接字类型相同

2.发起连接

功能

发起连接请求

参数

元组,服务器端的地址

3.发送消息

Send recv

*两端收发需要配合

4.关闭套接字

close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值