Python之网络编程(一)网络编程初识

网络编程初识
C/S B/S架构
C/S B/S架构

C: client端 B: browse 浏览器 S: server端

C/S架构: 基于客户端与服务端之间的通信

? QQ, 游戏,皮皮虾, 快手,抖音.

? 优点: 个性化设置,响应速度快,

? 缺点: 开发成本,维护成本高,占用空间,用户固定.

B/S架构: 基于浏览器与服务端之间的通信

? 谷歌浏览器,360浏览器,火狐浏览器等等.

? 优点: 开发维护成本低,占用空间相对低,用户不固定.

? 缺点: 功能单一,没有个性化设置,响应速度相对慢一些.

网络通信原理
80年代,固定电话联系,(还没有推广普通话)

两台电话之间一堆物理连接介质连接.
拨号,锁定对方电话的位置.
由于当时没有统一普通话,所以你如果和河南,山西,广西,福建等朋友进行友好的沟通交流,你必须学当地的方言.

推广普通话,统一交流方式.

两台电话之间一堆物理连接介质连接.
拨号,锁定对方电话的位置.
统一交流方式.
全球范围内交流:

两台电话之间一堆物理连接介质连接.
拨号,锁定对方电话的位置.
统一交流方式.(英语)
话题转回互联网通信:

? 我现在想和美国的一个girl联系.你如何利用计算机联系???

两台计算机要有一堆物理连接介质连接.
找到对方计算机软件位置.
遵循一揽子互联网通信协议.
osi七层协议
osi七层协议
应用层 表示层 会话层 传输层 网络层 数据链路层 物理层

物理层:

物理层指的就是网线,光纤,双绞线等等物理连接介质

比特流:bit就是 0101 跟水流一样的源源不断的发送010101001.

数据链路层:

数据链路层对比特流进行分组.

交换机:广域的交换机就是一种在通信系统中完成信息分流交换功能的设备

路由器:路由器是连接两个或多个网络的硬件设备,在网络间起网关的作用,是读取每一个数据包中的地址然后决定如何传送的专用智能性的网络设备。

外网(公网)IP,指连接外部互联网的指定网段

内网(局域网)IP 都是假的,DHCP协议: 路由器自动分发的IP地址,网关等等.

以太网协议:对比特流进行合理的分组.

head | data # 数据头|数据

head: 18个字节: 源mac地址 | 目标mac地址| 数据类型

data: 最少46个字节, 最多是1500个字节.

源mac地址 目标mac地址 数据类型 | data
mac地址:计算机上网卡上标注的地址.12位16进制数组成 :前六位是厂商编号,后六位是流水线号.

交换机的mac学习功能:

? 第一次发送消息广播的形式,当学习表记录上端口与mac地址对应关系之后,在发送消息: 单播的形式发送.

计算机的两个通信方式:

单播:单播是客户端与服务器之间的点到点连接。

广播:在广播式网络中,多有联网计算机都共享一个公共信道,当一台计算机利用共享信道发送报文分组时,所有其它计算机都会"收听"到这个分组.

网络层:

IP协议:确定局域网(子网)的位置(四段分十进制)

取值范围 0~255.0~255.0~255.0~255

子网掩码: C类子网掩码: 255.255.255.0

ip地址 + 子网掩码 按位与运算 计算出是否在统一局域网(子网,网段).
C类子网掩码 一个网段最多可以承载多个IP地址?

? 254个 尾部全部为0为网关地址 尾部全部为1为广播地址

ARP协议:通过对方的ip地址获取到对方的mac地址.

总结:

前提:知道目标mac:

? 计算机A 发送一个消息给 计算机B

? 源码mac 目标mac 源IP 目标IP 数据

? 单播的形式发送到交换机,交换机会检测自己的对照表有没有目标mac,如果有,单播传.如果没有,交由上一层:路由器,路由器收到消息,对消息进行分析,要确定目标计算机与本计算机是否在同一网段,如果在同一网段,直接发送给对应的交换机,交换机在单播发给目标mac.

? 如果不是在同一网段: ?

前提:不知道目标mac:

? 计算机A 发送一个消息给 计算机B

? 源码mac 目标mac不知道 源IP 目标IP 数据

? 单播的形式发送到交换机,交换机交由上一层路由器:路由器收到消息,对消息进行分析,要确定目标计算机与本计算机是否在同一网段,如果在同一网段通过 IP以及ARP协议获取到对方的mac地址,然后在通信.

传输层:

端口协议:UDP协议,TCP协议

端口:一共65535端口,0~1023系统的, 自己选取端口8080 以后都可以.

UDP TCP协议
TCP(Transmission Control Protocol)可靠的、面向连接的协议(eg:打电话)、流式协议, 传输效率低全双工通信(发送缓存&接收缓存)、面向字节流。使用TCP的应用:Web浏览器;文件传输程序。

UDP(User Datagram Protocol)不可靠的、无连接的服务,传输效率高(发送前时延小),一对一、一对多、多对一、多对多、面向报文(数据包),尽最大努力服务,无拥塞控制。使用UDP的应用:域名系统 (DNS);视频流;IP语音(VoIP)。

TCP协议的三次握手和四次挥手
syn洪水攻击:制造大量的假的无效的IP请求服务器.致使正常的IP访问不了服务器.

三次握手过程说明:

置位概念:根据TCP的包头字段,存在3个重要的标识ACK、SYN、FIN
ACK:表示验证字段
SYN:位数置1,表示建立TCP连接
FIN:位数置1,表示断开TCP连接

1、由客户端发送建立TCP连接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且将报文中的SYN字段置为1,表示需要建立TCP连接。(SYN=1,seq=x,x为随机生成数值)

2、由服务端回复客户端发送的TCP连接请求报文,其中包含seq序列号,是由回复端随机生成的,并且将SYN置为1,而且会产生ACK字段,ACK字段数值是在客户端发送过来的序列号seq的基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP建立请求已得到验证。(SYN=1,ACK=x+1,seq=y,y为随机生成数值)这里的ack加1可以理解为是确认和谁建立连接。

3、客户端收到服务端发送的TCP建立验证请求后,会使自己的序列号加1表示,并且再次回复ACK验证请求,在服务端发过来的seq上加1进行回复。(SYN=1,ACK=y+1,seq=x+1)

四次挥手过程说明:

1、客户端发送断开TCP连接请求的报文,其中报文中包含seq序列号,是由发送端随机生成的,并且还将报文中的FIN字段置为1,表示需要断开TCP连接。(FIN=1,seq=x,x由客户端随机生成)

2、服务端会回复客户端发送的TCP断开请求报文,其包含seq序列号,是由回复端随机生成的,而且会产生ACK字段,ACK字段数值是在客户端发过来的seq序列号基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP断开请求已经得到验证。(FIN=1,ACK=x+1,seq=y,y由服务端随机生成)

3、服务端在回复完客户端的TCP断开请求后,不会马上进行TCP连接的断开,服务端会先确保断开前,所有传输到A的数据是否已经传输完毕,一旦确认传输数据完毕,就会将回复报文的FIN字段置1,并且产生随机seq序列号。(FIN=1,ACK=x+1,seq=z,z由服务端随机生成)

4、客户端收到服务端的TCP断开请求后,会回复服务端的断开请求,包含随机生成的seq字段和ACK字段,ACK字段会在服务端的TCP断开请求的seq基础上加1,从而完成服务端请求的验证回复。(FIN=1,ACK=z+1,seq=h,h为客户端随机生成)
至此TCP断开的4次挥手过程完毕

原文地址:https://www.cnblogs.com/zhangdadayou/p/11415389.html

时间: 2024-10-28 23:09:12

Python之网络编程(一)网络编程初识的相关文章

Python全栈【Socket网络编程】

Python全栈[socket网络编程] 本章内容: Socket IO多路复用(select) SocketServer 模块(ThreadingTCPServer源码剖析) Socket socket通常也称作"套接字" 用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Unix,而Unix/Linux基本哲学之一就是"一切皆文件",对于文件用[打开][读写][关闭]模式

Python黑客编程3网络数据监听和过滤

Python黑客编程3网络数据监听和过滤 课程的实验环境如下: ?      操作系统:kali Linux 2.0 ?      编程工具:Wing IDE ?      Python版本:2.7.9 ?      涉及到的主要python模块:pypcap,dpkt,scapy,scapy-http 涉及到的几个python网络抓包和分析的模块,dpkt和scapy在kali linux 2.0 中默认已经被安装,如果你的系统中没有需要手动安装一下,下面是软件包安装的简单说明. 在kali下

python基础教程总结13——网络编程,

1.网络设计模块 1.1 socket模块 根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认. 1)服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态. 2)客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字.为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套 接字的地址和端口号,然后就向服务器端套接字提出连接请求. 3)连接确认:是指

python核心编程中网络爬虫的例子

1 #!/usr/bin/env python 2 3 import cStringIO # 4 import formatter # 5 from htmllib import HTMLParser # We use various classes in these modules for parsing HTML. 6 import httplib # We only need an exception from this module 7 import os # This provides

物联网网络编程、Web编程综述

本文是基于嵌入式物联网研发工程师的视觉对网络编程和web编程进行阐述.对于专注J2EE后端服务开发的童鞋们来说,这篇文章可能稍显简单.但是网络编程和web编程对于绝大部分嵌入式物联网工程师来说是一块真空领域. 的确,物联网研发应该以团队协作分工的方式进行,所以有嵌入式设备端.网关.web前端.APP.后端开发等专属岗位.作为系统架构师,自然需要掌握各种岗位的关键技术.作为嵌入式工程师,掌握网络编程.web编程,能够极大地拓展自己的视野和架构思维,能够主动地对系统的各种协议和应用场景提出优化的见解

XMPP-05Socket编程之网络编程篇

要学习XMPP,就要先了解Socket编程,在学习Socket之前,还要先了解一下网络编程 一.网络编程基本概念 通过使用套接字来达到进程间通信目的的编程就是网络编程. 网络编程从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用,编程人员可以不用考虑…… 网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的!中间最主要的就是数据包的组装,数据包的过滤,数据包的捕获,数据包的分析,当然最后再做一些处理

操作系统,windows编程,网络,socket

首发:个人博客,更新&纠错&回复 之前关于c/s的一篇博文只记了思路没记代码,而且表达不清晰,事后看不知所云,这个习惯要改. 这十几天学了点关于操作系统.windows编程和网络,主要看的书有以下几本,都没看完或者只看了一点,记下书名先:<现代操作系统><深入解析windows操作系统><windows程序设计><c#入门经典><wpf编程宝典><图解tcp/ip>另外<tcp/ip详解><java网

0806------Linux网络编程----------Echo 网络库 学习笔记

1.Echo网络库的编写 1.1 Echo网络库1.0 1.1.1 Echo网络库 1.0 框架分析 a)class InetAddress: 主要用来定义一个struct sockaddr_in 结构(用自定义端口号初始化),并提供获取这个结构体成员如IP.Port等的接口: b)class Socket : 主要用来把一个普通的 sockfd 变为 listenfd(这里用一个sockfd初始化对象),提供bind .listen.accept 等接口. c)class TcpConnect

Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面

http://www.mobiletuts.me 获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. Android平台提供了ConnectivityManager  类,用于网络连接状态的检测. Android开发文档这样描述ConnectivityManager 的作用: Class that answers queries about the state of network connectivi

Android编程 获取网络连接状态 及调用网络配置界面

获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. Android平台提供了ConnectivityManager 类,用于网络连接状态的检测. Android开发文档这样描述ConnectivityManager的作用: Class that answers queries about the state of network connectivity. It also notifies applic